@twin.org/verifiable-storage-service 0.0.3-next.1 → 0.0.3-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/es/verifiableStorageRoutes.js +2 -2
- package/dist/es/verifiableStorageRoutes.js.map +1 -1
- package/docs/changelog.md +231 -64
- package/docs/examples.md +29 -1
- package/docs/open-api/spec.json +8 -941
- package/docs/reference/classes/VerifiableStorageService.md +6 -6
- package/docs/reference/interfaces/IVerifiableStorageServiceConfig.md +2 -2
- package/docs/reference/interfaces/IVerifiableStorageServiceConstructorOptions.md +2 -2
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# TWIN Verifiable Storage Service
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This package provides the service layer for verifiable storage, exposing component logic and REST route definitions that can be mounted in API applications. It translates storage operations into a consistent service interface for upstream consumers.
|
|
4
|
+
|
|
5
|
+
The package is useful when you need to host verifiable storage capabilities behind HTTP endpoints while retaining the same contracts used by connectors and clients.
|
|
4
6
|
|
|
5
7
|
## Installation
|
|
6
8
|
|
|
@@ -55,7 +55,7 @@ export function generateRestRoutesVerifiableStorage(baseRouteName, componentName
|
|
|
55
55
|
body: {
|
|
56
56
|
receipt: {
|
|
57
57
|
"@context": "https://schema.twindev.org/verifiable-storage/",
|
|
58
|
-
type: "
|
|
58
|
+
type: "VerifiableStorageIotaReceipt2026"
|
|
59
59
|
},
|
|
60
60
|
id: "verifiable:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg=="
|
|
61
61
|
}
|
|
@@ -97,7 +97,7 @@ export function generateRestRoutesVerifiableStorage(baseRouteName, componentName
|
|
|
97
97
|
response: {
|
|
98
98
|
body: {
|
|
99
99
|
"@context": "https://schema.twindev.org/verifiable-storage/",
|
|
100
|
-
type: "
|
|
100
|
+
type: "VerifiableStorageIotaReceipt2026"
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifiableStorageRoutes.js","sourceRoot":"","sources":["../../src/verifiableStorageRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type {\n\tIHttpRequestContext,\n\tINoContentResponse,\n\tIRestRoute,\n\tITag\n} from \"@twin.org/api-models\";\nimport { ContextIdHelper, ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport { ComponentFactory, Converter, Guards, Is } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type {\n\tIVerifiableStorageComponent,\n\tIVerifiableStorageCreateRequest,\n\tIVerifiableStorageCreateResponse,\n\tIVerifiableStorageGetRequest,\n\tIVerifiableStorageGetResponse,\n\tIVerifiableStorageRemoveRequest,\n\tIVerifiableStorageUpdateRequest,\n\tIVerifiableStorageUpdateResponse\n} from \"@twin.org/verifiable-storage-models\";\nimport { HeaderTypes, HttpStatusCode } from \"@twin.org/web\";\n\n/**\n * The source used when communicating about these routes.\n */\nconst ROUTES_SOURCE = \"verifiableStorageRoutes\";\n\n/**\n * The tag to associate with the routes.\n */\nexport const tagsVerifiableStorage: ITag[] = [\n\t{\n\t\tname: \"VerifiableStorage\",\n\t\tdescription: \"Endpoints which are modelled to access a verifiable storage.\"\n\t}\n];\n\n/**\n * The REST routes for VerifiableStorage.\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 generateRestRoutesVerifiableStorage(\n\tbaseRouteName: string,\n\tcomponentName: string\n): IRestRoute[] {\n\tconst createRoute: IRestRoute<IVerifiableStorageCreateRequest, IVerifiableStorageCreateResponse> =\n\t\t{\n\t\t\toperationId: \"verifiableStorageCreate\",\n\t\t\tsummary: \"Create an item in verifiable storage\",\n\t\t\ttag: tagsVerifiableStorage[0].name,\n\t\t\tmethod: \"POST\",\n\t\t\tpath: `${baseRouteName}/`,\n\t\t\thandler: async (httpRequestContext, request) =>\n\t\t\t\tverifiableStorageCreate(httpRequestContext, componentName, request),\n\t\t\trequestType: {\n\t\t\t\ttype: nameof<IVerifiableStorageCreateRequest>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"verifiableStorageCreateRequestExample\",\n\t\t\t\t\t\trequest: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\tdata: \"SGVsbG8gd29ybGQ=\"\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\tresponseType: [\n\t\t\t\t{\n\t\t\t\t\ttype: nameof<IVerifiableStorageCreateResponse>(),\n\t\t\t\t\texamples: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"verifiableStorageCreateResponseExample\",\n\t\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\t\tstatusCode: HttpStatusCode.created,\n\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t[HeaderTypes.Location]:\n\t\t\t\t\t\t\t\t\t\t\"verifiable:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\treceipt: {\n\t\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.twindev.org/verifiable-storage/\",\n\t\t\t\t\t\t\t\t\t\ttype: \"VerifiableStorageIotaReceipt\"\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tid: \"verifiable:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\n\t\t\t\t\t\t\t\t}\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\n\tconst updateRoute: IRestRoute<IVerifiableStorageUpdateRequest, IVerifiableStorageUpdateResponse> =\n\t\t{\n\t\t\toperationId: \"verifiableStorageUpdate\",\n\t\t\tsummary: \"Update an item in verifiable storage\",\n\t\t\ttag: tagsVerifiableStorage[0].name,\n\t\t\tmethod: \"PUT\",\n\t\t\tpath: `${baseRouteName}/:id`,\n\t\t\thandler: async (httpRequestContext, request) =>\n\t\t\t\tverifiableStorageUpdate(httpRequestContext, componentName, request),\n\t\t\trequestType: {\n\t\t\t\ttype: nameof<IVerifiableStorageUpdateRequest>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"verifiableStorageUpdateRequestExample\",\n\t\t\t\t\t\trequest: {\n\t\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\t\tid: \"verifiable:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\tdata: \"SGVsbG8gd29ybGQ=\"\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\tresponseType: [\n\t\t\t\t{\n\t\t\t\t\ttype: nameof<IVerifiableStorageUpdateResponse>(),\n\t\t\t\t\texamples: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"verifiableStorageUpdateResponseExample\",\n\t\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.twindev.org/verifiable-storage/\",\n\t\t\t\t\t\t\t\t\ttype: \"VerifiableStorageIotaReceipt\"\n\t\t\t\t\t\t\t\t}\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\n\tconst getRoute: IRestRoute<IVerifiableStorageGetRequest, IVerifiableStorageGetResponse> = {\n\t\toperationId: \"verifiableStorageGet\",\n\t\tsummary: \"Get an verifiable storage item\",\n\t\ttag: tagsVerifiableStorage[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/:id`,\n\t\thandler: async (httpRequestContext, request) => verifiableStorageGet(componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IVerifiableStorageGetRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"verifiableStorageGetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"verifiable:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\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<IVerifiableStorageGetResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"verifiableStorageGetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\tdata: \"SGVsbG8gd29ybGQ=\",\n\t\t\t\t\t\t\t\treceipt: {\n\t\t\t\t\t\t\t\t\t\"@context\": \"https://www.w3.org/ns/activitystreams\",\n\t\t\t\t\t\t\t\t\ttype: \"Create\",\n\t\t\t\t\t\t\t\t\tactor: \"https://example.org/actor\",\n\t\t\t\t\t\t\t\t\tobject: \"https://example.org/object\"\n\t\t\t\t\t\t\t\t}\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};\n\n\tconst removeRoute: IRestRoute<IVerifiableStorageRemoveRequest, INoContentResponse> = {\n\t\toperationId: \"verifiableStorageRemove\",\n\t\tsummary: \"Remove an item from verifiable storage\",\n\t\ttag: tagsVerifiableStorage[0].name,\n\t\tmethod: \"DELETE\",\n\t\tpath: `${baseRouteName}/:id`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tverifiableStorageRemove(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IVerifiableStorageRemoveRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"verifiableStorageRemoveRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"verifiable:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\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<INoContentResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\treturn [createRoute, updateRoute, getRoute, removeRoute];\n}\n\n/**\n * Create a verifiable storage item.\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 verifiableStorageCreate(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IVerifiableStorageCreateRequest\n): Promise<IVerifiableStorageCreateResponse> {\n\tGuards.object<IVerifiableStorageCreateRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IVerifiableStorageCreateRequest[\"body\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.body),\n\t\trequest.body\n\t);\n\tGuards.stringBase64(ROUTES_SOURCE, nameof(request.body.data), request.body.data);\n\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\tconst component = ComponentFactory.get<IVerifiableStorageComponent>(componentName);\n\tconst result = await component.create(\n\t\tConverter.base64ToBytes(request.body.data),\n\t\trequest.body.allowList,\n\t\t{\n\t\t\tmaxAllowListSize: request.body.maxAllowListSize\n\t\t},\n\t\trequest.body.namespace,\n\t\tcontextIds[ContextIdKeys.Organization]\n\t);\n\treturn {\n\t\tstatusCode: HttpStatusCode.created,\n\t\theaders: {\n\t\t\t[HeaderTypes.Location]: result.id\n\t\t},\n\t\tbody: {\n\t\t\treceipt: result.receipt,\n\t\t\tid: result.id\n\t\t}\n\t};\n}\n\n/**\n * UPdate an Verifiable Storage.\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 verifiableStorageUpdate(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IVerifiableStorageUpdateRequest\n): Promise<IVerifiableStorageUpdateResponse> {\n\tGuards.object<IVerifiableStorageUpdateRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IVerifiableStorageGetRequest[\"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\tGuards.object<IVerifiableStorageUpdateRequest[\"body\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.body),\n\t\trequest.body\n\t);\n\tGuards.stringBase64(ROUTES_SOURCE, nameof(request.body.data), request.body.data);\n\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\tconst component = ComponentFactory.get<IVerifiableStorageComponent>(componentName);\n\tconst result = await component.update(\n\t\trequest.pathParams.id,\n\t\tIs.stringBase64(request.body.data) ? Converter.base64ToBytes(request.body.data) : undefined,\n\t\trequest.body.allowList,\n\t\tcontextIds[ContextIdKeys.Organization]\n\t);\n\treturn {\n\t\tbody: result\n\t};\n}\n\n/**\n * Get an Verifiable Storage.\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 verifiableStorageGet(\n\tcomponentName: string,\n\trequest: IVerifiableStorageGetRequest\n): Promise<IVerifiableStorageGetResponse> {\n\tGuards.object<IVerifiableStorageGetRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IVerifiableStorageGetRequest[\"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 component = ComponentFactory.get<IVerifiableStorageComponent>(componentName);\n\tconst result = await component.get(request.pathParams.id, request.body);\n\treturn {\n\t\tbody: {\n\t\t\tdata: Is.uint8Array(result.data) ? Converter.bytesToBase64(result.data) : undefined,\n\t\t\treceipt: result.receipt,\n\t\t\tallowList: result.allowList\n\t\t}\n\t};\n}\n\n/**\n * Remove a verifiable storage item.\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 verifiableStorageRemove(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IVerifiableStorageRemoveRequest\n): Promise<INoContentResponse> {\n\tGuards.object<IVerifiableStorageRemoveRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IVerifiableStorageRemoveRequest[\"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 contextIds = await ContextIdStore.getContextIds();\n\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\tconst component = ComponentFactory.get<IVerifiableStorageComponent>(componentName);\n\tawait component.remove(request.pathParams.id, contextIds[ContextIdKeys.Organization]);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.noContent\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"verifiableStorageRoutes.js","sourceRoot":"","sources":["../../src/verifiableStorageRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type {\n\tIHttpRequestContext,\n\tINoContentResponse,\n\tIRestRoute,\n\tITag\n} from \"@twin.org/api-models\";\nimport { ContextIdHelper, ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport { ComponentFactory, Converter, Guards, Is } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type {\n\tIVerifiableStorageComponent,\n\tIVerifiableStorageCreateRequest,\n\tIVerifiableStorageCreateResponse,\n\tIVerifiableStorageGetRequest,\n\tIVerifiableStorageGetResponse,\n\tIVerifiableStorageRemoveRequest,\n\tIVerifiableStorageUpdateRequest,\n\tIVerifiableStorageUpdateResponse\n} from \"@twin.org/verifiable-storage-models\";\nimport { HeaderTypes, HttpStatusCode } from \"@twin.org/web\";\n\n/**\n * The source used when communicating about these routes.\n */\nconst ROUTES_SOURCE = \"verifiableStorageRoutes\";\n\n/**\n * The tag to associate with the routes.\n */\nexport const tagsVerifiableStorage: ITag[] = [\n\t{\n\t\tname: \"VerifiableStorage\",\n\t\tdescription: \"Endpoints which are modelled to access a verifiable storage.\"\n\t}\n];\n\n/**\n * The REST routes for VerifiableStorage.\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 generateRestRoutesVerifiableStorage(\n\tbaseRouteName: string,\n\tcomponentName: string\n): IRestRoute[] {\n\tconst createRoute: IRestRoute<IVerifiableStorageCreateRequest, IVerifiableStorageCreateResponse> =\n\t\t{\n\t\t\toperationId: \"verifiableStorageCreate\",\n\t\t\tsummary: \"Create an item in verifiable storage\",\n\t\t\ttag: tagsVerifiableStorage[0].name,\n\t\t\tmethod: \"POST\",\n\t\t\tpath: `${baseRouteName}/`,\n\t\t\thandler: async (httpRequestContext, request) =>\n\t\t\t\tverifiableStorageCreate(httpRequestContext, componentName, request),\n\t\t\trequestType: {\n\t\t\t\ttype: nameof<IVerifiableStorageCreateRequest>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"verifiableStorageCreateRequestExample\",\n\t\t\t\t\t\trequest: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\tdata: \"SGVsbG8gd29ybGQ=\"\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\tresponseType: [\n\t\t\t\t{\n\t\t\t\t\ttype: nameof<IVerifiableStorageCreateResponse>(),\n\t\t\t\t\texamples: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"verifiableStorageCreateResponseExample\",\n\t\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\t\tstatusCode: HttpStatusCode.created,\n\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t[HeaderTypes.Location]:\n\t\t\t\t\t\t\t\t\t\t\"verifiable:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\treceipt: {\n\t\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.twindev.org/verifiable-storage/\",\n\t\t\t\t\t\t\t\t\t\ttype: \"VerifiableStorageIotaReceipt2026\"\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tid: \"verifiable:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\n\t\t\t\t\t\t\t\t}\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\n\tconst updateRoute: IRestRoute<IVerifiableStorageUpdateRequest, IVerifiableStorageUpdateResponse> =\n\t\t{\n\t\t\toperationId: \"verifiableStorageUpdate\",\n\t\t\tsummary: \"Update an item in verifiable storage\",\n\t\t\ttag: tagsVerifiableStorage[0].name,\n\t\t\tmethod: \"PUT\",\n\t\t\tpath: `${baseRouteName}/:id`,\n\t\t\thandler: async (httpRequestContext, request) =>\n\t\t\t\tverifiableStorageUpdate(httpRequestContext, componentName, request),\n\t\t\trequestType: {\n\t\t\t\ttype: nameof<IVerifiableStorageUpdateRequest>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"verifiableStorageUpdateRequestExample\",\n\t\t\t\t\t\trequest: {\n\t\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\t\tid: \"verifiable:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\tdata: \"SGVsbG8gd29ybGQ=\"\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\tresponseType: [\n\t\t\t\t{\n\t\t\t\t\ttype: nameof<IVerifiableStorageUpdateResponse>(),\n\t\t\t\t\texamples: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"verifiableStorageUpdateResponseExample\",\n\t\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.twindev.org/verifiable-storage/\",\n\t\t\t\t\t\t\t\t\ttype: \"VerifiableStorageIotaReceipt2026\"\n\t\t\t\t\t\t\t\t}\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\n\tconst getRoute: IRestRoute<IVerifiableStorageGetRequest, IVerifiableStorageGetResponse> = {\n\t\toperationId: \"verifiableStorageGet\",\n\t\tsummary: \"Get an verifiable storage item\",\n\t\ttag: tagsVerifiableStorage[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/:id`,\n\t\thandler: async (httpRequestContext, request) => verifiableStorageGet(componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IVerifiableStorageGetRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"verifiableStorageGetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"verifiable:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\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<IVerifiableStorageGetResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"verifiableStorageGetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\tdata: \"SGVsbG8gd29ybGQ=\",\n\t\t\t\t\t\t\t\treceipt: {\n\t\t\t\t\t\t\t\t\t\"@context\": \"https://www.w3.org/ns/activitystreams\",\n\t\t\t\t\t\t\t\t\ttype: \"Create\",\n\t\t\t\t\t\t\t\t\tactor: \"https://example.org/actor\",\n\t\t\t\t\t\t\t\t\tobject: \"https://example.org/object\"\n\t\t\t\t\t\t\t\t}\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};\n\n\tconst removeRoute: IRestRoute<IVerifiableStorageRemoveRequest, INoContentResponse> = {\n\t\toperationId: \"verifiableStorageRemove\",\n\t\tsummary: \"Remove an item from verifiable storage\",\n\t\ttag: tagsVerifiableStorage[0].name,\n\t\tmethod: \"DELETE\",\n\t\tpath: `${baseRouteName}/:id`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tverifiableStorageRemove(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IVerifiableStorageRemoveRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"verifiableStorageRemoveRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"verifiable:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\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<INoContentResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\treturn [createRoute, updateRoute, getRoute, removeRoute];\n}\n\n/**\n * Create a verifiable storage item.\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 verifiableStorageCreate(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IVerifiableStorageCreateRequest\n): Promise<IVerifiableStorageCreateResponse> {\n\tGuards.object<IVerifiableStorageCreateRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IVerifiableStorageCreateRequest[\"body\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.body),\n\t\trequest.body\n\t);\n\tGuards.stringBase64(ROUTES_SOURCE, nameof(request.body.data), request.body.data);\n\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\tconst component = ComponentFactory.get<IVerifiableStorageComponent>(componentName);\n\tconst result = await component.create(\n\t\tConverter.base64ToBytes(request.body.data),\n\t\trequest.body.allowList,\n\t\t{\n\t\t\tmaxAllowListSize: request.body.maxAllowListSize\n\t\t},\n\t\trequest.body.namespace,\n\t\tcontextIds[ContextIdKeys.Organization]\n\t);\n\treturn {\n\t\tstatusCode: HttpStatusCode.created,\n\t\theaders: {\n\t\t\t[HeaderTypes.Location]: result.id\n\t\t},\n\t\tbody: {\n\t\t\treceipt: result.receipt,\n\t\t\tid: result.id\n\t\t}\n\t};\n}\n\n/**\n * UPdate an Verifiable Storage.\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 verifiableStorageUpdate(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IVerifiableStorageUpdateRequest\n): Promise<IVerifiableStorageUpdateResponse> {\n\tGuards.object<IVerifiableStorageUpdateRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IVerifiableStorageGetRequest[\"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\tGuards.object<IVerifiableStorageUpdateRequest[\"body\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.body),\n\t\trequest.body\n\t);\n\tGuards.stringBase64(ROUTES_SOURCE, nameof(request.body.data), request.body.data);\n\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\tconst component = ComponentFactory.get<IVerifiableStorageComponent>(componentName);\n\tconst result = await component.update(\n\t\trequest.pathParams.id,\n\t\tIs.stringBase64(request.body.data) ? Converter.base64ToBytes(request.body.data) : undefined,\n\t\trequest.body.allowList,\n\t\tcontextIds[ContextIdKeys.Organization]\n\t);\n\treturn {\n\t\tbody: result\n\t};\n}\n\n/**\n * Get an Verifiable Storage.\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 verifiableStorageGet(\n\tcomponentName: string,\n\trequest: IVerifiableStorageGetRequest\n): Promise<IVerifiableStorageGetResponse> {\n\tGuards.object<IVerifiableStorageGetRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IVerifiableStorageGetRequest[\"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 component = ComponentFactory.get<IVerifiableStorageComponent>(componentName);\n\tconst result = await component.get(request.pathParams.id, request.body);\n\treturn {\n\t\tbody: {\n\t\t\tdata: Is.uint8Array(result.data) ? Converter.bytesToBase64(result.data) : undefined,\n\t\t\treceipt: result.receipt,\n\t\t\tallowList: result.allowList\n\t\t}\n\t};\n}\n\n/**\n * Remove a verifiable storage item.\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 verifiableStorageRemove(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IVerifiableStorageRemoveRequest\n): Promise<INoContentResponse> {\n\tGuards.object<IVerifiableStorageRemoveRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IVerifiableStorageRemoveRequest[\"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 contextIds = await ContextIdStore.getContextIds();\n\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\tconst component = ComponentFactory.get<IVerifiableStorageComponent>(componentName);\n\tawait component.remove(request.pathParams.id, contextIds[ContextIdKeys.Organization]);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.noContent\n\t};\n}\n"]}
|