@apergrex/n8n-nodes-franklab 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 (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/dist/credentials/FrankLabApi.credentials.d.ts +9 -0
  4. package/dist/credentials/FrankLabApi.credentials.js +50 -0
  5. package/dist/credentials/FrankLabApi.credentials.js.map +1 -0
  6. package/dist/credentials/franklab.svg +4 -0
  7. package/dist/nodes/C2pa/C2pa.node.json +10 -0
  8. package/dist/nodes/C2pa/FrankLabC2pa.node.d.ts +5 -0
  9. package/dist/nodes/C2pa/FrankLabC2pa.node.js +58 -0
  10. package/dist/nodes/C2pa/FrankLabC2pa.node.js.map +1 -0
  11. package/dist/nodes/C2pa/c2pa.svg +5 -0
  12. package/dist/nodes/Holst/FrankLabHolst.node.d.ts +5 -0
  13. package/dist/nodes/Holst/FrankLabHolst.node.js +99 -0
  14. package/dist/nodes/Holst/FrankLabHolst.node.js.map +1 -0
  15. package/dist/nodes/Holst/Holst.node.json +10 -0
  16. package/dist/nodes/Holst/holst.svg +6 -0
  17. package/dist/nodes/Kley/FrankLabKley.node.d.ts +5 -0
  18. package/dist/nodes/Kley/FrankLabKley.node.js +95 -0
  19. package/dist/nodes/Kley/FrankLabKley.node.js.map +1 -0
  20. package/dist/nodes/Kley/Kley.node.json +10 -0
  21. package/dist/nodes/Kley/kley.svg +6 -0
  22. package/dist/nodes/Plastinka/FrankLabPlastinka.node.d.ts +5 -0
  23. package/dist/nodes/Plastinka/FrankLabPlastinka.node.js +112 -0
  24. package/dist/nodes/Plastinka/FrankLabPlastinka.node.js.map +1 -0
  25. package/dist/nodes/Plastinka/Plastinka.node.json +10 -0
  26. package/dist/nodes/Plastinka/plastinka.svg +6 -0
  27. package/dist/nodes/Volna/FrankLabVolna.node.d.ts +5 -0
  28. package/dist/nodes/Volna/FrankLabVolna.node.js +246 -0
  29. package/dist/nodes/Volna/FrankLabVolna.node.js.map +1 -0
  30. package/dist/nodes/Volna/Volna.node.json +10 -0
  31. package/dist/nodes/Volna/volna.svg +5 -0
  32. package/dist/nodes/shared/client.d.ts +30 -0
  33. package/dist/nodes/shared/client.js +215 -0
  34. package/dist/nodes/shared/client.js.map +1 -0
  35. package/dist/nodes/shared/node-utils.d.ts +7 -0
  36. package/dist/nodes/shared/node-utils.js +191 -0
  37. package/dist/nodes/shared/node-utils.js.map +1 -0
  38. package/dist/nodes/shared/redaction.d.ts +1 -0
  39. package/dist/nodes/shared/redaction.js +48 -0
  40. package/dist/nodes/shared/redaction.js.map +1 -0
  41. package/dist/nodes/shared/registry.d.ts +29 -0
  42. package/dist/nodes/shared/registry.js +584 -0
  43. package/dist/nodes/shared/registry.js.map +1 -0
  44. package/dist/nodes/shared/status.d.ts +4 -0
  45. package/dist/nodes/shared/status.js +20 -0
  46. package/dist/nodes/shared/status.js.map +1 -0
  47. package/dist/nodes/shared/url.d.ts +4 -0
  48. package/dist/nodes/shared/url.js +164 -0
  49. package/dist/nodes/shared/url.js.map +1 -0
  50. package/dist/package.json +59 -0
  51. package/examples/holst-image-info.workflow.json +19 -0
  52. package/package.json +59 -0
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createFrankLabClient = createFrankLabClient;
4
+ const url_1 = require("./url");
5
+ const registry_1 = require("./registry");
6
+ const status_1 = require("./status");
7
+ const PATH_PARAM_NAMES = ['jobId', 'taskId', 'profileId', 'dubbingId', 'languageCode'];
8
+ function createFrankLabClient(options) {
9
+ const baseUrl = (0, url_1.normalizeBaseUrl)(options.baseUrl);
10
+ const apiKey = options.apiKey.trim();
11
+ if (!apiKey) {
12
+ throw new Error('FrankLab API key is required');
13
+ }
14
+ return {
15
+ async request(endpointKey, input = {}) {
16
+ const endpoint = (0, registry_1.getEndpoint)(endpointKey);
17
+ return requestEndpoint(endpoint, baseUrl, apiKey, options.fetch, input);
18
+ },
19
+ async poll(endpointKey, taskId, pollOptions = {}) {
20
+ var _a, _b, _c;
21
+ const delayMs = (_a = pollOptions.delayMs) !== null && _a !== void 0 ? _a : 5000;
22
+ const maxAttempts = (_b = pollOptions.maxAttempts) !== null && _b !== void 0 ? _b : 120;
23
+ let lastResult = {};
24
+ for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
25
+ lastResult = await requestEndpoint((0, registry_1.getEndpoint)(endpointKey), baseUrl, apiKey, options.fetch, { jobId: taskId, taskId, dubbingId: taskId });
26
+ if (!lastResult.taskId)
27
+ lastResult.taskId = taskId;
28
+ const status = lastResult.status;
29
+ if ((0, status_1.isTerminalStatus)(status)) {
30
+ if ((0, status_1.isFailureStatus)(status)) {
31
+ throw new Error(String((_c = lastResult.error) !== null && _c !== void 0 ? _c : `FrankLab task failed with status ${status}`));
32
+ }
33
+ return lastResult;
34
+ }
35
+ if (delayMs > 0 && attempt < maxAttempts - 1) {
36
+ await wait(delayMs);
37
+ }
38
+ }
39
+ throw new Error(`FrankLab task did not finish within ${maxAttempts} polling attempts`);
40
+ },
41
+ };
42
+ }
43
+ async function requestEndpoint(endpoint, baseUrl, apiKey, fetchTransport, input) {
44
+ const url = (0, url_1.buildApiUrl)(baseUrl, endpoint.path, input);
45
+ const headers = {
46
+ Accept: 'application/json',
47
+ };
48
+ if (endpoint.authHeader === 'Authorization') {
49
+ headers.Authorization = `Bearer ${apiKey}`;
50
+ }
51
+ else {
52
+ headers['X-API-Key'] = apiKey;
53
+ }
54
+ const init = {
55
+ method: endpoint.method,
56
+ headers,
57
+ };
58
+ if (endpoint.method === 'POST') {
59
+ headers['Content-Type'] = 'application/json';
60
+ init.body = JSON.stringify(buildBody(endpoint, input));
61
+ }
62
+ const response = await fetchTransport(url, init);
63
+ const body = await readResponseBody(response);
64
+ if (!response.ok) {
65
+ throw new Error(extractErrorMessage(body, response.status));
66
+ }
67
+ return extractOutput(endpoint, body, input);
68
+ }
69
+ function buildBody(endpoint, input) {
70
+ if (endpoint.module === 'c2pa') {
71
+ assertNoC2paPrivateMaterial(input);
72
+ }
73
+ const body = {};
74
+ for (const [key, value] of Object.entries(input)) {
75
+ if (PATH_PARAM_NAMES.includes(key))
76
+ continue;
77
+ if (value === undefined || value === null || value === '')
78
+ continue;
79
+ body[key] = value;
80
+ }
81
+ const operation = defaultBodyOperation(endpoint.key);
82
+ if (operation && !body.operation) {
83
+ body.operation = operation;
84
+ }
85
+ if (endpoint.key === 'c2pa.generateSelfSigned') {
86
+ body.action = 'generate_self_signed';
87
+ }
88
+ return body;
89
+ }
90
+ async function readResponseBody(response) {
91
+ try {
92
+ return await response.json();
93
+ }
94
+ catch {
95
+ const text = await response.text();
96
+ try {
97
+ return JSON.parse(text);
98
+ }
99
+ catch {
100
+ return { message: text };
101
+ }
102
+ }
103
+ }
104
+ function extractOutput(endpoint, body, input) {
105
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
106
+ const root = isRecord(body) ? body : {};
107
+ const rawData = (_a = root.data) !== null && _a !== void 0 ? _a : root;
108
+ const data = isRecord(rawData) ? rawData : {};
109
+ const result = isRecord(data.result) ? data.result : data;
110
+ const status = (_d = (_c = (_b = result.task_status) !== null && _b !== void 0 ? _b : result.status) !== null && _c !== void 0 ? _c : data.status) !== null && _d !== void 0 ? _d : root.status;
111
+ const taskId = (_j = (_h = (_g = (_f = (_e = result.task_id) !== null && _e !== void 0 ? _e : result.taskId) !== null && _f !== void 0 ? _f : data.taskId) !== null && _g !== void 0 ? _g : input.taskId) !== null && _h !== void 0 ? _h : input.jobId) !== null && _j !== void 0 ? _j : input.dubbingId;
112
+ if (endpoint.outputExtractor === 'list-result') {
113
+ const items = Array.isArray(rawData) ? rawData : Array.isArray(result.items) ? result.items : Array.isArray(result.profiles) ? result.profiles : [];
114
+ return { items, profiles: items, data: items };
115
+ }
116
+ if (endpoint.outputExtractor === 'profile-options') {
117
+ const items = Array.isArray(rawData) ? rawData : Array.isArray(result.items) ? result.items : Array.isArray(result.profiles) ? result.profiles : [];
118
+ const options = items.filter(isRecord).map((item) => {
119
+ var _a, _b, _c, _d, _e, _f;
120
+ return ({
121
+ name: String((_d = (_c = (_b = (_a = item.label) !== null && _a !== void 0 ? _a : item.name) !== null && _b !== void 0 ? _b : item.id) !== null && _c !== void 0 ? _c : item.profileId) !== null && _d !== void 0 ? _d : ''),
122
+ value: String((_f = (_e = item.id) !== null && _e !== void 0 ? _e : item.profileId) !== null && _f !== void 0 ? _f : ''),
123
+ });
124
+ }).filter((option) => option.name && option.value);
125
+ return { options, items, data: options };
126
+ }
127
+ return {
128
+ ...result,
129
+ ...pickCostFields(data),
130
+ taskId,
131
+ status,
132
+ audioUrl: (_l = (_k = result.audioUrl) !== null && _k !== void 0 ? _k : result.resultUrl) !== null && _l !== void 0 ? _l : firstUrl(result.task_result, 'audios'),
133
+ resultUrl: (_p = (_o = (_m = result.resultUrl) !== null && _m !== void 0 ? _m : result.audioUrl) !== null && _o !== void 0 ? _o : firstUrl(result.task_result, 'audios')) !== null && _p !== void 0 ? _p : firstUrl(result.task_result, 'videos'),
134
+ downloadUrl: (_q = result.downloadUrl) !== null && _q !== void 0 ? _q : data.downloadUrl,
135
+ error: (_u = (_t = (_s = (_r = result.error) !== null && _r !== void 0 ? _r : data.error) !== null && _s !== void 0 ? _s : root.message) !== null && _t !== void 0 ? _t : root.msg) !== null && _u !== void 0 ? _u : null,
136
+ };
137
+ }
138
+ function extractErrorMessage(body, status) {
139
+ var _a, _b, _c, _d;
140
+ if (isRecord(body)) {
141
+ const data = isRecord(body.data) ? body.data : {};
142
+ const result = isRecord(data.result) ? data.result : {};
143
+ const message = (_d = (_c = (_b = (_a = result.task_status_msg) !== null && _a !== void 0 ? _a : result.error) !== null && _b !== void 0 ? _b : data.error) !== null && _c !== void 0 ? _c : body.msg) !== null && _d !== void 0 ? _d : body.message;
144
+ if (typeof message === 'string' && message.trim())
145
+ return message;
146
+ }
147
+ return `FrankLab request failed with HTTP ${status}`;
148
+ }
149
+ function pickCostFields(data) {
150
+ const fields = ['final_cost_franks', 'cost_currency', 'cost_status', 'cost_unit'];
151
+ const output = {};
152
+ for (const field of fields) {
153
+ if (data[field] !== undefined)
154
+ output[field] = data[field];
155
+ }
156
+ return output;
157
+ }
158
+ function firstUrl(container, key) {
159
+ if (!isRecord(container))
160
+ return undefined;
161
+ const values = container[key];
162
+ if (!Array.isArray(values))
163
+ return undefined;
164
+ for (const item of values) {
165
+ if (isRecord(item) && typeof item.url === 'string' && item.url)
166
+ return item.url;
167
+ }
168
+ return undefined;
169
+ }
170
+ function isRecord(value) {
171
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
172
+ }
173
+ function defaultBodyOperation(endpointKey) {
174
+ switch (endpointKey) {
175
+ case 'volna.textToSpeech':
176
+ return 'text-to-speech';
177
+ case 'volna.textToDialogue':
178
+ return 'text-to-dialogue';
179
+ case 'volna.textToSpeechTurbo':
180
+ return 'text-to-speech-turbo';
181
+ case 'volna.googleTts':
182
+ return 'google-3-1-tts';
183
+ default:
184
+ return null;
185
+ }
186
+ }
187
+ function assertNoC2paPrivateMaterial(value, path = []) {
188
+ if (Array.isArray(value)) {
189
+ value.forEach((item, index) => assertNoC2paPrivateMaterial(item, [...path, String(index)]));
190
+ return;
191
+ }
192
+ if (!isRecord(value))
193
+ return;
194
+ for (const [key, child] of Object.entries(value)) {
195
+ const normalized = key.toLowerCase().replace(/[^a-z0-9]/g, '');
196
+ if (normalized.includes('pem') ||
197
+ normalized.includes('passphrase') ||
198
+ normalized.includes('privatekey') ||
199
+ normalized.includes('certificate')) {
200
+ throw new Error(`C2PA private material is not supported in public package payloads: ${[...path, key].join('.')}`);
201
+ }
202
+ assertNoC2paPrivateMaterial(child, [...path, key]);
203
+ }
204
+ }
205
+ async function wait(delayMs) {
206
+ await new Promise((resolve) => {
207
+ const signal = AbortSignal.timeout(delayMs);
208
+ if (signal.aborted) {
209
+ resolve();
210
+ return;
211
+ }
212
+ signal.addEventListener('abort', () => resolve(), { once: true });
213
+ });
214
+ }
215
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../nodes/shared/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { IExecuteFunctions, INodeExecutionData, INodeProperties } from 'n8n-workflow';
2
+ import type { FrankLabModule } from './registry';
3
+ export declare const jobIdProperty: INodeProperties;
4
+ export declare const profileIdProperty: INodeProperties;
5
+ export declare const waitProperty: INodeProperties;
6
+ export declare const payloadProperty: INodeProperties;
7
+ export declare function executeFrankLabModule(context: IExecuteFunctions, moduleName: FrankLabModule, statusOperation: string | Record<string, string>): Promise<INodeExecutionData[][]>;
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.payloadProperty = exports.waitProperty = exports.profileIdProperty = exports.jobIdProperty = void 0;
4
+ exports.executeFrankLabModule = executeFrankLabModule;
5
+ const n8n_workflow_1 = require("n8n-workflow");
6
+ const client_1 = require("./client");
7
+ const registry_1 = require("./registry");
8
+ const url_1 = require("./url");
9
+ exports.jobIdProperty = {
10
+ displayName: 'Job ID',
11
+ name: 'jobId',
12
+ type: 'string',
13
+ default: '',
14
+ required: true,
15
+ displayOptions: {
16
+ show: {
17
+ operation: ['getStatus', 'getTask', 'getDubbing'],
18
+ },
19
+ },
20
+ };
21
+ exports.profileIdProperty = {
22
+ displayName: 'Profile ID',
23
+ name: 'profileId',
24
+ type: 'string',
25
+ default: '',
26
+ required: true,
27
+ displayOptions: {
28
+ show: {
29
+ operation: ['revokeProfile'],
30
+ },
31
+ },
32
+ };
33
+ exports.waitProperty = {
34
+ displayName: 'Wait for Completion',
35
+ name: 'waitForCompletion',
36
+ type: 'boolean',
37
+ default: false,
38
+ displayOptions: {
39
+ hide: {
40
+ operation: ['getStatus', 'getTask', 'getDubbing', 'listProfiles', 'profileOptions', 'listSamples', 'listVoices', 'listModels', 'usage', 'revokeProfile'],
41
+ },
42
+ },
43
+ };
44
+ exports.payloadProperty = {
45
+ displayName: 'Additional JSON',
46
+ name: 'payloadJson',
47
+ type: 'json',
48
+ default: '{}',
49
+ description: 'Additional FrankLab request fields as JSON. URL media fields must use public http or https URLs.',
50
+ displayOptions: {
51
+ hide: {
52
+ operation: ['getStatus', 'getTask', 'getDubbing', 'listProfiles', 'profileOptions', 'listSamples', 'listVoices', 'listModels', 'usage', 'revokeProfile'],
53
+ },
54
+ },
55
+ };
56
+ async function executeFrankLabModule(context, moduleName, statusOperation) {
57
+ const items = context.getInputData();
58
+ const credentials = await context.getCredentials('frankLabApi');
59
+ const client = (0, client_1.createFrankLabClient)({
60
+ baseUrl: String(credentials.baseUrl),
61
+ apiKey: String(credentials.apiKey),
62
+ fetch: async (url, init) => {
63
+ const responseBody = await context.helpers.httpRequest({
64
+ method: init.method,
65
+ url,
66
+ headers: init.headers,
67
+ body: init.body ? JSON.parse(init.body) : undefined,
68
+ json: true,
69
+ });
70
+ return responseFromBody(responseBody);
71
+ },
72
+ });
73
+ const output = [];
74
+ for (let itemIndex = 0; itemIndex < items.length; itemIndex += 1) {
75
+ try {
76
+ const operation = context.getNodeParameter('operation', itemIndex);
77
+ const payload = buildPayload(context, itemIndex, operation);
78
+ const result = await client.request((0, registry_1.keyFor)(moduleName, operation), payload);
79
+ const shouldPoll = context.getNodeParameter('waitForCompletion', itemIndex, false);
80
+ const taskId = typeof result.taskId === 'string' ? result.taskId : '';
81
+ const pollOperation = resolveStatusOperation(statusOperation, operation);
82
+ const finalResult = shouldPoll && taskId && pollOperation ? await client.poll((0, registry_1.keyFor)(moduleName, pollOperation), taskId) : result;
83
+ output.push({ json: finalResult, pairedItem: itemIndex });
84
+ }
85
+ catch (error) {
86
+ if (context.continueOnFail()) {
87
+ output.push({ json: { error: error instanceof Error ? error.message : String(error) }, pairedItem: itemIndex });
88
+ continue;
89
+ }
90
+ throw new n8n_workflow_1.NodeOperationError(context.getNode(), error, { itemIndex });
91
+ }
92
+ }
93
+ return [output];
94
+ }
95
+ function buildPayload(context, itemIndex, operation) {
96
+ const payload = parsePayload(context.getNodeParameter('payloadJson', itemIndex, '{}'));
97
+ const simpleFields = [
98
+ 'imageUrl',
99
+ 'videoUrl',
100
+ 'audioUrl',
101
+ 'audio_url',
102
+ 'sampleUrl',
103
+ 'text',
104
+ 'voice_id',
105
+ 'voice_id_2',
106
+ 'model_id',
107
+ 'language_code',
108
+ 'stability',
109
+ 'similarity_boost',
110
+ 'style',
111
+ 'output_format',
112
+ 'seed',
113
+ 'google_tts_mode',
114
+ 'google_voice_name',
115
+ 'speaker_1_name',
116
+ 'speaker_1_voice',
117
+ 'speaker_2_name',
118
+ 'speaker_2_voice',
119
+ 'style_prompt',
120
+ 'request_id',
121
+ 'label',
122
+ 'operationName',
123
+ 'speed',
124
+ 'duration_seconds',
125
+ 'prompt_influence',
126
+ 'jobId',
127
+ 'taskId',
128
+ 'dubbingId',
129
+ 'profileId',
130
+ 'sampleId',
131
+ 'name',
132
+ 'description',
133
+ 'clone_name',
134
+ 'clone_description',
135
+ 'file_url',
136
+ 'source_url',
137
+ 'target_lang',
138
+ 'source_lang',
139
+ 'dubbing_name',
140
+ 'num_speakers',
141
+ 'voice_description',
142
+ 'design_text',
143
+ 'voice_name',
144
+ 'generated_voice_id',
145
+ ];
146
+ for (const field of simpleFields) {
147
+ const value = context.getNodeParameter(field, itemIndex, undefined);
148
+ if (value !== undefined && value !== '') {
149
+ payload[field === 'operationName' ? 'operation' : field] = value;
150
+ }
151
+ }
152
+ if (operation === 'revokeProfile' && payload.profileId) {
153
+ payload.profileId = String(payload.profileId);
154
+ }
155
+ if (operation === 'getTask' && payload.jobId && !payload.taskId) {
156
+ payload.taskId = payload.jobId;
157
+ }
158
+ if (operation === 'getDubbing' && payload.jobId && !payload.dubbingId) {
159
+ payload.dubbingId = payload.jobId;
160
+ }
161
+ (0, url_1.validatePublicMediaUrlsInPayload)(payload);
162
+ return payload;
163
+ }
164
+ function resolveStatusOperation(statusOperation, operation) {
165
+ var _a, _b;
166
+ if (typeof statusOperation === 'string')
167
+ return statusOperation;
168
+ return (_b = (_a = statusOperation[operation]) !== null && _a !== void 0 ? _a : statusOperation.default) !== null && _b !== void 0 ? _b : '';
169
+ }
170
+ function parsePayload(raw) {
171
+ if (!raw.trim())
172
+ return {};
173
+ const parsed = JSON.parse(raw);
174
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
175
+ throw new Error('Additional JSON must be an object');
176
+ }
177
+ return parsed;
178
+ }
179
+ function responseFromBody(body) {
180
+ return {
181
+ ok: true,
182
+ status: 200,
183
+ async json() {
184
+ return body;
185
+ },
186
+ async text() {
187
+ return JSON.stringify(body);
188
+ },
189
+ };
190
+ }
191
+ //# sourceMappingURL=node-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-utils.js","sourceRoot":"","sources":["../../../nodes/shared/node-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function redactSensitive<T>(value: T): T;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redactSensitive = redactSensitive;
4
+ const SENSITIVE_KEY_PARTS = [
5
+ 'authorization',
6
+ 'x-api-key',
7
+ 'apikey',
8
+ 'api_key',
9
+ 'token',
10
+ 'secret',
11
+ 'password',
12
+ 'passphrase',
13
+ 'privatekey',
14
+ 'private_key',
15
+ 'private-key',
16
+ 'keypem',
17
+ 'pem',
18
+ 'certificate',
19
+ 'cert',
20
+ 'chain',
21
+ ];
22
+ function redactSensitive(value) {
23
+ return redactValue(value);
24
+ }
25
+ function redactValue(value, key = '') {
26
+ var _a;
27
+ if (value === undefined)
28
+ return undefined;
29
+ if (value === null || typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string') {
30
+ return isSensitiveKey(key) ? '[redacted]' : value;
31
+ }
32
+ if (Array.isArray(value)) {
33
+ return value.map((item) => { var _a; return (_a = redactValue(item)) !== null && _a !== void 0 ? _a : null; });
34
+ }
35
+ if (typeof value === 'object') {
36
+ const output = {};
37
+ for (const [childKey, childValue] of Object.entries(value)) {
38
+ output[childKey] = isSensitiveKey(childKey) ? '[redacted]' : ((_a = redactValue(childValue, childKey)) !== null && _a !== void 0 ? _a : null);
39
+ }
40
+ return output;
41
+ }
42
+ return String(value);
43
+ }
44
+ function isSensitiveKey(key) {
45
+ const normalized = key.toLowerCase().replace(/[^a-z0-9_-]/g, '');
46
+ return SENSITIVE_KEY_PARTS.some((part) => normalized.includes(part));
47
+ }
48
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../../nodes/shared/redaction.ts"],"names":[],"mappings":";;AAqBA,0CAEC;AArBD,MAAM,mBAAmB,GAAG;IAC3B,eAAe;IACf,WAAW;IACX,QAAQ;IACR,SAAS;IACT,OAAO;IACP,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,aAAa;IACb,QAAQ;IACR,KAAK;IACL,aAAa;IACb,MAAM;IACN,OAAO;CACP,CAAC;AAEF,SAAgB,eAAe,CAAI,KAAQ;IAC1C,OAAO,WAAW,CAAC,KAAK,CAAM,CAAC;AAChC,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,GAAG,GAAG,EAAE;;IAC5C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5G,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAE,KAAmB,CAAC;IAClE,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,WAAC,OAAA,MAAA,WAAW,CAAC,IAAI,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,MAAM,GAA8B,EAAE,CAAC;QAC7C,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YACvF,MAAM,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAA,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,mCAAI,IAAI,CAAC,CAAC;QAC1G,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IAClC,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACjE,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1,29 @@
1
+ export type FrankLabModule = 'holst' | 'kley' | 'plastinka' | 'volna' | 'c2pa';
2
+ export type AuthHeader = 'Authorization' | 'X-API-Key';
3
+ export type HttpMethod = 'GET' | 'POST';
4
+ export type ResponseEnvelope = 'successData' | 'codeData';
5
+ export interface EndpointDefinition {
6
+ key: string;
7
+ module: FrankLabModule;
8
+ operation: string;
9
+ routeFamily: string;
10
+ method: HttpMethod;
11
+ path: string;
12
+ authHeader: AuthHeader;
13
+ guard: string;
14
+ requestShape: string;
15
+ responseEnvelope: ResponseEnvelope;
16
+ statusPath: string;
17
+ terminalStatuses: readonly string[];
18
+ outputExtractor: string;
19
+ costFields: readonly string[];
20
+ redactionFields: readonly string[];
21
+ }
22
+ export declare const SUCCESS_STATUSES: readonly ["completed", "success", "succeed", "succeeded", "done"];
23
+ export declare const FAILURE_STATUSES: readonly ["failed", "fail", "error", "refunded", "cancelled"];
24
+ export declare const ACTIVE_STATUSES: readonly ["queued", "processing"];
25
+ export declare const TERMINAL_STATUSES: readonly ["completed", "success", "succeed", "succeeded", "done", "failed", "fail", "error", "refunded", "cancelled"];
26
+ export declare const ENDPOINT_REGISTRY: Record<string, EndpointDefinition>;
27
+ export declare const MODULE_OPERATIONS: Record<FrankLabModule, string[]>;
28
+ export declare function getEndpoint(key: string): EndpointDefinition;
29
+ export declare function keyFor(moduleName: FrankLabModule, operation: string): string;