diff --git a/docs/api/interfaces/modules_claims.IssueClaimOptions.md b/docs/api/interfaces/modules_claims.IssueClaimOptions.md index 9a89584f..eb58b07e 100644 --- a/docs/api/interfaces/modules_claims.IssueClaimOptions.md +++ b/docs/api/interfaces/modules_claims.IssueClaimOptions.md @@ -26,7 +26,7 @@ Claim params | :------ | :------ | :------ | | `claimType` | `string` | Role namespace | | `claimTypeVersion` | `number` | Version of the role | -| `issuerFields?` | { `key`: `string` ; `value`: `string` \| `number` }[] | Issuers fields that role is requiring | +| `issuerFields?` | `IssuerFields`[] | Issuers fields that role is requiring | ___ diff --git a/docs/api/interfaces/modules_claims.IssueClaimRequestOptions.md b/docs/api/interfaces/modules_claims.IssueClaimRequestOptions.md index fb8824eb..7d71c5d2 100644 --- a/docs/api/interfaces/modules_claims.IssueClaimRequestOptions.md +++ b/docs/api/interfaces/modules_claims.IssueClaimRequestOptions.md @@ -42,7 +42,7 @@ ___ ### issuerFields -• `Optional` **issuerFields**: { `key`: `string` ; `value`: `string` \| `number` }[] +• `Optional` **issuerFields**: `IssuerFields`[] Issuer fields that role is requiring diff --git a/docs/api/interfaces/modules_claims.IssueVerifiablePresentationOptions.md b/docs/api/interfaces/modules_claims.IssueVerifiablePresentationOptions.md index f52e55ba..654a6dfc 100644 --- a/docs/api/interfaces/modules_claims.IssueVerifiablePresentationOptions.md +++ b/docs/api/interfaces/modules_claims.IssueVerifiablePresentationOptions.md @@ -31,7 +31,7 @@ ___ ### issuerFields -• `Optional` **issuerFields**: { `key`: `string` ; `value`: `string` \| `number` }[] +• `Optional` **issuerFields**: `IssuerFields`[] Issuers fields that role is requiring diff --git a/docs/api/interfaces/modules_verifiable_credentials.RoleCredentialSubjectParams.md b/docs/api/interfaces/modules_verifiable_credentials.RoleCredentialSubjectParams.md index 3a2e7ce4..e4c9946d 100644 --- a/docs/api/interfaces/modules_verifiable_credentials.RoleCredentialSubjectParams.md +++ b/docs/api/interfaces/modules_verifiable_credentials.RoleCredentialSubjectParams.md @@ -37,7 +37,7 @@ ___ ### issuerFields -• `Optional` **issuerFields**: [`IssuerFields`](modules_verifiable_credentials.IssuerFields.md)[] +• `Optional` **issuerFields**: `IssuerFields`[] ___ diff --git a/docs/api/modules/modules_verifiable_credentials.md b/docs/api/modules/modules_verifiable_credentials.md index 8101eb24..03c22e13 100644 --- a/docs/api/modules/modules_verifiable_credentials.md +++ b/docs/api/modules/modules_verifiable_credentials.md @@ -34,6 +34,7 @@ - [getVerifiableCredentialsService](modules_verifiable_credentials.md#getverifiablecredentialsservice) - [isRoleCredential](modules_verifiable_credentials.md#isrolecredential) +- [validateRoleCredentialSubject](modules_verifiable_credentials.md#validaterolecredentialsubject) ## Type Aliases @@ -144,3 +145,19 @@ ___ #### Returns credential is VerifiableCredential + +___ + +### validateRoleCredentialSubject + +▸ **validateRoleCredentialSubject**(`subject`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `subject` | [`RoleCredentialSubjectParams`](../interfaces/modules_verifiable_credentials.RoleCredentialSubjectParams.md) | + +#### Returns + +`void` diff --git a/src/modules/did-registry/did-registry.service.ts b/src/modules/did-registry/did-registry.service.ts index 1c9fb549..9a3a47dc 100644 --- a/src/modules/did-registry/did-registry.service.ts +++ b/src/modules/did-registry/did-registry.service.ts @@ -57,6 +57,7 @@ import { UpdatePublicKey, } from './did-registry.validation'; import { getLogger } from '../../config/logger.config'; +import { isVerifiableCredential } from '@ew-did-registry/credentials-interface'; const { JsonRpcProvider } = providers; @@ -606,16 +607,44 @@ export class DidRegistry { return { serviceEndpoint, ...rest }; } - const data = await this._ipfsStore.get(serviceEndpoint); - const { claimData, ...claimRest } = this._jwt?.decode(data) as { - claimData: ClaimData; - }; - return { - serviceEndpoint, - ...rest, - ...claimData, - ...claimRest, - } as IServiceEndpoint & ClaimData; + const tokenOrVc = await this._ipfsStore.get(serviceEndpoint); + + if (/(^[\w-]*\.[\w-]*\.[\w-]*$)/.test(tokenOrVc)) { + const decodedData = this._jwt?.decode(tokenOrVc) as { + claimData: ClaimData; + }; + + if (!decodedData) { + return { serviceEndpoint, ...rest }; + } + + const { claimData, ...claimRest } = decodedData; + + return { + serviceEndpoint, + ...rest, + ...claimData, + ...claimRest, + }; + } + + try { + const data = JSON.parse(tokenOrVc); + if (isVerifiableCredential(data)) { + return { + serviceEndpoint, + ...rest, + verifiableCredentials: data, + }; + } + return { + serviceEndpoint, + ...rest, + ...data, + }; + } catch { + return { serviceEndpoint, ...rest }; + } }) ); }