@twin.org/nft-service 0.9.1-next.1 → 0.9.1-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/es/nftRoutes.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// Copyright 2024 IOTA Stiftung.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0.
|
|
3
|
+
import { HttpContextIdKeys, HttpHeaderHelper, HttpUrlHelper } from "@twin.org/api-models";
|
|
1
4
|
import { ContextIdHelper, ContextIdKeys, ContextIdStore } from "@twin.org/context";
|
|
2
5
|
import { ComponentFactory, Guards } from "@twin.org/core";
|
|
3
6
|
import { HeaderTypes, HttpStatusCode } from "@twin.org/web";
|
|
@@ -27,7 +30,7 @@ export function generateRestRoutesNft(baseRouteName, componentName) {
|
|
|
27
30
|
tag: tagsNft[0].name,
|
|
28
31
|
method: "POST",
|
|
29
32
|
path: `${baseRouteName}/`,
|
|
30
|
-
handler: async (httpRequestContext, request) => nftMint(httpRequestContext, componentName, request),
|
|
33
|
+
handler: async (httpRequestContext, request) => nftMint(httpRequestContext, componentName, request, baseRouteName),
|
|
31
34
|
requestType: {
|
|
32
35
|
type: "INftMintRequest",
|
|
33
36
|
examples: [
|
|
@@ -208,9 +211,10 @@ export function generateRestRoutesNft(baseRouteName, componentName) {
|
|
|
208
211
|
* @param httpRequestContext The request context for the API.
|
|
209
212
|
* @param componentName The name of the component to use in the routes.
|
|
210
213
|
* @param request The request.
|
|
214
|
+
* @param baseRouteName The base route name for the API.
|
|
211
215
|
* @returns A created response containing the location header with the new NFT id.
|
|
212
216
|
*/
|
|
213
|
-
export async function nftMint(httpRequestContext, componentName, request) {
|
|
217
|
+
export async function nftMint(httpRequestContext, componentName, request, baseRouteName) {
|
|
214
218
|
Guards.object(ROUTES_SOURCE, "request", request);
|
|
215
219
|
Guards.object(ROUTES_SOURCE, "request.body", request.body);
|
|
216
220
|
Guards.stringValue(ROUTES_SOURCE, "request.body.tag", request.body.tag);
|
|
@@ -218,11 +222,12 @@ export async function nftMint(httpRequestContext, componentName, request) {
|
|
|
218
222
|
ContextIdHelper.guard(contextIds, ContextIdKeys.Organization);
|
|
219
223
|
const component = ComponentFactory.get(componentName);
|
|
220
224
|
const id = await component.mint(request.body.tag, request.body.immutableMetadata, request.body.metadata, request.body.namespace, contextIds[ContextIdKeys.Organization]);
|
|
225
|
+
const publicOrigin = contextIds?.[HttpContextIdKeys.PublicOrigin];
|
|
226
|
+
const headers = {};
|
|
227
|
+
HttpHeaderHelper.buildId(headers, id, HttpUrlHelper.combineOriginPath(publicOrigin, `${baseRouteName}/users/:id`));
|
|
221
228
|
return {
|
|
222
229
|
statusCode: HttpStatusCode.created,
|
|
223
|
-
headers
|
|
224
|
-
[HeaderTypes.Location]: id
|
|
225
|
-
}
|
|
230
|
+
headers
|
|
226
231
|
};
|
|
227
232
|
}
|
|
228
233
|
/**
|
package/dist/es/nftRoutes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nftRoutes.js","sourceRoot":"","sources":["../../src/nftRoutes.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\tINoContentResponse,\n\tIRestRoute,\n\tITag\n} from \"@twin.org/api-models\";\nimport { ContextIdHelper, ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport { ComponentFactory, Guards } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type {\n\tINftBurnRequest,\n\tINftComponent,\n\tINftMintRequest,\n\tINftResolveRequest,\n\tINftResolveResponse,\n\tINftTransferRequest,\n\tINftUpdateRequest\n} from \"@twin.org/nft-models\";\nimport { HeaderTypes, HttpStatusCode } from \"@twin.org/web\";\n\n/**\n * The source used when communicating about these routes.\n */\nconst ROUTES_SOURCE = \"nftRoutes\";\n\n/**\n * The tag to associate with the routes.\n */\nexport const tagsNft: ITag[] = [\n\t{\n\t\tname: \"NFT\",\n\t\tdescription: \"Endpoints which are modelled to access an NFT contract.\"\n\t}\n];\n\n/**\n * The REST routes for NFT.\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 generateRestRoutesNft(baseRouteName: string, componentName: string): IRestRoute[] {\n\tconst mintRoute: IRestRoute<INftMintRequest, ICreatedResponse> = {\n\t\toperationId: \"nftMint\",\n\t\tsummary: \"Mint an NFT\",\n\t\ttag: tagsNft[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tnftMint(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<INftMintRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"nftMintExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\ttag: \"MY-NFT\",\n\t\t\t\t\t\t\timmutableMetadata: {\n\t\t\t\t\t\t\t\tdocName: \"bill-of-lading\",\n\t\t\t\t\t\t\t\tmimeType: \"application/pdf\",\n\t\t\t\t\t\t\t\tfingerprint: \"0xf0b95a98b3dbc5ce1c9ce59d70af95a97599f100a7296ecdd1eb108bebfa047f\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\tdata: \"tst1prctjk5ck0dutnsunnje6u90jk5htx03qznjjmkd6843pzltlgz87srjzzv\"\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: \"nftMintResponseExample\",\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]:\n\t\t\t\t\t\t\t\t\t\"nft:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\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 resolveRoute: IRestRoute<INftResolveRequest, INftResolveResponse> = {\n\t\toperationId: \"nftResolve\",\n\t\tsummary: \"Resolve an NFT\",\n\t\ttag: tagsNft[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/:id`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tnftResolve(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<INftResolveRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"nftResolveExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"nft: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<INftResolveResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"nftResolveResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\tissuer: \"0x85ef62ea94fc4eeeeeddf6acc3b566e988e613081d0b93cc54ed831ed4c18d44\",\n\t\t\t\t\t\t\t\tissuerIdentityId:\n\t\t\t\t\t\t\t\t\t\"0xa1d80bee7fdb4fd91ae45c6e539209f73cb743b7da9db3e21322ea75af1878c0\",\n\t\t\t\t\t\t\t\ttag: \"MY-NFT\",\n\t\t\t\t\t\t\t\timmutableMetadata: {\n\t\t\t\t\t\t\t\t\tdocName: \"bill-of-lading\",\n\t\t\t\t\t\t\t\t\tmimeType: \"application/pdf\",\n\t\t\t\t\t\t\t\t\tfingerprint: \"0xf0b95a98b3dbc5ce1c9ce59d70af95a97599f100a7296ecdd1eb108bebfa047f\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\tdata: \"AAAAA\"\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 burnRoute: IRestRoute<INftBurnRequest, INoContentResponse> = {\n\t\toperationId: \"nftBurn\",\n\t\tsummary: \"Burn an NFT\",\n\t\ttag: tagsNft[0].name,\n\t\tmethod: \"DELETE\",\n\t\tpath: `${baseRouteName}/:id`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tnftBurn(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<INftBurnRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"nftBurnExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"nft: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\tconst transferRoute: IRestRoute<INftTransferRequest, INoContentResponse> = {\n\t\toperationId: \"nftTransfer\",\n\t\tsummary: \"Transfer an NFT\",\n\t\ttag: tagsNft[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/:id/transfer`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tnftTransfer(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<INftTransferRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"nftTransferExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"nft:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\trecipientAddress: \"tst1prctjk5ck0dutnsunnje6u90jk5htx03qznjjmkd6843pzltlgz87srjzzv\",\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\tdata: \"AAAAA\"\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<INoContentResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\tconst updateRoute: IRestRoute<INftUpdateRequest, INoContentResponse> = {\n\t\toperationId: \"nftUpdate\",\n\t\tsummary: \"Update an NFT\",\n\t\ttag: tagsNft[0].name,\n\t\tmethod: \"PUT\",\n\t\tpath: `${baseRouteName}/:id`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tnftUpdate(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<INftUpdateRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"nftUpdateExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"nft:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\tdata: \"AAAAA\"\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<INoContentResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\treturn [mintRoute, resolveRoute, burnRoute, transferRoute, updateRoute];\n}\n\n/**\n * Mint an NFT.\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 A created response containing the location header with the new NFT id.\n */\nexport async function nftMint(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: INftMintRequest\n): Promise<ICreatedResponse> {\n\tGuards.object<INftMintRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<INftMintRequest[\"body\"]>(ROUTES_SOURCE, nameof(request.body), request.body);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.body.tag), request.body.tag);\n\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\tconst component = ComponentFactory.get<INftComponent>(componentName);\n\tconst id = await component.mint(\n\t\trequest.body.tag,\n\t\trequest.body.immutableMetadata,\n\t\trequest.body.metadata,\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]: id\n\t\t}\n\t};\n}\n\n/**\n * Resolve an NFT.\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 A response containing the resolved NFT data.\n */\nexport async function nftResolve(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: INftResolveRequest\n): Promise<INftResolveResponse> {\n\tGuards.object<INftResolveRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<INftResolveRequest[\"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<INftComponent>(componentName);\n\tconst result = await component.resolve(\n\t\trequest.pathParams.id,\n\t\tcontextIds[ContextIdKeys.Organization]\n\t);\n\treturn {\n\t\tbody: result\n\t};\n}\n\n/**\n * Burn an NFT.\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 A no-content response indicating the NFT was burned successfully.\n */\nexport async function nftBurn(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: INftBurnRequest\n): Promise<INoContentResponse> {\n\tGuards.object<INftBurnRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<INftBurnRequest[\"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<INftComponent>(componentName);\n\tawait component.burn(request.pathParams.id, contextIds[ContextIdKeys.Organization]);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.noContent\n\t};\n}\n\n/**\n * Transfer an NFT.\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 A no-content response indicating the NFT was transferred successfully.\n */\nexport async function nftTransfer(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: INftTransferRequest\n): Promise<INoContentResponse> {\n\tGuards.object<INftTransferRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<INftTransferRequest[\"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<INftTransferRequest[\"body\"]>(ROUTES_SOURCE, nameof(request.body), request.body);\n\tGuards.stringValue(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.body.recipientAddress),\n\t\trequest.body.recipientAddress\n\t);\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\tconst component = ComponentFactory.get<INftComponent>(componentName);\n\tawait component.transfer(\n\t\trequest.pathParams.id,\n\t\trequest.body.recipientAddress,\n\t\trequest.body.metadata,\n\t\tcontextIds[ContextIdKeys.Organization]\n\t);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.noContent\n\t};\n}\n\n/**\n * Update an NFT.\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 A no-content response indicating the NFT metadata was updated successfully.\n */\nexport async function nftUpdate(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: INftUpdateRequest\n): Promise<INoContentResponse> {\n\tGuards.object<INftUpdateRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<INftUpdateRequest[\"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<INftUpdateRequest[\"body\"]>(ROUTES_SOURCE, nameof(request.body), request.body);\n\tGuards.object(ROUTES_SOURCE, nameof(request.body.metadata), request.body.metadata);\n\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\tconst component = ComponentFactory.get<INftComponent>(componentName);\n\tawait component.update(\n\t\trequest.pathParams.id,\n\t\trequest.body.metadata,\n\t\tcontextIds[ContextIdKeys.Organization]\n\t);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.noContent\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"nftRoutes.js","sourceRoot":"","sources":["../../src/nftRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tHttpContextIdKeys,\n\tHttpHeaderHelper,\n\tHttpUrlHelper,\n\ttype ICreatedResponse,\n\ttype IHttpRequestContext,\n\ttype INoContentResponse,\n\ttype IRestRoute,\n\ttype ITag\n} from \"@twin.org/api-models\";\nimport { ContextIdHelper, ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport { ComponentFactory, Guards } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type {\n\tINftBurnRequest,\n\tINftComponent,\n\tINftMintRequest,\n\tINftResolveRequest,\n\tINftResolveResponse,\n\tINftTransferRequest,\n\tINftUpdateRequest\n} from \"@twin.org/nft-models\";\nimport { HeaderTypes, HttpStatusCode, type IHttpHeaders } from \"@twin.org/web\";\n\n/**\n * The source used when communicating about these routes.\n */\nconst ROUTES_SOURCE = \"nftRoutes\";\n\n/**\n * The tag to associate with the routes.\n */\nexport const tagsNft: ITag[] = [\n\t{\n\t\tname: \"NFT\",\n\t\tdescription: \"Endpoints which are modelled to access an NFT contract.\"\n\t}\n];\n\n/**\n * The REST routes for NFT.\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 generateRestRoutesNft(baseRouteName: string, componentName: string): IRestRoute[] {\n\tconst mintRoute: IRestRoute<INftMintRequest, ICreatedResponse> = {\n\t\toperationId: \"nftMint\",\n\t\tsummary: \"Mint an NFT\",\n\t\ttag: tagsNft[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tnftMint(httpRequestContext, componentName, request, baseRouteName),\n\t\trequestType: {\n\t\t\ttype: nameof<INftMintRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"nftMintExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\ttag: \"MY-NFT\",\n\t\t\t\t\t\t\timmutableMetadata: {\n\t\t\t\t\t\t\t\tdocName: \"bill-of-lading\",\n\t\t\t\t\t\t\t\tmimeType: \"application/pdf\",\n\t\t\t\t\t\t\t\tfingerprint: \"0xf0b95a98b3dbc5ce1c9ce59d70af95a97599f100a7296ecdd1eb108bebfa047f\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\tdata: \"tst1prctjk5ck0dutnsunnje6u90jk5htx03qznjjmkd6843pzltlgz87srjzzv\"\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: \"nftMintResponseExample\",\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]:\n\t\t\t\t\t\t\t\t\t\"nft:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\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 resolveRoute: IRestRoute<INftResolveRequest, INftResolveResponse> = {\n\t\toperationId: \"nftResolve\",\n\t\tsummary: \"Resolve an NFT\",\n\t\ttag: tagsNft[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/:id`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tnftResolve(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<INftResolveRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"nftResolveExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"nft: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<INftResolveResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"nftResolveResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\tissuer: \"0x85ef62ea94fc4eeeeeddf6acc3b566e988e613081d0b93cc54ed831ed4c18d44\",\n\t\t\t\t\t\t\t\tissuerIdentityId:\n\t\t\t\t\t\t\t\t\t\"0xa1d80bee7fdb4fd91ae45c6e539209f73cb743b7da9db3e21322ea75af1878c0\",\n\t\t\t\t\t\t\t\ttag: \"MY-NFT\",\n\t\t\t\t\t\t\t\timmutableMetadata: {\n\t\t\t\t\t\t\t\t\tdocName: \"bill-of-lading\",\n\t\t\t\t\t\t\t\t\tmimeType: \"application/pdf\",\n\t\t\t\t\t\t\t\t\tfingerprint: \"0xf0b95a98b3dbc5ce1c9ce59d70af95a97599f100a7296ecdd1eb108bebfa047f\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\tdata: \"AAAAA\"\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 burnRoute: IRestRoute<INftBurnRequest, INoContentResponse> = {\n\t\toperationId: \"nftBurn\",\n\t\tsummary: \"Burn an NFT\",\n\t\ttag: tagsNft[0].name,\n\t\tmethod: \"DELETE\",\n\t\tpath: `${baseRouteName}/:id`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tnftBurn(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<INftBurnRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"nftBurnExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"nft: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\tconst transferRoute: IRestRoute<INftTransferRequest, INoContentResponse> = {\n\t\toperationId: \"nftTransfer\",\n\t\tsummary: \"Transfer an NFT\",\n\t\ttag: tagsNft[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/:id/transfer`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tnftTransfer(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<INftTransferRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"nftTransferExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"nft:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\trecipientAddress: \"tst1prctjk5ck0dutnsunnje6u90jk5htx03qznjjmkd6843pzltlgz87srjzzv\",\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\tdata: \"AAAAA\"\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<INoContentResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\tconst updateRoute: IRestRoute<INftUpdateRequest, INoContentResponse> = {\n\t\toperationId: \"nftUpdate\",\n\t\tsummary: \"Update an NFT\",\n\t\ttag: tagsNft[0].name,\n\t\tmethod: \"PUT\",\n\t\tpath: `${baseRouteName}/:id`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tnftUpdate(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<INftUpdateRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"nftUpdateExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"nft:iota:aW90YS1uZnQ6dHN0OjB4NzYyYjljNDllYTg2OWUwZWJkYTliYmZhNzY5Mzk0NDdhNDI4ZGNmMTc4YzVkMTVhYjQ0N2UyZDRmYmJiNGViMg==\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\tdata: \"AAAAA\"\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<INoContentResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\treturn [mintRoute, resolveRoute, burnRoute, transferRoute, updateRoute];\n}\n\n/**\n * Mint an NFT.\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 * @param baseRouteName The base route name for the API.\n * @returns A created response containing the location header with the new NFT id.\n */\nexport async function nftMint(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: INftMintRequest,\n\tbaseRouteName: string\n): Promise<ICreatedResponse> {\n\tGuards.object<INftMintRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<INftMintRequest[\"body\"]>(ROUTES_SOURCE, nameof(request.body), request.body);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.body.tag), request.body.tag);\n\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\tconst component = ComponentFactory.get<INftComponent>(componentName);\n\tconst id = await component.mint(\n\t\trequest.body.tag,\n\t\trequest.body.immutableMetadata,\n\t\trequest.body.metadata,\n\t\trequest.body.namespace,\n\t\tcontextIds[ContextIdKeys.Organization]\n\t);\n\n\tconst publicOrigin = contextIds?.[HttpContextIdKeys.PublicOrigin];\n\n\tconst headers: IHttpHeaders = {};\n\tHttpHeaderHelper.buildId(\n\t\theaders,\n\t\tid,\n\t\tHttpUrlHelper.combineOriginPath(publicOrigin, `${baseRouteName}/users/:id`)\n\t);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.created,\n\t\theaders\n\t};\n}\n\n/**\n * Resolve an NFT.\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 A response containing the resolved NFT data.\n */\nexport async function nftResolve(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: INftResolveRequest\n): Promise<INftResolveResponse> {\n\tGuards.object<INftResolveRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<INftResolveRequest[\"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<INftComponent>(componentName);\n\tconst result = await component.resolve(\n\t\trequest.pathParams.id,\n\t\tcontextIds[ContextIdKeys.Organization]\n\t);\n\treturn {\n\t\tbody: result\n\t};\n}\n\n/**\n * Burn an NFT.\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 A no-content response indicating the NFT was burned successfully.\n */\nexport async function nftBurn(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: INftBurnRequest\n): Promise<INoContentResponse> {\n\tGuards.object<INftBurnRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<INftBurnRequest[\"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<INftComponent>(componentName);\n\tawait component.burn(request.pathParams.id, contextIds[ContextIdKeys.Organization]);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.noContent\n\t};\n}\n\n/**\n * Transfer an NFT.\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 A no-content response indicating the NFT was transferred successfully.\n */\nexport async function nftTransfer(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: INftTransferRequest\n): Promise<INoContentResponse> {\n\tGuards.object<INftTransferRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<INftTransferRequest[\"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<INftTransferRequest[\"body\"]>(ROUTES_SOURCE, nameof(request.body), request.body);\n\tGuards.stringValue(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.body.recipientAddress),\n\t\trequest.body.recipientAddress\n\t);\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\tconst component = ComponentFactory.get<INftComponent>(componentName);\n\tawait component.transfer(\n\t\trequest.pathParams.id,\n\t\trequest.body.recipientAddress,\n\t\trequest.body.metadata,\n\t\tcontextIds[ContextIdKeys.Organization]\n\t);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.noContent\n\t};\n}\n\n/**\n * Update an NFT.\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 A no-content response indicating the NFT metadata was updated successfully.\n */\nexport async function nftUpdate(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: INftUpdateRequest\n): Promise<INoContentResponse> {\n\tGuards.object<INftUpdateRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<INftUpdateRequest[\"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<INftUpdateRequest[\"body\"]>(ROUTES_SOURCE, nameof(request.body), request.body);\n\tGuards.object(ROUTES_SOURCE, nameof(request.body.metadata), request.body.metadata);\n\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\tconst component = ComponentFactory.get<INftComponent>(componentName);\n\tawait component.update(\n\t\trequest.pathParams.id,\n\t\trequest.body.metadata,\n\t\tcontextIds[ContextIdKeys.Organization]\n\t);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.noContent\n\t};\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ICreatedResponse, type IHttpRequestContext, type INoContentResponse, type IRestRoute, type ITag } from "@twin.org/api-models";
|
|
2
2
|
import type { INftBurnRequest, INftMintRequest, INftResolveRequest, INftResolveResponse, INftTransferRequest, INftUpdateRequest } from "@twin.org/nft-models";
|
|
3
3
|
/**
|
|
4
4
|
* The tag to associate with the routes.
|
|
@@ -16,9 +16,10 @@ export declare function generateRestRoutesNft(baseRouteName: string, componentNa
|
|
|
16
16
|
* @param httpRequestContext The request context for the API.
|
|
17
17
|
* @param componentName The name of the component to use in the routes.
|
|
18
18
|
* @param request The request.
|
|
19
|
+
* @param baseRouteName The base route name for the API.
|
|
19
20
|
* @returns A created response containing the location header with the new NFT id.
|
|
20
21
|
*/
|
|
21
|
-
export declare function nftMint(httpRequestContext: IHttpRequestContext, componentName: string, request: INftMintRequest): Promise<ICreatedResponse>;
|
|
22
|
+
export declare function nftMint(httpRequestContext: IHttpRequestContext, componentName: string, request: INftMintRequest, baseRouteName: string): Promise<ICreatedResponse>;
|
|
22
23
|
/**
|
|
23
24
|
* Resolve an NFT.
|
|
24
25
|
* @param httpRequestContext The request context for the API.
|
package/docs/changelog.md
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.9.1-next.3](https://github.com/iotaledger/twin-nft/compare/nft-service-v0.9.1-next.2...nft-service-v0.9.1-next.3) (2026-06-30)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* rest enhancement ([#86](https://github.com/iotaledger/twin-nft/issues/86)) ([5e5d33a](https://github.com/iotaledger/twin-nft/commit/5e5d33a30de1f548ccdcfdda200a75c92c859ce3))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* The following workspace dependencies were updated
|
|
14
|
+
* dependencies
|
|
15
|
+
* @twin.org/nft-models bumped from 0.9.1-next.2 to 0.9.1-next.3
|
|
16
|
+
* devDependencies
|
|
17
|
+
* @twin.org/nft-connector-entity-storage bumped from 0.9.1-next.2 to 0.9.1-next.3
|
|
18
|
+
|
|
19
|
+
## [0.9.1-next.2](https://github.com/iotaledger/twin-nft/compare/nft-service-v0.9.1-next.1...nft-service-v0.9.1-next.2) (2026-06-29)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
* enhanced rest testing ([#84](https://github.com/iotaledger/twin-nft/issues/84)) ([52065cc](https://github.com/iotaledger/twin-nft/commit/52065cca50e9ca5a6ddd50e155e23e29df33246f))
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Dependencies
|
|
28
|
+
|
|
29
|
+
* The following workspace dependencies were updated
|
|
30
|
+
* dependencies
|
|
31
|
+
* @twin.org/nft-models bumped from 0.9.1-next.1 to 0.9.1-next.2
|
|
32
|
+
* devDependencies
|
|
33
|
+
* @twin.org/nft-connector-entity-storage bumped from 0.9.1-next.1 to 0.9.1-next.2
|
|
34
|
+
|
|
3
35
|
## [0.9.1-next.1](https://github.com/iotaledger/twin-nft/compare/nft-service-v0.9.1-next.0...nft-service-v0.9.1-next.1) (2026-06-26)
|
|
4
36
|
|
|
5
37
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Function: nftMint()
|
|
2
2
|
|
|
3
|
-
> **nftMint**(`httpRequestContext`, `componentName`, `request`): `Promise`\<`ICreatedResponse`\>
|
|
3
|
+
> **nftMint**(`httpRequestContext`, `componentName`, `request`, `baseRouteName`): `Promise`\<`ICreatedResponse`\>
|
|
4
4
|
|
|
5
5
|
Mint an NFT.
|
|
6
6
|
|
|
@@ -24,6 +24,12 @@ The name of the component to use in the routes.
|
|
|
24
24
|
|
|
25
25
|
The request.
|
|
26
26
|
|
|
27
|
+
### baseRouteName
|
|
28
|
+
|
|
29
|
+
`string`
|
|
30
|
+
|
|
31
|
+
The base route name for the API.
|
|
32
|
+
|
|
27
33
|
## Returns
|
|
28
34
|
|
|
29
35
|
`Promise`\<`ICreatedResponse`\>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twin.org/nft-service",
|
|
3
|
-
"version": "0.9.1-next.
|
|
3
|
+
"version": "0.9.1-next.3",
|
|
4
4
|
"description": "NFT service orchestration with REST route generation.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"@twin.org/core": "next",
|
|
20
20
|
"@twin.org/entity": "next",
|
|
21
21
|
"@twin.org/nameof": "next",
|
|
22
|
-
"@twin.org/nft-models": "0.9.1-next.
|
|
22
|
+
"@twin.org/nft-models": "0.9.1-next.3",
|
|
23
23
|
"@twin.org/web": "next"
|
|
24
24
|
},
|
|
25
25
|
"main": "./dist/es/index.js",
|