From 8ade62951a19f17659abf7afc46bfb04bcb25686 Mon Sep 17 00:00:00 2001
From: Konstantin Tsabolov <konstantin.tsabolov@spherity.com>
Date: Tue, 20 Feb 2024 10:03:32 +0100
Subject: [PATCH] fix(did-manager): fix did registration dto

---
 apps/did-manager/src/dids/dids.service.ts     | 11 ++++--
 .../src/dids/dto/register-from-seed.dto.ts    | 34 +++++++++++++++----
 2 files changed, 37 insertions(+), 8 deletions(-)

diff --git a/apps/did-manager/src/dids/dids.service.ts b/apps/did-manager/src/dids/dids.service.ts
index 927325e..80936bd 100644
--- a/apps/did-manager/src/dids/dids.service.ts
+++ b/apps/did-manager/src/dids/dids.service.ts
@@ -33,13 +33,20 @@ export class DIDsService {
   public registerFromSeed(
     tenantId: string,
     seed: EventDidsRegisterIndyFromSeedInput['seed'],
-    services?: EventDidsRegisterIndyFromSeedInput['services'],
+    services?: Array<{ id: string; type: string; serviceEndpoint: string }>,
   ) {
+    const mappedServices: EventDidsRegisterIndyFromSeedInput['services'] =
+      services?.map(({ id, type, serviceEndpoint }) => ({
+        identifier: id,
+        type,
+        url: serviceEndpoint,
+      }));
+
     return this.natsClient
       .send<
         EventDidsRegisterIndyFromSeed,
         EventDidsRegisterIndyFromSeedInput
-      >(EventDidsRegisterIndyFromSeed.token, { tenantId, seed, services })
+      >(EventDidsRegisterIndyFromSeed.token, { tenantId, seed, services: mappedServices })
       .pipe(map(({ data }) => data));
   }
 
diff --git a/apps/did-manager/src/dids/dto/register-from-seed.dto.ts b/apps/did-manager/src/dids/dto/register-from-seed.dto.ts
index 2c60262..9d5effe 100644
--- a/apps/did-manager/src/dids/dto/register-from-seed.dto.ts
+++ b/apps/did-manager/src/dids/dto/register-from-seed.dto.ts
@@ -1,5 +1,29 @@
 import { ApiProperty } from '@nestjs/swagger';
-import { IsString, IsArray, IsOptional } from 'class-validator';
+import { Type } from 'class-transformer';
+import { IsArray, IsOptional, IsString, ValidateNested } from 'class-validator';
+
+class Service {
+  @IsString()
+  @ApiProperty({
+    description: 'Service identifier',
+    example: 'did:example:123#linked-domain',
+  })
+  public id: string;
+
+  @IsString()
+  @ApiProperty({
+    description: 'Service Type',
+    example: 'LinkedDomains',
+  })
+  public type: string;
+
+  @IsString()
+  @ApiProperty({
+    description: 'Service Endpoint',
+    example: 'https://bar.example.com',
+  })
+  public serviceEndpoint: string;
+}
 
 export class RegisterFromSeedPayload {
   @IsString()
@@ -10,6 +34,8 @@ export class RegisterFromSeedPayload {
   public seed: string;
 
   @IsArray()
+  @ValidateNested()
+  @Type(() => Service)
   @IsOptional()
   @ApiProperty({
     description: 'Services to associate with DID',
@@ -21,9 +47,5 @@ export class RegisterFromSeedPayload {
       },
     ],
   })
-  public services?: Array<{
-    identifier: string;
-    url: string;
-    type: string;
-  }>;
+  public services?: Service[];
 }
-- 
GitLab