@twin.org/immutable-proof-service 0.0.3-next.12 → 0.0.3-next.14

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.
@@ -26,9 +26,9 @@ let ImmutableProof = class ImmutableProof {
26
26
  */
27
27
  proofObjectIntegrity;
28
28
  /**
29
- * The verifiable storage id.
29
+ * The notarization id.
30
30
  */
31
- verifiableStorageId;
31
+ notarizationId;
32
32
  /**
33
33
  * The verifiable credential context.
34
34
  */
@@ -57,7 +57,7 @@ __decorate([
57
57
  __decorate([
58
58
  property({ type: "string", optional: true }),
59
59
  __metadata("design:type", String)
60
- ], ImmutableProof.prototype, "verifiableStorageId", void 0);
60
+ ], ImmutableProof.prototype, "notarizationId", void 0);
61
61
  __decorate([
62
62
  property({ type: "string", optional: true }),
63
63
  __metadata("design:type", Object)
@@ -1 +1 @@
1
- {"version":3,"file":"immutableProof.js","sourceRoot":"","sources":["../../../src/entities/immutableProof.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGnE;;GAEG;AAEI,IAAM,cAAc,GAApB,MAAM,cAAc;IAC1B;;OAEG;IAEI,EAAE,CAAU;IAEnB;;OAEG;IAEI,cAAc,CAAU;IAE/B;;OAEG;IAEI,WAAW,CAAU;IAE5B;;OAEG;IAEI,aAAa,CAAU;IAE9B;;OAEG;IAEI,oBAAoB,CAAU;IAErC;;OAEG;IAEI,mBAAmB,CAAU;IAEpC;;OAEG;IAEI,SAAS,CAAmE;CACnF,CAAA;AArCO;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;0CAC3B;AAMZ;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;sDACE;AAMxB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE,CAAC;;mDAC/D;AAMrB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACf;AAMvB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;4DACQ;AAM9B;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2DACT;AAM7B;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACsC;AAzCvE,cAAc;IAD1B,MAAM,EAAE;GACI,cAAc,CA0C1B","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { entity, property, SortDirection } from \"@twin.org/entity\";\nimport type { DidContexts } from \"@twin.org/standards-w3c-did\";\n\n/**\n * Class describing the immutable proof.\n */\n@entity()\nexport class ImmutableProof {\n\t/**\n\t * The id of the proof.\n\t */\n\t@property({ type: \"string\", isPrimary: true })\n\tpublic id!: string;\n\n\t/**\n\t * The organization id.\n\t */\n\t@property({ type: \"string\" })\n\tpublic organizationId!: string;\n\n\t/**\n\t * The date/time of when the proof was created.\n\t */\n\t@property({ type: \"string\", format: \"date-time\", sortDirection: SortDirection.Descending })\n\tpublic dateCreated!: string;\n\n\t/**\n\t * The associated id for the item.\n\t */\n\t@property({ type: \"string\", optional: true })\n\tpublic proofObjectId?: string;\n\n\t/**\n\t * The associated integrity for the item.\n\t */\n\t@property({ type: \"string\" })\n\tpublic proofObjectIntegrity!: string;\n\n\t/**\n\t * The verifiable storage id.\n\t */\n\t@property({ type: \"string\", optional: true })\n\tpublic verifiableStorageId?: string;\n\n\t/**\n\t * The verifiable credential context.\n\t */\n\t@property({ type: \"string\", optional: true })\n\tpublic vcContext?: typeof DidContexts.ContextVCv1 | typeof DidContexts.ContextVCv2;\n}\n"]}
1
+ {"version":3,"file":"immutableProof.js","sourceRoot":"","sources":["../../../src/entities/immutableProof.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGnE;;GAEG;AAEI,IAAM,cAAc,GAApB,MAAM,cAAc;IAC1B;;OAEG;IAEI,EAAE,CAAU;IAEnB;;OAEG;IAEI,cAAc,CAAU;IAE/B;;OAEG;IAEI,WAAW,CAAU;IAE5B;;OAEG;IAEI,aAAa,CAAU;IAE9B;;OAEG;IAEI,oBAAoB,CAAU;IAErC;;OAEG;IAEI,cAAc,CAAU;IAE/B;;OAEG;IAEI,SAAS,CAAmE;CACnF,CAAA;AArCO;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;0CAC3B;AAMZ;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;sDACE;AAMxB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE,CAAC;;mDAC/D;AAMrB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACf;AAMvB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;4DACQ;AAM9B;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sDACd;AAMxB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACsC;AAzCvE,cAAc;IAD1B,MAAM,EAAE;GACI,cAAc,CA0C1B","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { entity, property, SortDirection } from \"@twin.org/entity\";\nimport type { DidContexts } from \"@twin.org/standards-w3c-did\";\n\n/**\n * Class describing the immutable proof.\n */\n@entity()\nexport class ImmutableProof {\n\t/**\n\t * The id of the proof.\n\t */\n\t@property({ type: \"string\", isPrimary: true })\n\tpublic id!: string;\n\n\t/**\n\t * The organization id.\n\t */\n\t@property({ type: \"string\" })\n\tpublic organizationId!: string;\n\n\t/**\n\t * The date/time of when the proof was created.\n\t */\n\t@property({ type: \"string\", format: \"date-time\", sortDirection: SortDirection.Descending })\n\tpublic dateCreated!: string;\n\n\t/**\n\t * The associated id for the item.\n\t */\n\t@property({ type: \"string\", optional: true })\n\tpublic proofObjectId?: string;\n\n\t/**\n\t * The associated integrity for the item.\n\t */\n\t@property({ type: \"string\" })\n\tpublic proofObjectIntegrity!: string;\n\n\t/**\n\t * The notarization id.\n\t */\n\t@property({ type: \"string\", optional: true })\n\tpublic notarizationId?: string;\n\n\t/**\n\t * The verifiable credential context.\n\t */\n\t@property({ type: \"string\", optional: true })\n\tpublic vcContext?: typeof DidContexts.ContextVCv1 | typeof DidContexts.ContextVCv2;\n}\n"]}
@@ -115,11 +115,7 @@ export function generateRestRoutesImmutableProof(baseRouteName, componentName) {
115
115
  proofPurpose: "assertionMethod",
116
116
  proofValue: "7DdiPPYtxLjCD3wA1po2rv...",
117
117
  verificationMethod: "did:iota:testnet:0xcb07cabaa2f23b7e53d8cdc4228efb351ebb270554d13bc382e4f94ca8d3136b#immutable-proof-assertion",
118
- verifiableStorageId: "verifiable-storage:1234567890",
119
- immutableReceipt: {
120
- id: "immutable-receipt:1234567890",
121
- type: "ImmutableReceipt"
122
- }
118
+ notarizationId: "notarization:iota:0xabcdef1234567890"
123
119
  }
124
120
  }
125
121
  }
@@ -155,11 +151,7 @@ export function generateRestRoutesImmutableProof(baseRouteName, componentName) {
155
151
  proofPurpose: "assertionMethod",
156
152
  proofValue: "7DdiPPYtxLjCD3wA1po2rv...",
157
153
  verificationMethod: "did:iota:testnet:0xcb07cabaa2f23b7e53d8cdc4228efb351ebb270554d13bc382e4f94ca8d3136b#immutable-proof-assertion",
158
- verifiableStorageId: "verifiable-storage:1234567890",
159
- immutableReceipt: {
160
- id: "immutable-receipt:1234567890",
161
- type: "ImmutableReceipt"
162
- }
154
+ notarizationId: "notarization:iota:0xabcdef1234567890"
163
155
  }
164
156
  }
165
157
  }
@@ -241,7 +233,7 @@ export async function immutableProofCreate(httpRequestContext, componentName, re
241
233
  Guards.object(ROUTES_SOURCE, "request", request);
242
234
  Guards.object(ROUTES_SOURCE, "request.body.document", request.body.document);
243
235
  const component = ComponentFactory.get(componentName);
244
- const result = await component.create(request.body.document);
236
+ const result = await component.create(request.body.document, request.body.options);
245
237
  return {
246
238
  statusCode: HttpStatusCode.created,
247
239
  headers: {
@@ -1 +1 @@
1
- {"version":3,"file":"immutableProofRoutes.js","sourceRoot":"","sources":["../../src/immutableProofRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type {\n\tICreatedResponse,\n\tIHttpRequestContext,\n\tINotFoundResponse,\n\tIRestRoute,\n\tITag\n} from \"@twin.org/api-models\";\nimport { ComponentFactory, Guards } from \"@twin.org/core\";\nimport {\n\ttype IImmutableProofComponent,\n\ttype IImmutableProofCreateRequest,\n\ttype IImmutableProofGetRequest,\n\ttype IImmutableProofGetResponse,\n\ttype IImmutableProofVerifyRequest,\n\ttype IImmutableProofVerifyResponse,\n\tImmutableProofContexts,\n\tImmutableProofFailure,\n\tImmutableProofTypes\n} from \"@twin.org/immutable-proof-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport {\n\tDidContexts,\n\tDidCryptoSuites,\n\tProofTypes,\n\tDidTypes,\n\ttype IProof\n} from \"@twin.org/standards-w3c-did\";\nimport { HeaderTypes, HttpStatusCode, MimeTypes } from \"@twin.org/web\";\n\n/**\n * The source used when communicating about these routes.\n */\nconst ROUTES_SOURCE = \"immutableProofRoutes\";\n\n/**\n * The tag to associate with the routes.\n */\nexport const tagsImmutableProof: ITag[] = [\n\t{\n\t\tname: \"Immutable Proof\",\n\t\tdescription: \"Endpoints which are modelled to access an immutable proof contract.\"\n\t}\n];\n\n/**\n * The REST routes for immutable proof.\n * @param baseRouteName Prefix to prepend to the paths.\n * @param componentName The name of the component to use in the routes stored in the ComponentFactory.\n * @returns The generated routes.\n */\nexport function generateRestRoutesImmutableProof(\n\tbaseRouteName: string,\n\tcomponentName: string\n): IRestRoute[] {\n\tconst createRoute: IRestRoute<IImmutableProofCreateRequest, ICreatedResponse> = {\n\t\toperationId: \"immutableProofCreate\",\n\t\tsummary: \"Create a proof\",\n\t\ttag: tagsImmutableProof[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\timmutableProofCreate(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IImmutableProofCreateRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"immutableProofCreateRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\ttype: \"Person\",\n\t\t\t\t\t\t\t\tname: \"John Smith\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<ICreatedResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"immutableProofCreateResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tstatusCode: HttpStatusCode.created,\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t[HeaderTypes.Location]: \"test%3A1234567890\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<INotFoundResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\tconst getRoute: IRestRoute<IImmutableProofGetRequest, IImmutableProofGetResponse> = {\n\t\toperationId: \"immutableProofGet\",\n\t\tsummary: \"Get a proof\",\n\t\ttag: tagsImmutableProof[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/:id`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\timmutableProofGet(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IImmutableProofGetRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"immutableProofGetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t[HeaderTypes.Accept]: MimeTypes.Json\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"immutable-proof:1234567890\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IImmutableProofGetResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"immutableProofGetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\tDidContexts.ContextVCv1,\n\t\t\t\t\t\t\t\t\tImmutableProofContexts.Context,\n\t\t\t\t\t\t\t\t\tImmutableProofContexts.ContextCommon\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttype: [DidTypes.VerifiableCredential, ImmutableProofTypes.ImmutableProof],\n\t\t\t\t\t\t\t\tid: \"immutable-proof:1234567890\",\n\t\t\t\t\t\t\t\tcredentialSubject: {\n\t\t\t\t\t\t\t\t\tid: \"ais:1234567890\",\n\t\t\t\t\t\t\t\t\tproofIntegrity: \"EAOKyDN0mYQbBh91eMdVeroxQx1H4GfnRbmt6n/2L/Y=\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\t\t\ttype: ProofTypes.DataIntegrityProof,\n\t\t\t\t\t\t\t\t\tcryptosuite: DidCryptoSuites.EdDSAJcs2022,\n\t\t\t\t\t\t\t\t\tcreated: \"2024-08-22T11:56:56.272Z\",\n\t\t\t\t\t\t\t\t\tproofPurpose: \"assertionMethod\",\n\t\t\t\t\t\t\t\t\tproofValue: \"7DdiPPYtxLjCD3wA1po2rv...\",\n\t\t\t\t\t\t\t\t\tverificationMethod:\n\t\t\t\t\t\t\t\t\t\t\"did:iota:testnet:0xcb07cabaa2f23b7e53d8cdc4228efb351ebb270554d13bc382e4f94ca8d3136b#immutable-proof-assertion\",\n\t\t\t\t\t\t\t\t\tverifiableStorageId: \"verifiable-storage:1234567890\",\n\t\t\t\t\t\t\t\t\timmutableReceipt: {\n\t\t\t\t\t\t\t\t\t\tid: \"immutable-receipt:1234567890\",\n\t\t\t\t\t\t\t\t\t\ttype: \"ImmutableReceipt\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} as IProof\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<IImmutableProofGetResponse>(),\n\t\t\t\tmimeType: MimeTypes.JsonLd,\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"immutableProofJsonLdGetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t[HeaderTypes.ContentType]: MimeTypes.JsonLd\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\tDidContexts.ContextVCv1,\n\t\t\t\t\t\t\t\t\tImmutableProofContexts.Context,\n\t\t\t\t\t\t\t\t\tImmutableProofContexts.ContextCommon\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttype: [DidTypes.VerifiableCredential, ImmutableProofTypes.ImmutableProof],\n\t\t\t\t\t\t\t\tid: \"immutable-proof:1234567890\",\n\t\t\t\t\t\t\t\tcredentialSubject: {\n\t\t\t\t\t\t\t\t\tid: \"ais:1234567890\",\n\t\t\t\t\t\t\t\t\tproofIntegrity: \"EAOKyDN0mYQbBh91eMdVeroxQx1H4GfnRbmt6n/2L/Y=\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\t\t\ttype: ProofTypes.DataIntegrityProof,\n\t\t\t\t\t\t\t\t\tcryptosuite: DidCryptoSuites.EdDSAJcs2022,\n\t\t\t\t\t\t\t\t\tcreated: \"2024-08-22T11:56:56.272Z\",\n\t\t\t\t\t\t\t\t\tproofPurpose: \"assertionMethod\",\n\t\t\t\t\t\t\t\t\tproofValue: \"7DdiPPYtxLjCD3wA1po2rv...\",\n\t\t\t\t\t\t\t\t\tverificationMethod:\n\t\t\t\t\t\t\t\t\t\t\"did:iota:testnet:0xcb07cabaa2f23b7e53d8cdc4228efb351ebb270554d13bc382e4f94ca8d3136b#immutable-proof-assertion\",\n\t\t\t\t\t\t\t\t\tverifiableStorageId: \"verifiable-storage:1234567890\",\n\t\t\t\t\t\t\t\t\timmutableReceipt: {\n\t\t\t\t\t\t\t\t\t\tid: \"immutable-receipt:1234567890\",\n\t\t\t\t\t\t\t\t\t\ttype: \"ImmutableReceipt\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} as IProof\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<INotFoundResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\tconst verifyRoute: IRestRoute<IImmutableProofVerifyRequest, IImmutableProofVerifyResponse> = {\n\t\toperationId: \"immutableProofVerify\",\n\t\tsummary: \"Verify a proof\",\n\t\ttag: tagsImmutableProof[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/:id/verify`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\timmutableProofVerify(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IImmutableProofVerifyRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"immutableProofVerifyRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"immutable-proof:1234567890\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IImmutableProofVerifyResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"immutableProofVerifyResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": ImmutableProofContexts.Context,\n\t\t\t\t\t\t\t\ttype: ImmutableProofTypes.ImmutableProofVerification,\n\t\t\t\t\t\t\t\tverified: true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<IImmutableProofVerifyResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"immutableProofVerifyResponseFailExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": ImmutableProofContexts.Context,\n\t\t\t\t\t\t\t\ttype: ImmutableProofTypes.ImmutableProofVerification,\n\t\t\t\t\t\t\t\tverified: false,\n\t\t\t\t\t\t\t\tfailure: ImmutableProofFailure.VerificationFailure\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<INotFoundResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\treturn [createRoute, getRoute, verifyRoute];\n}\n\n/**\n * Create a proof.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function immutableProofCreate(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IImmutableProofCreateRequest\n): Promise<ICreatedResponse> {\n\tGuards.object<IImmutableProofCreateRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object(ROUTES_SOURCE, nameof(request.body.document), request.body.document);\n\n\tconst component = ComponentFactory.get<IImmutableProofComponent>(componentName);\n\tconst result = await component.create(request.body.document);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.created,\n\t\theaders: {\n\t\t\t[HeaderTypes.Location]: result\n\t\t}\n\t};\n}\n\n/**\n * Get the proof.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function immutableProofGet(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IImmutableProofGetRequest\n): Promise<IImmutableProofGetResponse> {\n\tGuards.object<IImmutableProofGetRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IImmutableProofGetRequest[\"pathParams\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.pathParams),\n\t\trequest.pathParams\n\t);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.pathParams.id), request.pathParams.id);\n\n\tconst mimeType = request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? \"jsonld\" : \"json\";\n\n\tconst component = ComponentFactory.get<IImmutableProofComponent>(componentName);\n\tconst result = await component.get(request.pathParams.id);\n\n\treturn {\n\t\theaders: {\n\t\t\t[HeaderTypes.ContentType]: mimeType === \"json\" ? MimeTypes.Json : MimeTypes.JsonLd\n\t\t},\n\t\tbody: result\n\t};\n}\n\n/**\n * Verify the proof.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function immutableProofVerify(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IImmutableProofVerifyRequest\n): Promise<IImmutableProofVerifyResponse> {\n\tGuards.object<IImmutableProofVerifyRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IImmutableProofVerifyRequest[\"pathParams\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.pathParams),\n\t\trequest.pathParams\n\t);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.pathParams.id), request.pathParams.id);\n\n\tconst mimeType = request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? \"jsonld\" : \"json\";\n\n\tconst component = ComponentFactory.get<IImmutableProofComponent>(componentName);\n\tconst result = await component.verify(request.pathParams.id);\n\n\treturn {\n\t\theaders: {\n\t\t\t[HeaderTypes.ContentType]: mimeType === \"json\" ? MimeTypes.Json : MimeTypes.JsonLd\n\t\t},\n\t\tbody: result\n\t};\n}\n"]}
1
+ {"version":3,"file":"immutableProofRoutes.js","sourceRoot":"","sources":["../../src/immutableProofRoutes.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAON,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACN,WAAW,EACX,eAAe,EACf,UAAU,EACV,QAAQ,EAER,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEvE;;GAEG;AACH,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAW;IACzC;QACC,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,qEAAqE;KAClF;CACD,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAC/C,aAAqB,EACrB,aAAqB;IAErB,MAAM,WAAW,GAA+D;QAC/E,WAAW,EAAE,sBAAsB;QACnC,OAAO,EAAE,gBAAgB;QACzB,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI;QAC/B,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,GAAG,aAAa,GAAG;QACzB,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAC9C,oBAAoB,CAAC,kBAAkB,EAAE,aAAa,EAAE,OAAO,CAAC;QACjE,WAAW,EAAE;YACZ,IAAI,gCAAwC;YAC5C,QAAQ,EAAE;gBACT;oBACC,EAAE,EAAE,oCAAoC;oBACxC,OAAO,EAAE;wBACR,IAAI,EAAE;4BACL,QAAQ,EAAE;gCACT,UAAU,EAAE,oBAAoB;gCAChC,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,YAAY;6BAClB;yBACD;qBACD;iBACD;aACD;SACD;QACD,YAAY,EAAE;YACb;gBACC,IAAI,oBAA4B;gBAChC,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,qCAAqC;wBACzC,QAAQ,EAAE;4BACT,UAAU,EAAE,cAAc,CAAC,OAAO;4BAClC,OAAO,EAAE;gCACR,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,mBAAmB;6BAC3C;yBACD;qBACD;iBACD;aACD;YACD;gBACC,IAAI,qBAA6B;aACjC;SACD;KACD,CAAC;IAEF,MAAM,QAAQ,GAAsE;QACnF,WAAW,EAAE,mBAAmB;QAChC,OAAO,EAAE,aAAa;QACtB,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI;QAC/B,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG,aAAa,MAAM;QAC5B,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAC9C,iBAAiB,CAAC,kBAAkB,EAAE,aAAa,EAAE,OAAO,CAAC;QAC9D,WAAW,EAAE;YACZ,IAAI,6BAAqC;YACzC,QAAQ,EAAE;gBACT;oBACC,EAAE,EAAE,iCAAiC;oBACrC,OAAO,EAAE;wBACR,OAAO,EAAE;4BACR,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,IAAI;yBACpC;wBACD,UAAU,EAAE;4BACX,EAAE,EAAE,4BAA4B;yBAChC;qBACD;iBACD;aACD;SACD;QACD,YAAY,EAAE;YACb;gBACC,IAAI,8BAAsC;gBAC1C,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,kCAAkC;wBACtC,QAAQ,EAAE;4BACT,IAAI,EAAE;gCACL,UAAU,EAAE;oCACX,WAAW,CAAC,WAAW;oCACvB,sBAAsB,CAAC,OAAO;oCAC9B,sBAAsB,CAAC,aAAa;iCACpC;gCACD,IAAI,EAAE,CAAC,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,cAAc,CAAC;gCACzE,EAAE,EAAE,4BAA4B;gCAChC,iBAAiB,EAAE;oCAClB,EAAE,EAAE,gBAAgB;oCACpB,cAAc,EAAE,8CAA8C;iCAC9D;gCACD,KAAK,EAAE;oCACN,IAAI,EAAE,UAAU,CAAC,kBAAkB;oCACnC,WAAW,EAAE,eAAe,CAAC,YAAY;oCACzC,OAAO,EAAE,0BAA0B;oCACnC,YAAY,EAAE,iBAAiB;oCAC/B,UAAU,EAAE,2BAA2B;oCACvC,kBAAkB,EACjB,+GAA+G;oCAChH,cAAc,EAAE,sCAAsC;iCAC5C;6BACX;yBACD;qBACD;iBACD;aACD;YACD;gBACC,IAAI,8BAAsC;gBAC1C,QAAQ,EAAE,SAAS,CAAC,MAAM;gBAC1B,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,wCAAwC;wBAC5C,QAAQ,EAAE;4BACT,OAAO,EAAE;gCACR,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM;6BAC3C;4BACD,IAAI,EAAE;gCACL,UAAU,EAAE;oCACX,WAAW,CAAC,WAAW;oCACvB,sBAAsB,CAAC,OAAO;oCAC9B,sBAAsB,CAAC,aAAa;iCACpC;gCACD,IAAI,EAAE,CAAC,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,cAAc,CAAC;gCACzE,EAAE,EAAE,4BAA4B;gCAChC,iBAAiB,EAAE;oCAClB,EAAE,EAAE,gBAAgB;oCACpB,cAAc,EAAE,8CAA8C;iCAC9D;gCACD,KAAK,EAAE;oCACN,IAAI,EAAE,UAAU,CAAC,kBAAkB;oCACnC,WAAW,EAAE,eAAe,CAAC,YAAY;oCACzC,OAAO,EAAE,0BAA0B;oCACnC,YAAY,EAAE,iBAAiB;oCAC/B,UAAU,EAAE,2BAA2B;oCACvC,kBAAkB,EACjB,+GAA+G;oCAChH,cAAc,EAAE,sCAAsC;iCAC5C;6BACX;yBACD;qBACD;iBACD;aACD;YACD;gBACC,IAAI,qBAA6B;aACjC;SACD;KACD,CAAC;IAEF,MAAM,WAAW,GAA4E;QAC5F,WAAW,EAAE,sBAAsB;QACnC,OAAO,EAAE,gBAAgB;QACzB,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI;QAC/B,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG,aAAa,aAAa;QACnC,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAC9C,oBAAoB,CAAC,kBAAkB,EAAE,aAAa,EAAE,OAAO,CAAC;QACjE,WAAW,EAAE;YACZ,IAAI,gCAAwC;YAC5C,QAAQ,EAAE;gBACT;oBACC,EAAE,EAAE,oCAAoC;oBACxC,OAAO,EAAE;wBACR,UAAU,EAAE;4BACX,EAAE,EAAE,4BAA4B;yBAChC;qBACD;iBACD;aACD;SACD;QACD,YAAY,EAAE;YACb;gBACC,IAAI,iCAAyC;gBAC7C,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,qCAAqC;wBACzC,QAAQ,EAAE;4BACT,IAAI,EAAE;gCACL,UAAU,EAAE,sBAAsB,CAAC,OAAO;gCAC1C,IAAI,EAAE,mBAAmB,CAAC,0BAA0B;gCACpD,QAAQ,EAAE,IAAI;6BACd;yBACD;qBACD;iBACD;aACD;YACD;gBACC,IAAI,iCAAyC;gBAC7C,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,yCAAyC;wBAC7C,QAAQ,EAAE;4BACT,IAAI,EAAE;gCACL,UAAU,EAAE,sBAAsB,CAAC,OAAO;gCAC1C,IAAI,EAAE,mBAAmB,CAAC,0BAA0B;gCACpD,QAAQ,EAAE,KAAK;gCACf,OAAO,EAAE,qBAAqB,CAAC,mBAAmB;6BAClD;yBACD;qBACD;iBACD;aACD;YACD;gBACC,IAAI,qBAA6B;aACjC;SACD;KACD,CAAC;IAEF,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,kBAAuC,EACvC,aAAqB,EACrB,OAAqC;IAErC,MAAM,CAAC,MAAM,CAA+B,aAAa,aAAmB,OAAO,CAAC,CAAC;IACrF,MAAM,CAAC,MAAM,CAAC,aAAa,2BAAiC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEnF,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAA2B,aAAa,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEnF,OAAO;QACN,UAAU,EAAE,cAAc,CAAC,OAAO;QAClC,OAAO,EAAE;YACR,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM;SAC9B;KACD,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,kBAAuC,EACvC,aAAqB,EACrB,OAAkC;IAElC,MAAM,CAAC,MAAM,CAA4B,aAAa,aAAmB,OAAO,CAAC,CAAC;IAClF,MAAM,CAAC,MAAM,CACZ,aAAa,wBAEb,OAAO,CAAC,UAAU,CAClB,CAAC;IACF,MAAM,CAAC,WAAW,CAAC,aAAa,2BAAiC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAExF,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAEhG,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAA2B,aAAa,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAE1D,OAAO;QACN,OAAO,EAAE;YACR,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;SAClF;QACD,IAAI,EAAE,MAAM;KACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,kBAAuC,EACvC,aAAqB,EACrB,OAAqC;IAErC,MAAM,CAAC,MAAM,CAA+B,aAAa,aAAmB,OAAO,CAAC,CAAC;IACrF,MAAM,CAAC,MAAM,CACZ,aAAa,wBAEb,OAAO,CAAC,UAAU,CAClB,CAAC;IACF,MAAM,CAAC,WAAW,CAAC,aAAa,2BAAiC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAExF,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAEhG,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAA2B,aAAa,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAE7D,OAAO;QACN,OAAO,EAAE;YACR,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;SAClF;QACD,IAAI,EAAE,MAAM;KACZ,CAAC;AACH,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type {\n\tICreatedResponse,\n\tIHttpRequestContext,\n\tINotFoundResponse,\n\tIRestRoute,\n\tITag\n} from \"@twin.org/api-models\";\nimport { ComponentFactory, Guards } from \"@twin.org/core\";\nimport {\n\ttype IImmutableProofComponent,\n\ttype IImmutableProofCreateRequest,\n\ttype IImmutableProofGetRequest,\n\ttype IImmutableProofGetResponse,\n\ttype IImmutableProofVerifyRequest,\n\ttype IImmutableProofVerifyResponse,\n\tImmutableProofContexts,\n\tImmutableProofFailure,\n\tImmutableProofTypes\n} from \"@twin.org/immutable-proof-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport {\n\tDidContexts,\n\tDidCryptoSuites,\n\tProofTypes,\n\tDidTypes,\n\ttype IProof\n} from \"@twin.org/standards-w3c-did\";\nimport { HeaderTypes, HttpStatusCode, MimeTypes } from \"@twin.org/web\";\n\n/**\n * The source used when communicating about these routes.\n */\nconst ROUTES_SOURCE = \"immutableProofRoutes\";\n\n/**\n * The tag to associate with the routes.\n */\nexport const tagsImmutableProof: ITag[] = [\n\t{\n\t\tname: \"Immutable Proof\",\n\t\tdescription: \"Endpoints which are modelled to access an immutable proof contract.\"\n\t}\n];\n\n/**\n * The REST routes for immutable proof.\n * @param baseRouteName Prefix to prepend to the paths.\n * @param componentName The name of the component to use in the routes stored in the ComponentFactory.\n * @returns The generated routes.\n */\nexport function generateRestRoutesImmutableProof(\n\tbaseRouteName: string,\n\tcomponentName: string\n): IRestRoute[] {\n\tconst createRoute: IRestRoute<IImmutableProofCreateRequest, ICreatedResponse> = {\n\t\toperationId: \"immutableProofCreate\",\n\t\tsummary: \"Create a proof\",\n\t\ttag: tagsImmutableProof[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\timmutableProofCreate(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IImmutableProofCreateRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"immutableProofCreateRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\ttype: \"Person\",\n\t\t\t\t\t\t\t\tname: \"John Smith\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<ICreatedResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"immutableProofCreateResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tstatusCode: HttpStatusCode.created,\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t[HeaderTypes.Location]: \"test%3A1234567890\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<INotFoundResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\tconst getRoute: IRestRoute<IImmutableProofGetRequest, IImmutableProofGetResponse> = {\n\t\toperationId: \"immutableProofGet\",\n\t\tsummary: \"Get a proof\",\n\t\ttag: tagsImmutableProof[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/:id`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\timmutableProofGet(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IImmutableProofGetRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"immutableProofGetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t[HeaderTypes.Accept]: MimeTypes.Json\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"immutable-proof:1234567890\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IImmutableProofGetResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"immutableProofGetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\tDidContexts.ContextVCv1,\n\t\t\t\t\t\t\t\t\tImmutableProofContexts.Context,\n\t\t\t\t\t\t\t\t\tImmutableProofContexts.ContextCommon\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttype: [DidTypes.VerifiableCredential, ImmutableProofTypes.ImmutableProof],\n\t\t\t\t\t\t\t\tid: \"immutable-proof:1234567890\",\n\t\t\t\t\t\t\t\tcredentialSubject: {\n\t\t\t\t\t\t\t\t\tid: \"ais:1234567890\",\n\t\t\t\t\t\t\t\t\tproofIntegrity: \"EAOKyDN0mYQbBh91eMdVeroxQx1H4GfnRbmt6n/2L/Y=\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\t\t\ttype: ProofTypes.DataIntegrityProof,\n\t\t\t\t\t\t\t\t\tcryptosuite: DidCryptoSuites.EdDSAJcs2022,\n\t\t\t\t\t\t\t\t\tcreated: \"2024-08-22T11:56:56.272Z\",\n\t\t\t\t\t\t\t\t\tproofPurpose: \"assertionMethod\",\n\t\t\t\t\t\t\t\t\tproofValue: \"7DdiPPYtxLjCD3wA1po2rv...\",\n\t\t\t\t\t\t\t\t\tverificationMethod:\n\t\t\t\t\t\t\t\t\t\t\"did:iota:testnet:0xcb07cabaa2f23b7e53d8cdc4228efb351ebb270554d13bc382e4f94ca8d3136b#immutable-proof-assertion\",\n\t\t\t\t\t\t\t\t\tnotarizationId: \"notarization:iota:0xabcdef1234567890\"\n\t\t\t\t\t\t\t\t} as IProof\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<IImmutableProofGetResponse>(),\n\t\t\t\tmimeType: MimeTypes.JsonLd,\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"immutableProofJsonLdGetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t[HeaderTypes.ContentType]: MimeTypes.JsonLd\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\tDidContexts.ContextVCv1,\n\t\t\t\t\t\t\t\t\tImmutableProofContexts.Context,\n\t\t\t\t\t\t\t\t\tImmutableProofContexts.ContextCommon\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttype: [DidTypes.VerifiableCredential, ImmutableProofTypes.ImmutableProof],\n\t\t\t\t\t\t\t\tid: \"immutable-proof:1234567890\",\n\t\t\t\t\t\t\t\tcredentialSubject: {\n\t\t\t\t\t\t\t\t\tid: \"ais:1234567890\",\n\t\t\t\t\t\t\t\t\tproofIntegrity: \"EAOKyDN0mYQbBh91eMdVeroxQx1H4GfnRbmt6n/2L/Y=\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\t\t\ttype: ProofTypes.DataIntegrityProof,\n\t\t\t\t\t\t\t\t\tcryptosuite: DidCryptoSuites.EdDSAJcs2022,\n\t\t\t\t\t\t\t\t\tcreated: \"2024-08-22T11:56:56.272Z\",\n\t\t\t\t\t\t\t\t\tproofPurpose: \"assertionMethod\",\n\t\t\t\t\t\t\t\t\tproofValue: \"7DdiPPYtxLjCD3wA1po2rv...\",\n\t\t\t\t\t\t\t\t\tverificationMethod:\n\t\t\t\t\t\t\t\t\t\t\"did:iota:testnet:0xcb07cabaa2f23b7e53d8cdc4228efb351ebb270554d13bc382e4f94ca8d3136b#immutable-proof-assertion\",\n\t\t\t\t\t\t\t\t\tnotarizationId: \"notarization:iota:0xabcdef1234567890\"\n\t\t\t\t\t\t\t\t} as IProof\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<INotFoundResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\tconst verifyRoute: IRestRoute<IImmutableProofVerifyRequest, IImmutableProofVerifyResponse> = {\n\t\toperationId: \"immutableProofVerify\",\n\t\tsummary: \"Verify a proof\",\n\t\ttag: tagsImmutableProof[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/:id/verify`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\timmutableProofVerify(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IImmutableProofVerifyRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"immutableProofVerifyRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"immutable-proof:1234567890\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IImmutableProofVerifyResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"immutableProofVerifyResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": ImmutableProofContexts.Context,\n\t\t\t\t\t\t\t\ttype: ImmutableProofTypes.ImmutableProofVerification,\n\t\t\t\t\t\t\t\tverified: true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<IImmutableProofVerifyResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"immutableProofVerifyResponseFailExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": ImmutableProofContexts.Context,\n\t\t\t\t\t\t\t\ttype: ImmutableProofTypes.ImmutableProofVerification,\n\t\t\t\t\t\t\t\tverified: false,\n\t\t\t\t\t\t\t\tfailure: ImmutableProofFailure.VerificationFailure\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<INotFoundResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\treturn [createRoute, getRoute, verifyRoute];\n}\n\n/**\n * Create a proof.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function immutableProofCreate(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IImmutableProofCreateRequest\n): Promise<ICreatedResponse> {\n\tGuards.object<IImmutableProofCreateRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object(ROUTES_SOURCE, nameof(request.body.document), request.body.document);\n\n\tconst component = ComponentFactory.get<IImmutableProofComponent>(componentName);\n\tconst result = await component.create(request.body.document, request.body.options);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.created,\n\t\theaders: {\n\t\t\t[HeaderTypes.Location]: result\n\t\t}\n\t};\n}\n\n/**\n * Get the proof.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function immutableProofGet(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IImmutableProofGetRequest\n): Promise<IImmutableProofGetResponse> {\n\tGuards.object<IImmutableProofGetRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IImmutableProofGetRequest[\"pathParams\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.pathParams),\n\t\trequest.pathParams\n\t);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.pathParams.id), request.pathParams.id);\n\n\tconst mimeType = request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? \"jsonld\" : \"json\";\n\n\tconst component = ComponentFactory.get<IImmutableProofComponent>(componentName);\n\tconst result = await component.get(request.pathParams.id);\n\n\treturn {\n\t\theaders: {\n\t\t\t[HeaderTypes.ContentType]: mimeType === \"json\" ? MimeTypes.Json : MimeTypes.JsonLd\n\t\t},\n\t\tbody: result\n\t};\n}\n\n/**\n * Verify the proof.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function immutableProofVerify(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IImmutableProofVerifyRequest\n): Promise<IImmutableProofVerifyResponse> {\n\tGuards.object<IImmutableProofVerifyRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IImmutableProofVerifyRequest[\"pathParams\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.pathParams),\n\t\trequest.pathParams\n\t);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.pathParams.id), request.pathParams.id);\n\n\tconst mimeType = request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? \"jsonld\" : \"json\";\n\n\tconst component = ComponentFactory.get<IImmutableProofComponent>(componentName);\n\tconst result = await component.verify(request.pathParams.id);\n\n\treturn {\n\t\theaders: {\n\t\t\t[HeaderTypes.ContentType]: mimeType === \"json\" ? MimeTypes.Json : MimeTypes.JsonLd\n\t\t},\n\t\tbody: result\n\t};\n}\n"]}
@@ -8,8 +8,8 @@ import { JsonLdHelper, JsonLdProcessor } from "@twin.org/data-json-ld";
8
8
  import { EntityStorageConnectorFactory } from "@twin.org/entity-storage-models";
9
9
  import { IdentityConnectorFactory } from "@twin.org/identity-models";
10
10
  import { ImmutableProofContexts, ImmutableProofFailure, ImmutableProofTopics, ImmutableProofTypes } from "@twin.org/immutable-proof-models";
11
+ import { NotarizationConnectorFactory } from "@twin.org/notarization-models";
11
12
  import { DidContexts, DidTypes, VerifiableCredentialHelper } from "@twin.org/standards-w3c-did";
12
- import { VerifiableStorageConnectorFactory } from "@twin.org/verifiable-storage-models";
13
13
  /**
14
14
  * Class for performing immutable proof operations.
15
15
  */
@@ -44,10 +44,15 @@ export class ImmutableProofService {
44
44
  */
45
45
  _proofStorage;
46
46
  /**
47
- * The verifiable storage for the credentials.
47
+ * The notarization connector type.
48
48
  * @internal
49
49
  */
50
- _verifiableStorage;
50
+ _notarizationConnectorType;
51
+ /**
52
+ * The notarization connector for the credentials.
53
+ * @internal
54
+ */
55
+ _notarizationConnector;
51
56
  /**
52
57
  * The background task component.
53
58
  * @internal
@@ -74,7 +79,8 @@ export class ImmutableProofService {
74
79
  */
75
80
  constructor(options) {
76
81
  this._proofStorage = EntityStorageConnectorFactory.get(options?.immutableProofEntityStorageType ?? "immutable-proof");
77
- this._verifiableStorage = VerifiableStorageConnectorFactory.get(options?.verifiableStorageType ?? "verifiable-storage");
82
+ this._notarizationConnectorType = options?.notarizationConnectorType ?? "notarization";
83
+ this._notarizationConnector = NotarizationConnectorFactory.get(this._notarizationConnectorType);
78
84
  this._logging = ComponentFactory.getIfExists(options?.loggingComponentType ?? "logging");
79
85
  this._identityConnectorType = options?.identityConnectorType ?? "identity";
80
86
  this._identityConnector = IdentityConnectorFactory.get(this._identityConnectorType);
@@ -105,10 +111,15 @@ export class ImmutableProofService {
105
111
  /**
106
112
  * Create a new proof.
107
113
  * @param document The document to create the proof for.
114
+ * @param options Optional settings for the proof.
115
+ * @param options.deleteLock An ISO 8601 date-time string specifying when the notarization lock expires; if omitted no lock is applied.
108
116
  * @returns The id of the new proof.
109
117
  */
110
- async create(document) {
118
+ async create(document, options) {
111
119
  Guards.object(ImmutableProofService.CLASS_NAME, "document", document);
120
+ if (!Is.empty(options?.deleteLock)) {
121
+ Guards.dateTimeString(ImmutableProofService.CLASS_NAME, "options.deleteLock", options.deleteLock);
122
+ }
112
123
  const contextIds = await ContextIdStore.getContextIds();
113
124
  ContextIdHelper.guard(contextIds, ContextIdKeys.Organization);
114
125
  try {
@@ -141,8 +152,10 @@ export class ImmutableProofService {
141
152
  proofId: fullId,
142
153
  identity: contextIds[ContextIdKeys.Organization],
143
154
  identityConnectorType: this._identityConnectorType,
155
+ notarizationConnectorType: this._notarizationConnectorType,
144
156
  verificationMethodId: this._verificationMethodId,
145
- credentialSubject
157
+ credentialSubject,
158
+ deleteLockDateTime: options?.deleteLock
146
159
  };
147
160
  await this._backgroundTaskComponent.create("immutable-proof", proofTaskPayload, {
148
161
  retainFor: 5000
@@ -206,7 +219,7 @@ export class ImmutableProofService {
206
219
  }
207
220
  }
208
221
  /**
209
- * Remove the verifiable storage for the proof.
222
+ * Remove the notarization for the proof.
210
223
  * @param id The id of the proof to remove the storage from.
211
224
  * @returns Nothing.
212
225
  * @throws NotFoundError if the proof is not found.
@@ -228,14 +241,14 @@ export class ImmutableProofService {
228
241
  if (Is.empty(streamEntity)) {
229
242
  throw new NotFoundError(ImmutableProofService.CLASS_NAME, "proofNotFound", id);
230
243
  }
231
- if (Is.stringValue(streamEntity.verifiableStorageId)) {
232
- await this._verifiableStorage.remove(contextIds[ContextIdKeys.Organization], streamEntity.verifiableStorageId);
233
- delete streamEntity.verifiableStorageId;
244
+ if (Is.stringValue(streamEntity.notarizationId)) {
245
+ await this._notarizationConnector.remove(contextIds[ContextIdKeys.Organization], streamEntity.notarizationId);
246
+ delete streamEntity.notarizationId;
234
247
  await this._proofStorage.set(streamEntity);
235
248
  }
236
249
  }
237
250
  catch (error) {
238
- throw new GeneralError(ImmutableProofService.CLASS_NAME, "removeVerifiableFailed", undefined, error);
251
+ throw new GeneralError(ImmutableProofService.CLASS_NAME, "removeNotarizationFailed", undefined, error);
239
252
  }
240
253
  }
241
254
  /**
@@ -250,18 +263,7 @@ export class ImmutableProofService {
250
263
  const proofId = urnParsed.namespaceSpecific(0);
251
264
  const proofEntity = await this._proofStorage.get(proofId);
252
265
  if (Is.object(proofEntity)) {
253
- // Extract the proof from the task result vc
254
- const proof = task.result.verifiableCredential.proof;
255
- // The proof context is always the last one in the generated vc contexts
256
- // as that was the last operation performed, so we can extract it and use it for the proof itself
257
- proof["@context"] = task.result.verifiableCredential["@context"][task.result.verifiableCredential["@context"].length - 1];
258
- // Remove the verification method so that we reduce the linkage between
259
- // the proof and the identity that issued it, we will reinstate on verification
260
- delete proof.verificationMethod;
261
- // Store the proof in the verifiable storage and get the id of where it is stored so we can retrieve it later
262
- const verifiableCreateResult = await this._verifiableStorage.create(task.payload.identity, ObjectHelper.toBytes(proof));
263
- // Update the proof entity with the verifiable storage id so we can retrieve it later
264
- proofEntity.verifiableStorageId = verifiableCreateResult.id;
266
+ proofEntity.notarizationId = task.result.notarizationId;
265
267
  // Update the date created if we can extract it from the VC
266
268
  const validFrom = VerifiableCredentialHelper.getValidFrom(task.result.verifiableCredential);
267
269
  if (Is.stringValue(validFrom)) {
@@ -322,19 +324,16 @@ export class ImmutableProofService {
322
324
  VerifiableCredentialHelper.setValidFrom(verifiableCredential, proofEntity.dateCreated);
323
325
  let verified = false;
324
326
  let failure = ImmutableProofFailure.NotIssued;
325
- if (Is.stringValue(proofEntity.verifiableStorageId)) {
327
+ if (Is.stringValue(proofEntity.notarizationId)) {
326
328
  failure = ImmutableProofFailure.ProofMissing;
327
- const immutableResult = await this._verifiableStorage.get(proofEntity.verifiableStorageId);
328
- if (Is.uint8Array(immutableResult.data)) {
329
- const proof = ObjectHelper.fromBytes(immutableResult.data);
329
+ const notarization = await this._notarizationConnector.get(proofEntity.notarizationId);
330
+ if (Is.uint8Array(notarization.data)) {
331
+ const proof = ObjectHelper.fromBytes(notarization.data);
330
332
  const proofWithReceipt = {
331
333
  ...proof,
332
334
  verificationMethod: `${proofEntity.organizationId}#${this._verificationMethodId}`,
333
- verifiableStorageId: proofEntity.verifiableStorageId,
334
- immutableReceipt: immutableResult.receipt
335
+ notarizationId: proofEntity.notarizationId
335
336
  };
336
- // Add the proof from the verifiable storage
337
- // expand it with the verifiable storage id and receipt
338
337
  verifiableCredential.proof = proofWithReceipt;
339
338
  if (verify && Is.object(proof)) {
340
339
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"immutableProofService.js","sourceRoot":"","sources":["../../src/immutableProofService.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tTaskStatus,\n\ttype IBackgroundTask,\n\ttype IBackgroundTaskComponent\n} from \"@twin.org/background-task-models\";\nimport { ContextIdHelper, ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport {\n\tBaseError,\n\tComponentFactory,\n\tGeneralError,\n\tGuards,\n\tIs,\n\tJsonHelper,\n\tNotFoundError,\n\tObjectHelper,\n\tRandomHelper,\n\tUrn,\n\tValidation,\n\ttype IValidationFailure\n} from \"@twin.org/core\";\nimport { IntegrityAlgorithm, IntegrityHelper } from \"@twin.org/crypto\";\nimport { JsonLdHelper, JsonLdProcessor, type IJsonLdNodeObject } from \"@twin.org/data-json-ld\";\nimport {\n\tEntityStorageConnectorFactory,\n\ttype IEntityStorageConnector\n} from \"@twin.org/entity-storage-models\";\nimport type { IEventBusComponent } from \"@twin.org/event-bus-models\";\nimport { IdentityConnectorFactory, type IIdentityConnector } from \"@twin.org/identity-models\";\nimport {\n\tImmutableProofContexts,\n\tImmutableProofFailure,\n\tImmutableProofTopics,\n\tImmutableProofTypes,\n\ttype IImmutableProof,\n\ttype IImmutableProofComponent,\n\ttype IImmutableProofEventBusProofCreated,\n\ttype IImmutableProofVerification\n} from \"@twin.org/immutable-proof-models\";\nimport type {\n\tIImmutableProofTaskPayload,\n\tIImmutableProofTaskResult\n} from \"@twin.org/immutable-proof-task\";\nimport type { ILoggingComponent } from \"@twin.org/logging-models\";\nimport { nameof, nameofKebabCase } from \"@twin.org/nameof\";\nimport {\n\tDidContexts,\n\tDidTypes,\n\tVerifiableCredentialHelper,\n\ttype IDidVerifiableCredential,\n\ttype IProof\n} from \"@twin.org/standards-w3c-did\";\nimport {\n\tVerifiableStorageConnectorFactory,\n\ttype IVerifiableStorageConnector\n} from \"@twin.org/verifiable-storage-models\";\nimport type { ImmutableProof } from \"./entities/immutableProof.js\";\nimport type { IImmutableProofServiceConfig } from \"./models/IImmutableProofServiceConfig.js\";\nimport type { IImmutableProofServiceConstructorOptions } from \"./models/IImmutableProofServiceConstructorOptions.js\";\n\n/**\n * Class for performing immutable proof operations.\n */\nexport class ImmutableProofService implements IImmutableProofComponent {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<ImmutableProofService>();\n\n\t/**\n\t * The namespace for the service.\n\t * @internal\n\t */\n\tprivate static readonly _NAMESPACE: string = \"immutable-proof\";\n\n\t/**\n\t * The configuration for the connector.\n\t * @internal\n\t */\n\tprivate readonly _config: IImmutableProofServiceConfig;\n\n\t/**\n\t * The logging component.\n\t * @internal\n\t */\n\tprivate readonly _logging?: ILoggingComponent;\n\n\t/**\n\t * The identity connector.\n\t * @internal\n\t */\n\tprivate readonly _identityConnector: IIdentityConnector;\n\n\t/**\n\t * The entity storage for proofs.\n\t * @internal\n\t */\n\tprivate readonly _proofStorage: IEntityStorageConnector<ImmutableProof>;\n\n\t/**\n\t * The verifiable storage for the credentials.\n\t * @internal\n\t */\n\tprivate readonly _verifiableStorage: IVerifiableStorageConnector;\n\n\t/**\n\t * The background task component.\n\t * @internal\n\t */\n\tprivate readonly _backgroundTaskComponent: IBackgroundTaskComponent;\n\n\t/**\n\t * The event bus component.\n\t * @internal\n\t */\n\tprivate readonly _eventBusComponent?: IEventBusComponent;\n\n\t/**\n\t * The verification method id to use for the proofs.\n\t * @internal\n\t */\n\tprivate readonly _verificationMethodId: string;\n\n\t/**\n\t * The identity connector type.\n\t * @internal\n\t */\n\tprivate readonly _identityConnectorType: string;\n\n\t/**\n\t * Create a new instance of ImmutableProofService.\n\t * @param options The dependencies for the immutable proof connector.\n\t */\n\tconstructor(options?: IImmutableProofServiceConstructorOptions) {\n\t\tthis._proofStorage = EntityStorageConnectorFactory.get(\n\t\t\toptions?.immutableProofEntityStorageType ?? nameofKebabCase<ImmutableProof>()\n\t\t);\n\n\t\tthis._verifiableStorage = VerifiableStorageConnectorFactory.get(\n\t\t\toptions?.verifiableStorageType ?? \"verifiable-storage\"\n\t\t);\n\n\t\tthis._logging = ComponentFactory.getIfExists<ILoggingComponent>(\n\t\t\toptions?.loggingComponentType ?? \"logging\"\n\t\t);\n\n\t\tthis._identityConnectorType = options?.identityConnectorType ?? \"identity\";\n\n\t\tthis._identityConnector = IdentityConnectorFactory.get(this._identityConnectorType);\n\n\t\tthis._backgroundTaskComponent = ComponentFactory.get(\n\t\t\toptions?.backgroundTaskComponentType ?? \"background-task\"\n\t\t);\n\n\t\tif (Is.stringValue(options?.eventBusComponentType)) {\n\t\t\tthis._eventBusComponent = ComponentFactory.get(options.eventBusComponentType);\n\t\t}\n\n\t\tthis._config = options?.config ?? {};\n\t\tthis._verificationMethodId = this._config.verificationMethodId ?? \"immutable-proof-assertion\";\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 ImmutableProofService.CLASS_NAME;\n\t}\n\n\t/**\n\t * The component needs to be started when the node is initialized.\n\t * @param nodeLoggingComponentType The node logging component type.\n\t * @returns Nothing.\n\t */\n\tpublic async start(nodeLoggingComponentType?: string): Promise<void> {\n\t\tawait this._backgroundTaskComponent.registerHandler<\n\t\t\tIImmutableProofTaskPayload,\n\t\t\tIImmutableProofTaskResult\n\t\t>(\"immutable-proof\", \"@twin.org/immutable-proof-task\", \"processProofTask\", async task => {\n\t\t\tawait this.finaliseTask(task);\n\t\t});\n\t}\n\n\t/**\n\t * Create a new proof.\n\t * @param document The document to create the proof for.\n\t * @returns The id of the new proof.\n\t */\n\tpublic async create(document: IJsonLdNodeObject): Promise<string> {\n\t\tGuards.object<IJsonLdNodeObject>(ImmutableProofService.CLASS_NAME, nameof(document), document);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\t\ttry {\n\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\tawait JsonLdHelper.validate(document, validationFailures);\n\t\t\tValidation.asValidationError(\n\t\t\t\tImmutableProofService.CLASS_NAME,\n\t\t\t\tnameof(document),\n\t\t\t\tvalidationFailures\n\t\t\t);\n\n\t\t\tconst id = RandomHelper.generateUuidV7(\"compact\");\n\n\t\t\tconst dateCreated = new Date(Date.now()).toISOString();\n\n\t\t\tconst proofObjectId = ObjectHelper.extractProperty<string>(document, [\"@id\", \"id\"], false);\n\n\t\t\t// We don't want to store the whole document in the immutable proof, as this could be large\n\t\t\t// and also reveal information that should not be stored in the proof so we hash the document\n\t\t\t// and store the hash\n\t\t\tconst proofObjectIntegrity = IntegrityHelper.generate(\n\t\t\t\tIntegrityAlgorithm.Sha256,\n\t\t\t\tObjectHelper.toBytes(JsonHelper.canonicalize(document))\n\t\t\t);\n\n\t\t\tconst credentialSubject: IImmutableProof = {\n\t\t\t\t\"@context\": [ImmutableProofContexts.Context, ImmutableProofContexts.ContextCommon],\n\t\t\t\ttype: ImmutableProofTypes.ImmutableProof,\n\t\t\t\tid: proofObjectId,\n\t\t\t\tproofIntegrity: proofObjectIntegrity\n\t\t\t};\n\n\t\t\tconst proofEntity: ImmutableProof = {\n\t\t\t\tid,\n\t\t\t\torganizationId: contextIds[ContextIdKeys.Organization],\n\t\t\t\tdateCreated,\n\t\t\t\tproofObjectId,\n\t\t\t\tproofObjectIntegrity\n\t\t\t};\n\t\t\tawait this._proofStorage.set(proofEntity);\n\n\t\t\tconst fullId = new Urn(ImmutableProofService._NAMESPACE, id).toString();\n\n\t\t\tconst proofTaskPayload: IImmutableProofTaskPayload = {\n\t\t\t\tproofId: fullId,\n\t\t\t\tidentity: contextIds[ContextIdKeys.Organization],\n\t\t\t\tidentityConnectorType: this._identityConnectorType,\n\t\t\t\tverificationMethodId: this._verificationMethodId,\n\t\t\t\tcredentialSubject\n\t\t\t};\n\n\t\t\tawait this._backgroundTaskComponent.create(\"immutable-proof\", proofTaskPayload, {\n\t\t\t\tretainFor: 5000\n\t\t\t});\n\n\t\t\treturn fullId;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"createFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Get a proof.\n\t * @param id The id of the proof to get.\n\t * @returns The proof.\n\t * @throws NotFoundError if the proof is not found.\n\t */\n\tpublic async get(id: string): Promise<IDidVerifiableCredential> {\n\t\tGuards.stringValue(ImmutableProofService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== ImmutableProofService._NAMESPACE) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: ImmutableProofService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst { verifiableCredential } = await this.internalGet(id, false);\n\n\t\t\tconst result = await JsonLdProcessor.compact(\n\t\t\t\tverifiableCredential,\n\t\t\t\tverifiableCredential[\"@context\"]\n\t\t\t);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"getFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Verify a proof.\n\t * @param id The id of the proof to verify.\n\t * @returns The result of the verification and any failures.\n\t * @throws NotFoundError if the proof is not found.\n\t */\n\tpublic async verify(id: string): Promise<IImmutableProofVerification> {\n\t\tGuards.stringValue(ImmutableProofService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== ImmutableProofService._NAMESPACE) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: ImmutableProofService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst { verified, failure } = await this.internalGet(id, true);\n\n\t\t\treturn {\n\t\t\t\t\"@context\": ImmutableProofContexts.Context,\n\t\t\t\ttype: ImmutableProofTypes.ImmutableProofVerification,\n\t\t\t\tverified,\n\t\t\t\tfailure\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"verifyFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Remove the verifiable storage for the proof.\n\t * @param id The id of the proof to remove the storage from.\n\t * @returns Nothing.\n\t * @throws NotFoundError if the proof is not found.\n\t */\n\tpublic async removeVerifiable(id: string): Promise<void> {\n\t\tGuards.stringValue(ImmutableProofService.CLASS_NAME, nameof(id), id);\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== ImmutableProofService._NAMESPACE) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: ImmutableProofService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst streamId = urnParsed.namespaceSpecific(0);\n\t\t\tconst streamEntity = await this._proofStorage.get(streamId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(ImmutableProofService.CLASS_NAME, \"proofNotFound\", id);\n\t\t\t}\n\n\t\t\tif (Is.stringValue(streamEntity.verifiableStorageId)) {\n\t\t\t\tawait this._verifiableStorage.remove(\n\t\t\t\t\tcontextIds[ContextIdKeys.Organization],\n\t\t\t\t\tstreamEntity.verifiableStorageId\n\t\t\t\t);\n\t\t\t\tdelete streamEntity.verifiableStorageId;\n\t\t\t\tawait this._proofStorage.set(streamEntity);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tImmutableProofService.CLASS_NAME,\n\t\t\t\t\"removeVerifiableFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Process a proof.\n\t * @param proofEntity The proof entity to process.\n\t * @internal\n\t */\n\tprivate async finaliseTask(\n\t\ttask: IBackgroundTask<IImmutableProofTaskPayload, IImmutableProofTaskResult>\n\t): Promise<void> {\n\t\tif (Is.object(task.payload)) {\n\t\t\tif (task.status === TaskStatus.Success && Is.object(task.result)) {\n\t\t\t\tconst urnParsed = Urn.fromValidString(task.payload.proofId);\n\t\t\t\tconst proofId = urnParsed.namespaceSpecific(0);\n\n\t\t\t\tconst proofEntity = await this._proofStorage.get(proofId);\n\n\t\t\t\tif (Is.object(proofEntity)) {\n\t\t\t\t\t// Extract the proof from the task result vc\n\t\t\t\t\tconst proof: IProof = task.result.verifiableCredential.proof as IProof;\n\n\t\t\t\t\t// The proof context is always the last one in the generated vc contexts\n\t\t\t\t\t// as that was the last operation performed, so we can extract it and use it for the proof itself\n\t\t\t\t\tproof[\"@context\"] = task.result.verifiableCredential[\"@context\"][\n\t\t\t\t\t\ttask.result.verifiableCredential[\"@context\"].length - 1\n\t\t\t\t\t] as IProof[\"@context\"];\n\n\t\t\t\t\t// Remove the verification method so that we reduce the linkage between\n\t\t\t\t\t// the proof and the identity that issued it, we will reinstate on verification\n\t\t\t\t\tdelete proof.verificationMethod;\n\n\t\t\t\t\t// Store the proof in the verifiable storage and get the id of where it is stored so we can retrieve it later\n\t\t\t\t\tconst verifiableCreateResult = await this._verifiableStorage.create(\n\t\t\t\t\t\ttask.payload.identity,\n\t\t\t\t\t\tObjectHelper.toBytes(proof)\n\t\t\t\t\t);\n\n\t\t\t\t\t// Update the proof entity with the verifiable storage id so we can retrieve it later\n\t\t\t\t\tproofEntity.verifiableStorageId = verifiableCreateResult.id;\n\n\t\t\t\t\t// Update the date created if we can extract it from the VC\n\t\t\t\t\tconst validFrom = VerifiableCredentialHelper.getValidFrom(\n\t\t\t\t\t\ttask.result.verifiableCredential\n\t\t\t\t\t);\n\t\t\t\t\tif (Is.stringValue(validFrom)) {\n\t\t\t\t\t\tproofEntity.dateCreated = validFrom;\n\t\t\t\t\t}\n\t\t\t\t\tproofEntity.vcContext = VerifiableCredentialHelper.getContext(\n\t\t\t\t\t\ttask.result.verifiableCredential\n\t\t\t\t\t);\n\n\t\t\t\t\tawait this._proofStorage.set(proofEntity);\n\n\t\t\t\t\tawait this._logging?.log({\n\t\t\t\t\t\tsource: ImmutableProofService.CLASS_NAME,\n\t\t\t\t\t\tlevel: \"info\",\n\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\tmessage: \"createdProof\",\n\t\t\t\t\t\tdata: { proofId: task.payload.proofId }\n\t\t\t\t\t});\n\n\t\t\t\t\tawait this._eventBusComponent?.publish<IImmutableProofEventBusProofCreated>(\n\t\t\t\t\t\tImmutableProofTopics.ProofCreated,\n\t\t\t\t\t\t{ id: new Urn(ImmutableProofService._NAMESPACE, task.payload.proofId).toString() }\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (task.status === TaskStatus.Failed) {\n\t\t\t\tawait this._logging?.log({\n\t\t\t\t\tsource: ImmutableProofService.CLASS_NAME,\n\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\tts: Date.now(),\n\t\t\t\t\tmessage: \"createProofFailed\",\n\t\t\t\t\terror: BaseError.fromError(task.error)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Verify a proof.\n\t * @param id The id of the proof to verify.\n\t * @param verify Validate the proof.\n\t * @returns The result of the verification and any failures.\n\t * @throws NotFoundError if the proof is not found.\n\t * @internal\n\t */\n\tprivate async internalGet(\n\t\tid: string,\n\t\tverify: boolean\n\t): Promise<{\n\t\tverified: boolean;\n\t\tfailure?: ImmutableProofFailure;\n\t\tverifiableCredential: IDidVerifiableCredential;\n\t}> {\n\t\tconst urnParsed = Urn.fromValidString(id);\n\t\tconst proofId = urnParsed.namespaceSpecific(0);\n\t\tconst proofEntity = await this._proofStorage.get(proofId);\n\n\t\tif (Is.empty(proofEntity)) {\n\t\t\tthrow new NotFoundError(ImmutableProofService.CLASS_NAME, \"proofNotFound\", id);\n\t\t}\n\n\t\tconst verifiableCredential: IDidVerifiableCredential = {\n\t\t\t\"@context\": [\n\t\t\t\tproofEntity.vcContext ?? DidContexts.ContextVCv1,\n\t\t\t\tImmutableProofContexts.Context,\n\t\t\t\tImmutableProofContexts.ContextCommon\n\t\t\t],\n\t\t\ttype: [DidTypes.VerifiableCredential, ImmutableProofTypes.ImmutableProof],\n\t\t\tid,\n\t\t\tissuer: proofEntity.organizationId,\n\t\t\tcredentialSubject: {\n\t\t\t\tid: proofEntity.proofObjectId,\n\t\t\t\tproofIntegrity: proofEntity.proofObjectIntegrity\n\t\t\t}\n\t\t} as IDidVerifiableCredential;\n\n\t\tVerifiableCredentialHelper.setValidFrom(verifiableCredential, proofEntity.dateCreated);\n\n\t\tlet verified = false;\n\t\tlet failure: ImmutableProofFailure | undefined = ImmutableProofFailure.NotIssued;\n\n\t\tif (Is.stringValue(proofEntity.verifiableStorageId)) {\n\t\t\tfailure = ImmutableProofFailure.ProofMissing;\n\t\t\tconst immutableResult = await this._verifiableStorage.get(proofEntity.verifiableStorageId);\n\n\t\t\tif (Is.uint8Array(immutableResult.data)) {\n\t\t\t\tconst proof = ObjectHelper.fromBytes<IProof>(immutableResult.data);\n\n\t\t\t\tconst proofWithReceipt = {\n\t\t\t\t\t...proof,\n\t\t\t\t\tverificationMethod: `${proofEntity.organizationId}#${this._verificationMethodId}`,\n\t\t\t\t\tverifiableStorageId: proofEntity.verifiableStorageId,\n\t\t\t\t\timmutableReceipt: immutableResult.receipt\n\t\t\t\t};\n\n\t\t\t\t// Add the proof from the verifiable storage\n\t\t\t\t// expand it with the verifiable storage id and receipt\n\t\t\t\tverifiableCredential.proof = proofWithReceipt;\n\n\t\t\t\tif (verify && Is.object<IProof>(proof)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result =\n\t\t\t\t\t\t\tawait this._identityConnector.checkVerifiableCredential(verifiableCredential);\n\t\t\t\t\t\tif (result.revoked) {\n\t\t\t\t\t\t\tverified = false;\n\t\t\t\t\t\t\tfailure = ImmutableProofFailure.Revoked;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tverified = true;\n\t\t\t\t\t\t\tfailure = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tverified = false;\n\t\t\t\t\t\tfailure = ImmutableProofFailure.VerificationFailure;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tverifiableCredential: await JsonLdProcessor.compact(\n\t\t\t\tverifiableCredential,\n\t\t\t\tJsonLdProcessor.gatherContexts(verifiableCredential)\n\t\t\t),\n\t\t\tverified,\n\t\t\tfailure\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"immutableProofService.js","sourceRoot":"","sources":["../../src/immutableProofService.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EACN,UAAU,EAGV,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EACN,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,MAAM,EACN,EAAE,EACF,UAAU,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,GAAG,EACH,UAAU,EAEV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,eAAe,EAA0B,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EACN,6BAA6B,EAE7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,wBAAwB,EAA2B,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EACN,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EAKnB,MAAM,kCAAkC,CAAC;AAO1C,OAAO,EACN,4BAA4B,EAE5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,WAAW,EACX,QAAQ,EACR,0BAA0B,EAG1B,MAAM,6BAA6B,CAAC;AAKrC;;GAEG;AACH,MAAM,OAAO,qBAAqB;IACjC;;OAEG;IACI,MAAM,CAAU,UAAU,2BAA2C;IAE5E;;;OAGG;IACK,MAAM,CAAU,UAAU,GAAW,iBAAiB,CAAC;IAE/D;;;OAGG;IACc,OAAO,CAA+B;IAEvD;;;OAGG;IACc,QAAQ,CAAqB;IAE9C;;;OAGG;IACc,kBAAkB,CAAqB;IAExD;;;OAGG;IACc,aAAa,CAA0C;IAExE;;;OAGG;IACc,0BAA0B,CAAS;IAEpD;;;OAGG;IACc,sBAAsB,CAAyB;IAEhE;;;OAGG;IACc,wBAAwB,CAA2B;IAEpE;;;OAGG;IACc,kBAAkB,CAAsB;IAEzD;;;OAGG;IACc,qBAAqB,CAAS;IAE/C;;;OAGG;IACc,sBAAsB,CAAS;IAEhD;;;OAGG;IACH,YAAY,OAAkD;QAC7D,IAAI,CAAC,aAAa,GAAG,6BAA6B,CAAC,GAAG,CACrD,OAAO,EAAE,+BAA+B,qBAAqC,CAC7E,CAAC;QAEF,IAAI,CAAC,0BAA0B,GAAG,OAAO,EAAE,yBAAyB,IAAI,cAAc,CAAC;QACvF,IAAI,CAAC,sBAAsB,GAAG,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAEhG,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAC3C,OAAO,EAAE,oBAAoB,IAAI,SAAS,CAC1C,CAAC;QAEF,IAAI,CAAC,sBAAsB,GAAG,OAAO,EAAE,qBAAqB,IAAI,UAAU,CAAC;QAE3E,IAAI,CAAC,kBAAkB,GAAG,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAEpF,IAAI,CAAC,wBAAwB,GAAG,gBAAgB,CAAC,GAAG,CACnD,OAAO,EAAE,2BAA2B,IAAI,iBAAiB,CACzD,CAAC;QAEF,IAAI,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC/E,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;QAErC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,2BAA2B,CAAC;IAC/F,CAAC;IAED;;;OAGG;IACI,SAAS;QACf,OAAO,qBAAqB,CAAC,UAAU,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,KAAK,CAAC,wBAAiC;QACnD,MAAM,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAGjD,iBAAiB,EAAE,gCAAgC,EAAE,kBAAkB,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE;YACvF,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,MAAM,CAClB,QAA2B,EAC3B,OAAiC;QAEjC,MAAM,CAAC,MAAM,CAAoB,qBAAqB,CAAC,UAAU,cAAoB,QAAQ,CAAC,CAAC;QAE/F,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,cAAc,CACpB,qBAAqB,CAAC,UAAU,wBAEhC,OAAO,CAAC,UAAU,CAClB,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;QACxD,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;QAE9D,IAAI,CAAC;YACJ,MAAM,kBAAkB,GAAyB,EAAE,CAAC;YACpD,MAAM,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;YAC1D,UAAU,CAAC,iBAAiB,CAC3B,qBAAqB,CAAC,UAAU,cAEhC,kBAAkB,CAClB,CAAC;YAEF,MAAM,EAAE,GAAG,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAElD,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAEvD,MAAM,aAAa,GAAG,YAAY,CAAC,eAAe,CAAS,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;YAE3F,2FAA2F;YAC3F,6FAA6F;YAC7F,qBAAqB;YACrB,MAAM,oBAAoB,GAAG,eAAe,CAAC,QAAQ,CACpD,kBAAkB,CAAC,MAAM,EACzB,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CACvD,CAAC;YAEF,MAAM,iBAAiB,GAAoB;gBAC1C,UAAU,EAAE,CAAC,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,CAAC,aAAa,CAAC;gBAClF,IAAI,EAAE,mBAAmB,CAAC,cAAc;gBACxC,EAAE,EAAE,aAAa;gBACjB,cAAc,EAAE,oBAAoB;aACpC,CAAC;YAEF,MAAM,WAAW,GAAmB;gBACnC,EAAE;gBACF,cAAc,EAAE,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC;gBACtD,WAAW;gBACX,aAAa;gBACb,oBAAoB;aACpB,CAAC;YACF,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YAExE,MAAM,gBAAgB,GAA+B;gBACpD,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC;gBAChD,qBAAqB,EAAE,IAAI,CAAC,sBAAsB;gBAClD,yBAAyB,EAAE,IAAI,CAAC,0BAA0B;gBAC1D,oBAAoB,EAAE,IAAI,CAAC,qBAAqB;gBAChD,iBAAiB;gBACjB,kBAAkB,EAAE,OAAO,EAAE,UAAU;aACvC,CAAC;YAEF,MAAM,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,EAAE;gBAC/E,SAAS,EAAE,IAAI;aACf,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,YAAY,CAAC,qBAAqB,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5F,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,GAAG,CAAC,EAAU;QAC1B,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,UAAU,QAAc,EAAE,CAAC,CAAC;QAErE,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAE1C,IAAI,SAAS,CAAC,mBAAmB,EAAE,KAAK,qBAAqB,CAAC,UAAU,EAAE,CAAC;YAC1E,MAAM,IAAI,YAAY,CAAC,qBAAqB,CAAC,UAAU,EAAE,mBAAmB,EAAE;gBAC7E,SAAS,EAAE,qBAAqB,CAAC,UAAU;gBAC3C,EAAE;aACF,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAEnE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAC3C,oBAAoB,EACpB,oBAAoB,CAAC,UAAU,CAAC,CAChC,CAAC;YACF,OAAO,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,YAAY,CAAC,qBAAqB,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACzF,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,MAAM,CAAC,EAAU;QAC7B,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,UAAU,QAAc,EAAE,CAAC,CAAC;QAErE,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAE1C,IAAI,SAAS,CAAC,mBAAmB,EAAE,KAAK,qBAAqB,CAAC,UAAU,EAAE,CAAC;YAC1E,MAAM,IAAI,YAAY,CAAC,qBAAqB,CAAC,UAAU,EAAE,mBAAmB,EAAE;gBAC7E,SAAS,EAAE,qBAAqB,CAAC,UAAU;gBAC3C,EAAE;aACF,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAE/D,OAAO;gBACN,UAAU,EAAE,sBAAsB,CAAC,OAAO;gBAC1C,IAAI,EAAE,mBAAmB,CAAC,0BAA0B;gBACpD,QAAQ;gBACR,OAAO;aACP,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,YAAY,CAAC,qBAAqB,CAAC,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5F,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,gBAAgB,CAAC,EAAU;QACvC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,UAAU,QAAc,EAAE,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;QACxD,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;QAE9D,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAE1C,IAAI,SAAS,CAAC,mBAAmB,EAAE,KAAK,qBAAqB,CAAC,UAAU,EAAE,CAAC;YAC1E,MAAM,IAAI,YAAY,CAAC,qBAAqB,CAAC,UAAU,EAAE,mBAAmB,EAAE;gBAC7E,SAAS,EAAE,qBAAqB,CAAC,UAAU;gBAC3C,EAAE;aACF,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE5D,IAAI,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,aAAa,CAAC,qBAAqB,CAAC,UAAU,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;YAChF,CAAC;YAED,IAAI,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CACvC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,EACtC,YAAY,CAAC,cAAc,CAC3B,CAAC;gBACF,OAAO,YAAY,CAAC,cAAc,CAAC;gBACnC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC5C,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,YAAY,CACrB,qBAAqB,CAAC,UAAU,EAChC,0BAA0B,EAC1B,SAAS,EACT,KAAK,CACL,CAAC;QACH,CAAC;IACF,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,YAAY,CACzB,IAA4E;QAE5E,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClE,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC5D,MAAM,OAAO,GAAG,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBAE/C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAE1D,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC5B,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;oBAExD,2DAA2D;oBAC3D,MAAM,SAAS,GAAG,0BAA0B,CAAC,YAAY,CACxD,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAChC,CAAC;oBACF,IAAI,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC/B,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC;oBACrC,CAAC;oBACD,WAAW,CAAC,SAAS,GAAG,0BAA0B,CAAC,UAAU,CAC5D,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAChC,CAAC;oBAEF,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBAE1C,MAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;wBACxB,MAAM,EAAE,qBAAqB,CAAC,UAAU;wBACxC,KAAK,EAAE,MAAM;wBACb,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;wBACd,OAAO,EAAE,cAAc;wBACvB,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;qBACvC,CAAC,CAAC;oBAEH,MAAM,IAAI,CAAC,kBAAkB,EAAE,OAAO,CACrC,oBAAoB,CAAC,YAAY,EACjC,EAAE,EAAE,EAAE,IAAI,GAAG,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAClF,CAAC;gBACH,CAAC;YACF,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;gBAC9C,MAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;oBACxB,MAAM,EAAE,qBAAqB,CAAC,UAAU;oBACxC,KAAK,EAAE,OAAO;oBACd,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;oBACd,OAAO,EAAE,mBAAmB;oBAC5B,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBACtC,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,WAAW,CACxB,EAAU,EACV,MAAe;QAMf,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE1D,IAAI,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,aAAa,CAAC,qBAAqB,CAAC,UAAU,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,oBAAoB,GAA6B;YACtD,UAAU,EAAE;gBACX,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,WAAW;gBAChD,sBAAsB,CAAC,OAAO;gBAC9B,sBAAsB,CAAC,aAAa;aACpC;YACD,IAAI,EAAE,CAAC,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,cAAc,CAAC;YACzE,EAAE;YACF,MAAM,EAAE,WAAW,CAAC,cAAc;YAClC,iBAAiB,EAAE;gBAClB,EAAE,EAAE,WAAW,CAAC,aAAa;gBAC7B,cAAc,EAAE,WAAW,CAAC,oBAAoB;aAChD;SAC2B,CAAC;QAE9B,0BAA0B,CAAC,YAAY,CAAC,oBAAoB,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;QAEvF,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,OAAO,GAAsC,qBAAqB,CAAC,SAAS,CAAC;QAEjF,IAAI,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;YAChD,OAAO,GAAG,qBAAqB,CAAC,YAAY,CAAC;YAC7C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YAEvF,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAS,YAAY,CAAC,IAAI,CAAC,CAAC;gBAEhE,MAAM,gBAAgB,GAAG;oBACxB,GAAG,KAAK;oBACR,kBAAkB,EAAE,GAAG,WAAW,CAAC,cAAc,IAAI,IAAI,CAAC,qBAAqB,EAAE;oBACjF,cAAc,EAAE,WAAW,CAAC,cAAc;iBAC1C,CAAC;gBAEF,oBAAoB,CAAC,KAAK,GAAG,gBAAgB,CAAC;gBAE9C,IAAI,MAAM,IAAI,EAAE,CAAC,MAAM,CAAS,KAAK,CAAC,EAAE,CAAC;oBACxC,IAAI,CAAC;wBACJ,MAAM,MAAM,GACX,MAAM,IAAI,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,oBAAoB,CAAC,CAAC;wBAC/E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;4BACpB,QAAQ,GAAG,KAAK,CAAC;4BACjB,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC;wBACzC,CAAC;6BAAM,CAAC;4BACP,QAAQ,GAAG,IAAI,CAAC;4BAChB,OAAO,GAAG,SAAS,CAAC;wBACrB,CAAC;oBACF,CAAC;oBAAC,MAAM,CAAC;wBACR,QAAQ,GAAG,KAAK,CAAC;wBACjB,OAAO,GAAG,qBAAqB,CAAC,mBAAmB,CAAC;oBACrD,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO;YACN,oBAAoB,EAAE,MAAM,eAAe,CAAC,OAAO,CAClD,oBAAoB,EACpB,eAAe,CAAC,cAAc,CAAC,oBAAoB,CAAC,CACpD;YACD,QAAQ;YACR,OAAO;SACP,CAAC;IACH,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tTaskStatus,\n\ttype IBackgroundTask,\n\ttype IBackgroundTaskComponent\n} from \"@twin.org/background-task-models\";\nimport { ContextIdHelper, ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport {\n\tBaseError,\n\tComponentFactory,\n\tGeneralError,\n\tGuards,\n\tIs,\n\tJsonHelper,\n\tNotFoundError,\n\tObjectHelper,\n\tRandomHelper,\n\tUrn,\n\tValidation,\n\ttype IValidationFailure\n} from \"@twin.org/core\";\nimport { IntegrityAlgorithm, IntegrityHelper } from \"@twin.org/crypto\";\nimport { JsonLdHelper, JsonLdProcessor, type IJsonLdNodeObject } from \"@twin.org/data-json-ld\";\nimport {\n\tEntityStorageConnectorFactory,\n\ttype IEntityStorageConnector\n} from \"@twin.org/entity-storage-models\";\nimport type { IEventBusComponent } from \"@twin.org/event-bus-models\";\nimport { IdentityConnectorFactory, type IIdentityConnector } from \"@twin.org/identity-models\";\nimport {\n\tImmutableProofContexts,\n\tImmutableProofFailure,\n\tImmutableProofTopics,\n\tImmutableProofTypes,\n\ttype IImmutableProof,\n\ttype IImmutableProofComponent,\n\ttype IImmutableProofEventBusProofCreated,\n\ttype IImmutableProofVerification\n} from \"@twin.org/immutable-proof-models\";\nimport type {\n\tIImmutableProofTaskPayload,\n\tIImmutableProofTaskResult\n} from \"@twin.org/immutable-proof-task\";\nimport type { ILoggingComponent } from \"@twin.org/logging-models\";\nimport { nameof, nameofKebabCase } from \"@twin.org/nameof\";\nimport {\n\tNotarizationConnectorFactory,\n\ttype INotarizationConnector\n} from \"@twin.org/notarization-models\";\nimport {\n\tDidContexts,\n\tDidTypes,\n\tVerifiableCredentialHelper,\n\ttype IDidVerifiableCredential,\n\ttype IProof\n} from \"@twin.org/standards-w3c-did\";\nimport type { ImmutableProof } from \"./entities/immutableProof.js\";\nimport type { IImmutableProofServiceConfig } from \"./models/IImmutableProofServiceConfig.js\";\nimport type { IImmutableProofServiceConstructorOptions } from \"./models/IImmutableProofServiceConstructorOptions.js\";\n\n/**\n * Class for performing immutable proof operations.\n */\nexport class ImmutableProofService implements IImmutableProofComponent {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<ImmutableProofService>();\n\n\t/**\n\t * The namespace for the service.\n\t * @internal\n\t */\n\tprivate static readonly _NAMESPACE: string = \"immutable-proof\";\n\n\t/**\n\t * The configuration for the connector.\n\t * @internal\n\t */\n\tprivate readonly _config: IImmutableProofServiceConfig;\n\n\t/**\n\t * The logging component.\n\t * @internal\n\t */\n\tprivate readonly _logging?: ILoggingComponent;\n\n\t/**\n\t * The identity connector.\n\t * @internal\n\t */\n\tprivate readonly _identityConnector: IIdentityConnector;\n\n\t/**\n\t * The entity storage for proofs.\n\t * @internal\n\t */\n\tprivate readonly _proofStorage: IEntityStorageConnector<ImmutableProof>;\n\n\t/**\n\t * The notarization connector type.\n\t * @internal\n\t */\n\tprivate readonly _notarizationConnectorType: string;\n\n\t/**\n\t * The notarization connector for the credentials.\n\t * @internal\n\t */\n\tprivate readonly _notarizationConnector: INotarizationConnector;\n\n\t/**\n\t * The background task component.\n\t * @internal\n\t */\n\tprivate readonly _backgroundTaskComponent: IBackgroundTaskComponent;\n\n\t/**\n\t * The event bus component.\n\t * @internal\n\t */\n\tprivate readonly _eventBusComponent?: IEventBusComponent;\n\n\t/**\n\t * The verification method id to use for the proofs.\n\t * @internal\n\t */\n\tprivate readonly _verificationMethodId: string;\n\n\t/**\n\t * The identity connector type.\n\t * @internal\n\t */\n\tprivate readonly _identityConnectorType: string;\n\n\t/**\n\t * Create a new instance of ImmutableProofService.\n\t * @param options The dependencies for the immutable proof connector.\n\t */\n\tconstructor(options?: IImmutableProofServiceConstructorOptions) {\n\t\tthis._proofStorage = EntityStorageConnectorFactory.get(\n\t\t\toptions?.immutableProofEntityStorageType ?? nameofKebabCase<ImmutableProof>()\n\t\t);\n\n\t\tthis._notarizationConnectorType = options?.notarizationConnectorType ?? \"notarization\";\n\t\tthis._notarizationConnector = NotarizationConnectorFactory.get(this._notarizationConnectorType);\n\n\t\tthis._logging = ComponentFactory.getIfExists<ILoggingComponent>(\n\t\t\toptions?.loggingComponentType ?? \"logging\"\n\t\t);\n\n\t\tthis._identityConnectorType = options?.identityConnectorType ?? \"identity\";\n\n\t\tthis._identityConnector = IdentityConnectorFactory.get(this._identityConnectorType);\n\n\t\tthis._backgroundTaskComponent = ComponentFactory.get(\n\t\t\toptions?.backgroundTaskComponentType ?? \"background-task\"\n\t\t);\n\n\t\tif (Is.stringValue(options?.eventBusComponentType)) {\n\t\t\tthis._eventBusComponent = ComponentFactory.get(options.eventBusComponentType);\n\t\t}\n\n\t\tthis._config = options?.config ?? {};\n\n\t\tthis._verificationMethodId = this._config.verificationMethodId ?? \"immutable-proof-assertion\";\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 ImmutableProofService.CLASS_NAME;\n\t}\n\n\t/**\n\t * The component needs to be started when the node is initialized.\n\t * @param nodeLoggingComponentType The node logging component type.\n\t * @returns Nothing.\n\t */\n\tpublic async start(nodeLoggingComponentType?: string): Promise<void> {\n\t\tawait this._backgroundTaskComponent.registerHandler<\n\t\t\tIImmutableProofTaskPayload,\n\t\t\tIImmutableProofTaskResult\n\t\t>(\"immutable-proof\", \"@twin.org/immutable-proof-task\", \"processProofTask\", async task => {\n\t\t\tawait this.finaliseTask(task);\n\t\t});\n\t}\n\n\t/**\n\t * Create a new proof.\n\t * @param document The document to create the proof for.\n\t * @param options Optional settings for the proof.\n\t * @param options.deleteLock An ISO 8601 date-time string specifying when the notarization lock expires; if omitted no lock is applied.\n\t * @returns The id of the new proof.\n\t */\n\tpublic async create(\n\t\tdocument: IJsonLdNodeObject,\n\t\toptions?: { deleteLock?: string }\n\t): Promise<string> {\n\t\tGuards.object<IJsonLdNodeObject>(ImmutableProofService.CLASS_NAME, nameof(document), document);\n\n\t\tif (!Is.empty(options?.deleteLock)) {\n\t\t\tGuards.dateTimeString(\n\t\t\t\tImmutableProofService.CLASS_NAME,\n\t\t\t\tnameof(options.deleteLock),\n\t\t\t\toptions.deleteLock\n\t\t\t);\n\t\t}\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\t\ttry {\n\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\tawait JsonLdHelper.validate(document, validationFailures);\n\t\t\tValidation.asValidationError(\n\t\t\t\tImmutableProofService.CLASS_NAME,\n\t\t\t\tnameof(document),\n\t\t\t\tvalidationFailures\n\t\t\t);\n\n\t\t\tconst id = RandomHelper.generateUuidV7(\"compact\");\n\n\t\t\tconst dateCreated = new Date(Date.now()).toISOString();\n\n\t\t\tconst proofObjectId = ObjectHelper.extractProperty<string>(document, [\"@id\", \"id\"], false);\n\n\t\t\t// We don't want to store the whole document in the immutable proof, as this could be large\n\t\t\t// and also reveal information that should not be stored in the proof so we hash the document\n\t\t\t// and store the hash\n\t\t\tconst proofObjectIntegrity = IntegrityHelper.generate(\n\t\t\t\tIntegrityAlgorithm.Sha256,\n\t\t\t\tObjectHelper.toBytes(JsonHelper.canonicalize(document))\n\t\t\t);\n\n\t\t\tconst credentialSubject: IImmutableProof = {\n\t\t\t\t\"@context\": [ImmutableProofContexts.Context, ImmutableProofContexts.ContextCommon],\n\t\t\t\ttype: ImmutableProofTypes.ImmutableProof,\n\t\t\t\tid: proofObjectId,\n\t\t\t\tproofIntegrity: proofObjectIntegrity\n\t\t\t};\n\n\t\t\tconst proofEntity: ImmutableProof = {\n\t\t\t\tid,\n\t\t\t\torganizationId: contextIds[ContextIdKeys.Organization],\n\t\t\t\tdateCreated,\n\t\t\t\tproofObjectId,\n\t\t\t\tproofObjectIntegrity\n\t\t\t};\n\t\t\tawait this._proofStorage.set(proofEntity);\n\n\t\t\tconst fullId = new Urn(ImmutableProofService._NAMESPACE, id).toString();\n\n\t\t\tconst proofTaskPayload: IImmutableProofTaskPayload = {\n\t\t\t\tproofId: fullId,\n\t\t\t\tidentity: contextIds[ContextIdKeys.Organization],\n\t\t\t\tidentityConnectorType: this._identityConnectorType,\n\t\t\t\tnotarizationConnectorType: this._notarizationConnectorType,\n\t\t\t\tverificationMethodId: this._verificationMethodId,\n\t\t\t\tcredentialSubject,\n\t\t\t\tdeleteLockDateTime: options?.deleteLock\n\t\t\t};\n\n\t\t\tawait this._backgroundTaskComponent.create(\"immutable-proof\", proofTaskPayload, {\n\t\t\t\tretainFor: 5000\n\t\t\t});\n\n\t\t\treturn fullId;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"createFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Get a proof.\n\t * @param id The id of the proof to get.\n\t * @returns The proof.\n\t * @throws NotFoundError if the proof is not found.\n\t */\n\tpublic async get(id: string): Promise<IDidVerifiableCredential> {\n\t\tGuards.stringValue(ImmutableProofService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== ImmutableProofService._NAMESPACE) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: ImmutableProofService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst { verifiableCredential } = await this.internalGet(id, false);\n\n\t\t\tconst result = await JsonLdProcessor.compact(\n\t\t\t\tverifiableCredential,\n\t\t\t\tverifiableCredential[\"@context\"]\n\t\t\t);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"getFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Verify a proof.\n\t * @param id The id of the proof to verify.\n\t * @returns The result of the verification and any failures.\n\t * @throws NotFoundError if the proof is not found.\n\t */\n\tpublic async verify(id: string): Promise<IImmutableProofVerification> {\n\t\tGuards.stringValue(ImmutableProofService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== ImmutableProofService._NAMESPACE) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: ImmutableProofService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst { verified, failure } = await this.internalGet(id, true);\n\n\t\t\treturn {\n\t\t\t\t\"@context\": ImmutableProofContexts.Context,\n\t\t\t\ttype: ImmutableProofTypes.ImmutableProofVerification,\n\t\t\t\tverified,\n\t\t\t\tfailure\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"verifyFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Remove the notarization for the proof.\n\t * @param id The id of the proof to remove the storage from.\n\t * @returns Nothing.\n\t * @throws NotFoundError if the proof is not found.\n\t */\n\tpublic async removeVerifiable(id: string): Promise<void> {\n\t\tGuards.stringValue(ImmutableProofService.CLASS_NAME, nameof(id), id);\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== ImmutableProofService._NAMESPACE) {\n\t\t\tthrow new GeneralError(ImmutableProofService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: ImmutableProofService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst streamId = urnParsed.namespaceSpecific(0);\n\t\t\tconst streamEntity = await this._proofStorage.get(streamId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(ImmutableProofService.CLASS_NAME, \"proofNotFound\", id);\n\t\t\t}\n\n\t\t\tif (Is.stringValue(streamEntity.notarizationId)) {\n\t\t\t\tawait this._notarizationConnector.remove(\n\t\t\t\t\tcontextIds[ContextIdKeys.Organization],\n\t\t\t\t\tstreamEntity.notarizationId\n\t\t\t\t);\n\t\t\t\tdelete streamEntity.notarizationId;\n\t\t\t\tawait this._proofStorage.set(streamEntity);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tImmutableProofService.CLASS_NAME,\n\t\t\t\t\"removeNotarizationFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Process a proof.\n\t * @param proofEntity The proof entity to process.\n\t * @internal\n\t */\n\tprivate async finaliseTask(\n\t\ttask: IBackgroundTask<IImmutableProofTaskPayload, IImmutableProofTaskResult>\n\t): Promise<void> {\n\t\tif (Is.object(task.payload)) {\n\t\t\tif (task.status === TaskStatus.Success && Is.object(task.result)) {\n\t\t\t\tconst urnParsed = Urn.fromValidString(task.payload.proofId);\n\t\t\t\tconst proofId = urnParsed.namespaceSpecific(0);\n\n\t\t\t\tconst proofEntity = await this._proofStorage.get(proofId);\n\n\t\t\t\tif (Is.object(proofEntity)) {\n\t\t\t\t\tproofEntity.notarizationId = task.result.notarizationId;\n\n\t\t\t\t\t// Update the date created if we can extract it from the VC\n\t\t\t\t\tconst validFrom = VerifiableCredentialHelper.getValidFrom(\n\t\t\t\t\t\ttask.result.verifiableCredential\n\t\t\t\t\t);\n\t\t\t\t\tif (Is.stringValue(validFrom)) {\n\t\t\t\t\t\tproofEntity.dateCreated = validFrom;\n\t\t\t\t\t}\n\t\t\t\t\tproofEntity.vcContext = VerifiableCredentialHelper.getContext(\n\t\t\t\t\t\ttask.result.verifiableCredential\n\t\t\t\t\t);\n\n\t\t\t\t\tawait this._proofStorage.set(proofEntity);\n\n\t\t\t\t\tawait this._logging?.log({\n\t\t\t\t\t\tsource: ImmutableProofService.CLASS_NAME,\n\t\t\t\t\t\tlevel: \"info\",\n\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\tmessage: \"createdProof\",\n\t\t\t\t\t\tdata: { proofId: task.payload.proofId }\n\t\t\t\t\t});\n\n\t\t\t\t\tawait this._eventBusComponent?.publish<IImmutableProofEventBusProofCreated>(\n\t\t\t\t\t\tImmutableProofTopics.ProofCreated,\n\t\t\t\t\t\t{ id: new Urn(ImmutableProofService._NAMESPACE, task.payload.proofId).toString() }\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (task.status === TaskStatus.Failed) {\n\t\t\t\tawait this._logging?.log({\n\t\t\t\t\tsource: ImmutableProofService.CLASS_NAME,\n\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\tts: Date.now(),\n\t\t\t\t\tmessage: \"createProofFailed\",\n\t\t\t\t\terror: BaseError.fromError(task.error)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Verify a proof.\n\t * @param id The id of the proof to verify.\n\t * @param verify Validate the proof.\n\t * @returns The result of the verification and any failures.\n\t * @throws NotFoundError if the proof is not found.\n\t * @internal\n\t */\n\tprivate async internalGet(\n\t\tid: string,\n\t\tverify: boolean\n\t): Promise<{\n\t\tverified: boolean;\n\t\tfailure?: ImmutableProofFailure;\n\t\tverifiableCredential: IDidVerifiableCredential;\n\t}> {\n\t\tconst urnParsed = Urn.fromValidString(id);\n\t\tconst proofId = urnParsed.namespaceSpecific(0);\n\t\tconst proofEntity = await this._proofStorage.get(proofId);\n\n\t\tif (Is.empty(proofEntity)) {\n\t\t\tthrow new NotFoundError(ImmutableProofService.CLASS_NAME, \"proofNotFound\", id);\n\t\t}\n\n\t\tconst verifiableCredential: IDidVerifiableCredential = {\n\t\t\t\"@context\": [\n\t\t\t\tproofEntity.vcContext ?? DidContexts.ContextVCv1,\n\t\t\t\tImmutableProofContexts.Context,\n\t\t\t\tImmutableProofContexts.ContextCommon\n\t\t\t],\n\t\t\ttype: [DidTypes.VerifiableCredential, ImmutableProofTypes.ImmutableProof],\n\t\t\tid,\n\t\t\tissuer: proofEntity.organizationId,\n\t\t\tcredentialSubject: {\n\t\t\t\tid: proofEntity.proofObjectId,\n\t\t\t\tproofIntegrity: proofEntity.proofObjectIntegrity\n\t\t\t}\n\t\t} as IDidVerifiableCredential;\n\n\t\tVerifiableCredentialHelper.setValidFrom(verifiableCredential, proofEntity.dateCreated);\n\n\t\tlet verified = false;\n\t\tlet failure: ImmutableProofFailure | undefined = ImmutableProofFailure.NotIssued;\n\n\t\tif (Is.stringValue(proofEntity.notarizationId)) {\n\t\t\tfailure = ImmutableProofFailure.ProofMissing;\n\t\t\tconst notarization = await this._notarizationConnector.get(proofEntity.notarizationId);\n\n\t\t\tif (Is.uint8Array(notarization.data)) {\n\t\t\t\tconst proof = ObjectHelper.fromBytes<IProof>(notarization.data);\n\n\t\t\t\tconst proofWithReceipt = {\n\t\t\t\t\t...proof,\n\t\t\t\t\tverificationMethod: `${proofEntity.organizationId}#${this._verificationMethodId}`,\n\t\t\t\t\tnotarizationId: proofEntity.notarizationId\n\t\t\t\t};\n\n\t\t\t\tverifiableCredential.proof = proofWithReceipt;\n\n\t\t\t\tif (verify && Is.object<IProof>(proof)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result =\n\t\t\t\t\t\t\tawait this._identityConnector.checkVerifiableCredential(verifiableCredential);\n\t\t\t\t\t\tif (result.revoked) {\n\t\t\t\t\t\t\tverified = false;\n\t\t\t\t\t\t\tfailure = ImmutableProofFailure.Revoked;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tverified = true;\n\t\t\t\t\t\t\tfailure = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tverified = false;\n\t\t\t\t\t\tfailure = ImmutableProofFailure.VerificationFailure;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tverifiableCredential: await JsonLdProcessor.compact(\n\t\t\t\tverifiableCredential,\n\t\t\t\tJsonLdProcessor.gatherContexts(verifiableCredential)\n\t\t\t),\n\t\t\tverified,\n\t\t\tfailure\n\t\t};\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"IImmutableProofServiceConstructorOptions.js","sourceRoot":"","sources":["../../../src/models/IImmutableProofServiceConstructorOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IImmutableProofServiceConfig } from \"./IImmutableProofServiceConfig.js\";\n\n/**\n * Options for the immutable proof service constructor.\n */\nexport interface IImmutableProofServiceConstructorOptions {\n\t/**\n\t * The entity storage for proofs.\n\t * @default immutable-proof\n\t */\n\timmutableProofEntityStorageType?: string;\n\n\t/**\n\t * The verifiable storage.\n\t * @default verifiable-storage\n\t */\n\tverifiableStorageType?: string;\n\n\t/**\n\t * The logging component type.\n\t * @default logging\n\t */\n\tloggingComponentType?: string;\n\n\t/**\n\t * The identity connector type.\n\t * @default identity\n\t */\n\tidentityConnectorType?: string;\n\n\t/**\n\t * The background task component type.\n\t * @default background-task\n\t */\n\tbackgroundTaskComponentType?: string;\n\n\t/**\n\t * The event bus component type, defaults to no event bus.\n\t */\n\teventBusComponentType?: string;\n\n\t/**\n\t * The configuration for the connector.\n\t */\n\tconfig?: IImmutableProofServiceConfig;\n}\n"]}
1
+ {"version":3,"file":"IImmutableProofServiceConstructorOptions.js","sourceRoot":"","sources":["../../../src/models/IImmutableProofServiceConstructorOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IImmutableProofServiceConfig } from \"./IImmutableProofServiceConfig.js\";\n\n/**\n * Options for the immutable proof service constructor.\n */\nexport interface IImmutableProofServiceConstructorOptions {\n\t/**\n\t * The entity storage for proofs.\n\t * @default immutable-proof\n\t */\n\timmutableProofEntityStorageType?: string;\n\n\t/**\n\t * The notarization connector type.\n\t * @default notarization\n\t */\n\tnotarizationConnectorType?: string;\n\n\t/**\n\t * The logging component type.\n\t * @default logging\n\t */\n\tloggingComponentType?: string;\n\n\t/**\n\t * The identity connector type.\n\t * @default identity\n\t */\n\tidentityConnectorType?: string;\n\n\t/**\n\t * The background task component type.\n\t * @default background-task\n\t */\n\tbackgroundTaskComponentType?: string;\n\n\t/**\n\t * The event bus component type, defaults to no event bus.\n\t */\n\teventBusComponentType?: string;\n\n\t/**\n\t * The configuration for the connector.\n\t */\n\tconfig?: IImmutableProofServiceConfig;\n}\n"]}
@@ -24,9 +24,9 @@ export declare class ImmutableProof {
24
24
  */
25
25
  proofObjectIntegrity: string;
26
26
  /**
27
- * The verifiable storage id.
27
+ * The notarization id.
28
28
  */
29
- verifiableStorageId?: string;
29
+ notarizationId?: string;
30
30
  /**
31
31
  * The verifiable credential context.
32
32
  */
@@ -29,9 +29,13 @@ export declare class ImmutableProofService implements IImmutableProofComponent {
29
29
  /**
30
30
  * Create a new proof.
31
31
  * @param document The document to create the proof for.
32
+ * @param options Optional settings for the proof.
33
+ * @param options.deleteLock An ISO 8601 date-time string specifying when the notarization lock expires; if omitted no lock is applied.
32
34
  * @returns The id of the new proof.
33
35
  */
34
- create(document: IJsonLdNodeObject): Promise<string>;
36
+ create(document: IJsonLdNodeObject, options?: {
37
+ deleteLock?: string;
38
+ }): Promise<string>;
35
39
  /**
36
40
  * Get a proof.
37
41
  * @param id The id of the proof to get.
@@ -47,7 +51,7 @@ export declare class ImmutableProofService implements IImmutableProofComponent {
47
51
  */
48
52
  verify(id: string): Promise<IImmutableProofVerification>;
49
53
  /**
50
- * Remove the verifiable storage for the proof.
54
+ * Remove the notarization for the proof.
51
55
  * @param id The id of the proof to remove the storage from.
52
56
  * @returns Nothing.
53
57
  * @throws NotFoundError if the proof is not found.
@@ -9,10 +9,10 @@ export interface IImmutableProofServiceConstructorOptions {
9
9
  */
10
10
  immutableProofEntityStorageType?: string;
11
11
  /**
12
- * The verifiable storage.
13
- * @default verifiable-storage
12
+ * The notarization connector type.
13
+ * @default notarization
14
14
  */
15
- verifiableStorageType?: string;
15
+ notarizationConnectorType?: string;
16
16
  /**
17
17
  * The logging component type.
18
18
  * @default logging
package/docs/changelog.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.3-next.14](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-service-v0.0.3-next.13...immutable-proof-service-v0.0.3-next.14) (2026-05-28)
4
+
5
+
6
+ ### Features
7
+
8
+ * replace verifiable storage with notarization as immutable proof ([#41](https://github.com/iotaledger/twin-immutable-proof/issues/41)) ([54f2154](https://github.com/iotaledger/twin-immutable-proof/commit/54f215469b0bdc9ea94cad572ca13b8533144104))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * The following workspace dependencies were updated
14
+ * dependencies
15
+ * @twin.org/immutable-proof-models bumped from 0.0.3-next.13 to 0.0.3-next.14
16
+ * @twin.org/immutable-proof-task bumped from 0.0.3-next.13 to 0.0.3-next.14
17
+
18
+ ## [0.0.3-next.13](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-service-v0.0.3-next.12...immutable-proof-service-v0.0.3-next.13) (2026-05-20)
19
+
20
+
21
+ ### Features
22
+
23
+ * update dependencies ([1ec6b18](https://github.com/iotaledger/twin-immutable-proof/commit/1ec6b18e93198a8fc4935700863cdab1c3df7b64))
24
+
25
+
26
+ ### Dependencies
27
+
28
+ * The following workspace dependencies were updated
29
+ * dependencies
30
+ * @twin.org/immutable-proof-models bumped from 0.0.3-next.12 to 0.0.3-next.13
31
+ * @twin.org/immutable-proof-task bumped from 0.0.3-next.12 to 0.0.3-next.13
32
+
3
33
  ## [0.0.3-next.12](https://github.com/iotaledger/twin-immutable-proof/compare/immutable-proof-service-v0.0.3-next.11...immutable-proof-service-v0.0.3-next.12) (2026-05-12)
4
34
 
5
35
 
package/docs/examples.md CHANGED
@@ -68,7 +68,7 @@ const entity: ImmutableProof = {
68
68
  dateCreated: '2026-03-10T09:30:00.000Z',
69
69
  proofObjectId: 'https://example.org/documents/100',
70
70
  proofObjectIntegrity: 'yEr9VvYCGDh2Ww1YwQMehUy4LlW35mLhX8j8R8U6x0g=',
71
- verifiableStorageId: 'verifiable-storage:01JABCDE'
71
+ notarizationId: 'notarization:01JABCDE'
72
72
  };
73
73
 
74
74
  console.log(entity.organizationId); // did:iota:tst:issuer
@@ -215,11 +215,7 @@
215
215
  "proofPurpose": "assertionMethod",
216
216
  "proofValue": "7DdiPPYtxLjCD3wA1po2rv...",
217
217
  "verificationMethod": "did:iota:testnet:0xcb07cabaa2f23b7e53d8cdc4228efb351ebb270554d13bc382e4f94ca8d3136b#immutable-proof-assertion",
218
- "verifiableStorageId": "verifiable-storage:1234567890",
219
- "immutableReceipt": {
220
- "id": "immutable-receipt:1234567890",
221
- "type": "ImmutableReceipt"
222
- }
218
+ "notarizationId": "notarization:iota:0xabcdef1234567890"
223
219
  }
224
220
  }
225
221
  }
@@ -253,11 +249,7 @@
253
249
  "proofPurpose": "assertionMethod",
254
250
  "proofValue": "7DdiPPYtxLjCD3wA1po2rv...",
255
251
  "verificationMethod": "did:iota:testnet:0xcb07cabaa2f23b7e53d8cdc4228efb351ebb270554d13bc382e4f94ca8d3136b#immutable-proof-assertion",
256
- "verifiableStorageId": "verifiable-storage:1234567890",
257
- "immutableReceipt": {
258
- "id": "immutable-receipt:1234567890",
259
- "type": "ImmutableReceipt"
260
- }
252
+ "notarizationId": "notarization:iota:0xabcdef1234567890"
261
253
  }
262
254
  }
263
255
  }
@@ -539,6 +531,16 @@
539
531
  "properties": {
540
532
  "document": {
541
533
  "$ref": "https://schema.twindev.org/json-ld/JsonLdNodeObject"
534
+ },
535
+ "options": {
536
+ "type": "object",
537
+ "properties": {
538
+ "deleteLock": {
539
+ "type": "string",
540
+ "description": "An ISO 8601 date-time string specifying when the notarization lock expires.\nIf omitted, no deletion lock is applied."
541
+ }
542
+ },
543
+ "description": "Optional settings for the proof."
542
544
  }
543
545
  },
544
546
  "required": [
@@ -54,11 +54,11 @@ The associated integrity for the item.
54
54
 
55
55
  ***
56
56
 
57
- ### verifiableStorageId? {#verifiablestorageid}
57
+ ### notarizationId? {#notarizationid}
58
58
 
59
- > `optional` **verifiableStorageId?**: `string`
59
+ > `optional` **notarizationId?**: `string`
60
60
 
61
- The verifiable storage id.
61
+ The notarization id.
62
62
 
63
63
  ***
64
64
 
@@ -82,7 +82,7 @@ Nothing.
82
82
 
83
83
  ### create() {#create}
84
84
 
85
- > **create**(`document`): `Promise`\<`string`\>
85
+ > **create**(`document`, `options?`): `Promise`\<`string`\>
86
86
 
87
87
  Create a new proof.
88
88
 
@@ -94,6 +94,16 @@ Create a new proof.
94
94
 
95
95
  The document to create the proof for.
96
96
 
97
+ ##### options?
98
+
99
+ Optional settings for the proof.
100
+
101
+ ###### deleteLock?
102
+
103
+ `string`
104
+
105
+ An ISO 8601 date-time string specifying when the notarization lock expires; if omitted no lock is applied.
106
+
97
107
  #### Returns
98
108
 
99
109
  `Promise`\<`string`\>
@@ -170,7 +180,7 @@ NotFoundError if the proof is not found.
170
180
 
171
181
  > **removeVerifiable**(`id`): `Promise`\<`void`\>
172
182
 
173
- Remove the verifiable storage for the proof.
183
+ Remove the notarization for the proof.
174
184
 
175
185
  #### Parameters
176
186
 
@@ -18,16 +18,16 @@ immutable-proof
18
18
 
19
19
  ***
20
20
 
21
- ### verifiableStorageType? {#verifiablestoragetype}
21
+ ### notarizationConnectorType? {#notarizationconnectortype}
22
22
 
23
- > `optional` **verifiableStorageType?**: `string`
23
+ > `optional` **notarizationConnectorType?**: `string`
24
24
 
25
- The verifiable storage.
25
+ The notarization connector type.
26
26
 
27
27
  #### Default
28
28
 
29
29
  ```ts
30
- verifiable-storage
30
+ notarization
31
31
  ```
32
32
 
33
33
  ***
package/locales/en.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "createFailed": "Creating the proof failed",
6
6
  "getFailed": "Getting the proof failed",
7
7
  "verifyFailed": "Verifying the proof failed",
8
- "removeVerifiableFailed": "Removing verifiable entry from the Immutable Proof failed",
8
+ "removeNotarizationFailed": "Removing notarization entry from the Immutable Proof failed",
9
9
  "proofNotFound": "The proof with the Id \"{notFoundId}\" was not found",
10
10
  "createProofFailed": "Creating the immutable proof failed"
11
11
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twin.org/immutable-proof-service",
3
- "version": "0.0.3-next.12",
3
+ "version": "0.0.3-next.14",
4
4
  "description": "Core proof lifecycle service with route helpers for create, get, and verify operations",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,13 +24,13 @@
24
24
  "@twin.org/entity-storage-models": "next",
25
25
  "@twin.org/event-bus-models": "next",
26
26
  "@twin.org/identity-models": "next",
27
- "@twin.org/immutable-proof-models": "0.0.3-next.12",
28
- "@twin.org/immutable-proof-task": "0.0.3-next.12",
27
+ "@twin.org/immutable-proof-models": "0.0.3-next.14",
28
+ "@twin.org/immutable-proof-task": "0.0.3-next.14",
29
29
  "@twin.org/logging-models": "next",
30
30
  "@twin.org/nameof": "next",
31
+ "@twin.org/notarization-models": "next",
31
32
  "@twin.org/standards-w3c-did": "next",
32
33
  "@twin.org/vault-models": "next",
33
- "@twin.org/verifiable-storage-models": "next",
34
34
  "@twin.org/web": "next"
35
35
  },
36
36
  "main": "./dist/es/index.js",