@twin.org/identity-rest-client 0.9.0 → 0.9.1-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/identityProfileRestClient.js +7 -6
- package/dist/es/identityProfileRestClient.js.map +1 -1
- package/dist/es/identityResolverRestClient.js +2 -1
- package/dist/es/identityResolverRestClient.js.map +1 -1
- package/dist/es/identityRestClient.js +19 -18
- package/dist/es/identityRestClient.js.map +1 -1
- package/docs/changelog.md +52 -0
- package/package.json +11 -10
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { BaseRestClient } from "@twin.org/api-core";
|
|
4
4
|
import { HttpParameterHelper } from "@twin.org/api-models";
|
|
5
5
|
import { Coerce, Guards } from "@twin.org/core";
|
|
6
|
+
import { HttpMethod } from "@twin.org/web";
|
|
6
7
|
/**
|
|
7
8
|
* Client for performing identity profile operations through REST endpoints.
|
|
8
9
|
*/
|
|
@@ -32,7 +33,7 @@ export class IdentityProfileRestClient extends BaseRestClient {
|
|
|
32
33
|
* @returns A promise that resolves when the profile has been created.
|
|
33
34
|
*/
|
|
34
35
|
async create(publicProfile, privateProfile) {
|
|
35
|
-
await this.fetch("",
|
|
36
|
+
await this.fetch("/", HttpMethod.POST, {
|
|
36
37
|
body: {
|
|
37
38
|
publicProfile,
|
|
38
39
|
privateProfile
|
|
@@ -46,7 +47,7 @@ export class IdentityProfileRestClient extends BaseRestClient {
|
|
|
46
47
|
* @returns The identity and the items properties.
|
|
47
48
|
*/
|
|
48
49
|
async get(publicPropertyNames, privatePropertyNames) {
|
|
49
|
-
const response = await this.fetch("/",
|
|
50
|
+
const response = await this.fetch("/", HttpMethod.GET, {
|
|
50
51
|
query: {
|
|
51
52
|
publicPropertyNames: HttpParameterHelper.arrayToString(publicPropertyNames),
|
|
52
53
|
privatePropertyNames: HttpParameterHelper.arrayToString(privatePropertyNames)
|
|
@@ -66,7 +67,7 @@ export class IdentityProfileRestClient extends BaseRestClient {
|
|
|
66
67
|
*/
|
|
67
68
|
async getPublic(identity, propertyNames) {
|
|
68
69
|
Guards.string(IdentityProfileRestClient.CLASS_NAME, "identity", identity);
|
|
69
|
-
const response = await this.fetch("/:identity/public",
|
|
70
|
+
const response = await this.fetch("/:identity/public", HttpMethod.GET, {
|
|
70
71
|
pathParams: {
|
|
71
72
|
identity
|
|
72
73
|
},
|
|
@@ -83,7 +84,7 @@ export class IdentityProfileRestClient extends BaseRestClient {
|
|
|
83
84
|
* @returns A promise that resolves when the profile has been updated.
|
|
84
85
|
*/
|
|
85
86
|
async update(publicProfile, privateProfile) {
|
|
86
|
-
await this.fetch("/",
|
|
87
|
+
await this.fetch("/", HttpMethod.PUT, {
|
|
87
88
|
body: {
|
|
88
89
|
publicProfile,
|
|
89
90
|
privateProfile
|
|
@@ -95,7 +96,7 @@ export class IdentityProfileRestClient extends BaseRestClient {
|
|
|
95
96
|
* @returns A promise that resolves when the profile has been removed.
|
|
96
97
|
*/
|
|
97
98
|
async remove() {
|
|
98
|
-
await this.fetch("/",
|
|
99
|
+
await this.fetch("/", HttpMethod.DELETE);
|
|
99
100
|
}
|
|
100
101
|
/**
|
|
101
102
|
* Get a list of the requested identities.
|
|
@@ -106,7 +107,7 @@ export class IdentityProfileRestClient extends BaseRestClient {
|
|
|
106
107
|
* @returns The list of items and cursor for paging.
|
|
107
108
|
*/
|
|
108
109
|
async list(publicFilters, publicPropertyNames, cursor, limit) {
|
|
109
|
-
const response = await this.fetch("/query",
|
|
110
|
+
const response = await this.fetch("/query", HttpMethod.GET, {
|
|
110
111
|
query: {
|
|
111
112
|
publicFilters: HttpParameterHelper.arrayToString(
|
|
112
113
|
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identityProfileRestClient.js","sourceRoot":"","sources":["../../src/identityProfileRestClient.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAA8B,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"identityProfileRestClient.js","sourceRoot":"","sources":["../../src/identityProfileRestClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { BaseRestClient } from \"@twin.org/api-core\";\nimport { HttpParameterHelper, type IBaseRestClientConfig } from \"@twin.org/api-models\";\nimport { Coerce, Guards } from \"@twin.org/core\";\nimport type { IJsonLdDocument } from \"@twin.org/data-json-ld\";\nimport type {\n\tIIdentityProfileComponent,\n\tIIdentityProfileCreateRequest,\n\tIIdentityProfileGetPublicRequest,\n\tIIdentityProfileGetPublicResponse,\n\tIIdentityProfileGetRequest,\n\tIIdentityProfileGetResponse,\n\tIIdentityProfileListRequest,\n\tIIdentityProfileListResponse,\n\tIIdentityProfileUpdateRequest\n} from \"@twin.org/identity-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport { HttpMethod } from \"@twin.org/web\";\n\n/**\n * Client for performing identity profile operations through REST endpoints.\n */\nexport class IdentityProfileRestClient<\n\tT extends IJsonLdDocument = IJsonLdDocument,\n\tU extends IJsonLdDocument = IJsonLdDocument\n>\n\textends BaseRestClient\n\timplements IIdentityProfileComponent<T, U>\n{\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<IdentityProfileRestClient>();\n\n\t/**\n\t * Create a new instance of IdentityProfileRestClient.\n\t * @param config The configuration for the client.\n\t */\n\tconstructor(config: IBaseRestClientConfig) {\n\t\tsuper(nameof<IdentityProfileRestClient>(), config, \"identity/profile\");\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn IdentityProfileRestClient.CLASS_NAME;\n\t}\n\n\t/**\n\t * Create the profile properties for an identity.\n\t * @param publicProfile The public profile data as JSON-LD.\n\t * @param privateProfile The private profile data as JSON-LD.\n\t * @returns A promise that resolves when the profile has been created.\n\t */\n\tpublic async create(publicProfile?: T, privateProfile?: U): Promise<void> {\n\t\tawait this.fetch<IIdentityProfileCreateRequest, never>(\"/\", HttpMethod.POST, {\n\t\t\tbody: {\n\t\t\t\tpublicProfile,\n\t\t\t\tprivateProfile\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Get the profile properties for an identity.\n\t * @param publicPropertyNames The public properties to get for the profile, defaults to all.\n\t * @param privatePropertyNames The private properties to get for the profile, defaults to all.\n\t * @returns The identity and the items properties.\n\t */\n\tpublic async get(\n\t\tpublicPropertyNames?: (keyof T)[],\n\t\tprivatePropertyNames?: (keyof U)[]\n\t): Promise<{\n\t\tidentity: string;\n\t\tpublicProfile?: Partial<T>;\n\t\tprivateProfile?: Partial<U>;\n\t}> {\n\t\tconst response = await this.fetch<IIdentityProfileGetRequest, IIdentityProfileGetResponse>(\n\t\t\t\"/\",\n\t\t\tHttpMethod.GET,\n\t\t\t{\n\t\t\t\tquery: {\n\t\t\t\t\tpublicPropertyNames: HttpParameterHelper.arrayToString(publicPropertyNames),\n\t\t\t\t\tprivatePropertyNames: HttpParameterHelper.arrayToString(privatePropertyNames)\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\treturn {\n\t\t\tidentity: response.body.identity,\n\t\t\tpublicProfile: response.body.publicProfile as T,\n\t\t\tprivateProfile: response.body.privateProfile as U\n\t\t};\n\t}\n\n\t/**\n\t * Get the public profile properties for an identity.\n\t * @param identity The identity to perform the profile operation on.\n\t * @param propertyNames The public properties to get for the profile, defaults to all.\n\t * @returns The items properties.\n\t */\n\tpublic async getPublic(identity: string, propertyNames?: (keyof T)[]): Promise<Partial<T>> {\n\t\tGuards.string(IdentityProfileRestClient.CLASS_NAME, nameof(identity), identity);\n\n\t\tconst response = await this.fetch<\n\t\t\tIIdentityProfileGetPublicRequest,\n\t\t\tIIdentityProfileGetPublicResponse\n\t\t>(\"/:identity/public\", HttpMethod.GET, {\n\t\t\tpathParams: {\n\t\t\t\tidentity\n\t\t\t},\n\t\t\tquery: {\n\t\t\t\tpropertyNames: HttpParameterHelper.arrayToString(propertyNames)\n\t\t\t}\n\t\t});\n\n\t\treturn response.body as Partial<T>;\n\t}\n\n\t/**\n\t * Update the profile properties of an identity.\n\t * @param publicProfile The public profile data as JSON-LD.\n\t * @param privateProfile The private profile data as JSON-LD.\n\t * @returns A promise that resolves when the profile has been updated.\n\t */\n\tpublic async update(publicProfile?: T, privateProfile?: U): Promise<void> {\n\t\tawait this.fetch<IIdentityProfileUpdateRequest, never>(\"/\", HttpMethod.PUT, {\n\t\t\tbody: {\n\t\t\t\tpublicProfile,\n\t\t\t\tprivateProfile\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Delete the profile for an identity.\n\t * @returns A promise that resolves when the profile has been removed.\n\t */\n\tpublic async remove(): Promise<void> {\n\t\tawait this.fetch<never, never>(\"/\", HttpMethod.DELETE);\n\t}\n\n\t/**\n\t * Get a list of the requested identities.\n\t * @param publicFilters The filters to apply to the identities public profiles.\n\t * @param publicPropertyNames The public properties to get for the profile, defaults to all.\n\t * @param cursor The cursor for paged requests.\n\t * @param limit The maximum number of items in a page.\n\t * @returns The list of items and cursor for paging.\n\t */\n\tpublic async list(\n\t\tpublicFilters?: {\n\t\t\tpropertyName: string;\n\t\t\tpropertyValue: unknown;\n\t\t}[],\n\t\tpublicPropertyNames?: (keyof T)[],\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<{\n\t\t/**\n\t\t * The identities.\n\t\t */\n\t\titems: {\n\t\t\tidentity: string;\n\t\t\tpublicProfile?: Partial<T>;\n\t\t}[];\n\t\t/**\n\t\t * An optional cursor, when defined can be used to call find to get more entities.\n\t\t */\n\t\tcursor?: string;\n\t}> {\n\t\tconst response = await this.fetch<IIdentityProfileListRequest, IIdentityProfileListResponse>(\n\t\t\t\"/query\",\n\t\t\tHttpMethod.GET,\n\t\t\t{\n\t\t\t\tquery: {\n\t\t\t\t\tpublicFilters: HttpParameterHelper.arrayToString(\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n\t\t\t\t\t\tpublicFilters?.map(f => `${f.propertyName}:${f.propertyValue}`)\n\t\t\t\t\t),\n\t\t\t\t\tpublicPropertyNames: HttpParameterHelper.arrayToString(publicPropertyNames),\n\t\t\t\t\tcursor,\n\t\t\t\t\tlimit: Coerce.string(limit)\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t\treturn {\n\t\t\titems: response.body.items as {\n\t\t\t\tidentity: string;\n\t\t\t\tpublicProfile?: Partial<T>;\n\t\t\t}[],\n\t\t\tcursor: response.body.cursor\n\t\t};\n\t}\n}\n"]}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0.
|
|
3
3
|
import { BaseRestClient } from "@twin.org/api-core";
|
|
4
4
|
import { Urn } from "@twin.org/core";
|
|
5
|
+
import { HttpMethod } from "@twin.org/web";
|
|
5
6
|
/**
|
|
6
7
|
* Client for performing identity resolution through REST endpoints.
|
|
7
8
|
*/
|
|
@@ -31,7 +32,7 @@ export class IdentityResolverRestClient extends BaseRestClient {
|
|
|
31
32
|
*/
|
|
32
33
|
async identityResolve(documentId) {
|
|
33
34
|
Urn.guard(IdentityResolverRestClient.CLASS_NAME, "documentId", documentId);
|
|
34
|
-
const response = await this.fetch("/:identity",
|
|
35
|
+
const response = await this.fetch("/:identity", HttpMethod.GET, {
|
|
35
36
|
pathParams: {
|
|
36
37
|
identity: documentId
|
|
37
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identityResolverRestClient.js","sourceRoot":"","sources":["../../src/identityResolverRestClient.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"identityResolverRestClient.js","sourceRoot":"","sources":["../../src/identityResolverRestClient.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAQrC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,0BACZ,SAAQ,cAAc;IAGtB;;OAEG;IACI,MAAM,CAAU,UAAU,gCAAgD;IAEjF;;;OAGG;IACH,YAAY,MAA6B;QACxC,KAAK,+BAAuC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACI,SAAS;QACf,OAAO,0BAA0B,CAAC,UAAU,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAAC,UAAkB;QAC9C,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,UAAU,gBAAsB,UAAU,CAAC,CAAC;QAEjF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAChC,YAAY,EACZ,UAAU,CAAC,GAAG,EACd;YACC,UAAU,EAAE;gBACX,QAAQ,EAAE,UAAU;aACpB;SACD,CACD,CAAC;QAEF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACtB,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { BaseRestClient } from \"@twin.org/api-core\";\nimport type { IBaseRestClientConfig } from \"@twin.org/api-models\";\nimport { Urn } from \"@twin.org/core\";\nimport type {\n\tIIdentityResolverComponent,\n\tIIdentityResolveRequest,\n\tIIdentityResolveResponse\n} from \"@twin.org/identity-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { IDidDocument } from \"@twin.org/standards-w3c-did\";\nimport { HttpMethod } from \"@twin.org/web\";\n\n/**\n * Client for performing identity resolution through REST endpoints.\n */\nexport class IdentityResolverRestClient\n\textends BaseRestClient\n\timplements IIdentityResolverComponent\n{\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<IdentityResolverRestClient>();\n\n\t/**\n\t * Create a new instance of IdentityResolverRestClient.\n\t * @param config The configuration for the client.\n\t */\n\tconstructor(config: IBaseRestClientConfig) {\n\t\tsuper(nameof<IdentityResolverRestClient>(), config, \"identity\");\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn IdentityResolverRestClient.CLASS_NAME;\n\t}\n\n\t/**\n\t * Resolve an identity.\n\t * @param documentId The id of the document to resolve.\n\t * @returns The resolved document.\n\t */\n\tpublic async identityResolve(documentId: string): Promise<IDidDocument> {\n\t\tUrn.guard(IdentityResolverRestClient.CLASS_NAME, nameof(documentId), documentId);\n\n\t\tconst response = await this.fetch<IIdentityResolveRequest, IIdentityResolveResponse>(\n\t\t\t\"/:identity\",\n\t\t\tHttpMethod.GET,\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: documentId\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\treturn response.body;\n\t}\n}\n"]}
|
|
@@ -4,6 +4,7 @@ import { BaseRestClient } from "@twin.org/api-core";
|
|
|
4
4
|
import { Guards, Is } from "@twin.org/core";
|
|
5
5
|
import { DocumentHelper } from "@twin.org/identity-models";
|
|
6
6
|
import { DidVerificationMethodType, ProofTypes } from "@twin.org/standards-w3c-did";
|
|
7
|
+
import { HttpMethod } from "@twin.org/web";
|
|
7
8
|
/**
|
|
8
9
|
* Client for performing identity through to REST endpoints.
|
|
9
10
|
*/
|
|
@@ -32,7 +33,7 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
32
33
|
* @returns The created identity document.
|
|
33
34
|
*/
|
|
34
35
|
async identityCreate(namespace) {
|
|
35
|
-
const response = await this.fetch("/",
|
|
36
|
+
const response = await this.fetch("/", HttpMethod.POST, {
|
|
36
37
|
body: {
|
|
37
38
|
namespace
|
|
38
39
|
}
|
|
@@ -46,7 +47,7 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
46
47
|
*/
|
|
47
48
|
async identityRemove(identity) {
|
|
48
49
|
Guards.stringValue(IdentityRestClient.CLASS_NAME, "identity", identity);
|
|
49
|
-
await this.fetch("/:identity",
|
|
50
|
+
await this.fetch("/:identity", HttpMethod.DELETE, {
|
|
50
51
|
pathParams: {
|
|
51
52
|
identity
|
|
52
53
|
}
|
|
@@ -64,7 +65,7 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
64
65
|
async verificationMethodCreate(identity, verificationMethodType, verificationMethodId) {
|
|
65
66
|
Guards.stringValue(IdentityRestClient.CLASS_NAME, "identity", identity);
|
|
66
67
|
Guards.arrayOneOf(IdentityRestClient.CLASS_NAME, "verificationMethodType", verificationMethodType, Object.values(DidVerificationMethodType));
|
|
67
|
-
const response = await this.fetch("/:identity/verification-method",
|
|
68
|
+
const response = await this.fetch("/:identity/verification-method", HttpMethod.POST, {
|
|
68
69
|
pathParams: {
|
|
69
70
|
identity
|
|
70
71
|
},
|
|
@@ -85,7 +86,7 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
85
86
|
async verificationMethodRemove(verificationMethodId) {
|
|
86
87
|
Guards.stringValue(IdentityRestClient.CLASS_NAME, "verificationMethodId", verificationMethodId);
|
|
87
88
|
const idParts = DocumentHelper.parseId(verificationMethodId);
|
|
88
|
-
await this.fetch("/:identity/verification-method/:verificationMethodId",
|
|
89
|
+
await this.fetch("/:identity/verification-method/:verificationMethodId", HttpMethod.DELETE, {
|
|
89
90
|
pathParams: {
|
|
90
91
|
identity: idParts.id,
|
|
91
92
|
verificationMethodId: idParts.fragment ?? ""
|
|
@@ -116,7 +117,7 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
116
117
|
else {
|
|
117
118
|
Guards.stringValue(IdentityRestClient.CLASS_NAME, "serviceEndpoint", serviceEndpoint);
|
|
118
119
|
}
|
|
119
|
-
const response = await this.fetch("/:identity/service",
|
|
120
|
+
const response = await this.fetch("/:identity/service", HttpMethod.POST, {
|
|
120
121
|
pathParams: {
|
|
121
122
|
identity
|
|
122
123
|
},
|
|
@@ -137,7 +138,7 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
137
138
|
async serviceRemove(serviceId) {
|
|
138
139
|
Guards.stringValue(IdentityRestClient.CLASS_NAME, "serviceId", serviceId);
|
|
139
140
|
const idParts = DocumentHelper.parseId(serviceId);
|
|
140
|
-
await this.fetch("/:identity/service/:serviceId",
|
|
141
|
+
await this.fetch("/:identity/service/:serviceId", HttpMethod.DELETE, {
|
|
141
142
|
pathParams: {
|
|
142
143
|
identity: idParts.id,
|
|
143
144
|
serviceId: idParts.fragment ?? ""
|
|
@@ -156,7 +157,7 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
156
157
|
async alsoKnownAsAdd(documentId, alias) {
|
|
157
158
|
Guards.stringValue(IdentityRestClient.CLASS_NAME, "documentId", documentId);
|
|
158
159
|
Guards.stringValue(IdentityRestClient.CLASS_NAME, "alias", alias);
|
|
159
|
-
await this.fetch("/:identity/alias",
|
|
160
|
+
await this.fetch("/:identity/alias", HttpMethod.POST, {
|
|
160
161
|
pathParams: {
|
|
161
162
|
identity: documentId
|
|
162
163
|
},
|
|
@@ -177,7 +178,7 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
177
178
|
async alsoKnownAsRemove(documentId, alias) {
|
|
178
179
|
Guards.stringValue(IdentityRestClient.CLASS_NAME, "documentId", documentId);
|
|
179
180
|
Guards.stringValue(IdentityRestClient.CLASS_NAME, "alias", alias);
|
|
180
|
-
await this.fetch("/:identity/alias/:alias",
|
|
181
|
+
await this.fetch("/:identity/alias/:alias", HttpMethod.DELETE, {
|
|
181
182
|
pathParams: {
|
|
182
183
|
identity: documentId,
|
|
183
184
|
alias
|
|
@@ -204,7 +205,7 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
204
205
|
Guards.number(IdentityRestClient.CLASS_NAME, "options.revocationIndex", options?.revocationIndex);
|
|
205
206
|
}
|
|
206
207
|
const idParts = DocumentHelper.parseId(verificationMethodId);
|
|
207
|
-
const response = await this.fetch("/:identity/verifiable-credential",
|
|
208
|
+
const response = await this.fetch("/:identity/verifiable-credential", HttpMethod.POST, {
|
|
208
209
|
pathParams: {
|
|
209
210
|
identity: idParts.id,
|
|
210
211
|
verificationMethodId: idParts.fragment ?? ""
|
|
@@ -228,11 +229,11 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
228
229
|
async verifiableCredentialVerify(credential) {
|
|
229
230
|
if (Is.object(credential)) {
|
|
230
231
|
Guards.object(IdentityRestClient.CLASS_NAME, "credential", credential);
|
|
231
|
-
const response = await this.fetch("/verifiable-credential/verify/document",
|
|
232
|
+
const response = await this.fetch("/verifiable-credential/verify/document", HttpMethod.POST, { body: credential });
|
|
232
233
|
return response.body;
|
|
233
234
|
}
|
|
234
235
|
Guards.stringValue(IdentityRestClient.CLASS_NAME, "credential", credential);
|
|
235
|
-
const response = await this.fetch("/verifiable-credential/verify",
|
|
236
|
+
const response = await this.fetch("/verifiable-credential/verify", HttpMethod.GET, { query: { jwt: credential } });
|
|
236
237
|
return response.body;
|
|
237
238
|
}
|
|
238
239
|
/**
|
|
@@ -244,7 +245,7 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
244
245
|
async verifiableCredentialRevoke(issuerId, credentialIndex) {
|
|
245
246
|
Guards.stringValue(IdentityRestClient.CLASS_NAME, "issuerId", issuerId);
|
|
246
247
|
Guards.integer(IdentityRestClient.CLASS_NAME, "credentialIndex", credentialIndex);
|
|
247
|
-
await this.fetch("/:identity/verifiable-credential/revoke/:revocationIndex",
|
|
248
|
+
await this.fetch("/:identity/verifiable-credential/revoke/:revocationIndex", HttpMethod.GET, {
|
|
248
249
|
pathParams: {
|
|
249
250
|
identity: issuerId,
|
|
250
251
|
revocationIndex: credentialIndex.toString()
|
|
@@ -260,7 +261,7 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
260
261
|
async verifiableCredentialUnrevoke(issuerId, credentialIndex) {
|
|
261
262
|
Guards.stringValue(IdentityRestClient.CLASS_NAME, "issuerId", issuerId);
|
|
262
263
|
Guards.integer(IdentityRestClient.CLASS_NAME, "credentialIndex", credentialIndex);
|
|
263
|
-
await this.fetch("/:identity/verifiable-credential/unrevoke/:revocationIndex",
|
|
264
|
+
await this.fetch("/:identity/verifiable-credential/unrevoke/:revocationIndex", HttpMethod.GET, {
|
|
264
265
|
pathParams: {
|
|
265
266
|
identity: issuerId,
|
|
266
267
|
revocationIndex: credentialIndex.toString()
|
|
@@ -294,7 +295,7 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
294
295
|
Guards.date(IdentityRestClient.CLASS_NAME, "options.expirationDate", options?.expirationDate);
|
|
295
296
|
}
|
|
296
297
|
const idParts = DocumentHelper.parseId(verificationMethodId);
|
|
297
|
-
const response = await this.fetch("/:identity/verifiable-presentation",
|
|
298
|
+
const response = await this.fetch("/:identity/verifiable-presentation", HttpMethod.POST, {
|
|
298
299
|
pathParams: {
|
|
299
300
|
identity: idParts.id,
|
|
300
301
|
verificationMethodId: idParts.fragment ?? ""
|
|
@@ -319,11 +320,11 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
319
320
|
async verifiablePresentationVerify(presentation) {
|
|
320
321
|
if (Is.object(presentation)) {
|
|
321
322
|
Guards.object(IdentityRestClient.CLASS_NAME, "presentation", presentation);
|
|
322
|
-
const response = await this.fetch("/verifiable-presentation/verify/document",
|
|
323
|
+
const response = await this.fetch("/verifiable-presentation/verify/document", HttpMethod.POST, { body: presentation });
|
|
323
324
|
return response.body;
|
|
324
325
|
}
|
|
325
326
|
Guards.stringValue(IdentityRestClient.CLASS_NAME, "presentation", presentation);
|
|
326
|
-
const response = await this.fetch("/verifiable-presentation/verify",
|
|
327
|
+
const response = await this.fetch("/verifiable-presentation/verify", HttpMethod.POST, {
|
|
327
328
|
query: {
|
|
328
329
|
jwt: presentation
|
|
329
330
|
}
|
|
@@ -342,7 +343,7 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
342
343
|
Guards.arrayOneOf(IdentityRestClient.CLASS_NAME, "proofType", proofType, Object.values(ProofTypes));
|
|
343
344
|
Guards.object(IdentityRestClient.CLASS_NAME, "unsecureDocument", unsecureDocument);
|
|
344
345
|
const idParts = DocumentHelper.parseId(verificationMethodId);
|
|
345
|
-
const response = await this.fetch("/:identity/proof",
|
|
346
|
+
const response = await this.fetch("/:identity/proof", HttpMethod.POST, {
|
|
346
347
|
pathParams: {
|
|
347
348
|
identity: idParts.id,
|
|
348
349
|
verificationMethodId: idParts.fragment ?? ""
|
|
@@ -364,7 +365,7 @@ export class IdentityRestClient extends BaseRestClient {
|
|
|
364
365
|
Guards.object(IdentityRestClient.CLASS_NAME, "document", document);
|
|
365
366
|
Guards.object(IdentityRestClient.CLASS_NAME, "proof", proof);
|
|
366
367
|
Guards.stringValue(IdentityRestClient.CLASS_NAME, "proof.verificationMethod", proof.verificationMethod);
|
|
367
|
-
const response = await this.fetch("/proof/verify",
|
|
368
|
+
const response = await this.fetch("/proof/verify", HttpMethod.POST, {
|
|
368
369
|
body: {
|
|
369
370
|
document,
|
|
370
371
|
proof
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identityRestClient.js","sourceRoot":"","sources":["../../src/identityRestClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { BaseRestClient } from \"@twin.org/api-core\";\nimport type { IBaseRestClientConfig, INoContentResponse } from \"@twin.org/api-models\";\nimport { Guards, Is } from \"@twin.org/core\";\nimport type { IJsonLdContextDefinitionRoot, IJsonLdNodeObject } from \"@twin.org/data-json-ld\";\nimport {\n\tDocumentHelper,\n\ttype IIdentityVerifiablePresentationVerifyDocumentRequest,\n\ttype IIdentityAlsoKnownAsCreateRequest,\n\ttype IIdentityAlsoKnownAsRemoveRequest,\n\ttype IIdentityComponent,\n\ttype IIdentityCreateRequest,\n\ttype IIdentityCreateResponse,\n\ttype IIdentityProofCreateRequest,\n\ttype IIdentityProofCreateResponse,\n\ttype IIdentityProofVerifyRequest,\n\ttype IIdentityProofVerifyResponse,\n\ttype IIdentityRemoveRequest,\n\ttype IIdentityServiceCreateRequest,\n\ttype IIdentityServiceCreateResponse,\n\ttype IIdentityServiceRemoveRequest,\n\ttype IIdentityVerifiableCredentialCreateRequest,\n\ttype IIdentityVerifiableCredentialCreateResponse,\n\ttype IIdentityVerifiableCredentialRevokeRequest,\n\ttype IIdentityVerifiableCredentialUnrevokeRequest,\n\ttype IIdentityVerifiableCredentialVerifyDocumentRequest,\n\ttype IIdentityVerifiableCredentialVerifyRequest,\n\ttype IIdentityVerifiableCredentialVerifyResponse,\n\ttype IIdentityVerifiablePresentationCreateRequest,\n\ttype IIdentityVerifiablePresentationCreateResponse,\n\ttype IIdentityVerifiablePresentationVerifyRequest,\n\ttype IIdentityVerifiablePresentationVerifyResponse,\n\ttype IIdentityVerificationMethodCreateRequest,\n\ttype IIdentityVerificationMethodCreateResponse,\n\ttype IIdentityVerificationMethodRemoveRequest\n} from \"@twin.org/identity-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport {\n\tDidVerificationMethodType,\n\ttype IDidDocument,\n\ttype IDidDocumentVerificationMethod,\n\ttype IDidService,\n\ttype IDidVerifiableCredential,\n\ttype IDidVerifiablePresentation,\n\ttype IProof,\n\tProofTypes\n} from \"@twin.org/standards-w3c-did\";\n\n/**\n * Client for performing identity through to REST endpoints.\n */\nexport class IdentityRestClient extends BaseRestClient implements IIdentityComponent {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<IdentityRestClient>();\n\n\t/**\n\t * Create a new instance of IdentityRestClient.\n\t * @param config The configuration for the client.\n\t */\n\tconstructor(config: IBaseRestClientConfig) {\n\t\tsuper(nameof<IdentityRestClient>(), config, \"identity\");\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn IdentityRestClient.CLASS_NAME;\n\t}\n\n\t/**\n\t * Create a new identity.\n\t * @param namespace The namespace of the connector to use for the identity, defaults to service configured namespace.\n\t * @returns The created identity document.\n\t */\n\tpublic async identityCreate(namespace?: string): Promise<IDidDocument> {\n\t\tconst response = await this.fetch<IIdentityCreateRequest, IIdentityCreateResponse>(\n\t\t\t\"/\",\n\t\t\t\"POST\",\n\t\t\t{\n\t\t\t\tbody: {\n\t\t\t\t\tnamespace\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Remove an identity.\n\t * @param identity The id of the document to remove.\n\t * @returns A promise that resolves when the identity has been removed.\n\t */\n\tpublic async identityRemove(identity: string): Promise<void> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(identity), identity);\n\t\tawait this.fetch<IIdentityRemoveRequest, INoContentResponse>(\"/:identity\", \"DELETE\", {\n\t\t\tpathParams: {\n\t\t\t\tidentity\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Add a verification method to the document in JSON Web key Format.\n\t * @param identity The id of the document to add the verification method to.\n\t * @param verificationMethodType The type of the verification method to add.\n\t * @param verificationMethodId The id of the verification method, if undefined uses the kid of the generated JWK.\n\t * @returns The verification method.\n\t * @throws NotFoundError if the id can not be resolved.\n\t * @throws NotSupportedError if the platform does not support multiple keys.\n\t */\n\tpublic async verificationMethodCreate(\n\t\tidentity: string,\n\t\tverificationMethodType: DidVerificationMethodType,\n\t\tverificationMethodId?: string\n\t): Promise<IDidDocumentVerificationMethod> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(identity), identity);\n\t\tGuards.arrayOneOf<DidVerificationMethodType>(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(verificationMethodType),\n\t\t\tverificationMethodType,\n\t\t\tObject.values(DidVerificationMethodType)\n\t\t);\n\t\tconst response = await this.fetch<\n\t\t\tIIdentityVerificationMethodCreateRequest,\n\t\t\tIIdentityVerificationMethodCreateResponse\n\t\t>(\"/:identity/verification-method\", \"POST\", {\n\t\t\tpathParams: {\n\t\t\t\tidentity\n\t\t\t},\n\t\t\tbody: {\n\t\t\t\tverificationMethodType,\n\t\t\t\tverificationMethodId\n\t\t\t}\n\t\t});\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Remove a verification method from the document.\n\t * @param verificationMethodId The id of the verification method.\n\t * @returns A promise that resolves when the verification method has been removed.\n\t * @throws NotFoundError if the id can not be resolved.\n\t * @throws NotSupportedError if the platform does not support multiple revocable keys.\n\t */\n\tpublic async verificationMethodRemove(verificationMethodId: string): Promise<void> {\n\t\tGuards.stringValue(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\n\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\n\t\tawait this.fetch<IIdentityVerificationMethodRemoveRequest, INoContentResponse>(\n\t\t\t\"/:identity/verification-method/:verificationMethodId\",\n\t\t\t\"DELETE\",\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: idParts.id,\n\t\t\t\t\tverificationMethodId: idParts.fragment ?? \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Add a service to the document.\n\t * @param identity The id of the document to add the service to.\n\t * @param serviceId The id of the service.\n\t * @param serviceType The type of the service.\n\t * @param serviceEndpoint The endpoint for the service.\n\t * @returns The service.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async serviceCreate(\n\t\tidentity: string,\n\t\tserviceId: string,\n\t\tserviceType: string | string[],\n\t\tserviceEndpoint: string | string[]\n\t): Promise<IDidService> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(identity), identity);\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(serviceId), serviceId);\n\t\tif (Is.array(serviceType)) {\n\t\t\tGuards.arrayValue<string>(IdentityRestClient.CLASS_NAME, nameof(serviceType), serviceType);\n\t\t} else {\n\t\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(serviceType), serviceType);\n\t\t}\n\t\tif (Is.array(serviceEndpoint)) {\n\t\t\tGuards.arrayValue<string>(\n\t\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\t\tnameof(serviceEndpoint),\n\t\t\t\tserviceEndpoint\n\t\t\t);\n\t\t} else {\n\t\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(serviceEndpoint), serviceEndpoint);\n\t\t}\n\n\t\tconst response = await this.fetch<\n\t\t\tIIdentityServiceCreateRequest,\n\t\t\tIIdentityServiceCreateResponse\n\t\t>(\"/:identity/service\", \"POST\", {\n\t\t\tpathParams: {\n\t\t\t\tidentity\n\t\t\t},\n\t\t\tbody: {\n\t\t\t\tserviceId,\n\t\t\t\ttype: serviceType,\n\t\t\t\tendpoint: serviceEndpoint\n\t\t\t}\n\t\t});\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Remove a service from the document.\n\t * @param serviceId The id of the service.\n\t * @returns A promise that resolves when the service has been removed.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async serviceRemove(serviceId: string): Promise<void> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(serviceId), serviceId);\n\n\t\tconst idParts = DocumentHelper.parseId(serviceId);\n\n\t\tawait this.fetch<IIdentityServiceRemoveRequest, INoContentResponse>(\n\t\t\t\"/:identity/service/:serviceId\",\n\t\t\t\"DELETE\",\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: idParts.id,\n\t\t\t\t\tserviceId: idParts.fragment ?? \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Add an alias to the alsoKnownAs property on the document.\n\t * If the alias is already present the operation is a no-op.\n\t * @param documentId The id of the document to update.\n\t * @param alias The alias to add. Must be a Url or Urn (typically another DID).\n\t * @returns A promise that resolves when the alias has been added.\n\t * @throws GeneralError if the alias is not a Url or Urn.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async alsoKnownAsAdd(documentId: string, alias: string): Promise<void> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(documentId), documentId);\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(alias), alias);\n\n\t\tawait this.fetch<IIdentityAlsoKnownAsCreateRequest, INoContentResponse>(\n\t\t\t\"/:identity/alias\",\n\t\t\t\"POST\",\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: documentId\n\t\t\t\t},\n\t\t\t\tbody: {\n\t\t\t\t\talias\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Remove an alias from the alsoKnownAs property on the document.\n\t * If the alias is not present the operation is a no-op.\n\t * @param documentId The id of the document to update.\n\t * @param alias The alias to remove. Must be a Url or Urn.\n\t * @returns A promise that resolves when the alias has been removed.\n\t * @throws GeneralError if the alias is not a Url or Urn.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async alsoKnownAsRemove(documentId: string, alias: string): Promise<void> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(documentId), documentId);\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(alias), alias);\n\n\t\tawait this.fetch<IIdentityAlsoKnownAsRemoveRequest, INoContentResponse>(\n\t\t\t\"/:identity/alias/:alias\",\n\t\t\t\"DELETE\",\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: documentId,\n\t\t\t\t\talias\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Create a verifiable credential for a verification method.\n\t * @param verificationMethodId The verification method id to use.\n\t * @param id The id of the credential.\n\t * @param subject The credential subject to store in the verifiable credential.\n\t * @param options Additional options for creating the verifiable credential.\n\t * @param options.revocationIndex The bitmap revocation index of the credential, if undefined will not have revocation status.\n\t * @param options.expirationDate The date the verifiable credential is valid until.\n\t * @param options.jwtHeaderFields Additional fields to include in the JWT header when creating the verifiable credential in jwt format.\n\t * @param options.jwtPayloadFields Additional fields to include in the JWT payload when creating the verifiable credential in jwt format.\n\t * @returns The created verifiable credential and its token.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async verifiableCredentialCreate(\n\t\tverificationMethodId: string,\n\t\tid: string | undefined,\n\t\tsubject: IJsonLdNodeObject,\n\t\toptions?: {\n\t\t\trevocationIndex?: number;\n\t\t\texpirationDate?: Date;\n\t\t\tjwtHeaderFields?: { [id: string]: string };\n\t\t\tjwtPayloadFields?: { [id: string]: string };\n\t\t}\n\t): Promise<{\n\t\tverifiableCredential: IDidVerifiableCredential;\n\t\tjwt: string;\n\t}> {\n\t\tGuards.stringValue(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\t\tGuards.object<IJsonLdNodeObject>(IdentityRestClient.CLASS_NAME, nameof(subject), subject);\n\t\tif (!Is.undefined(options?.revocationIndex)) {\n\t\t\tGuards.number(\n\t\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\t\tnameof(options?.revocationIndex),\n\t\t\t\toptions?.revocationIndex\n\t\t\t);\n\t\t}\n\n\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\n\t\tconst response = await this.fetch<\n\t\t\tIIdentityVerifiableCredentialCreateRequest,\n\t\t\tIIdentityVerifiableCredentialCreateResponse\n\t\t>(\"/:identity/verifiable-credential\", \"POST\", {\n\t\t\tpathParams: {\n\t\t\t\tidentity: idParts.id,\n\t\t\t\tverificationMethodId: idParts.fragment ?? \"\"\n\t\t\t},\n\t\t\tbody: {\n\t\t\t\tcredentialId: id,\n\t\t\t\tsubject,\n\t\t\t\trevocationIndex: options?.revocationIndex,\n\t\t\t\texpirationDate: options?.expirationDate?.toISOString(),\n\t\t\t\tjwtHeaderFields: options?.jwtHeaderFields,\n\t\t\t\tjwtPayloadFields: options?.jwtPayloadFields\n\t\t\t}\n\t\t});\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Verify a verifiable credential is valid.\n\t * @param credential The credential to verify.\n\t * @returns The credential stored in the jwt and the revocation status.\n\t */\n\tpublic async verifiableCredentialVerify(credential: string | IDidVerifiableCredential): Promise<{\n\t\trevoked: boolean;\n\t\tverifiableCredential?: IDidVerifiableCredential;\n\t}> {\n\t\tif (Is.object(credential)) {\n\t\t\tGuards.object<IDidVerifiableCredential>(\n\t\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\t\tnameof(credential),\n\t\t\t\tcredential\n\t\t\t);\n\t\t\tconst response = await this.fetch<\n\t\t\t\tIIdentityVerifiableCredentialVerifyDocumentRequest,\n\t\t\t\tIIdentityVerifiableCredentialVerifyResponse\n\t\t\t>(\"/verifiable-credential/verify/document\", \"POST\", { body: credential });\n\n\t\t\treturn response.body;\n\t\t}\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(credential), credential);\n\n\t\tconst response = await this.fetch<\n\t\t\tIIdentityVerifiableCredentialVerifyRequest,\n\t\t\tIIdentityVerifiableCredentialVerifyResponse\n\t\t>(\"/verifiable-credential/verify\", \"GET\", { query: { jwt: credential } });\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Revoke verifiable credential.\n\t * @param issuerId The id of the document to update the revocation list for.\n\t * @param credentialIndex The revocation bitmap index to revoke.\n\t * @returns A promise that resolves when the credential has been revoked.\n\t */\n\tpublic async verifiableCredentialRevoke(\n\t\tissuerId: string,\n\t\tcredentialIndex: number\n\t): Promise<void> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(issuerId), issuerId);\n\t\tGuards.integer(IdentityRestClient.CLASS_NAME, nameof(credentialIndex), credentialIndex);\n\n\t\tawait this.fetch<IIdentityVerifiableCredentialRevokeRequest, INoContentResponse>(\n\t\t\t\"/:identity/verifiable-credential/revoke/:revocationIndex\",\n\t\t\t\"GET\",\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: issuerId,\n\t\t\t\t\trevocationIndex: credentialIndex.toString()\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Unrevoke verifiable credential.\n\t * @param issuerId The id of the document to update the revocation list for.\n\t * @param credentialIndex The revocation bitmap index to unrevoke.\n\t * @returns A promise that resolves when the credential has been unrevoked.\n\t */\n\tpublic async verifiableCredentialUnrevoke(\n\t\tissuerId: string,\n\t\tcredentialIndex: number\n\t): Promise<void> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(issuerId), issuerId);\n\t\tGuards.integer(IdentityRestClient.CLASS_NAME, nameof(credentialIndex), credentialIndex);\n\n\t\tawait this.fetch<IIdentityVerifiableCredentialUnrevokeRequest, INoContentResponse>(\n\t\t\t\"/:identity/verifiable-credential/unrevoke/:revocationIndex\",\n\t\t\t\"GET\",\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: issuerId,\n\t\t\t\t\trevocationIndex: credentialIndex.toString()\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Create a verifiable presentation from the supplied verifiable credentials.\n\t * @param verificationMethodId The method to associate with the presentation.\n\t * @param presentationId The id of the presentation.\n\t * @param contexts The contexts for the data stored in the verifiable credential.\n\t * @param types The types for the data stored in the verifiable credential.\n\t * @param verifiableCredentials The credentials to use for creating the presentation in jwt format.\n\t * @param options Additional options for creating the verifiable presentation.\n\t * @param options.expirationDate The date the verifiable presentation is valid until.\n\t * @param options.jwtHeaderFields Additional fields to include in the JWT header when creating the verifiable presentation in jwt format.\n\t * @param options.jwtPayloadFields Additional fields to include in the JWT payload when creating the verifiable presentation in jwt format.\n\t * @returns The created verifiable presentation and its token.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async verifiablePresentationCreate(\n\t\tverificationMethodId: string,\n\t\tpresentationId: string | undefined,\n\t\tcontexts: IJsonLdContextDefinitionRoot | undefined,\n\t\ttypes: string | string[] | undefined,\n\t\tverifiableCredentials: (string | IDidVerifiableCredential)[],\n\t\toptions?: {\n\t\t\texpirationDate?: Date;\n\t\t\tjwtHeaderFields?: { [id: string]: string };\n\t\t\tjwtPayloadFields?: { [id: string]: string };\n\t\t}\n\t): Promise<{\n\t\tverifiablePresentation: IDidVerifiablePresentation;\n\t\tjwt: string;\n\t}> {\n\t\tGuards.stringValue(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\t\tif (Is.array(types)) {\n\t\t\tGuards.arrayValue(IdentityRestClient.CLASS_NAME, nameof(types), types);\n\t\t} else if (Is.string(types)) {\n\t\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(types), types);\n\t\t}\n\t\tGuards.arrayValue(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(verifiableCredentials),\n\t\t\tverifiableCredentials\n\t\t);\n\t\tif (!Is.undefined(options?.expirationDate)) {\n\t\t\tGuards.date(\n\t\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\t\tnameof(options.expirationDate),\n\t\t\t\toptions?.expirationDate\n\t\t\t);\n\t\t}\n\n\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\n\t\tconst response = await this.fetch<\n\t\t\tIIdentityVerifiablePresentationCreateRequest,\n\t\t\tIIdentityVerifiablePresentationCreateResponse\n\t\t>(\"/:identity/verifiable-presentation\", \"POST\", {\n\t\t\tpathParams: {\n\t\t\t\tidentity: idParts.id,\n\t\t\t\tverificationMethodId: idParts.fragment ?? \"\"\n\t\t\t},\n\t\t\tbody: {\n\t\t\t\tpresentationId,\n\t\t\t\tcontexts,\n\t\t\t\ttypes,\n\t\t\t\tverifiableCredentials,\n\t\t\t\texpirationDate: options?.expirationDate?.toISOString(),\n\t\t\t\tjwtHeaderFields: options?.jwtHeaderFields,\n\t\t\t\tjwtPayloadFields: options?.jwtPayloadFields\n\t\t\t}\n\t\t});\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Verify a verifiable presentation is valid.\n\t * @param presentation The presentation to verify.\n\t * @returns The presentation stored in the jwt and the revocation status.\n\t */\n\tpublic async verifiablePresentationVerify(\n\t\tpresentation: string | IDidVerifiablePresentation\n\t): Promise<{\n\t\trevoked: boolean;\n\t\tverifiablePresentation?: IDidVerifiablePresentation;\n\t\tissuers?: IDidDocument[];\n\t}> {\n\t\tif (Is.object(presentation)) {\n\t\t\tGuards.object<IDidVerifiablePresentation>(\n\t\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\t\tnameof(presentation),\n\t\t\t\tpresentation\n\t\t\t);\n\t\t\tconst response = await this.fetch<\n\t\t\t\tIIdentityVerifiablePresentationVerifyDocumentRequest,\n\t\t\t\tIIdentityVerifiablePresentationVerifyResponse\n\t\t\t>(\"/verifiable-presentation/verify/document\", \"POST\", { body: presentation });\n\n\t\t\treturn response.body;\n\t\t}\n\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(presentation), presentation);\n\n\t\tconst response = await this.fetch<\n\t\t\tIIdentityVerifiablePresentationVerifyRequest,\n\t\t\tIIdentityVerifiablePresentationVerifyResponse\n\t\t>(\"/verifiable-presentation/verify\", \"POST\", {\n\t\t\tquery: {\n\t\t\t\tjwt: presentation\n\t\t\t}\n\t\t});\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Create a proof for a document with the specified verification method.\n\t * @param verificationMethodId The verification method id to use.\n\t * @param proofType The type of proof to create.\n\t * @param unsecureDocument The unsecure document to create the proof for.\n\t * @returns The proof.\n\t */\n\tpublic async proofCreate(\n\t\tverificationMethodId: string,\n\t\tproofType: ProofTypes,\n\t\tunsecureDocument: IJsonLdNodeObject\n\t): Promise<IProof> {\n\t\tGuards.stringValue(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\t\tGuards.arrayOneOf<ProofTypes>(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(proofType),\n\t\t\tproofType,\n\t\t\tObject.values(ProofTypes)\n\t\t);\n\t\tGuards.object<IJsonLdNodeObject>(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(unsecureDocument),\n\t\t\tunsecureDocument\n\t\t);\n\n\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\n\t\tconst response = await this.fetch<IIdentityProofCreateRequest, IIdentityProofCreateResponse>(\n\t\t\t\"/:identity/proof\",\n\t\t\t\"POST\",\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: idParts.id,\n\t\t\t\t\tverificationMethodId: idParts.fragment ?? \"\"\n\t\t\t\t},\n\t\t\t\tbody: {\n\t\t\t\t\tdocument: unsecureDocument,\n\t\t\t\t\tproofType\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Verify proof for a document with the specified verification method.\n\t * @param document The document to verify.\n\t * @param proof The proof to verify.\n\t * @returns True if the proof is verified.\n\t */\n\tpublic async proofVerify(document: IJsonLdNodeObject, proof: IProof): Promise<boolean> {\n\t\tGuards.object<IJsonLdNodeObject>(IdentityRestClient.CLASS_NAME, nameof(document), document);\n\t\tGuards.object<IProof>(IdentityRestClient.CLASS_NAME, nameof(proof), proof);\n\t\tGuards.stringValue(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(proof.verificationMethod),\n\t\t\tproof.verificationMethod\n\t\t);\n\n\t\tconst response = await this.fetch<IIdentityProofVerifyRequest, IIdentityProofVerifyResponse>(\n\t\t\t\"/proof/verify\",\n\t\t\t\"POST\",\n\t\t\t{\n\t\t\t\tbody: {\n\t\t\t\t\tdocument,\n\t\t\t\t\tproof\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\treturn response.body.verified;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"identityRestClient.js","sourceRoot":"","sources":["../../src/identityRestClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { BaseRestClient } from \"@twin.org/api-core\";\nimport type { IBaseRestClientConfig, INoContentResponse } from \"@twin.org/api-models\";\nimport { Guards, Is } from \"@twin.org/core\";\nimport type { IJsonLdContextDefinitionRoot, IJsonLdNodeObject } from \"@twin.org/data-json-ld\";\nimport {\n\tDocumentHelper,\n\ttype IIdentityVerifiablePresentationVerifyDocumentRequest,\n\ttype IIdentityAlsoKnownAsCreateRequest,\n\ttype IIdentityAlsoKnownAsRemoveRequest,\n\ttype IIdentityComponent,\n\ttype IIdentityCreateRequest,\n\ttype IIdentityCreateResponse,\n\ttype IIdentityProofCreateRequest,\n\ttype IIdentityProofCreateResponse,\n\ttype IIdentityProofVerifyRequest,\n\ttype IIdentityProofVerifyResponse,\n\ttype IIdentityRemoveRequest,\n\ttype IIdentityServiceCreateRequest,\n\ttype IIdentityServiceCreateResponse,\n\ttype IIdentityServiceRemoveRequest,\n\ttype IIdentityVerifiableCredentialCreateRequest,\n\ttype IIdentityVerifiableCredentialCreateResponse,\n\ttype IIdentityVerifiableCredentialRevokeRequest,\n\ttype IIdentityVerifiableCredentialUnrevokeRequest,\n\ttype IIdentityVerifiableCredentialVerifyDocumentRequest,\n\ttype IIdentityVerifiableCredentialVerifyRequest,\n\ttype IIdentityVerifiableCredentialVerifyResponse,\n\ttype IIdentityVerifiablePresentationCreateRequest,\n\ttype IIdentityVerifiablePresentationCreateResponse,\n\ttype IIdentityVerifiablePresentationVerifyRequest,\n\ttype IIdentityVerifiablePresentationVerifyResponse,\n\ttype IIdentityVerificationMethodCreateRequest,\n\ttype IIdentityVerificationMethodCreateResponse,\n\ttype IIdentityVerificationMethodRemoveRequest\n} from \"@twin.org/identity-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport {\n\tDidVerificationMethodType,\n\ttype IDidDocument,\n\ttype IDidDocumentVerificationMethod,\n\ttype IDidService,\n\ttype IDidVerifiableCredential,\n\ttype IDidVerifiablePresentation,\n\ttype IProof,\n\tProofTypes\n} from \"@twin.org/standards-w3c-did\";\nimport { HttpMethod } from \"@twin.org/web\";\n\n/**\n * Client for performing identity through to REST endpoints.\n */\nexport class IdentityRestClient extends BaseRestClient implements IIdentityComponent {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<IdentityRestClient>();\n\n\t/**\n\t * Create a new instance of IdentityRestClient.\n\t * @param config The configuration for the client.\n\t */\n\tconstructor(config: IBaseRestClientConfig) {\n\t\tsuper(nameof<IdentityRestClient>(), config, \"identity\");\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn IdentityRestClient.CLASS_NAME;\n\t}\n\n\t/**\n\t * Create a new identity.\n\t * @param namespace The namespace of the connector to use for the identity, defaults to service configured namespace.\n\t * @returns The created identity document.\n\t */\n\tpublic async identityCreate(namespace?: string): Promise<IDidDocument> {\n\t\tconst response = await this.fetch<IIdentityCreateRequest, IIdentityCreateResponse>(\n\t\t\t\"/\",\n\t\t\tHttpMethod.POST,\n\t\t\t{\n\t\t\t\tbody: {\n\t\t\t\t\tnamespace\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Remove an identity.\n\t * @param identity The id of the document to remove.\n\t * @returns A promise that resolves when the identity has been removed.\n\t */\n\tpublic async identityRemove(identity: string): Promise<void> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(identity), identity);\n\t\tawait this.fetch<IIdentityRemoveRequest, INoContentResponse>(\"/:identity\", HttpMethod.DELETE, {\n\t\t\tpathParams: {\n\t\t\t\tidentity\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Add a verification method to the document in JSON Web key Format.\n\t * @param identity The id of the document to add the verification method to.\n\t * @param verificationMethodType The type of the verification method to add.\n\t * @param verificationMethodId The id of the verification method, if undefined uses the kid of the generated JWK.\n\t * @returns The verification method.\n\t * @throws NotFoundError if the id can not be resolved.\n\t * @throws NotSupportedError if the platform does not support multiple keys.\n\t */\n\tpublic async verificationMethodCreate(\n\t\tidentity: string,\n\t\tverificationMethodType: DidVerificationMethodType,\n\t\tverificationMethodId?: string\n\t): Promise<IDidDocumentVerificationMethod> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(identity), identity);\n\t\tGuards.arrayOneOf<DidVerificationMethodType>(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(verificationMethodType),\n\t\t\tverificationMethodType,\n\t\t\tObject.values(DidVerificationMethodType)\n\t\t);\n\t\tconst response = await this.fetch<\n\t\t\tIIdentityVerificationMethodCreateRequest,\n\t\t\tIIdentityVerificationMethodCreateResponse\n\t\t>(\"/:identity/verification-method\", HttpMethod.POST, {\n\t\t\tpathParams: {\n\t\t\t\tidentity\n\t\t\t},\n\t\t\tbody: {\n\t\t\t\tverificationMethodType,\n\t\t\t\tverificationMethodId\n\t\t\t}\n\t\t});\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Remove a verification method from the document.\n\t * @param verificationMethodId The id of the verification method.\n\t * @returns A promise that resolves when the verification method has been removed.\n\t * @throws NotFoundError if the id can not be resolved.\n\t * @throws NotSupportedError if the platform does not support multiple revocable keys.\n\t */\n\tpublic async verificationMethodRemove(verificationMethodId: string): Promise<void> {\n\t\tGuards.stringValue(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\n\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\n\t\tawait this.fetch<IIdentityVerificationMethodRemoveRequest, INoContentResponse>(\n\t\t\t\"/:identity/verification-method/:verificationMethodId\",\n\t\t\tHttpMethod.DELETE,\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: idParts.id,\n\t\t\t\t\tverificationMethodId: idParts.fragment ?? \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Add a service to the document.\n\t * @param identity The id of the document to add the service to.\n\t * @param serviceId The id of the service.\n\t * @param serviceType The type of the service.\n\t * @param serviceEndpoint The endpoint for the service.\n\t * @returns The service.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async serviceCreate(\n\t\tidentity: string,\n\t\tserviceId: string,\n\t\tserviceType: string | string[],\n\t\tserviceEndpoint: string | string[]\n\t): Promise<IDidService> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(identity), identity);\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(serviceId), serviceId);\n\t\tif (Is.array(serviceType)) {\n\t\t\tGuards.arrayValue<string>(IdentityRestClient.CLASS_NAME, nameof(serviceType), serviceType);\n\t\t} else {\n\t\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(serviceType), serviceType);\n\t\t}\n\t\tif (Is.array(serviceEndpoint)) {\n\t\t\tGuards.arrayValue<string>(\n\t\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\t\tnameof(serviceEndpoint),\n\t\t\t\tserviceEndpoint\n\t\t\t);\n\t\t} else {\n\t\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(serviceEndpoint), serviceEndpoint);\n\t\t}\n\n\t\tconst response = await this.fetch<\n\t\t\tIIdentityServiceCreateRequest,\n\t\t\tIIdentityServiceCreateResponse\n\t\t>(\"/:identity/service\", HttpMethod.POST, {\n\t\t\tpathParams: {\n\t\t\t\tidentity\n\t\t\t},\n\t\t\tbody: {\n\t\t\t\tserviceId,\n\t\t\t\ttype: serviceType,\n\t\t\t\tendpoint: serviceEndpoint\n\t\t\t}\n\t\t});\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Remove a service from the document.\n\t * @param serviceId The id of the service.\n\t * @returns A promise that resolves when the service has been removed.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async serviceRemove(serviceId: string): Promise<void> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(serviceId), serviceId);\n\n\t\tconst idParts = DocumentHelper.parseId(serviceId);\n\n\t\tawait this.fetch<IIdentityServiceRemoveRequest, INoContentResponse>(\n\t\t\t\"/:identity/service/:serviceId\",\n\t\t\tHttpMethod.DELETE,\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: idParts.id,\n\t\t\t\t\tserviceId: idParts.fragment ?? \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Add an alias to the alsoKnownAs property on the document.\n\t * If the alias is already present the operation is a no-op.\n\t * @param documentId The id of the document to update.\n\t * @param alias The alias to add. Must be a Url or Urn (typically another DID).\n\t * @returns A promise that resolves when the alias has been added.\n\t * @throws GeneralError if the alias is not a Url or Urn.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async alsoKnownAsAdd(documentId: string, alias: string): Promise<void> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(documentId), documentId);\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(alias), alias);\n\n\t\tawait this.fetch<IIdentityAlsoKnownAsCreateRequest, INoContentResponse>(\n\t\t\t\"/:identity/alias\",\n\t\t\tHttpMethod.POST,\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: documentId\n\t\t\t\t},\n\t\t\t\tbody: {\n\t\t\t\t\talias\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Remove an alias from the alsoKnownAs property on the document.\n\t * If the alias is not present the operation is a no-op.\n\t * @param documentId The id of the document to update.\n\t * @param alias The alias to remove. Must be a Url or Urn.\n\t * @returns A promise that resolves when the alias has been removed.\n\t * @throws GeneralError if the alias is not a Url or Urn.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async alsoKnownAsRemove(documentId: string, alias: string): Promise<void> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(documentId), documentId);\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(alias), alias);\n\n\t\tawait this.fetch<IIdentityAlsoKnownAsRemoveRequest, INoContentResponse>(\n\t\t\t\"/:identity/alias/:alias\",\n\t\t\tHttpMethod.DELETE,\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: documentId,\n\t\t\t\t\talias\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Create a verifiable credential for a verification method.\n\t * @param verificationMethodId The verification method id to use.\n\t * @param id The id of the credential.\n\t * @param subject The credential subject to store in the verifiable credential.\n\t * @param options Additional options for creating the verifiable credential.\n\t * @param options.revocationIndex The bitmap revocation index of the credential, if undefined will not have revocation status.\n\t * @param options.expirationDate The date the verifiable credential is valid until.\n\t * @param options.jwtHeaderFields Additional fields to include in the JWT header when creating the verifiable credential in jwt format.\n\t * @param options.jwtPayloadFields Additional fields to include in the JWT payload when creating the verifiable credential in jwt format.\n\t * @returns The created verifiable credential and its token.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async verifiableCredentialCreate(\n\t\tverificationMethodId: string,\n\t\tid: string | undefined,\n\t\tsubject: IJsonLdNodeObject,\n\t\toptions?: {\n\t\t\trevocationIndex?: number;\n\t\t\texpirationDate?: Date;\n\t\t\tjwtHeaderFields?: { [id: string]: string };\n\t\t\tjwtPayloadFields?: { [id: string]: string };\n\t\t}\n\t): Promise<{\n\t\tverifiableCredential: IDidVerifiableCredential;\n\t\tjwt: string;\n\t}> {\n\t\tGuards.stringValue(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\t\tGuards.object<IJsonLdNodeObject>(IdentityRestClient.CLASS_NAME, nameof(subject), subject);\n\t\tif (!Is.undefined(options?.revocationIndex)) {\n\t\t\tGuards.number(\n\t\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\t\tnameof(options?.revocationIndex),\n\t\t\t\toptions?.revocationIndex\n\t\t\t);\n\t\t}\n\n\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\n\t\tconst response = await this.fetch<\n\t\t\tIIdentityVerifiableCredentialCreateRequest,\n\t\t\tIIdentityVerifiableCredentialCreateResponse\n\t\t>(\"/:identity/verifiable-credential\", HttpMethod.POST, {\n\t\t\tpathParams: {\n\t\t\t\tidentity: idParts.id,\n\t\t\t\tverificationMethodId: idParts.fragment ?? \"\"\n\t\t\t},\n\t\t\tbody: {\n\t\t\t\tcredentialId: id,\n\t\t\t\tsubject,\n\t\t\t\trevocationIndex: options?.revocationIndex,\n\t\t\t\texpirationDate: options?.expirationDate?.toISOString(),\n\t\t\t\tjwtHeaderFields: options?.jwtHeaderFields,\n\t\t\t\tjwtPayloadFields: options?.jwtPayloadFields\n\t\t\t}\n\t\t});\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Verify a verifiable credential is valid.\n\t * @param credential The credential to verify.\n\t * @returns The credential stored in the jwt and the revocation status.\n\t */\n\tpublic async verifiableCredentialVerify(credential: string | IDidVerifiableCredential): Promise<{\n\t\trevoked: boolean;\n\t\tverifiableCredential?: IDidVerifiableCredential;\n\t}> {\n\t\tif (Is.object(credential)) {\n\t\t\tGuards.object<IDidVerifiableCredential>(\n\t\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\t\tnameof(credential),\n\t\t\t\tcredential\n\t\t\t);\n\t\t\tconst response = await this.fetch<\n\t\t\t\tIIdentityVerifiableCredentialVerifyDocumentRequest,\n\t\t\t\tIIdentityVerifiableCredentialVerifyResponse\n\t\t\t>(\"/verifiable-credential/verify/document\", HttpMethod.POST, { body: credential });\n\n\t\t\treturn response.body;\n\t\t}\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(credential), credential);\n\n\t\tconst response = await this.fetch<\n\t\t\tIIdentityVerifiableCredentialVerifyRequest,\n\t\t\tIIdentityVerifiableCredentialVerifyResponse\n\t\t>(\"/verifiable-credential/verify\", HttpMethod.GET, { query: { jwt: credential } });\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Revoke verifiable credential.\n\t * @param issuerId The id of the document to update the revocation list for.\n\t * @param credentialIndex The revocation bitmap index to revoke.\n\t * @returns A promise that resolves when the credential has been revoked.\n\t */\n\tpublic async verifiableCredentialRevoke(\n\t\tissuerId: string,\n\t\tcredentialIndex: number\n\t): Promise<void> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(issuerId), issuerId);\n\t\tGuards.integer(IdentityRestClient.CLASS_NAME, nameof(credentialIndex), credentialIndex);\n\n\t\tawait this.fetch<IIdentityVerifiableCredentialRevokeRequest, INoContentResponse>(\n\t\t\t\"/:identity/verifiable-credential/revoke/:revocationIndex\",\n\t\t\tHttpMethod.GET,\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: issuerId,\n\t\t\t\t\trevocationIndex: credentialIndex.toString()\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Unrevoke verifiable credential.\n\t * @param issuerId The id of the document to update the revocation list for.\n\t * @param credentialIndex The revocation bitmap index to unrevoke.\n\t * @returns A promise that resolves when the credential has been unrevoked.\n\t */\n\tpublic async verifiableCredentialUnrevoke(\n\t\tissuerId: string,\n\t\tcredentialIndex: number\n\t): Promise<void> {\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(issuerId), issuerId);\n\t\tGuards.integer(IdentityRestClient.CLASS_NAME, nameof(credentialIndex), credentialIndex);\n\n\t\tawait this.fetch<IIdentityVerifiableCredentialUnrevokeRequest, INoContentResponse>(\n\t\t\t\"/:identity/verifiable-credential/unrevoke/:revocationIndex\",\n\t\t\tHttpMethod.GET,\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: issuerId,\n\t\t\t\t\trevocationIndex: credentialIndex.toString()\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Create a verifiable presentation from the supplied verifiable credentials.\n\t * @param verificationMethodId The method to associate with the presentation.\n\t * @param presentationId The id of the presentation.\n\t * @param contexts The contexts for the data stored in the verifiable credential.\n\t * @param types The types for the data stored in the verifiable credential.\n\t * @param verifiableCredentials The credentials to use for creating the presentation in jwt format.\n\t * @param options Additional options for creating the verifiable presentation.\n\t * @param options.expirationDate The date the verifiable presentation is valid until.\n\t * @param options.jwtHeaderFields Additional fields to include in the JWT header when creating the verifiable presentation in jwt format.\n\t * @param options.jwtPayloadFields Additional fields to include in the JWT payload when creating the verifiable presentation in jwt format.\n\t * @returns The created verifiable presentation and its token.\n\t * @throws NotFoundError if the id can not be resolved.\n\t */\n\tpublic async verifiablePresentationCreate(\n\t\tverificationMethodId: string,\n\t\tpresentationId: string | undefined,\n\t\tcontexts: IJsonLdContextDefinitionRoot | undefined,\n\t\ttypes: string | string[] | undefined,\n\t\tverifiableCredentials: (string | IDidVerifiableCredential)[],\n\t\toptions?: {\n\t\t\texpirationDate?: Date;\n\t\t\tjwtHeaderFields?: { [id: string]: string };\n\t\t\tjwtPayloadFields?: { [id: string]: string };\n\t\t}\n\t): Promise<{\n\t\tverifiablePresentation: IDidVerifiablePresentation;\n\t\tjwt: string;\n\t}> {\n\t\tGuards.stringValue(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\t\tif (Is.array(types)) {\n\t\t\tGuards.arrayValue(IdentityRestClient.CLASS_NAME, nameof(types), types);\n\t\t} else if (Is.string(types)) {\n\t\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(types), types);\n\t\t}\n\t\tGuards.arrayValue(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(verifiableCredentials),\n\t\t\tverifiableCredentials\n\t\t);\n\t\tif (!Is.undefined(options?.expirationDate)) {\n\t\t\tGuards.date(\n\t\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\t\tnameof(options.expirationDate),\n\t\t\t\toptions?.expirationDate\n\t\t\t);\n\t\t}\n\n\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\n\t\tconst response = await this.fetch<\n\t\t\tIIdentityVerifiablePresentationCreateRequest,\n\t\t\tIIdentityVerifiablePresentationCreateResponse\n\t\t>(\"/:identity/verifiable-presentation\", HttpMethod.POST, {\n\t\t\tpathParams: {\n\t\t\t\tidentity: idParts.id,\n\t\t\t\tverificationMethodId: idParts.fragment ?? \"\"\n\t\t\t},\n\t\t\tbody: {\n\t\t\t\tpresentationId,\n\t\t\t\tcontexts,\n\t\t\t\ttypes,\n\t\t\t\tverifiableCredentials,\n\t\t\t\texpirationDate: options?.expirationDate?.toISOString(),\n\t\t\t\tjwtHeaderFields: options?.jwtHeaderFields,\n\t\t\t\tjwtPayloadFields: options?.jwtPayloadFields\n\t\t\t}\n\t\t});\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Verify a verifiable presentation is valid.\n\t * @param presentation The presentation to verify.\n\t * @returns The presentation stored in the jwt and the revocation status.\n\t */\n\tpublic async verifiablePresentationVerify(\n\t\tpresentation: string | IDidVerifiablePresentation\n\t): Promise<{\n\t\trevoked: boolean;\n\t\tverifiablePresentation?: IDidVerifiablePresentation;\n\t\tissuers?: IDidDocument[];\n\t}> {\n\t\tif (Is.object(presentation)) {\n\t\t\tGuards.object<IDidVerifiablePresentation>(\n\t\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\t\tnameof(presentation),\n\t\t\t\tpresentation\n\t\t\t);\n\t\t\tconst response = await this.fetch<\n\t\t\t\tIIdentityVerifiablePresentationVerifyDocumentRequest,\n\t\t\t\tIIdentityVerifiablePresentationVerifyResponse\n\t\t\t>(\"/verifiable-presentation/verify/document\", HttpMethod.POST, { body: presentation });\n\n\t\t\treturn response.body;\n\t\t}\n\n\t\tGuards.stringValue(IdentityRestClient.CLASS_NAME, nameof(presentation), presentation);\n\n\t\tconst response = await this.fetch<\n\t\t\tIIdentityVerifiablePresentationVerifyRequest,\n\t\t\tIIdentityVerifiablePresentationVerifyResponse\n\t\t>(\"/verifiable-presentation/verify\", HttpMethod.POST, {\n\t\t\tquery: {\n\t\t\t\tjwt: presentation\n\t\t\t}\n\t\t});\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Create a proof for a document with the specified verification method.\n\t * @param verificationMethodId The verification method id to use.\n\t * @param proofType The type of proof to create.\n\t * @param unsecureDocument The unsecure document to create the proof for.\n\t * @returns The proof.\n\t */\n\tpublic async proofCreate(\n\t\tverificationMethodId: string,\n\t\tproofType: ProofTypes,\n\t\tunsecureDocument: IJsonLdNodeObject\n\t): Promise<IProof> {\n\t\tGuards.stringValue(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(verificationMethodId),\n\t\t\tverificationMethodId\n\t\t);\n\t\tGuards.arrayOneOf<ProofTypes>(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(proofType),\n\t\t\tproofType,\n\t\t\tObject.values(ProofTypes)\n\t\t);\n\t\tGuards.object<IJsonLdNodeObject>(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(unsecureDocument),\n\t\t\tunsecureDocument\n\t\t);\n\n\t\tconst idParts = DocumentHelper.parseId(verificationMethodId);\n\n\t\tconst response = await this.fetch<IIdentityProofCreateRequest, IIdentityProofCreateResponse>(\n\t\t\t\"/:identity/proof\",\n\t\t\tHttpMethod.POST,\n\t\t\t{\n\t\t\t\tpathParams: {\n\t\t\t\t\tidentity: idParts.id,\n\t\t\t\t\tverificationMethodId: idParts.fragment ?? \"\"\n\t\t\t\t},\n\t\t\t\tbody: {\n\t\t\t\t\tdocument: unsecureDocument,\n\t\t\t\t\tproofType\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\treturn response.body;\n\t}\n\n\t/**\n\t * Verify proof for a document with the specified verification method.\n\t * @param document The document to verify.\n\t * @param proof The proof to verify.\n\t * @returns True if the proof is verified.\n\t */\n\tpublic async proofVerify(document: IJsonLdNodeObject, proof: IProof): Promise<boolean> {\n\t\tGuards.object<IJsonLdNodeObject>(IdentityRestClient.CLASS_NAME, nameof(document), document);\n\t\tGuards.object<IProof>(IdentityRestClient.CLASS_NAME, nameof(proof), proof);\n\t\tGuards.stringValue(\n\t\t\tIdentityRestClient.CLASS_NAME,\n\t\t\tnameof(proof.verificationMethod),\n\t\t\tproof.verificationMethod\n\t\t);\n\n\t\tconst response = await this.fetch<IIdentityProofVerifyRequest, IIdentityProofVerifyResponse>(\n\t\t\t\"/proof/verify\",\n\t\t\tHttpMethod.POST,\n\t\t\t{\n\t\t\t\tbody: {\n\t\t\t\t\tdocument,\n\t\t\t\t\tproof\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\treturn response.body.verified;\n\t}\n}\n"]}
|
package/docs/changelog.md
CHANGED
|
@@ -1,5 +1,57 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.9.1-next.2](https://github.com/iotaledger/twin-identity/compare/identity-rest-client-v0.9.1-next.1...identity-rest-client-v0.9.1-next.2) (2026-06-29)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* enhanced rest testing ([#165](https://github.com/iotaledger/twin-identity/issues/165)) ([504e232](https://github.com/iotaledger/twin-identity/commit/504e232dae0bc981dc3ed9809e97b473d846b086))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* The following workspace dependencies were updated
|
|
14
|
+
* dependencies
|
|
15
|
+
* @twin.org/identity-models bumped from 0.9.1-next.1 to 0.9.1-next.2
|
|
16
|
+
|
|
17
|
+
## [0.9.1-next.1](https://github.com/iotaledger/twin-identity/compare/identity-rest-client-v0.9.1-next.0...identity-rest-client-v0.9.1-next.1) (2026-06-26)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* add addAlsoKnownAs to identity connector ([#117](https://github.com/iotaledger/twin-identity/issues/117)) ([aa27cff](https://github.com/iotaledger/twin-identity/commit/aa27cff88e61e7c8c6e32aeb437fb01c6ee9f57a))
|
|
23
|
+
* add context id features ([#62](https://github.com/iotaledger/twin-identity/issues/62)) ([e02ecca](https://github.com/iotaledger/twin-identity/commit/e02ecca9c45a849104bfbf7bc18a1f44e6eea8a1))
|
|
24
|
+
* add expiration date option to vc creation ([73e05e1](https://github.com/iotaledger/twin-identity/commit/73e05e1ae61112c7e056889969751f4ff82d9f29))
|
|
25
|
+
* add identity remove ([eebc13f](https://github.com/iotaledger/twin-identity/commit/eebc13f4c2cd994d2d9cce4da2128fb346c80ba7))
|
|
26
|
+
* add optional jwt payload and headers to vc and vp tokens ([#135](https://github.com/iotaledger/twin-identity/issues/135)) ([aa1de0f](https://github.com/iotaledger/twin-identity/commit/aa1de0f63be95ff62bae3c699aabc85ea93d74c2))
|
|
27
|
+
* add proof to vcs and verify vs documents ([#103](https://github.com/iotaledger/twin-identity/issues/103)) ([b60bf0c](https://github.com/iotaledger/twin-identity/commit/b60bf0cb7d453d67574c5c0e4f769e67cf7cd6d1))
|
|
28
|
+
* add validate-locales ([04d74b4](https://github.com/iotaledger/twin-identity/commit/04d74b4d1ebe42672e8ca75a7bdb8e3556afd0be))
|
|
29
|
+
* common connector tests ([4f9642c](https://github.com/iotaledger/twin-identity/commit/4f9642ceb09843870909fc6819bf69fb20ef952a))
|
|
30
|
+
* eslint migration to flat config ([fd6246d](https://github.com/iotaledger/twin-identity/commit/fd6246d566280b6d5d10a108eb1e92c4b510f2f2))
|
|
31
|
+
* expanded cli methods ([#121](https://github.com/iotaledger/twin-identity/issues/121)) ([80a52b7](https://github.com/iotaledger/twin-identity/commit/80a52b779237cd633d1f2813fa976585cef6e551))
|
|
32
|
+
* identity key separator use slash ([1319d0d](https://github.com/iotaledger/twin-identity/commit/1319d0d07164a36b3ec279e6421b8835ffefc3d3))
|
|
33
|
+
* remove auth generator ([#98](https://github.com/iotaledger/twin-identity/issues/98)) ([a8969e8](https://github.com/iotaledger/twin-identity/commit/a8969e85a5a2804abfc787406e2d12eb168dd978))
|
|
34
|
+
* separate vc verification routes with query and body ([ea7d891](https://github.com/iotaledger/twin-identity/commit/ea7d8910472150cf76dbd51e282625e70226d9b3))
|
|
35
|
+
* typescript 6 update ([e8806ad](https://github.com/iotaledger/twin-identity/commit/e8806ad6858c37be3c0f54c41cf654023773bef3))
|
|
36
|
+
* update framework core ([c824497](https://github.com/iotaledger/twin-identity/commit/c82449709af0215eb7af496cf687c93fb30b5ae0))
|
|
37
|
+
* use shared store mechanism ([#27](https://github.com/iotaledger/twin-identity/issues/27)) ([ce41f3f](https://github.com/iotaledger/twin-identity/commit/ce41f3fc3da1b206ec06da7ea5b2c968f788804d))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
### Bug Fixes
|
|
41
|
+
|
|
42
|
+
* Import path and bump version ([#21](https://github.com/iotaledger/twin-identity/issues/21)) ([ccea845](https://github.com/iotaledger/twin-identity/commit/ccea845bf32562267280bc1b3dde1c9af1a00360))
|
|
43
|
+
* Install sdk-wasm ([#20](https://github.com/iotaledger/twin-identity/issues/20)) ([75ec14e](https://github.com/iotaledger/twin-identity/commit/75ec14e072f8c219863a1c028a3b0783802086e9))
|
|
44
|
+
* query params force coercion ([d9347d2](https://github.com/iotaledger/twin-identity/commit/d9347d29d4a9cc58759f30f5d8526de864ea7522))
|
|
45
|
+
* stricter pathParam types ([a174cdf](https://github.com/iotaledger/twin-identity/commit/a174cdf0ca4272bee35fcf20ab7e8e4e17b8b6f4))
|
|
46
|
+
* use nameof for property guards ([9d571cf](https://github.com/iotaledger/twin-identity/commit/9d571cffae8838035fcbca8966795783013e1a99))
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
### Dependencies
|
|
50
|
+
|
|
51
|
+
* The following workspace dependencies were updated
|
|
52
|
+
* dependencies
|
|
53
|
+
* @twin.org/identity-models bumped from 0.9.1-next.0 to 0.9.1-next.1
|
|
54
|
+
|
|
3
55
|
## [0.9.0](https://github.com/iotaledger/twin-identity/compare/identity-rest-client-v0.9.0...identity-rest-client-v0.9.0) (2026-06-25)
|
|
4
56
|
|
|
5
57
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twin.org/identity-rest-client",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.1-next.2",
|
|
4
4
|
"description": "Client library for consuming identity REST endpoints through shared request and response contracts.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -14,15 +14,16 @@
|
|
|
14
14
|
"node": ">=20.0.0"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@twin.org/api-core": "
|
|
18
|
-
"@twin.org/api-models": "
|
|
19
|
-
"@twin.org/core": "
|
|
20
|
-
"@twin.org/data-core": "
|
|
21
|
-
"@twin.org/data-json-ld": "
|
|
22
|
-
"@twin.org/entity": "
|
|
23
|
-
"@twin.org/identity-models": "
|
|
24
|
-
"@twin.org/nameof": "
|
|
25
|
-
"@twin.org/standards-w3c-did": "
|
|
17
|
+
"@twin.org/api-core": "next",
|
|
18
|
+
"@twin.org/api-models": "next",
|
|
19
|
+
"@twin.org/core": "next",
|
|
20
|
+
"@twin.org/data-core": "next",
|
|
21
|
+
"@twin.org/data-json-ld": "next",
|
|
22
|
+
"@twin.org/entity": "next",
|
|
23
|
+
"@twin.org/identity-models": "0.9.1-next.2",
|
|
24
|
+
"@twin.org/nameof": "next",
|
|
25
|
+
"@twin.org/standards-w3c-did": "next",
|
|
26
|
+
"@twin.org/web": "next"
|
|
26
27
|
},
|
|
27
28
|
"main": "./dist/es/index.js",
|
|
28
29
|
"types": "./dist/types/index.d.ts",
|