diff --git a/docs/api/classes/GnosisIam.GnosisIam-1.md b/docs/api/classes/GnosisIam.GnosisIam-1.md index 3121f437..72698102 100644 --- a/docs/api/classes/GnosisIam.GnosisIam-1.md +++ b/docs/api/classes/GnosisIam.GnosisIam-1.md @@ -77,6 +77,7 @@ The domain ownership functionality has been redefined accordingly. - [isConnected](GnosisIam.GnosisIam-1.md#isconnected) - [isOwner](GnosisIam.GnosisIam-1.md#isowner) - [isSessionActive](GnosisIam.GnosisIam-1.md#issessionactive) +- [issueClaim](GnosisIam.GnosisIam-1.md#issueclaim) - [issueClaimRequest](GnosisIam.GnosisIam-1.md#issueclaimrequest) - [issuePublicClaim](GnosisIam.GnosisIam-1.md#issuepublicclaim) - [namespacesWithRelations](GnosisIam.GnosisIam-1.md#namespaceswithrelations) @@ -1363,6 +1364,31 @@ boolean that indicates the session state ___ +### issueClaim + +▸ **issueClaim**(`__namedParameters`): `Promise`<`string`\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `__namedParameters` | `Object` | +| `__namedParameters.claim` | `Object` | +| `__namedParameters.claim.claimType` | `string` | +| `__namedParameters.claim.claimTypeVersion` | `number` | +| `__namedParameters.claim.fields` | { `key`: `string` ; `value`: `string` \| `number` }[] | +| `__namedParameters.subject` | `string` | + +#### Returns + +`Promise`<`string`\> + +#### Inherited from + +[IAM](iam.IAM.md).[issueClaim](iam.IAM.md#issueclaim) + +___ + ### issueClaimRequest ▸ **issueClaimRequest**(`__namedParameters`): `Promise`<`void`\> diff --git a/docs/api/classes/iam.IAM.md b/docs/api/classes/iam.IAM.md index c1f09bf5..e42c60e8 100644 --- a/docs/api/classes/iam.IAM.md +++ b/docs/api/classes/iam.IAM.md @@ -75,6 +75,7 @@ Decentralized Identity and Access Management (IAM) Type - [isConnected](iam.IAM.md#isconnected) - [isOwner](iam.IAM.md#isowner) - [isSessionActive](iam.IAM.md#issessionactive) +- [issueClaim](iam.IAM.md#issueclaim) - [issueClaimRequest](iam.IAM.md#issueclaimrequest) - [issuePublicClaim](iam.IAM.md#issuepublicclaim) - [namespacesWithRelations](iam.IAM.md#namespaceswithrelations) @@ -1172,6 +1173,27 @@ boolean that indicates the session state ___ +### issueClaim + +▸ **issueClaim**(`__namedParameters`): `Promise`<`string`\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `__namedParameters` | `Object` | +| `__namedParameters.claim` | `Object` | +| `__namedParameters.claim.claimType` | `string` | +| `__namedParameters.claim.claimTypeVersion` | `number` | +| `__namedParameters.claim.fields` | { `key`: `string` ; `value`: `string` \| `number` }[] | +| `__namedParameters.subject` | `string` | + +#### Returns + +`Promise`<`string`\> + +___ + ### issueClaimRequest ▸ **issueClaimRequest**(`__namedParameters`): `Promise`<`void`\> diff --git a/src/iam.ts b/src/iam.ts index 12b030b8..72f1029a 100644 --- a/src/iam.ts +++ b/src/iam.ts @@ -1523,6 +1523,54 @@ export class IAM extends IAMBase { return canonizeSig(await this._signer.signMessage(arrayify(proofHash))); } + async issueClaim({ + claim, + subject, + }: { + claim: { claimType: string; claimTypeVersion: number; fields: { key: string; value: string | number }[] }; + subject: string; + }) { + if (!this._did) { + throw new Error(ERROR_MESSAGES.USER_NOT_LOGGED_IN); + } + if (!this._jwt) { + throw new Error(ERROR_MESSAGES.JWT_NOT_INITIALIZED); + } + if (!this._signer) { + throw new Error(ERROR_MESSAGES.SIGNER_NOT_INITIALIZED); + } + + await this.verifyEnrolmentPrerequisites({ subject, role: claim.claimType }); + + const message: IClaimIssuance = { + id: uuid(), + requester: subject, + claimIssuer: [this._did], + acceptedBy: this._did, + }; + + const publicClaim: IPublicClaim = { + did: subject, + signer: this._did, + claimData: claim, + }; + + message.issuedToken = await this.issuePublicClaim({ + publicClaim, + }); + + if (this._natsConnection) { + const dataToSend = this._jsonCodec?.encode(message); + this._natsConnection.publish(`${subject}.${NATS_EXCHANGE_TOPIC}`, dataToSend); + } else if (this._cacheClient) { + await this._cacheClient.issueClaim({ did: this._did, message }); + } else { + throw new NATSConnectionNotEstablishedError(); + } + + return message.issuedToken; + } + async createClaimRequest({ claim, subject,