n8n-nodes-taliware 0.1.0

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.
Files changed (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +291 -0
  3. package/dist/credentials/TaliwareApi.credentials.d.ts +9 -0
  4. package/dist/credentials/TaliwareApi.credentials.js +52 -0
  5. package/dist/credentials/TaliwareApi.credentials.js.map +1 -0
  6. package/dist/credentials/icons/taliware.dark.svg +13 -0
  7. package/dist/credentials/icons/taliware.svg +13 -0
  8. package/dist/lib/cl2cClient.d.ts +18 -0
  9. package/dist/lib/cl2cClient.js +77 -0
  10. package/dist/lib/cl2cClient.js.map +1 -0
  11. package/dist/lib/createNft.d.ts +12 -0
  12. package/dist/lib/createNft.js +36 -0
  13. package/dist/lib/createNft.js.map +1 -0
  14. package/dist/lib/errors.d.ts +16 -0
  15. package/dist/lib/errors.js +68 -0
  16. package/dist/lib/errors.js.map +1 -0
  17. package/dist/lib/getTaliwareCredentials.d.ts +3 -0
  18. package/dist/lib/getTaliwareCredentials.js +26 -0
  19. package/dist/lib/getTaliwareCredentials.js.map +1 -0
  20. package/dist/lib/initiateMint.d.ts +16 -0
  21. package/dist/lib/initiateMint.js +25 -0
  22. package/dist/lib/initiateMint.js.map +1 -0
  23. package/dist/lib/mapOutput.d.ts +3 -0
  24. package/dist/lib/mapOutput.js +69 -0
  25. package/dist/lib/mapOutput.js.map +1 -0
  26. package/dist/lib/pollNftStatus.d.ts +12 -0
  27. package/dist/lib/pollNftStatus.js +87 -0
  28. package/dist/lib/pollNftStatus.js.map +1 -0
  29. package/dist/lib/resolveSmartContractId.d.ts +2 -0
  30. package/dist/lib/resolveSmartContractId.js +16 -0
  31. package/dist/lib/resolveSmartContractId.js.map +1 -0
  32. package/dist/lib/resolveUserId.d.ts +3 -0
  33. package/dist/lib/resolveUserId.js +40 -0
  34. package/dist/lib/resolveUserId.js.map +1 -0
  35. package/dist/lib/toolParameters.d.ts +3 -0
  36. package/dist/lib/toolParameters.js +115 -0
  37. package/dist/lib/toolParameters.js.map +1 -0
  38. package/dist/lib/types.d.ts +88 -0
  39. package/dist/lib/types.js +19 -0
  40. package/dist/lib/types.js.map +1 -0
  41. package/dist/lib/validateMintInputs.d.ts +6 -0
  42. package/dist/lib/validateMintInputs.js +100 -0
  43. package/dist/lib/validateMintInputs.js.map +1 -0
  44. package/dist/nodes/TaliwareMint/TaliwareMint.node.d.ts +5 -0
  45. package/dist/nodes/TaliwareMint/TaliwareMint.node.js +101 -0
  46. package/dist/nodes/TaliwareMint/TaliwareMint.node.js.map +1 -0
  47. package/dist/nodes/TaliwareMint/TaliwareMint.node.json +21 -0
  48. package/dist/nodes/TaliwareMint/taliware.dark.svg +13 -0
  49. package/dist/nodes/TaliwareMint/taliware.svg +13 -0
  50. package/dist/package.json +59 -0
  51. package/dist/tsconfig.tsbuildinfo +1 -0
  52. package/package.json +59 -0
  53. package/workflows/README.md +33 -0
  54. package/workflows/agent-tool-mint.example.json +144 -0
  55. package/workflows/manual-mint-binary.example.json +83 -0
  56. package/workflows/manual-mint-testnet.example.json +60 -0
@@ -0,0 +1,3 @@
1
+ import type { IExecuteFunctions, INode } from 'n8n-workflow';
2
+ import { type TaliwareApiCredentials } from './types';
3
+ export declare function getTaliwareCredentials(ctx: IExecuteFunctions, node: INode): Promise<TaliwareApiCredentials>;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTaliwareCredentials = getTaliwareCredentials;
4
+ const errors_1 = require("./errors");
5
+ const types_1 = require("./types");
6
+ async function getTaliwareCredentials(ctx, node) {
7
+ let raw;
8
+ try {
9
+ raw = (await ctx.getCredentials('taliwareApi'));
10
+ }
11
+ catch {
12
+ throw (0, errors_1.configurationError)(node, 'Taliware API credentials are not configured');
13
+ }
14
+ const apiKey = typeof raw.apiKey === 'string' ? raw.apiKey.trim() : '';
15
+ if (!apiKey) {
16
+ throw (0, errors_1.configurationError)(node, 'Taliware API credentials are not configured');
17
+ }
18
+ const baseUrl = typeof raw.baseUrl === 'string' && raw.baseUrl.trim()
19
+ ? raw.baseUrl.trim().replace(/\/$/, '')
20
+ : types_1.DEFAULT_TALIWARE_BASE_URL;
21
+ const defaultSmartContractId = typeof raw.defaultSmartContractId === 'string' && raw.defaultSmartContractId.trim()
22
+ ? raw.defaultSmartContractId.trim()
23
+ : undefined;
24
+ return { apiKey, baseUrl, defaultSmartContractId };
25
+ }
26
+ //# sourceMappingURL=getTaliwareCredentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTaliwareCredentials.js","sourceRoot":"","sources":["../../lib/getTaliwareCredentials.ts"],"names":[],"mappings":";;AAKA,wDA4BC;AA/BD,qCAA8C;AAC9C,mCAAiF;AAE1E,KAAK,UAAU,sBAAsB,CAC3C,GAAsB,EACtB,IAAW;IAEX,IAAI,GAA4B,CAAC;IAEjC,IAAI,CAAC;QACJ,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,CAA4B,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,IAAA,2BAAkB,EAAC,IAAI,EAAE,6CAA6C,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,IAAA,2BAAkB,EAAC,IAAI,EAAE,6CAA6C,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,OAAO,GACZ,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;QACpD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACvC,CAAC,CAAC,iCAAyB,CAAC;IAE9B,MAAM,sBAAsB,GAC3B,OAAO,GAAG,CAAC,sBAAsB,KAAK,QAAQ,IAAI,GAAG,CAAC,sBAAsB,CAAC,IAAI,EAAE;QAClF,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,EAAE;QACnC,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;AACpD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { INode } from 'n8n-workflow';
2
+ import type { Cl2cClient } from './cl2cClient';
3
+ import { type PollNftStatusOptions } from './pollNftStatus';
4
+ import type { NftDetail } from './types';
5
+ export interface InitiateMintInput {
6
+ name: string;
7
+ smartContractId: string;
8
+ ownerEmail?: string;
9
+ ownerUserId?: string;
10
+ ownershipPercentage: number;
11
+ description?: string;
12
+ imagePath?: string;
13
+ externalUrl?: string;
14
+ }
15
+ export type InitiateMintOptions = PollNftStatusOptions;
16
+ export declare function initiateMint(client: Cl2cClient, node: INode, input: InitiateMintInput, options?: InitiateMintOptions): Promise<NftDetail>;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initiateMint = initiateMint;
4
+ const createNft_1 = require("./createNft");
5
+ const pollNftStatus_1 = require("./pollNftStatus");
6
+ const resolveUserId_1 = require("./resolveUserId");
7
+ const validateMintInputs_1 = require("./validateMintInputs");
8
+ async function initiateMint(client, node, input, options = {}) {
9
+ (0, validateMintInputs_1.validateOwnerIdentifier)(input.ownerEmail, input.ownerUserId, node);
10
+ (0, validateMintInputs_1.validateMintName)(input.name, node);
11
+ (0, validateMintInputs_1.validateImagePath)(input.imagePath, node);
12
+ const userId = await (0, resolveUserId_1.resolveUserId)(client, node, input.ownerEmail, input.ownerUserId);
13
+ const createInput = {
14
+ name: input.name,
15
+ smartContractId: input.smartContractId,
16
+ userId,
17
+ ownershipPercentage: input.ownershipPercentage,
18
+ description: input.description,
19
+ imagePath: input.imagePath,
20
+ externalUrl: input.externalUrl,
21
+ };
22
+ const created = await (0, createNft_1.createNft)(client, createInput);
23
+ return await (0, pollNftStatus_1.pollNftStatus)(client, node, created.id, created, options);
24
+ }
25
+ //# sourceMappingURL=initiateMint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initiateMint.js","sourceRoot":"","sources":["../../lib/initiateMint.ts"],"names":[],"mappings":";;AAsBA,oCAyBC;AA5CD,2CAA6D;AAC7D,mDAA2E;AAC3E,mDAAgD;AAEhD,6DAAoG;AAe7F,KAAK,UAAU,YAAY,CACjC,MAAkB,EAClB,IAAW,EACX,KAAwB,EACxB,UAA+B,EAAE;IAEjC,IAAA,4CAAuB,EAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACnE,IAAA,qCAAgB,EAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,IAAA,sCAAiB,EAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,MAAM,IAAA,6BAAa,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAEtF,MAAM,WAAW,GAAmB;QACnC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,MAAM;QACN,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;KAC9B,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,IAAA,qBAAS,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAErD,OAAO,MAAM,IAAA,6BAAa,EAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { IDataObject } from 'n8n-workflow';
2
+ import type { NftDetail } from './types';
3
+ export declare function mapOutput(nft: NftDetail): IDataObject;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapOutput = mapOutput;
4
+ function mapOutput(nft) {
5
+ const output = {
6
+ id: nft.id,
7
+ status: nft.status,
8
+ };
9
+ setOptionalString(output, 'name', nft.name);
10
+ setOptionalString(output, 'description', nft.description);
11
+ setOptionalString(output, 'imagePath', nft.imagePath);
12
+ setOptionalString(output, 'externalUrl', nft.externalUrl);
13
+ setOptionalString(output, 'mintedAt', nft.mintedAt);
14
+ const smartContract = mapSmartContract(nft.smartContract);
15
+ if (smartContract) {
16
+ output.smartContract = smartContract;
17
+ }
18
+ const copyright = mapCopyright(nft.copyright);
19
+ if (copyright.length > 0) {
20
+ output.copyright = copyright;
21
+ }
22
+ return output;
23
+ }
24
+ function mapSmartContract(contract) {
25
+ if (!contract) {
26
+ return undefined;
27
+ }
28
+ const mapped = {};
29
+ setOptionalString(mapped, 'id', contract.id);
30
+ setOptionalString(mapped, 'contractAddress', contract.contractAddress);
31
+ setOptionalString(mapped, 'env', contract.env);
32
+ setOptionalString(mapped, 'network', contract.network);
33
+ return Object.keys(mapped).length > 0 ? mapped : undefined;
34
+ }
35
+ function mapCopyright(entries) {
36
+ if (!(entries === null || entries === void 0 ? void 0 : entries.length)) {
37
+ return [];
38
+ }
39
+ return entries.map((entry) => {
40
+ const mapped = {};
41
+ setOptionalString(mapped, 'email', entry.email);
42
+ setOptionalString(mapped, 'status', entry.status);
43
+ if (typeof entry.percentage === 'number') {
44
+ mapped.percentage = entry.percentage;
45
+ }
46
+ const walletAddress = mapWalletAddress(entry);
47
+ if (walletAddress) {
48
+ mapped.walletAddress = walletAddress;
49
+ }
50
+ return mapped;
51
+ });
52
+ }
53
+ function mapWalletAddress(entry) {
54
+ var _a, _b, _c;
55
+ const wallets = entry.walletAddress;
56
+ if (!(wallets === null || wallets === void 0 ? void 0 : wallets.length)) {
57
+ return undefined;
58
+ }
59
+ const primary = (_b = (_a = wallets.find((wallet) => wallet.isPrimary)) === null || _a === void 0 ? void 0 : _a.address) !== null && _b !== void 0 ? _b : (_c = wallets[0]) === null || _c === void 0 ? void 0 : _c.address;
60
+ const trimmed = primary === null || primary === void 0 ? void 0 : primary.trim();
61
+ return trimmed || undefined;
62
+ }
63
+ function setOptionalString(target, key, value) {
64
+ const trimmed = value === null || value === void 0 ? void 0 : value.trim();
65
+ if (trimmed) {
66
+ target[key] = trimmed;
67
+ }
68
+ }
69
+ //# sourceMappingURL=mapOutput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapOutput.js","sourceRoot":"","sources":["../../lib/mapOutput.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { INode } from 'n8n-workflow';
2
+ import type { Cl2cClient } from './cl2cClient';
3
+ import { type NftDetail } from './types';
4
+ export declare const DEFAULT_POLL_INTERVAL_SECONDS = 10;
5
+ export declare const DEFAULT_POLL_TIMEOUT_MINUTES = 20;
6
+ export interface PollNftStatusOptions {
7
+ pollIntervalSeconds?: number;
8
+ pollTimeoutMinutes?: number;
9
+ debug?: boolean;
10
+ logDebug?: (message: string) => void;
11
+ }
12
+ export declare function pollNftStatus(client: Cl2cClient, node: INode, nftId: string, initialDetail: NftDetail, options?: PollNftStatusOptions): Promise<NftDetail>;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_POLL_TIMEOUT_MINUTES = exports.DEFAULT_POLL_INTERVAL_SECONDS = void 0;
4
+ exports.pollNftStatus = pollNftStatus;
5
+ const n8n_workflow_1 = require("n8n-workflow");
6
+ const errors_1 = require("./errors");
7
+ const types_1 = require("./types");
8
+ exports.DEFAULT_POLL_INTERVAL_SECONDS = 10;
9
+ exports.DEFAULT_POLL_TIMEOUT_MINUTES = 20;
10
+ async function pollNftStatus(client, node, nftId, initialDetail, options = {}) {
11
+ var _a, _b;
12
+ const pollIntervalSeconds = (_a = options.pollIntervalSeconds) !== null && _a !== void 0 ? _a : exports.DEFAULT_POLL_INTERVAL_SECONDS;
13
+ const pollTimeoutMinutes = (_b = options.pollTimeoutMinutes) !== null && _b !== void 0 ? _b : exports.DEFAULT_POLL_TIMEOUT_MINUTES;
14
+ const intervalMs = pollIntervalSeconds * 1000;
15
+ const deadline = Date.now() + pollTimeoutMinutes * 60 * 1000;
16
+ let lastDetail = initialDetail;
17
+ let pollCount = 0;
18
+ if ((0, types_1.isTerminalNftStatus)(String(lastDetail.status))) {
19
+ return handleTerminalStatus(node, nftId, lastDetail);
20
+ }
21
+ while (Date.now() < deadline) {
22
+ await (0, n8n_workflow_1.sleep)(intervalMs);
23
+ pollCount += 1;
24
+ lastDetail = await client.request({
25
+ method: 'GET',
26
+ path: types_1.CL2C_PATHS.nftById(nftId),
27
+ });
28
+ logPollDebug(options, nftId, pollCount, String(lastDetail.status));
29
+ if ((0, types_1.isTerminalNftStatus)(String(lastDetail.status))) {
30
+ return handleTerminalStatus(node, nftId, lastDetail);
31
+ }
32
+ }
33
+ throw buildTimeoutError(node, nftId, lastDetail);
34
+ }
35
+ function handleTerminalStatus(node, nftId, detail) {
36
+ const status = String(detail.status);
37
+ if (status === 'MINTED') {
38
+ return detail;
39
+ }
40
+ if (status === 'FAILED') {
41
+ throw (0, errors_1.apiError)(node, formatMintFailedMessage(nftId, detail));
42
+ }
43
+ return detail;
44
+ }
45
+ function formatMintFailedMessage(nftId, detail) {
46
+ return `NFT mint failed — id=${nftId}, detail=${summarizeNftDetail(detail)}`;
47
+ }
48
+ function buildTimeoutError(node, nftId, detail) {
49
+ const status = String(detail.status);
50
+ const ownerCopyrightStatus = findOwnerCopyrightStatus(detail);
51
+ let message = `Mint approval timed out — Confida biometric approval may still be pending (id=${nftId}, status=${status}`;
52
+ if (ownerCopyrightStatus) {
53
+ message += `, ownerCopyrightStatus=${ownerCopyrightStatus}`;
54
+ }
55
+ message += ')';
56
+ return (0, errors_1.confidaTimeoutError)(node, message);
57
+ }
58
+ function findOwnerCopyrightStatus(detail) {
59
+ var _a, _b;
60
+ const entries = (_a = detail.copyright) !== null && _a !== void 0 ? _a : [];
61
+ if (entries.length === 0) {
62
+ return undefined;
63
+ }
64
+ const withStatus = entries.find((entry) => typeof entry.status === 'string' && entry.status.trim());
65
+ return (_b = withStatus === null || withStatus === void 0 ? void 0 : withStatus.status) === null || _b === void 0 ? void 0 : _b.trim();
66
+ }
67
+ function summarizeNftDetail(detail) {
68
+ var _a;
69
+ const summary = {
70
+ id: detail.id,
71
+ status: detail.status,
72
+ name: detail.name,
73
+ mintedAt: detail.mintedAt,
74
+ copyright: (_a = detail.copyright) === null || _a === void 0 ? void 0 : _a.map((entry) => ({
75
+ status: entry.status,
76
+ percentage: entry.percentage,
77
+ })),
78
+ };
79
+ return JSON.stringify(summary);
80
+ }
81
+ function logPollDebug(options, nftId, pollCount, status) {
82
+ if (!options.debug || !options.logDebug) {
83
+ return;
84
+ }
85
+ options.logDebug(`TALIWARE mint poll: nftId=${nftId}, pollCount=${pollCount}, status=${status}`);
86
+ }
87
+ //# sourceMappingURL=pollNftStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pollNftStatus.js","sourceRoot":"","sources":["../../lib/pollNftStatus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { INode } from 'n8n-workflow';
2
+ export declare function resolveSmartContractId(parameterOverride: string | undefined, credentialDefault: string | undefined, node: INode): string;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveSmartContractId = resolveSmartContractId;
4
+ const errors_1 = require("./errors");
5
+ function resolveSmartContractId(parameterOverride, credentialDefault, node) {
6
+ const override = parameterOverride === null || parameterOverride === void 0 ? void 0 : parameterOverride.trim();
7
+ if (override) {
8
+ return override;
9
+ }
10
+ const defaultId = credentialDefault === null || credentialDefault === void 0 ? void 0 : credentialDefault.trim();
11
+ if (defaultId) {
12
+ return defaultId;
13
+ }
14
+ throw (0, errors_1.validationError)(node, 'smartContractId is required');
15
+ }
16
+ //# sourceMappingURL=resolveSmartContractId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveSmartContractId.js","sourceRoot":"","sources":["../../lib/resolveSmartContractId.ts"],"names":[],"mappings":";;AAIA,wDAgBC;AAlBD,qCAA2C;AAE3C,SAAgB,sBAAsB,CACrC,iBAAqC,EACrC,iBAAqC,EACrC,IAAW;IAEX,MAAM,QAAQ,GAAG,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,IAAI,EAAE,CAAC;IAC3C,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,MAAM,SAAS,GAAG,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,IAAI,EAAE,CAAC;IAC5C,IAAI,SAAS,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,IAAA,wBAAe,EAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { INode } from 'n8n-workflow';
2
+ import type { Cl2cClient } from './cl2cClient';
3
+ export declare function resolveUserId(client: Cl2cClient, node: INode, ownerEmail: string | undefined, ownerUserId: string | undefined): Promise<string>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveUserId = resolveUserId;
4
+ const errors_1 = require("./errors");
5
+ const types_1 = require("./types");
6
+ const OWNER_NOT_FOUND_MESSAGE = 'Owner not found — user must be invited via TALIWARE platform or POST /cl2c/user';
7
+ async function resolveUserId(client, node, ownerEmail, ownerUserId) {
8
+ var _a;
9
+ const directUserId = ownerUserId === null || ownerUserId === void 0 ? void 0 : ownerUserId.trim();
10
+ if (directUserId) {
11
+ return directUserId;
12
+ }
13
+ const email = ownerEmail === null || ownerEmail === void 0 ? void 0 : ownerEmail.trim();
14
+ if (!email) {
15
+ throw (0, errors_1.validationError)(node, 'Owner Email or Owner User ID is required');
16
+ }
17
+ const response = await client.request({
18
+ method: 'GET',
19
+ path: types_1.CL2C_PATHS.user,
20
+ query: { search: email, limit: 50 },
21
+ });
22
+ const users = (_a = response.data) !== null && _a !== void 0 ? _a : [];
23
+ const normalizedEmail = email.toLowerCase();
24
+ const match = users.find((entry) => typeof entry.email === 'string' && entry.email.toLowerCase() === normalizedEmail);
25
+ if (!match) {
26
+ throw (0, errors_1.validationError)(node, OWNER_NOT_FOUND_MESSAGE);
27
+ }
28
+ const userId = extractMintUserOrgId(match);
29
+ if (!userId) {
30
+ throw (0, errors_1.validationError)(node, OWNER_NOT_FOUND_MESSAGE);
31
+ }
32
+ return userId;
33
+ }
34
+ function extractMintUserOrgId(entry) {
35
+ if (typeof entry.id === 'string' && entry.id.trim()) {
36
+ return entry.id.trim();
37
+ }
38
+ return undefined;
39
+ }
40
+ //# sourceMappingURL=resolveUserId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveUserId.js","sourceRoot":"","sources":["../../lib/resolveUserId.ts"],"names":[],"mappings":";;AASA,sCAsCC;AA5CD,qCAA2C;AAC3C,mCAAuF;AAEvF,MAAM,uBAAuB,GAC5B,iFAAiF,CAAC;AAE5E,KAAK,UAAU,aAAa,CAClC,MAAkB,EAClB,IAAW,EACX,UAA8B,EAC9B,WAA+B;;IAE/B,MAAM,YAAY,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,EAAE,CAAC;IACzC,IAAI,YAAY,EAAE,CAAC;QAClB,OAAO,YAAY,CAAC;IACrB,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAA,wBAAe,EAAC,IAAI,EAAE,0CAA0C,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAyB;QAC7D,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,kBAAU,CAAC,IAAI;QACrB,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;KACnC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAA,QAAQ,CAAC,IAAI,mCAAI,EAAE,CAAC;IAClC,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CACvB,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,eAAe,CAC3F,CAAC;IAEF,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAA,wBAAe,EAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,IAAA,wBAAe,EAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAGD,SAAS,oBAAoB,CAAC,KAAqB;IAClD,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QACrD,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const TOOL_DESCRIPTION = "Mint a biometric NFT on Cordoba L2 to copyright-protect a photo via TALIWARE CL2C. The owner must complete Confida fingerprint approval on mobile after create. Returns NFT id, status, contractAddress, and copyright details when MINTED.";
3
+ export declare function buildMintNodeProperties(forTool: boolean): INodeProperties[];
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TOOL_DESCRIPTION = void 0;
4
+ exports.buildMintNodeProperties = buildMintNodeProperties;
5
+ exports.TOOL_DESCRIPTION = 'Mint a biometric NFT on Cordoba L2 to copyright-protect a photo via TALIWARE CL2C. The owner must complete Confida fingerprint approval on mobile after create. Returns NFT id, status, contractAddress, and copyright details when MINTED.';
6
+ const FROM_AI = {
7
+ name: "={{ $fromAI('name', 'Display name for the biometric NFT', 'string') }}",
8
+ description: "={{ $fromAI('description', 'Optional description of the copyrighted photo or artwork', 'string') }}",
9
+ imagePath: "={{ $fromAI('imagePath', 'HTTPS URL or base64 image (data URI or raw) to copyright-protect', 'string') }}",
10
+ ownerEmail: "={{ $fromAI('ownerEmail', 'Email of the TALIWARE platform user who will own the NFT', 'string') }}",
11
+ ownerUserId: "={{ $fromAI('ownerUserId', 'User organization id from GET /cl2c/user id field; use instead of ownerEmail when known', 'string') }}",
12
+ smartContractId: "={{ $fromAI('smartContractId', 'Optional smart contract UUID override; leave empty to use credential default', 'string') }}",
13
+ ownershipPercentage: "={{ $fromAI('ownershipPercentage', 'Copyright ownership percentage for the owner from 1 to 100', 'number', 100) }}",
14
+ };
15
+ function buildMintNodeProperties(forTool) {
16
+ var _a, _b, _c, _d, _e, _f;
17
+ const ai = forTool ? FROM_AI : null;
18
+ return [
19
+ {
20
+ displayName: 'Smart Contract ID',
21
+ name: 'smartContractId',
22
+ type: 'string',
23
+ default: (_a = ai === null || ai === void 0 ? void 0 : ai.smartContractId) !== null && _a !== void 0 ? _a : '',
24
+ description: 'Optional override of the default smart contract UUID from credentials. Testnet: use a contract with env TESTNET on the same API host.',
25
+ },
26
+ {
27
+ displayName: 'Owner Email',
28
+ name: 'ownerEmail',
29
+ type: 'string',
30
+ default: (_b = ai === null || ai === void 0 ? void 0 : ai.ownerEmail) !== null && _b !== void 0 ? _b : '',
31
+ description: 'Platform user email — resolved to userId via GET /cl2c/user before mint',
32
+ },
33
+ {
34
+ displayName: 'Owner User ID',
35
+ name: 'ownerUserId',
36
+ type: 'string',
37
+ default: (_c = ai === null || ai === void 0 ? void 0 : ai.ownerUserId) !== null && _c !== void 0 ? _c : '',
38
+ description: 'User organization id from GET /cl2c/user `id` field (not user.id); skips email lookup when set',
39
+ },
40
+ {
41
+ displayName: 'Name',
42
+ name: 'name',
43
+ type: 'string',
44
+ default: (_d = ai === null || ai === void 0 ? void 0 : ai.name) !== null && _d !== void 0 ? _d : '',
45
+ required: true,
46
+ description: 'NFT name (MintRequest.name)',
47
+ },
48
+ {
49
+ displayName: 'Description',
50
+ name: 'description',
51
+ type: 'string',
52
+ typeOptions: { rows: 3 },
53
+ default: (_e = ai === null || ai === void 0 ? void 0 : ai.description) !== null && _e !== void 0 ? _e : '',
54
+ description: 'Optional NFT description',
55
+ },
56
+ {
57
+ displayName: 'Image Path',
58
+ name: 'imagePath',
59
+ type: 'string',
60
+ default: (_f = ai === null || ai === void 0 ? void 0 : ai.imagePath) !== null && _f !== void 0 ? _f : '',
61
+ description: 'HTTPS URL, data:image/...;base64,... URI, or raw base64 sent as MintRequest.imagePath. Leave empty when using binary input below.',
62
+ },
63
+ {
64
+ displayName: 'Binary Property Name',
65
+ name: 'binaryPropertyName',
66
+ type: 'string',
67
+ default: 'data',
68
+ displayOptions: {
69
+ hide: {
70
+ '@tool': [true],
71
+ },
72
+ },
73
+ description: 'When Image Path is empty, convert image bytes from this input binary field to a data URI for imagePath',
74
+ },
75
+ {
76
+ displayName: 'External URL',
77
+ name: 'externalUrl',
78
+ type: 'string',
79
+ default: '',
80
+ description: 'Optional external link stored on the NFT',
81
+ },
82
+ {
83
+ displayName: 'Ownership Percentage',
84
+ name: 'ownershipPercentage',
85
+ type: 'number',
86
+ default: forTool ? FROM_AI.ownershipPercentage : 100,
87
+ typeOptions: { minValue: 1, maxValue: 100 },
88
+ description: 'Copyright percentage for the owner (default 100)',
89
+ },
90
+ {
91
+ displayName: 'Poll Interval Seconds',
92
+ name: 'pollIntervalSeconds',
93
+ type: 'number',
94
+ default: 10,
95
+ typeOptions: { minValue: 1 },
96
+ description: 'Seconds between GET /cl2c/nft/{ID} status polls (NFT ID from create response)',
97
+ },
98
+ {
99
+ displayName: 'Poll Timeout Minutes',
100
+ name: 'pollTimeoutMinutes',
101
+ type: 'number',
102
+ default: 20,
103
+ typeOptions: { minValue: 1 },
104
+ description: 'Maximum minutes to wait for Confida approval and terminal NFT status',
105
+ },
106
+ {
107
+ displayName: 'Debug',
108
+ name: 'debug',
109
+ type: 'boolean',
110
+ default: false,
111
+ description: 'Whether to log NFT ID, poll count, and last status in debug output (never logs API key)',
112
+ },
113
+ ];
114
+ }
115
+ //# sourceMappingURL=toolParameters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolParameters.js","sourceRoot":"","sources":["../../lib/toolParameters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ export declare const DEFAULT_TALIWARE_BASE_URL = "https://developer.taliware.com/api/v1";
2
+ export declare const CL2C_PATHS: {
3
+ readonly user: "/cl2c/user";
4
+ readonly nft: "/cl2c/nft";
5
+ readonly nftById: (id: string) => string;
6
+ };
7
+ export type NftStatus = 'PENDING' | 'CREATED' | 'MINTED' | 'FAILED';
8
+ export declare const NFT_TERMINAL_STATUSES: readonly NftStatus[];
9
+ export interface TaliwareApiCredentials {
10
+ apiKey: string;
11
+ baseUrl: string;
12
+ defaultSmartContractId?: string;
13
+ }
14
+ export interface CopyrightEntry {
15
+ userId: string;
16
+ percentage: number;
17
+ }
18
+ export interface MintRequest {
19
+ name: string;
20
+ smartContractId: string;
21
+ copyright: CopyrightEntry[];
22
+ description?: string;
23
+ externalUrl?: string;
24
+ imagePath?: string;
25
+ metadata?: Record<string, unknown>;
26
+ supply?: number;
27
+ }
28
+ export interface SmartContract {
29
+ id?: string;
30
+ name?: string;
31
+ symbol?: string;
32
+ contractAddress?: string;
33
+ status?: string;
34
+ network?: string;
35
+ env?: string;
36
+ }
37
+ export interface NftCopyrightWalletAddress {
38
+ address: string;
39
+ isPrimary?: boolean;
40
+ }
41
+ export interface NftCopyrightEntry {
42
+ id?: string;
43
+ status?: string;
44
+ percentage?: number;
45
+ email?: string;
46
+ walletAddress?: NftCopyrightWalletAddress[] | null;
47
+ userName?: string | null;
48
+ userImage?: string | null;
49
+ }
50
+ export interface NftDetail {
51
+ id: string;
52
+ status: NftStatus | string;
53
+ name?: string;
54
+ description?: string | null;
55
+ externalUrl?: string | null;
56
+ imagePath?: string | null;
57
+ supply?: number;
58
+ mintedAt?: string | null;
59
+ smartContract?: SmartContract;
60
+ copyright?: NftCopyrightEntry[];
61
+ }
62
+ export interface Cl2cErrorResponse {
63
+ error?: string;
64
+ details?: string[];
65
+ }
66
+ export interface UserInfo {
67
+ id?: string | null;
68
+ name?: string | null;
69
+ emailVerified?: boolean | null;
70
+ isRegistered?: boolean | null;
71
+ }
72
+ export interface UserOrgSummary {
73
+ id?: string;
74
+ email?: string;
75
+ walletAddress?: string | null;
76
+ status?: string;
77
+ user?: UserInfo;
78
+ }
79
+ export interface PaginatedUsersResponse {
80
+ data?: UserOrgSummary[];
81
+ pagination?: {
82
+ page?: number;
83
+ limit?: number;
84
+ total?: number;
85
+ };
86
+ }
87
+ export declare function isNftStatus(value: string): value is NftStatus;
88
+ export declare function isTerminalNftStatus(status: string): boolean;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NFT_TERMINAL_STATUSES = exports.CL2C_PATHS = exports.DEFAULT_TALIWARE_BASE_URL = void 0;
4
+ exports.isNftStatus = isNftStatus;
5
+ exports.isTerminalNftStatus = isTerminalNftStatus;
6
+ exports.DEFAULT_TALIWARE_BASE_URL = 'https://developer.taliware.com/api/v1';
7
+ exports.CL2C_PATHS = {
8
+ user: '/cl2c/user',
9
+ nft: '/cl2c/nft',
10
+ nftById: (id) => `/cl2c/nft/${id}`,
11
+ };
12
+ exports.NFT_TERMINAL_STATUSES = ['MINTED', 'FAILED'];
13
+ function isNftStatus(value) {
14
+ return value === 'PENDING' || value === 'CREATED' || value === 'MINTED' || value === 'FAILED';
15
+ }
16
+ function isTerminalNftStatus(status) {
17
+ return status === 'MINTED' || status === 'FAILED';
18
+ }
19
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":";;;AAqGA,kCAEC;AAED,kDAEC;AA3GY,QAAA,yBAAyB,GAAG,uCAAuC,CAAC;AAEpE,QAAA,UAAU,GAAG;IACzB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,WAAW;IAChB,OAAO,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE;CACjC,CAAC;AAIE,QAAA,qBAAqB,GAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AA2FhF,SAAgB,WAAW,CAAC,KAAa;IACxC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ,CAAC;AAC/F,CAAC;AAED,SAAgB,mBAAmB,CAAC,MAAc;IACjD,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,CAAC;AACnD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { IBinaryData, INode } from 'n8n-workflow';
2
+ export declare function validateImagePath(imagePath: string | undefined, node: INode): void;
3
+ export declare function resolveImagePath(imagePath: string | undefined, binary: IBinaryData | undefined, node: INode): string | undefined;
4
+ export declare function binaryToDataUriImage(binary: IBinaryData, node: INode): string;
5
+ export declare function validateMintName(name: string | undefined, node: INode): void;
6
+ export declare function validateOwnerIdentifier(ownerEmail: string | undefined, ownerUserId: string | undefined, node: INode): void;