@nlabs/reaktor 1.10.0 → 1.12.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.
- package/README.md +4 -0
- package/docs/GENERATION.md +135 -0
- package/lib/actions/contentGeneration.d.ts +30 -1
- package/lib/actions/contentGeneration.js +103 -16
- package/lib/actions/databaseAccounts.d.ts +14 -0
- package/lib/actions/databaseAccounts.js +211 -0
- package/lib/actions/databaseProvisioningLease.d.ts +6 -0
- package/lib/actions/databaseProvisioningLease.js +166 -0
- package/lib/actions/higgsfield.d.ts +2 -0
- package/lib/actions/higgsfield.js +7 -1
- package/lib/actions/imageGeneration.d.ts +5 -1
- package/lib/actions/imageGeneration.js +13 -2
- package/lib/actions/index.d.ts +3 -0
- package/lib/actions/index.js +4 -1
- package/lib/actions/openaiResponseSession.d.ts +60 -0
- package/lib/actions/openaiResponseSession.js +248 -0
- package/lib/actions/videoGeneration.d.ts +5 -1
- package/lib/actions/videoGeneration.js +13 -2
- package/lib/adapters/higgsfieldAdapter.d.ts +21 -15
- package/lib/adapters/higgsfieldAdapter.js +24 -11
- package/lib/adapters/higgsfieldModelCatalog.d.ts +10 -0
- package/lib/adapters/higgsfieldModelCatalog.js +5363 -0
- package/lib/adapters/higgsfieldModels.d.ts +2 -0
- package/lib/adapters/higgsfieldModels.js +37 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +4 -1
- package/lib/objectTypes/contentGeneration.js +26 -3
- package/lib/objectTypes/imageGeneration.js +3 -2
- package/lib/objectTypes/videoGeneration.js +2 -1
- package/lib/types/databaseCredentials.types.d.ts +30 -0
- package/lib/types/databaseCredentials.types.js +3 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.js +2 -1
- package/lib/utils/databaseCredentials.d.ts +5 -0
- package/lib/utils/databaseCredentials.js +100 -0
- package/lib/utils/generationCallback.d.ts +23 -0
- package/lib/utils/generationCallback.js +49 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +4 -1
- package/lib/utils/secretDatabase.d.ts +8 -0
- package/lib/utils/secretDatabase.js +153 -0
- package/lib/utils/testUtils.js +10 -2
- package/package.json +12 -10
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { post } from '@nlabs/rip-hunter';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { validateGeminiImageInput } from '../adapters/geminiGenerationAdapter.js';
|
|
4
|
+
import { getHiggsfieldModel } from '../adapters/higgsfieldModelCatalog.js';
|
|
4
5
|
import { validateOpenAIImageInput } from '../adapters/imageGenerationAdapter.js';
|
|
5
6
|
import { Config } from '../config.js';
|
|
6
7
|
import { ContentGenerationRejectedError, generateContent } from './contentGeneration.js';
|
|
7
|
-
import { generateMarketingStudioImage, generateSoulImage } from './higgsfield.js';
|
|
8
|
+
import { generateHiggsfieldModel, generateMarketingStudioImage, generateSoulImage } from './higgsfield.js';
|
|
8
9
|
/** Only an explicit provider rejection proves it is safe to release a reservation. */ export class ImageGenerationRejectedError extends Error {
|
|
9
10
|
}
|
|
10
11
|
export const generateOpenAIImage = async (_context, input, config)=>{
|
|
@@ -58,6 +59,16 @@ export const generateOpenAIImage = async (_context, input, config)=>{
|
|
|
58
59
|
};
|
|
59
60
|
};
|
|
60
61
|
/** Provider selection is data; credentials and paid-job orchestration stay server-side. */ export const generateImage = async (context, input)=>{
|
|
62
|
+
if (input.provider === 'higgsfield' && 'modelInput' in input && typeof input.model === 'string') {
|
|
63
|
+
if (getHiggsfieldModel(input.model).kind !== 'image') {
|
|
64
|
+
throw new Error('Choose an image model.');
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
...await generateHiggsfieldModel(context, input.model, input.modelInput),
|
|
68
|
+
provider: 'higgsfield',
|
|
69
|
+
status: 'queued'
|
|
70
|
+
};
|
|
71
|
+
}
|
|
61
72
|
const { provider, ...options } = input;
|
|
62
73
|
if (provider === 'gemini') {
|
|
63
74
|
return generateGeminiImage(context, options);
|
|
@@ -118,4 +129,4 @@ export const generateOpenAIImage = async (_context, input, config)=>{
|
|
|
118
129
|
}
|
|
119
130
|
};
|
|
120
131
|
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9pbWFnZUdlbmVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwb3N0fSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5pbXBvcnQge3JhbmRvbVVVSUR9IGZyb20gJ25vZGU6Y3J5cHRvJztcblxuaW1wb3J0IHt2YWxpZGF0ZUdlbWluaUltYWdlSW5wdXR9IGZyb20gJy4uL2FkYXB0ZXJzL2dlbWluaUdlbmVyYXRpb25BZGFwdGVyLmpzJztcbmltcG9ydCB7dmFsaWRhdGVPcGVuQUlJbWFnZUlucHV0fSBmcm9tICcuLi9hZGFwdGVycy9pbWFnZUdlbmVyYXRpb25BZGFwdGVyLmpzJztcbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IsIGdlbmVyYXRlQ29udGVudH0gZnJvbSAnLi9jb250ZW50R2VuZXJhdGlvbi5qcyc7XG5pbXBvcnQge2dlbmVyYXRlTWFya2V0aW5nU3R1ZGlvSW1hZ2UsIGdlbmVyYXRlU291bEltYWdlfSBmcm9tICcuL2hpZ2dzZmllbGQuanMnO1xuXG5pbXBvcnQgdHlwZSB7R2VtaW5pSW1hZ2VJbnB1dH0gZnJvbSAnLi4vYWRhcHRlcnMvZ2VtaW5pR2VuZXJhdGlvbkFkYXB0ZXIuanMnO1xuaW1wb3J0IHR5cGUge01hcmtldGluZ1N0dWRpb0ltYWdlSW5wdXQsIFNvdWxJbWFnZUlucHV0fSBmcm9tICcuLi9hZGFwdGVycy9oaWdnc2ZpZWxkQWRhcHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7T3BlbkFJSW1hZ2VJbnB1dH0gZnJvbSAnLi4vYWRhcHRlcnMvaW1hZ2VHZW5lcmF0aW9uQWRhcHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5cbi8qKiBPbmx5IGFuIGV4cGxpY2l0IHByb3ZpZGVyIHJlamVjdGlvbiBwcm92ZXMgaXQgaXMgc2FmZSB0byByZWxlYXNlIGEgcmVzZXJ2YXRpb24uICovXG5leHBvcnQgY2xhc3MgSW1hZ2VHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRlSW1hZ2VJbnB1dCA9XG4gIHwgKEdlbWluaUltYWdlSW5wdXQgJiB7cHJvdmlkZXI6ICdnZW1pbmknfSlcbiAgfCAoT3BlbkFJSW1hZ2VJbnB1dCAmIHtwcm92aWRlcjogJ29wZW5haSd9KVxuICB8IChTb3VsSW1hZ2VJbnB1dCAmIHtwcm92aWRlcjogJ2hpZ2dzZmllbGQnOyBpbWFnZVVybHM/OiB1bmRlZmluZWR9KVxuICB8IChNYXJrZXRpbmdTdHVkaW9JbWFnZUlucHV0ICYge3Byb3ZpZGVyOiAnaGlnZ3NmaWVsZCd9KTtcblxuZXhwb3J0IGludGVyZmFjZSBJbWFnZUdlbmVyYXRpb25SZXN1bHQge1xuICBjYW5jZWxVcmw/OiBzdHJpbmc7XG4gIGltYWdlQmFzZTY0Pzogc3RyaW5nO1xuICBtaW1lVHlwZT86ICdpbWFnZS9qcGVnJyB8ICdpbWFnZS9wbmcnO1xuICBwcm92aWRlcjogJ2dlbWluaScgfCAnaGlnZ3NmaWVsZCcgfCAnb3BlbmFpJztcbiAgcmVxdWVzdElkOiBzdHJpbmc7XG4gIHN0YXR1czogJ3F1ZXVlZCcgfCAnY29tcGxldGVkJztcbiAgc3RhdHVzVXJsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVPcGVuQUlJbWFnZSA9IGFzeW5jIChcbiAgX2NvbnRleHQ6IEFwaUNvbnRleHQsIGlucHV0OiBPcGVuQUlJbWFnZUlucHV0LCBjb25maWc/OiB7a2V5Pzogc3RyaW5nOyBtb2RlbD86IHN0cmluZ31cbik6IFByb21pc2U8SW1hZ2VHZW5lcmF0aW9uUmVzdWx0PiA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlT3BlbkFJSW1hZ2VJbnB1dChpbnB1dCk7XG4gIGNvbnN0IGtleSA9IGNvbmZpZz8ua2V5IHx8IENvbmZpZy5nZXQ8c3RyaW5nPignb3BlbmFpLmFwaUtleScpO1xuICBpZigha2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPcGVuQUkgaW1hZ2UgZ2VuZXJhdGlvbiBpcyBub3QgY29uZmlndXJlZC4nKTtcbiAgfVxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBvc3QoJ2h0dHBzOi8vYXBpLm9wZW5haS5jb20vdjEvaW1hZ2VzL2dlbmVyYXRpb25zJywge1xuICAgIG1vZGVsOiB2YWxpZGF0ZWQubW9kZWwgfHwgY29uZmlnPy5tb2RlbCB8fCBDb25maWcuZ2V0PHN0cmluZz4oJ29wZW5haS5pbWFnZU1vZGVsJykgfHwgJ2dwdC1pbWFnZS0xLjUnLFxuICAgIG46IDEsXG4gICAgb3V0cHV0X2Zvcm1hdDogJ3BuZycsXG4gICAgcHJvbXB0OiB2YWxpZGF0ZWQucHJvbXB0LFxuICAgIHF1YWxpdHk6IHZhbGlkYXRlZC5xdWFsaXR5LFxuICAgIHNpemU6IHZhbGlkYXRlZC5zaXplXG4gIH0sIHtjYWNoZTogZmFsc2UsIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7a2V5fWB9KSwgdGltZW91dDogMTgwXzAwMH0pIGFzIHtcbiAgICBkYXRhPzoge2I2NF9qc29uPzogc3RyaW5nfVtdO1xuICAgIGVycm9yPzoge3R5cGU/OiBzdHJpbmd9O1xuICB9O1xuICBpZihyZXNwb25zZS5lcnJvciAmJiBbJ2ludmFsaWRfcmVxdWVzdF9lcnJvcicsICdhdXRoZW50aWNhdGlvbl9lcnJvcicsICdwZXJtaXNzaW9uX2Vycm9yJ10uaW5jbHVkZXMocmVzcG9uc2UuZXJyb3IudHlwZSB8fCAnJykpIHtcbiAgICB0aHJvdyBuZXcgSW1hZ2VHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcignT3BlbkFJIHJlamVjdGVkIHRoZSBpbWFnZSByZXF1ZXN0LiBDaGVjayBtb2RlbCBhY2Nlc3MgYW5kIHByb21wdC4nKTtcbiAgfVxuICBjb25zdCBlbmNvZGVkID0gcmVzcG9uc2UuZGF0YT8uWzBdPy5iNjRfanNvbjtcbiAgaWYocmVzcG9uc2UuZXJyb3IgfHwgIWVuY29kZWQgfHwgZW5jb2RlZC5sZW5ndGggPiA0MCAqIDEwMjQgKiAxMDI0IHx8ICEvXltBLVphLXowLTkrL10rPXswLDJ9JC8udGVzdChlbmNvZGVkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignT3BlbkFJIGltYWdlIG91dHB1dCBjb3VsZCBub3QgYmUgdmVyaWZpZWQuJyk7XG4gIH1cbiAgaWYoIUJ1ZmZlci5mcm9tKGVuY29kZWQsICdiYXNlNjQnKS5zdWJhcnJheSgwLCA4KS5lcXVhbHMoQnVmZmVyLmZyb20oWzEzNywgODAsIDc4LCA3MSwgMTMsIDEwLCAyNiwgMTBdKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ09wZW5BSSBkaWQgbm90IHJldHVybiBQTkcgaW1hZ2UgYnl0ZXMuJyk7XG4gIH1cbiAgcmV0dXJuIHtpbWFnZUJhc2U2NDogZW5jb2RlZCwgcHJvdmlkZXI6ICdvcGVuYWknLCByZXF1ZXN0SWQ6IGBvcGVuYWktJHtyYW5kb21VVUlEKCl9YCwgc3RhdHVzOiAnY29tcGxldGVkJ307XG59O1xuXG4vKiogUHJvdmlkZXIgc2VsZWN0aW9uIGlzIGRhdGE7IGNyZWRlbnRpYWxzIGFuZCBwYWlkLWpvYiBvcmNoZXN0cmF0aW9uIHN0YXkgc2VydmVyLXNpZGUuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVJbWFnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBpbnB1dDogR2VuZXJhdGVJbWFnZUlucHV0KTogUHJvbWlzZTxJbWFnZUdlbmVyYXRpb25SZXN1bHQ+ID0+IHtcbiAgY29uc3Qge3Byb3ZpZGVyLCAuLi5vcHRpb25zfSA9IGlucHV0O1xuICBpZihwcm92aWRlciA9PT0gJ2dlbWluaScpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVHZW1pbmlJbWFnZShjb250ZXh0LCBvcHRpb25zIGFzIEdlbWluaUltYWdlSW5wdXQpO1xuICB9XG4gIGlmKHByb3ZpZGVyID09PSAnb3BlbmFpJykge1xuICAgIHJldHVybiBnZW5lcmF0ZU9wZW5BSUltYWdlKGNvbnRleHQsIG9wdGlvbnMgYXMgT3BlbkFJSW1hZ2VJbnB1dCk7XG4gIH1cbiAgaWYocHJvdmlkZXIgIT09ICdoaWdnc2ZpZWxkJykge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgaW1hZ2UgcHJvdmlkZXIuJyk7XG4gIH1cbiAgY29uc3QgcmVxdWVzdCA9ICdpbWFnZVVybHMnIGluIG9wdGlvbnMgJiYgb3B0aW9ucy5pbWFnZVVybHM/Lmxlbmd0aFxuICAgID8gYXdhaXQgZ2VuZXJhdGVNYXJrZXRpbmdTdHVkaW9JbWFnZShjb250ZXh0LCBvcHRpb25zIGFzIE1hcmtldGluZ1N0dWRpb0ltYWdlSW5wdXQpXG4gICAgOiBhd2FpdCBnZW5lcmF0ZVNvdWxJbWFnZShjb250ZXh0LCBvcHRpb25zIGFzIFNvdWxJbWFnZUlucHV0KTtcbiAgcmV0dXJuIHsuLi5yZXF1ZXN0LCBwcm92aWRlciwgc3RhdHVzOiAncXVldWVkJ307XG59O1xuXG4vKiogUmV1c2VzIHRoZSBHZW1pbmkgY29udGVudCBwcm90b2NvbCB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBnZW5lcmljIGltYWdlIHJlc3VsdCBzaGFwZS4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUdlbWluaUltYWdlID0gYXN5bmMgKFxuICBfY29udGV4dDogQXBpQ29udGV4dCwgaW5wdXQ6IEdlbWluaUltYWdlSW5wdXQsIGNvbmZpZz86IHtrZXk/OiBzdHJpbmc7IG1vZGVsPzogc3RyaW5nfVxuKTogUHJvbWlzZTxJbWFnZUdlbmVyYXRpb25SZXN1bHQ+ID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVHZW1pbmlJbWFnZUlucHV0KGlucHV0KTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZUNvbnRlbnQoey4uLnZhbGlkYXRlZCwgbW9kYWxpdHk6ICdpbWFnZScsIHByb3ZpZGVyOiAnZ2VtaW5pJ30sIHtcbiAgICAgIGdlbWluaUltYWdlTW9kZWw6IGNvbmZpZz8ubW9kZWwgfHwgQ29uZmlnLmdldDxzdHJpbmc+KCdjb250ZW50R2VuZXJhdGlvbi5nZW1pbmlJbWFnZU1vZGVsJyksXG4gICAgICBnZW1pbmlLZXk6IGNvbmZpZz8ua2V5IHx8IENvbmZpZy5nZXQ8c3RyaW5nPignY29udGVudEdlbmVyYXRpb24uZ2VtaW5pS2V5JylcbiAgICB9KTtcbiAgICBjb25zdCB7aW1hZ2V9ID0gcmVzdWx0O1xuICAgIGlmKCFpbWFnZSB8fCAhKGltYWdlLm1pbWUgPT09ICdpbWFnZS9wbmcnXG4gICAgICA/IGltYWdlLmJ5dGVzLnN1YmFycmF5KDAsIDgpLmVxdWFscyhCdWZmZXIuZnJvbShbMTM3LCA4MCwgNzgsIDcxLCAxMywgMTAsIDI2LCAxMF0pKVxuICAgICAgOiBpbWFnZS5ieXRlcy5zdWJhcnJheSgwLCAzKS5lcXVhbHMoQnVmZmVyLmZyb20oWzI1NSwgMjE2LCAyNTVdKSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dlbWluaSBpbWFnZSBvdXRwdXQgY291bGQgbm90IGJlIHZlcmlmaWVkLicpO1xuICAgIH1cbiAgICByZXR1cm4ge2ltYWdlQmFzZTY0OiBpbWFnZS5ieXRlcy50b1N0cmluZygnYmFzZTY0JyksIG1pbWVUeXBlOiBpbWFnZS5taW1lLCBwcm92aWRlcjogJ2dlbWluaScsIHJlcXVlc3RJZDogYGdlbWluaS0ke3JhbmRvbVVVSUQoKX1gLCBzdGF0dXM6ICdjb21wbGV0ZWQnfTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2YgQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgSW1hZ2VHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsicG9zdCIsInJhbmRvbVVVSUQiLCJ2YWxpZGF0ZUdlbWluaUltYWdlSW5wdXQiLCJ2YWxpZGF0ZU9wZW5BSUltYWdlSW5wdXQiLCJDb25maWciLCJDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IiLCJnZW5lcmF0ZUNvbnRlbnQiLCJnZW5lcmF0ZU1hcmtldGluZ1N0dWRpb0ltYWdlIiwiZ2VuZXJhdGVTb3VsSW1hZ2UiLCJJbWFnZUdlbmVyYXRpb25SZWplY3RlZEVycm9yIiwiRXJyb3IiLCJnZW5lcmF0ZU9wZW5BSUltYWdlIiwiX2NvbnRleHQiLCJpbnB1dCIsImNvbmZpZyIsInZhbGlkYXRlZCIsImtleSIsImdldCIsInJlc3BvbnNlIiwibW9kZWwiLCJuIiwib3V0cHV0X2Zvcm1hdCIsInByb21wdCIsInF1YWxpdHkiLCJzaXplIiwiY2FjaGUiLCJoZWFkZXJzIiwiSGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJ0aW1lb3V0IiwiZXJyb3IiLCJpbmNsdWRlcyIsInR5cGUiLCJlbmNvZGVkIiwiZGF0YSIsImI2NF9qc29uIiwibGVuZ3RoIiwidGVzdCIsIkJ1ZmZlciIsImZyb20iLCJzdWJhcnJheSIsImVxdWFscyIsImltYWdlQmFzZTY0IiwicHJvdmlkZXIiLCJyZXF1ZXN0SWQiLCJzdGF0dXMiLCJnZW5lcmF0ZUltYWdlIiwiY29udGV4dCIsIm9wdGlvbnMiLCJnZW5lcmF0ZUdlbWluaUltYWdlIiwicmVxdWVzdCIsImltYWdlVXJscyIsInJlc3VsdCIsIm1vZGFsaXR5IiwiZ2VtaW5pSW1hZ2VNb2RlbCIsImdlbWluaUtleSIsImltYWdlIiwibWltZSIsImJ5dGVzIiwidG9TdHJpbmciLCJtaW1lVHlwZSIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLElBQUksUUFBTyxvQkFBb0I7QUFDdkMsU0FBUUMsVUFBVSxRQUFPLGNBQWM7QUFFdkMsU0FBUUMsd0JBQXdCLFFBQU8seUNBQXlDO0FBQ2hGLFNBQVFDLHdCQUF3QixRQUFPLHdDQUF3QztBQUMvRSxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUNwQyxTQUFRQyw4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
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9pbWFnZUdlbmVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwb3N0fSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5pbXBvcnQge3JhbmRvbVVVSUR9IGZyb20gJ25vZGU6Y3J5cHRvJztcblxuaW1wb3J0IHt2YWxpZGF0ZUdlbWluaUltYWdlSW5wdXR9IGZyb20gJy4uL2FkYXB0ZXJzL2dlbWluaUdlbmVyYXRpb25BZGFwdGVyLmpzJztcbmltcG9ydCB7Z2V0SGlnZ3NmaWVsZE1vZGVsfSBmcm9tICcuLi9hZGFwdGVycy9oaWdnc2ZpZWxkTW9kZWxDYXRhbG9nLmpzJztcbmltcG9ydCB7dmFsaWRhdGVPcGVuQUlJbWFnZUlucHV0fSBmcm9tICcuLi9hZGFwdGVycy9pbWFnZUdlbmVyYXRpb25BZGFwdGVyLmpzJztcbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtDb250ZW50R2VuZXJhdGlvblJlamVjdGVkRXJyb3IsIGdlbmVyYXRlQ29udGVudH0gZnJvbSAnLi9jb250ZW50R2VuZXJhdGlvbi5qcyc7XG5pbXBvcnQge2dlbmVyYXRlSGlnZ3NmaWVsZE1vZGVsLCBnZW5lcmF0ZU1hcmtldGluZ1N0dWRpb0ltYWdlLCBnZW5lcmF0ZVNvdWxJbWFnZX0gZnJvbSAnLi9oaWdnc2ZpZWxkLmpzJztcblxuaW1wb3J0IHR5cGUge0dlbWluaUltYWdlSW5wdXR9IGZyb20gJy4uL2FkYXB0ZXJzL2dlbWluaUdlbmVyYXRpb25BZGFwdGVyLmpzJztcbmltcG9ydCB0eXBlIHtNYXJrZXRpbmdTdHVkaW9JbWFnZUlucHV0LCBTb3VsSW1hZ2VJbnB1dH0gZnJvbSAnLi4vYWRhcHRlcnMvaGlnZ3NmaWVsZEFkYXB0ZXIuanMnO1xuaW1wb3J0IHR5cGUge09wZW5BSUltYWdlSW5wdXR9IGZyb20gJy4uL2FkYXB0ZXJzL2ltYWdlR2VuZXJhdGlvbkFkYXB0ZXIuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuXG4vKiogT25seSBhbiBleHBsaWNpdCBwcm92aWRlciByZWplY3Rpb24gcHJvdmVzIGl0IGlzIHNhZmUgdG8gcmVsZWFzZSBhIHJlc2VydmF0aW9uLiAqL1xuZXhwb3J0IGNsYXNzIEltYWdlR2VuZXJhdGlvblJlamVjdGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG5leHBvcnQgdHlwZSBHZW5lcmF0ZUltYWdlSW5wdXQgPVxuICB8IHttb2RlbDogc3RyaW5nOyBtb2RlbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgcHJvdmlkZXI6ICdoaWdnc2ZpZWxkJ31cbiAgfCAoR2VtaW5pSW1hZ2VJbnB1dCAmIHtwcm92aWRlcjogJ2dlbWluaSd9KVxuICB8IChPcGVuQUlJbWFnZUlucHV0ICYge3Byb3ZpZGVyOiAnb3BlbmFpJ30pXG4gIHwgKFNvdWxJbWFnZUlucHV0ICYge3Byb3ZpZGVyOiAnaGlnZ3NmaWVsZCc7IGltYWdlVXJscz86IHVuZGVmaW5lZH0pXG4gIHwgKE1hcmtldGluZ1N0dWRpb0ltYWdlSW5wdXQgJiB7cHJvdmlkZXI6ICdoaWdnc2ZpZWxkJ30pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlR2VuZXJhdGlvblJlc3VsdCB7XG4gIGNhbmNlbFVybD86IHN0cmluZztcbiAgaW1hZ2VCYXNlNjQ/OiBzdHJpbmc7XG4gIG1pbWVUeXBlPzogJ2ltYWdlL2pwZWcnIHwgJ2ltYWdlL3BuZyc7XG4gIHByb3ZpZGVyOiAnZ2VtaW5pJyB8ICdoaWdnc2ZpZWxkJyB8ICdvcGVuYWknO1xuICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgc3RhdHVzOiAncXVldWVkJyB8ICdjb21wbGV0ZWQnO1xuICBzdGF0dXNVcmw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZU9wZW5BSUltYWdlID0gYXN5bmMgKFxuICBfY29udGV4dDogQXBpQ29udGV4dCwgaW5wdXQ6IE9wZW5BSUltYWdlSW5wdXQsIGNvbmZpZz86IHtrZXk/OiBzdHJpbmc7IG1vZGVsPzogc3RyaW5nfVxuKTogUHJvbWlzZTxJbWFnZUdlbmVyYXRpb25SZXN1bHQ+ID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVPcGVuQUlJbWFnZUlucHV0KGlucHV0KTtcbiAgY29uc3Qga2V5ID0gY29uZmlnPy5rZXkgfHwgQ29uZmlnLmdldDxzdHJpbmc+KCdvcGVuYWkuYXBpS2V5Jyk7XG4gIGlmKCFrZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ09wZW5BSSBpbWFnZSBnZW5lcmF0aW9uIGlzIG5vdCBjb25maWd1cmVkLicpO1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcG9zdCgnaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9pbWFnZXMvZ2VuZXJhdGlvbnMnLCB7XG4gICAgbW9kZWw6IHZhbGlkYXRlZC5tb2RlbCB8fCBjb25maWc/Lm1vZGVsIHx8IENvbmZpZy5nZXQ8c3RyaW5nPignb3BlbmFpLmltYWdlTW9kZWwnKSB8fCAnZ3B0LWltYWdlLTEuNScsXG4gICAgbjogMSxcbiAgICBvdXRwdXRfZm9ybWF0OiAncG5nJyxcbiAgICBwcm9tcHQ6IHZhbGlkYXRlZC5wcm9tcHQsXG4gICAgcXVhbGl0eTogdmFsaWRhdGVkLnF1YWxpdHksXG4gICAgc2l6ZTogdmFsaWRhdGVkLnNpemVcbiAgfSwge2NhY2hlOiBmYWxzZSwgaGVhZGVyczogbmV3IEhlYWRlcnMoe0F1dGhvcml6YXRpb246IGBCZWFyZXIgJHtrZXl9YH0pLCB0aW1lb3V0OiAxODBfMDAwfSkgYXMge1xuICAgIGRhdGE/OiB7YjY0X2pzb24/OiBzdHJpbmd9W107XG4gICAgZXJyb3I/OiB7dHlwZT86IHN0cmluZ307XG4gIH07XG4gIGlmKHJlc3BvbnNlLmVycm9yICYmIFsnaW52YWxpZF9yZXF1ZXN0X2Vycm9yJywgJ2F1dGhlbnRpY2F0aW9uX2Vycm9yJywgJ3Blcm1pc3Npb25fZXJyb3InXS5pbmNsdWRlcyhyZXNwb25zZS5lcnJvci50eXBlIHx8ICcnKSkge1xuICAgIHRocm93IG5ldyBJbWFnZUdlbmVyYXRpb25SZWplY3RlZEVycm9yKCdPcGVuQUkgcmVqZWN0ZWQgdGhlIGltYWdlIHJlcXVlc3QuIENoZWNrIG1vZGVsIGFjY2VzcyBhbmQgcHJvbXB0LicpO1xuICB9XG4gIGNvbnN0IGVuY29kZWQgPSByZXNwb25zZS5kYXRhPy5bMF0/LmI2NF9qc29uO1xuICBpZihyZXNwb25zZS5lcnJvciB8fCAhZW5jb2RlZCB8fCBlbmNvZGVkLmxlbmd0aCA+IDQwICogMTAyNCAqIDEwMjQgfHwgIS9eW0EtWmEtejAtOSsvXSs9ezAsMn0kLy50ZXN0KGVuY29kZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPcGVuQUkgaW1hZ2Ugb3V0cHV0IGNvdWxkIG5vdCBiZSB2ZXJpZmllZC4nKTtcbiAgfVxuICBpZighQnVmZmVyLmZyb20oZW5jb2RlZCwgJ2Jhc2U2NCcpLnN1YmFycmF5KDAsIDgpLmVxdWFscyhCdWZmZXIuZnJvbShbMTM3LCA4MCwgNzgsIDcxLCAxMywgMTAsIDI2LCAxMF0pKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignT3BlbkFJIGRpZCBub3QgcmV0dXJuIFBORyBpbWFnZSBieXRlcy4nKTtcbiAgfVxuICByZXR1cm4ge2ltYWdlQmFzZTY0OiBlbmNvZGVkLCBwcm92aWRlcjogJ29wZW5haScsIHJlcXVlc3RJZDogYG9wZW5haS0ke3JhbmRvbVVVSUQoKX1gLCBzdGF0dXM6ICdjb21wbGV0ZWQnfTtcbn07XG5cbi8qKiBQcm92aWRlciBzZWxlY3Rpb24gaXMgZGF0YTsgY3JlZGVudGlhbHMgYW5kIHBhaWQtam9iIG9yY2hlc3RyYXRpb24gc3RheSBzZXJ2ZXItc2lkZS4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUltYWdlID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGlucHV0OiBHZW5lcmF0ZUltYWdlSW5wdXQpOiBQcm9taXNlPEltYWdlR2VuZXJhdGlvblJlc3VsdD4gPT4ge1xuICBpZihpbnB1dC5wcm92aWRlciA9PT0gJ2hpZ2dzZmllbGQnICYmICdtb2RlbElucHV0JyBpbiBpbnB1dCAmJiB0eXBlb2YgaW5wdXQubW9kZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYoZ2V0SGlnZ3NmaWVsZE1vZGVsKGlucHV0Lm1vZGVsKS5raW5kICE9PSAnaW1hZ2UnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nob29zZSBhbiBpbWFnZSBtb2RlbC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHsuLi5hd2FpdCBnZW5lcmF0ZUhpZ2dzZmllbGRNb2RlbChjb250ZXh0LCBpbnB1dC5tb2RlbCwgaW5wdXQubW9kZWxJbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiksIHByb3ZpZGVyOiAnaGlnZ3NmaWVsZCcsIHN0YXR1czogJ3F1ZXVlZCd9O1xuICB9XG4gIGNvbnN0IHtwcm92aWRlciwgLi4ub3B0aW9uc30gPSBpbnB1dDtcbiAgaWYocHJvdmlkZXIgPT09ICdnZW1pbmknKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlR2VtaW5pSW1hZ2UoY29udGV4dCwgb3B0aW9ucyBhcyBHZW1pbmlJbWFnZUlucHV0KTtcbiAgfVxuICBpZihwcm92aWRlciA9PT0gJ29wZW5haScpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVPcGVuQUlJbWFnZShjb250ZXh0LCBvcHRpb25zIGFzIE9wZW5BSUltYWdlSW5wdXQpO1xuICB9XG4gIGlmKHByb3ZpZGVyICE9PSAnaGlnZ3NmaWVsZCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGltYWdlIHByb3ZpZGVyLicpO1xuICB9XG4gIGNvbnN0IHJlcXVlc3QgPSAnaW1hZ2VVcmxzJyBpbiBvcHRpb25zICYmIG9wdGlvbnMuaW1hZ2VVcmxzPy5sZW5ndGhcbiAgICA/IGF3YWl0IGdlbmVyYXRlTWFya2V0aW5nU3R1ZGlvSW1hZ2UoY29udGV4dCwgb3B0aW9ucyBhcyBNYXJrZXRpbmdTdHVkaW9JbWFnZUlucHV0KVxuICAgIDogYXdhaXQgZ2VuZXJhdGVTb3VsSW1hZ2UoY29udGV4dCwgb3B0aW9ucyBhcyBTb3VsSW1hZ2VJbnB1dCk7XG4gIHJldHVybiB7Li4ucmVxdWVzdCwgcHJvdmlkZXIsIHN0YXR1czogJ3F1ZXVlZCd9O1xufTtcblxuLyoqIFJldXNlcyB0aGUgR2VtaW5pIGNvbnRlbnQgcHJvdG9jb2wgd2hpbGUgcHJlc2VydmluZyB0aGUgZ2VuZXJpYyBpbWFnZSByZXN1bHQgc2hhcGUuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVHZW1pbmlJbWFnZSA9IGFzeW5jIChcbiAgX2NvbnRleHQ6IEFwaUNvbnRleHQsIGlucHV0OiBHZW1pbmlJbWFnZUlucHV0LCBjb25maWc/OiB7a2V5Pzogc3RyaW5nOyBtb2RlbD86IHN0cmluZ31cbik6IFByb21pc2U8SW1hZ2VHZW5lcmF0aW9uUmVzdWx0PiA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlR2VtaW5pSW1hZ2VJbnB1dChpbnB1dCk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2VuZXJhdGVDb250ZW50KHsuLi52YWxpZGF0ZWQsIG1vZGFsaXR5OiAnaW1hZ2UnLCBwcm92aWRlcjogJ2dlbWluaSd9LCB7XG4gICAgICBnZW1pbmlJbWFnZU1vZGVsOiBjb25maWc/Lm1vZGVsIHx8IENvbmZpZy5nZXQ8c3RyaW5nPignY29udGVudEdlbmVyYXRpb24uZ2VtaW5pSW1hZ2VNb2RlbCcpLFxuICAgICAgZ2VtaW5pS2V5OiBjb25maWc/LmtleSB8fCBDb25maWcuZ2V0PHN0cmluZz4oJ2NvbnRlbnRHZW5lcmF0aW9uLmdlbWluaUtleScpXG4gICAgfSk7XG4gICAgY29uc3Qge2ltYWdlfSA9IHJlc3VsdDtcbiAgICBpZighaW1hZ2UgfHwgIShpbWFnZS5taW1lID09PSAnaW1hZ2UvcG5nJ1xuICAgICAgPyBpbWFnZS5ieXRlcy5zdWJhcnJheSgwLCA4KS5lcXVhbHMoQnVmZmVyLmZyb20oWzEzNywgODAsIDc4LCA3MSwgMTMsIDEwLCAyNiwgMTBdKSlcbiAgICAgIDogaW1hZ2UuYnl0ZXMuc3ViYXJyYXkoMCwgMykuZXF1YWxzKEJ1ZmZlci5mcm9tKFsyNTUsIDIxNiwgMjU1XSkpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdHZW1pbmkgaW1hZ2Ugb3V0cHV0IGNvdWxkIG5vdCBiZSB2ZXJpZmllZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHtpbWFnZUJhc2U2NDogaW1hZ2UuYnl0ZXMudG9TdHJpbmcoJ2Jhc2U2NCcpLCBtaW1lVHlwZTogaW1hZ2UubWltZSwgcHJvdmlkZXI6ICdnZW1pbmknLCByZXF1ZXN0SWQ6IGBnZW1pbmktJHtyYW5kb21VVUlEKCl9YCwgc3RhdHVzOiAnY29tcGxldGVkJ307XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIENvbnRlbnRHZW5lcmF0aW9uUmVqZWN0ZWRFcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEltYWdlR2VuZXJhdGlvblJlamVjdGVkRXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbInBvc3QiLCJyYW5kb21VVUlEIiwidmFsaWRhdGVHZW1pbmlJbWFnZUlucHV0IiwiZ2V0SGlnZ3NmaWVsZE1vZGVsIiwidmFsaWRhdGVPcGVuQUlJbWFnZUlucHV0IiwiQ29uZmlnIiwiQ29udGVudEdlbmVyYXRpb25SZWplY3RlZEVycm9yIiwiZ2VuZXJhdGVDb250ZW50IiwiZ2VuZXJhdGVIaWdnc2ZpZWxkTW9kZWwiLCJnZW5lcmF0ZU1hcmtldGluZ1N0dWRpb0ltYWdlIiwiZ2VuZXJhdGVTb3VsSW1hZ2UiLCJJbWFnZUdlbmVyYXRpb25SZWplY3RlZEVycm9yIiwiRXJyb3IiLCJnZW5lcmF0ZU9wZW5BSUltYWdlIiwiX2NvbnRleHQiLCJpbnB1dCIsImNvbmZpZyIsInZhbGlkYXRlZCIsImtleSIsImdldCIsInJlc3BvbnNlIiwibW9kZWwiLCJuIiwib3V0cHV0X2Zvcm1hdCIsInByb21wdCIsInF1YWxpdHkiLCJzaXplIiwiY2FjaGUiLCJoZWFkZXJzIiwiSGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJ0aW1lb3V0IiwiZXJyb3IiLCJpbmNsdWRlcyIsInR5cGUiLCJlbmNvZGVkIiwiZGF0YSIsImI2NF9qc29uIiwibGVuZ3RoIiwidGVzdCIsIkJ1ZmZlciIsImZyb20iLCJzdWJhcnJheSIsImVxdWFscyIsImltYWdlQmFzZTY0IiwicHJvdmlkZXIiLCJyZXF1ZXN0SWQiLCJzdGF0dXMiLCJnZW5lcmF0ZUltYWdlIiwiY29udGV4dCIsImtpbmQiLCJtb2RlbElucHV0Iiwib3B0aW9ucyIsImdlbmVyYXRlR2VtaW5pSW1hZ2UiLCJyZXF1ZXN0IiwiaW1hZ2VVcmxzIiwicmVzdWx0IiwibW9kYWxpdHkiLCJnZW1pbmlJbWFnZU1vZGVsIiwiZ2VtaW5pS2V5IiwiaW1hZ2UiLCJtaW1lIiwiYnl0ZXMiLCJ0b1N0cmluZyIsIm1pbWVUeXBlIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsSUFBSSxRQUFPLG9CQUFvQjtBQUN2QyxTQUFRQyxVQUFVLFFBQU8sY0FBYztBQUV2QyxTQUFRQyx3QkFBd0IsUUFBTyx5Q0FBeUM7QUFDaEYsU0FBUUMsa0JBQWtCLFFBQU8sd0NBQXdDO0FBQ3pFLFNBQVFDLHdCQUF3QixRQUFPLHdDQUF3QztBQUMvRSxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUNwQyxTQUFRQyw4QkFBOEIsRUFBRUMsZUFBZSxRQUFPLHlCQUF5QjtBQUN2RixTQUFRQyx1QkFBdUIsRUFBRUMsNEJBQTRCLEVBQUVDLGlCQUFpQixRQUFPLGtCQUFrQjtBQU96RyxvRkFBb0YsR0FDcEYsT0FBTyxNQUFNQyxxQ0FBcUNDO0FBQU87QUFtQnpELE9BQU8sTUFBTUMsc0JBQXNCLE9BQ2pDQyxVQUFzQkMsT0FBeUJDO0lBRS9DLE1BQU1DLFlBQVliLHlCQUF5Qlc7SUFDM0MsTUFBTUcsTUFBTUYsUUFBUUUsT0FBT2IsT0FBT2MsR0FB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
|
package/lib/actions/index.d.ts
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
export * from './apps.js';
|
|
6
6
|
export * from './analytics.js';
|
|
7
7
|
export * from './connections.js';
|
|
8
|
+
export * from './databaseProvisioningLease.js';
|
|
9
|
+
export * from './databaseAccounts.js';
|
|
8
10
|
export * from './conversations.js';
|
|
9
11
|
export * from './crm.js';
|
|
10
12
|
export * from './dynamodb.js';
|
|
@@ -35,3 +37,4 @@ export * from './imageGeneration.js';
|
|
|
35
37
|
export * from './contentGeneration.js';
|
|
36
38
|
export * from './videoGeneration.js';
|
|
37
39
|
export * from './geminiVideo.js';
|
|
40
|
+
export * from './openaiResponseSession.js';
|
package/lib/actions/index.js
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
*/ export * from './apps.js';
|
|
5
5
|
export * from './analytics.js';
|
|
6
6
|
export * from './connections.js';
|
|
7
|
+
export * from './databaseProvisioningLease.js';
|
|
8
|
+
export * from './databaseAccounts.js';
|
|
7
9
|
export * from './conversations.js';
|
|
8
10
|
export * from './crm.js';
|
|
9
11
|
export * from './dynamodb.js';
|
|
@@ -34,5 +36,6 @@ export * from './imageGeneration.js';
|
|
|
34
36
|
export * from './contentGeneration.js';
|
|
35
37
|
export * from './videoGeneration.js';
|
|
36
38
|
export * from './geminiVideo.js';
|
|
39
|
+
export * from './openaiResponseSession.js';
|
|
37
40
|
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9hcHBzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYW5hbHl0aWNzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29ubmVjdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhYmFzZVByb3Zpc2lvbmluZ0xlYXNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YWJhc2VBY2NvdW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnZlcnNhdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jcm0uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9keW5hbW9kYi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2VtYWlsLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9mbGFncy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3Vwcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2hpZ2dzZmllbGQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbWFnZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pb3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXltZW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Bvc3RzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGVyc29uYXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWFjdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9ydW0uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zMy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlYXJjaC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Ntcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXRpc3RpY3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpcHRpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdGFncy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdmlkZW9zLmpzJztcblxuZXhwb3J0ICogZnJvbSAnLi9pbWFnZUdlbmVyYXRpb24uanMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnRlbnRHZW5lcmF0aW9uLmpzJztcblxuZXhwb3J0ICogZnJvbSAnLi92aWRlb0dlbmVyYXRpb24uanMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2dlbWluaVZpZGVvLmpzJztcblxuZXhwb3J0ICogZnJvbSAnLi9vcGVuYWlSZXNwb25zZVNlc3Npb24uanMnO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELGNBQWMsWUFBWTtBQUMxQixjQUFjLGlCQUFpQjtBQUMvQixjQUFjLG1CQUFtQjtBQUNqQyxjQUFjLGlDQUFpQztBQUMvQyxjQUFjLHdCQUF3QjtBQUN0QyxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLFdBQVc7QUFDekIsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsYUFBYTtBQUMzQixjQUFjLGFBQWE7QUFDM0IsY0FBYyxjQUFjO0FBQzVCLGNBQWMsa0JBQWtCO0FBQ2hDLGNBQWMsY0FBYztBQUM1QixjQUFjLFdBQVc7QUFDekIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsZ0JBQWdCO0FBQzlCLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsV0FBVztBQUN6QixjQUFjLFVBQVU7QUFDeEIsY0FBYyxjQUFjO0FBQzVCLGNBQWMsV0FBVztBQUN6QixjQUFjLGtCQUFrQjtBQUNoQyxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLFlBQVk7QUFDMUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsY0FBYztBQUU1QixjQUFjLHVCQUF1QjtBQUVyQyxjQUFjLHlCQUF5QjtBQUV2QyxjQUFjLHVCQUF1QjtBQUVyQyxjQUFjLG1CQUFtQjtBQUVqQyxjQUFjLDZCQUE2QiJ9
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
declare const reasoningEffort: z.ZodEnum<{
|
|
4
|
+
high: "high";
|
|
5
|
+
low: "low";
|
|
6
|
+
max: "max";
|
|
7
|
+
medium: "medium";
|
|
8
|
+
minimal: "minimal";
|
|
9
|
+
none: "none";
|
|
10
|
+
xhigh: "xhigh";
|
|
11
|
+
}>;
|
|
12
|
+
export type OpenAIResponseReasoningEffort = z.infer<typeof reasoningEffort>;
|
|
13
|
+
type Item = Record<string, unknown>;
|
|
14
|
+
export type OpenAIResponseEvent = {
|
|
15
|
+
type: string;
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
};
|
|
18
|
+
export type OpenAIResponseSessionOptions = {
|
|
19
|
+
input: Item[];
|
|
20
|
+
instructions?: string;
|
|
21
|
+
max_output_tokens: number;
|
|
22
|
+
model: string;
|
|
23
|
+
reasoning?: {
|
|
24
|
+
effort: OpenAIResponseReasoningEffort;
|
|
25
|
+
};
|
|
26
|
+
text?: {
|
|
27
|
+
format: Item;
|
|
28
|
+
};
|
|
29
|
+
tools?: Item[];
|
|
30
|
+
};
|
|
31
|
+
export type OpenAIResponseOutput = {
|
|
32
|
+
id: string;
|
|
33
|
+
incomplete_details?: {
|
|
34
|
+
reason?: string;
|
|
35
|
+
};
|
|
36
|
+
output?: Array<{
|
|
37
|
+
content?: Array<{
|
|
38
|
+
text?: string;
|
|
39
|
+
type: string;
|
|
40
|
+
}>;
|
|
41
|
+
status?: string;
|
|
42
|
+
type: string;
|
|
43
|
+
}>;
|
|
44
|
+
status: string;
|
|
45
|
+
};
|
|
46
|
+
export declare const readOpenAIResponseText: (response: OpenAIResponseOutput) => string;
|
|
47
|
+
export declare const createOpenAIResponseSession: (options: OpenAIResponseSessionOptions, onEvent: (event: OpenAIResponseEvent) => void, config: {
|
|
48
|
+
apiKey: string;
|
|
49
|
+
connect?: () => WebSocket;
|
|
50
|
+
maxToolCalls: number;
|
|
51
|
+
signal?: AbortSignal;
|
|
52
|
+
timeoutMs: number;
|
|
53
|
+
}) => {
|
|
54
|
+
close: () => void;
|
|
55
|
+
continue: (text: string) => void;
|
|
56
|
+
reasoning: (effort: OpenAIResponseReasoningEffort) => void;
|
|
57
|
+
steer: (text: string) => void;
|
|
58
|
+
toolResult: (callId: string, output: string) => void;
|
|
59
|
+
};
|
|
60
|
+
export {};
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
const reasoningEffort = z.enum([
|
|
4
|
+
'none',
|
|
5
|
+
'minimal',
|
|
6
|
+
'low',
|
|
7
|
+
'medium',
|
|
8
|
+
'high',
|
|
9
|
+
'xhigh',
|
|
10
|
+
'max'
|
|
11
|
+
]);
|
|
12
|
+
export const readOpenAIResponseText = (response)=>{
|
|
13
|
+
if (response.status !== 'completed' || response.output?.some((item)=>item.status === 'incomplete')) {
|
|
14
|
+
throw new Error(`OpenAI response did not complete: ${response.incomplete_details?.reason || response.status}`);
|
|
15
|
+
}
|
|
16
|
+
if (response.output?.some((item)=>item.content?.some((part)=>part.type === 'refusal'))) {
|
|
17
|
+
throw new Error('OpenAI declined the request.');
|
|
18
|
+
}
|
|
19
|
+
const text = (response.output || []).flatMap((item)=>item.type === 'message' ? item.content || [] : []).filter((part)=>part.type === 'output_text').map((part)=>part.text || '').join('');
|
|
20
|
+
if (!text.trim()) {
|
|
21
|
+
throw new Error('OpenAI returned empty output.');
|
|
22
|
+
}
|
|
23
|
+
return text;
|
|
24
|
+
};
|
|
25
|
+
// One owner and one conversation per socket. Never replay requests after a disconnect:
|
|
26
|
+
// tools may already have run, and accepted steering is connection-local.
|
|
27
|
+
export const createOpenAIResponseSession = (options, onEvent, config)=>{
|
|
28
|
+
if (!config.apiKey.trim()) throw new Error('OpenAI API key is not configured.');
|
|
29
|
+
if (!options.model.trim() || !Number.isInteger(options.max_output_tokens) || options.max_output_tokens < 1) {
|
|
30
|
+
throw new Error('A model and positive output token budget are required.');
|
|
31
|
+
}
|
|
32
|
+
if (!Number.isInteger(config.timeoutMs) || config.timeoutMs < 1 || config.timeoutMs > 2_147_483_647 || !Number.isInteger(config.maxToolCalls) || config.maxToolCalls < 0) {
|
|
33
|
+
throw new Error('Invalid session timeout or tool-call limit.');
|
|
34
|
+
}
|
|
35
|
+
if (config.signal?.aborted) throw new Error('OpenAI session was aborted.');
|
|
36
|
+
if (options.reasoning) reasoningEffort.parse(options.reasoning.effort);
|
|
37
|
+
const settings = {
|
|
38
|
+
...options,
|
|
39
|
+
input: undefined,
|
|
40
|
+
store: false,
|
|
41
|
+
truncation: 'disabled'
|
|
42
|
+
};
|
|
43
|
+
const connect = config.connect || (()=>new WebSocket('wss://api.openai.com/v1/responses', {
|
|
44
|
+
handshakeTimeout: Math.min(10000, config.timeoutMs),
|
|
45
|
+
headers: {
|
|
46
|
+
Authorization: `Bearer ${config.apiKey}`
|
|
47
|
+
},
|
|
48
|
+
maxPayload: 16 * 1024 * 1024
|
|
49
|
+
}));
|
|
50
|
+
const socket = connect();
|
|
51
|
+
const seenCalls = new Set();
|
|
52
|
+
const calls = new Map();
|
|
53
|
+
let active = true;
|
|
54
|
+
let closed = false;
|
|
55
|
+
let currentId;
|
|
56
|
+
let pendingSteer;
|
|
57
|
+
let nextEffort;
|
|
58
|
+
let timer;
|
|
59
|
+
const close = ()=>{
|
|
60
|
+
if (closed) return;
|
|
61
|
+
closed = true;
|
|
62
|
+
clearTimeout(timer);
|
|
63
|
+
config.signal?.removeEventListener('abort', close);
|
|
64
|
+
calls.clear();
|
|
65
|
+
seenCalls.clear();
|
|
66
|
+
socket.close();
|
|
67
|
+
};
|
|
68
|
+
const fail = (message)=>{
|
|
69
|
+
if (closed) return;
|
|
70
|
+
close();
|
|
71
|
+
onEvent({
|
|
72
|
+
message,
|
|
73
|
+
type: 'session.error'
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
const armTimeout = ()=>{
|
|
77
|
+
clearTimeout(timer);
|
|
78
|
+
timer = setTimeout(()=>fail('OpenAI session timed out. Start a new session; requests were not replayed.'), config.timeoutMs);
|
|
79
|
+
timer.unref?.();
|
|
80
|
+
};
|
|
81
|
+
const send = (event)=>{
|
|
82
|
+
if (closed || socket.readyState !== WebSocket.OPEN) throw new Error('OpenAI connection is not open.');
|
|
83
|
+
socket.send(JSON.stringify(event));
|
|
84
|
+
};
|
|
85
|
+
const create = (input)=>{
|
|
86
|
+
active = true;
|
|
87
|
+
armTimeout();
|
|
88
|
+
send({
|
|
89
|
+
...settings,
|
|
90
|
+
input,
|
|
91
|
+
...currentId ? {
|
|
92
|
+
previous_response_id: currentId
|
|
93
|
+
} : {},
|
|
94
|
+
type: 'response.create'
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
const flushTools = ()=>{
|
|
98
|
+
if (active || !currentId) return;
|
|
99
|
+
// Synchronous calls must all be satisfied before starting another response.
|
|
100
|
+
if ([
|
|
101
|
+
...calls.values()
|
|
102
|
+
].some(({ item, output })=>!item.async && output === undefined)) return;
|
|
103
|
+
const ready = [
|
|
104
|
+
...calls.entries()
|
|
105
|
+
].filter(([, call])=>call.output !== undefined);
|
|
106
|
+
if (!ready.length) return;
|
|
107
|
+
create(ready.map(([callId, { item, output }])=>({
|
|
108
|
+
call_id: callId,
|
|
109
|
+
output,
|
|
110
|
+
type: item.type === 'custom_tool_call' ? 'custom_tool_call_output' : 'function_call_output'
|
|
111
|
+
})));
|
|
112
|
+
for (const [id] of ready)calls.delete(id);
|
|
113
|
+
};
|
|
114
|
+
const registerCall = (item)=>{
|
|
115
|
+
if (![
|
|
116
|
+
'function_call',
|
|
117
|
+
'custom_tool_call'
|
|
118
|
+
].includes(String(item.type))) return;
|
|
119
|
+
const id = String(item.call_id || '');
|
|
120
|
+
if (!id) throw new Error('OpenAI tool call is missing its call_id.');
|
|
121
|
+
if (seenCalls.has(id)) return;
|
|
122
|
+
if (seenCalls.size >= config.maxToolCalls) throw new Error('Session tool-call limit exceeded.');
|
|
123
|
+
if (item.status === 'incomplete') throw new Error('OpenAI returned an incomplete tool call.');
|
|
124
|
+
if (!options.tools?.some((tool)=>tool.name === item.name && tool.type === (item.type === 'function_call' ? 'function' : 'custom'))) throw new Error('OpenAI requested an unregistered tool.');
|
|
125
|
+
seenCalls.add(id);
|
|
126
|
+
calls.set(id, {
|
|
127
|
+
item
|
|
128
|
+
});
|
|
129
|
+
onEvent({
|
|
130
|
+
item,
|
|
131
|
+
type: 'session.tool_call'
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
socket.on('open', ()=>{
|
|
135
|
+
if (closed) return;
|
|
136
|
+
try {
|
|
137
|
+
create(options.input);
|
|
138
|
+
} catch (error) {
|
|
139
|
+
fail(error.message);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
socket.on('message', (data)=>{
|
|
143
|
+
if (closed) return;
|
|
144
|
+
try {
|
|
145
|
+
const event = JSON.parse(data.toString());
|
|
146
|
+
const response = event.response;
|
|
147
|
+
if (event.type === 'response.created' && response) {
|
|
148
|
+
if (pendingSteer && response.id !== pendingSteer) pendingSteer = undefined;
|
|
149
|
+
currentId = response.id;
|
|
150
|
+
active = true;
|
|
151
|
+
}
|
|
152
|
+
if (event.type === 'response.output_item.done') registerCall(event.item);
|
|
153
|
+
onEvent(event);
|
|
154
|
+
if (closed) return;
|
|
155
|
+
if ([
|
|
156
|
+
'error',
|
|
157
|
+
'response.failed',
|
|
158
|
+
'response.steer.failed'
|
|
159
|
+
].includes(event.type)) {
|
|
160
|
+
const detail = event.error || event.response?.error;
|
|
161
|
+
fail(detail?.message?.slice(0, 2000) || 'OpenAI response or steering failed. See the preceding provider event.');
|
|
162
|
+
} else if (event.type === 'response.incomplete') {
|
|
163
|
+
if (response?.incomplete_details?.reason !== 'steered' || !pendingSteer) {
|
|
164
|
+
fail(`OpenAI response did not complete: ${response?.incomplete_details?.reason || 'unknown'}`);
|
|
165
|
+
}
|
|
166
|
+
} else if (event.type === 'response.completed' && response) {
|
|
167
|
+
if (response.status !== 'completed') throw new Error('Invalid completed response.');
|
|
168
|
+
for (const item of response.output || [])registerCall(item);
|
|
169
|
+
active = false;
|
|
170
|
+
if (calls.size) {
|
|
171
|
+
onEvent({
|
|
172
|
+
pending: [
|
|
173
|
+
...calls.keys()
|
|
174
|
+
],
|
|
175
|
+
type: 'session.tools_pending'
|
|
176
|
+
});
|
|
177
|
+
flushTools();
|
|
178
|
+
} else if (!pendingSteer) {
|
|
179
|
+
onEvent({
|
|
180
|
+
response,
|
|
181
|
+
text: readOpenAIResponseText(response),
|
|
182
|
+
type: 'session.turn.completed'
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
} else if (event.type === 'response.steer.pending') {
|
|
186
|
+
active = false;
|
|
187
|
+
flushTools();
|
|
188
|
+
}
|
|
189
|
+
} catch (error) {
|
|
190
|
+
fail(error.message);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
socket.on('error', ()=>fail('OpenAI WebSocket connection failed.'));
|
|
194
|
+
socket.on('close', ()=>fail('OpenAI connection closed. Pending work was not replayed.'));
|
|
195
|
+
config.signal?.addEventListener('abort', close, {
|
|
196
|
+
once: true
|
|
197
|
+
});
|
|
198
|
+
armTimeout();
|
|
199
|
+
return {
|
|
200
|
+
close,
|
|
201
|
+
continue: (text)=>{
|
|
202
|
+
if (closed) throw new Error('OpenAI connection is not open.');
|
|
203
|
+
if (active || pendingSteer || [
|
|
204
|
+
...calls.values()
|
|
205
|
+
].some(({ item })=>!item.async)) {
|
|
206
|
+
throw new Error('Wait for the current response or required tool results before continuing.');
|
|
207
|
+
}
|
|
208
|
+
const input = [];
|
|
209
|
+
if (nextEffort) input.push({
|
|
210
|
+
reasoning: {
|
|
211
|
+
effort: nextEffort
|
|
212
|
+
},
|
|
213
|
+
type: 'configuration_update'
|
|
214
|
+
});
|
|
215
|
+
input.push({
|
|
216
|
+
content: text,
|
|
217
|
+
role: 'user'
|
|
218
|
+
});
|
|
219
|
+
create(input);
|
|
220
|
+
nextEffort = undefined;
|
|
221
|
+
},
|
|
222
|
+
reasoning: (effort)=>{
|
|
223
|
+
if (closed) throw new Error('OpenAI connection is not open.');
|
|
224
|
+
nextEffort = reasoningEffort.parse(effort);
|
|
225
|
+
onEvent({
|
|
226
|
+
effort: nextEffort,
|
|
227
|
+
type: 'session.reasoning.queued'
|
|
228
|
+
});
|
|
229
|
+
},
|
|
230
|
+
steer: (text)=>{
|
|
231
|
+
if (!active || !currentId || pendingSteer) throw new Error('Steering requires an active response with no pending steering.');
|
|
232
|
+
send({
|
|
233
|
+
input: text,
|
|
234
|
+
previous_response_id: currentId,
|
|
235
|
+
type: 'response.steer'
|
|
236
|
+
});
|
|
237
|
+
pendingSteer = currentId;
|
|
238
|
+
},
|
|
239
|
+
toolResult: (callId, output)=>{
|
|
240
|
+
const call = calls.get(callId);
|
|
241
|
+
if (!call || call.output !== undefined) throw new Error('Unknown or duplicate tool result.');
|
|
242
|
+
call.output = output;
|
|
243
|
+
flushTools();
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9vcGVuYWlSZXNwb25zZVNlc3Npb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFdlYlNvY2tldCBmcm9tICd3cyc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmNvbnN0IHJlYXNvbmluZ0VmZm9ydCA9IHouZW51bShbJ25vbmUnLCAnbWluaW1hbCcsICdsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAneGhpZ2gnLCAnbWF4J10pO1xuZXhwb3J0IHR5cGUgT3BlbkFJUmVzcG9uc2VSZWFzb25pbmdFZmZvcnQgPSB6LmluZmVyPHR5cGVvZiByZWFzb25pbmdFZmZvcnQ+O1xudHlwZSBJdGVtID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5leHBvcnQgdHlwZSBPcGVuQUlSZXNwb25zZUV2ZW50ID0ge3R5cGU6IHN0cmluZzsgW2tleTogc3RyaW5nXTogdW5rbm93bn07XG5leHBvcnQgdHlwZSBPcGVuQUlSZXNwb25zZVNlc3Npb25PcHRpb25zID0ge1xuICBpbnB1dDogSXRlbVtdO1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmc7XG4gIG1heF9vdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIHJlYXNvbmluZz86IHtlZmZvcnQ6IE9wZW5BSVJlc3BvbnNlUmVhc29uaW5nRWZmb3J0fTtcbiAgdGV4dD86IHtmb3JtYXQ6IEl0ZW19O1xuICB0b29scz86IEl0ZW1bXTtcbn07XG5leHBvcnQgdHlwZSBPcGVuQUlSZXNwb25zZU91dHB1dCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaW5jb21wbGV0ZV9kZXRhaWxzPzoge3JlYXNvbj86IHN0cmluZ307XG4gIG91dHB1dD86IEFycmF5PHtjb250ZW50PzogQXJyYXk8e3RleHQ/OiBzdHJpbmc7IHR5cGU6IHN0cmluZ30+OyBzdGF0dXM/OiBzdHJpbmc7IHR5cGU6IHN0cmluZ30+O1xuICBzdGF0dXM6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCByZWFkT3BlbkFJUmVzcG9uc2VUZXh0ID0gKHJlc3BvbnNlOiBPcGVuQUlSZXNwb25zZU91dHB1dCk6IHN0cmluZyA9PiB7XG4gIGlmKHJlc3BvbnNlLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcgfHwgcmVzcG9uc2Uub3V0cHV0Py5zb21lKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2luY29tcGxldGUnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgT3BlbkFJIHJlc3BvbnNlIGRpZCBub3QgY29tcGxldGU6ICR7cmVzcG9uc2UuaW5jb21wbGV0ZV9kZXRhaWxzPy5yZWFzb24gfHwgcmVzcG9uc2Uuc3RhdHVzfWApO1xuICB9XG4gIGlmKHJlc3BvbnNlLm91dHB1dD8uc29tZSgoaXRlbSkgPT4gaXRlbS5jb250ZW50Py5zb21lKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09ICdyZWZ1c2FsJykpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPcGVuQUkgZGVjbGluZWQgdGhlIHJlcXVlc3QuJyk7XG4gIH1cbiAgY29uc3QgdGV4dCA9IChyZXNwb25zZS5vdXRwdXQgfHwgW10pLmZsYXRNYXAoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gJ21lc3NhZ2UnID8gaXRlbS5jb250ZW50IHx8IFtdIDogW10pXG4gICAgLmZpbHRlcigocGFydCkgPT4gcGFydC50eXBlID09PSAnb3V0cHV0X3RleHQnKS5tYXAoKHBhcnQpID0+IHBhcnQudGV4dCB8fCAnJykuam9pbignJyk7XG4gIGlmKCF0ZXh0LnRyaW0oKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignT3BlbkFJIHJldHVybmVkIGVtcHR5IG91dHB1dC4nKTtcbiAgfVxuICByZXR1cm4gdGV4dDtcbn07XG5cbi8vIE9uZSBvd25lciBhbmQgb25lIGNvbnZlcnNhdGlvbiBwZXIgc29ja2V0LiBOZXZlciByZXBsYXkgcmVxdWVzdHMgYWZ0ZXIgYSBkaXNjb25uZWN0OlxuLy8gdG9vbHMgbWF5IGFscmVhZHkgaGF2ZSBydW4sIGFuZCBhY2NlcHRlZCBzdGVlcmluZyBpcyBjb25uZWN0aW9uLWxvY2FsLlxuZXhwb3J0IGNvbnN0IGNyZWF0ZU9wZW5BSVJlc3BvbnNlU2Vzc2lvbiA9IChcbiAgb3B0aW9uczogT3BlbkFJUmVzcG9uc2VTZXNzaW9uT3B0aW9ucyxcbiAgb25FdmVudDogKGV2ZW50OiBPcGVuQUlSZXNwb25zZUV2ZW50KSA9PiB2b2lkLFxuICBjb25maWc6IHtcbiAgICBhcGlLZXk6IHN0cmluZztcbiAgICBjb25uZWN0PzogKCkgPT4gV2ViU29ja2V0O1xuICAgIG1heFRvb2xDYWxsczogbnVtYmVyO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAgIHRpbWVvdXRNczogbnVtYmVyO1xuICB9XG4pID0+IHtcbiAgaWYoIWNvbmZpZy5hcGlLZXkudHJpbSgpKSB0aHJvdyBuZXcgRXJyb3IoJ09wZW5BSSBBUEkga2V5IGlzIG5vdCBjb25maWd1cmVkLicpO1xuICBpZighb3B0aW9ucy5tb2RlbC50cmltKCkgfHwgIU51bWJlci5pc0ludGVnZXIob3B0aW9ucy5tYXhfb3V0cHV0X3Rva2VucykgfHwgb3B0aW9ucy5tYXhfb3V0cHV0X3Rva2VucyA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgbW9kZWwgYW5kIHBvc2l0aXZlIG91dHB1dCB0b2tlbiBidWRnZXQgYXJlIHJlcXVpcmVkLicpO1xuICB9XG4gIGlmKCFOdW1iZXIuaXNJbnRlZ2VyKGNvbmZpZy50aW1lb3V0TXMpIHx8IGNvbmZpZy50aW1lb3V0TXMgPCAxIHx8IGNvbmZpZy50aW1lb3V0TXMgPiAyXzE0N180ODNfNjQ3XG4gICAgfHwgIU51bWJlci5pc0ludGVnZXIoY29uZmlnLm1heFRvb2xDYWxscykgfHwgY29uZmlnLm1heFRvb2xDYWxscyA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2Vzc2lvbiB0aW1lb3V0IG9yIHRvb2wtY2FsbCBsaW1pdC4nKTtcbiAgfVxuICBpZihjb25maWcuc2lnbmFsPy5hYm9ydGVkKSB0aHJvdyBuZXcgRXJyb3IoJ09wZW5BSSBzZXNzaW9uIHdhcyBhYm9ydGVkLicpO1xuICBpZihvcHRpb25zLnJlYXNvbmluZykgcmVhc29uaW5nRWZmb3J0LnBhcnNlKG9wdGlvbnMucmVhc29uaW5nLmVmZm9ydCk7XG4gIGNvbnN0IHNldHRpbmdzID0gey4uLm9wdGlvbnMsIGlucHV0OiB1bmRlZmluZWQsIHN0b3JlOiBmYWxzZSwgdHJ1bmNhdGlvbjogJ2Rpc2FibGVkJ307XG4gIGNvbnN0IGNvbm5lY3QgPSBjb25maWcuY29ubmVjdCB8fCAoKCkgPT4gbmV3IFdlYlNvY2tldCgnd3NzOi8vYXBpLm9wZW5haS5jb20vdjEvcmVzcG9uc2VzJywge1xuICAgIGhhbmRzaGFrZVRpbWVvdXQ6IE1hdGgubWluKDEwMDAwLCBjb25maWcudGltZW91dE1zKSxcbiAgICBoZWFkZXJzOiB7QXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NvbmZpZy5hcGlLZXl9YH0sXG4gICAgbWF4UGF5bG9hZDogMTYgKiAxMDI0ICogMTAyNFxuICB9KSk7XG4gIGNvbnN0IHNvY2tldCA9IGNvbm5lY3QoKTtcbiAgY29uc3Qgc2VlbkNhbGxzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGNhbGxzID0gbmV3IE1hcDxzdHJpbmcsIHtpdGVtOiBJdGVtOyBvdXRwdXQ/OiBzdHJpbmd9PigpO1xuICBsZXQgYWN0aXZlID0gdHJ1ZTtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuICBsZXQgY3VycmVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBwZW5kaW5nU3RlZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IG5leHRFZmZvcnQ6IE9wZW5BSVJlc3BvbnNlUmVhc29uaW5nRWZmb3J0IHwgdW5kZWZpbmVkO1xuICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICBpZihjbG9zZWQpIHJldHVybjtcbiAgICBjbG9zZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgY29uZmlnLnNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBjbG9zZSk7XG4gICAgY2FsbHMuY2xlYXIoKTtcbiAgICBzZWVuQ2FsbHMuY2xlYXIoKTtcbiAgICBzb2NrZXQuY2xvc2UoKTtcbiAgfTtcbiAgY29uc3QgZmFpbCA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgICBpZihjbG9zZWQpIHJldHVybjtcbiAgICBjbG9zZSgpO1xuICAgIG9uRXZlbnQoe21lc3NhZ2UsIHR5cGU6ICdzZXNzaW9uLmVycm9yJ30pO1xuICB9O1xuICBjb25zdCBhcm1UaW1lb3V0ID0gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGZhaWwoJ09wZW5BSSBzZXNzaW9uIHRpbWVkIG91dC4gU3RhcnQgYSBuZXcgc2Vzc2lvbjsgcmVxdWVzdHMgd2VyZSBub3QgcmVwbGF5ZWQuJyksIGNvbmZpZy50aW1lb3V0TXMpO1xuICAgIHRpbWVyLnVucmVmPy4oKTtcbiAgfTtcbiAgY29uc3Qgc2VuZCA9IChldmVudDogSXRlbSkgPT4ge1xuICAgIGlmKGNsb3NlZCB8fCBzb2NrZXQucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pIHRocm93IG5ldyBFcnJvcignT3BlbkFJIGNvbm5lY3Rpb24gaXMgbm90IG9wZW4uJyk7XG4gICAgc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoZXZlbnQpKTtcbiAgfTtcbiAgY29uc3QgY3JlYXRlID0gKGlucHV0OiBJdGVtW10pID0+IHtcbiAgICBhY3RpdmUgPSB0cnVlO1xuICAgIGFybVRpbWVvdXQoKTtcbiAgICBzZW5kKHsuLi5zZXR0aW5ncywgaW5wdXQsIC4uLihjdXJyZW50SWQgPyB7cHJldmlvdXNfcmVzcG9uc2VfaWQ6IGN1cnJlbnRJZH0gOiB7fSksIHR5cGU6ICdyZXNwb25zZS5jcmVhdGUnfSk7XG4gIH07XG4gIGNvbnN0IGZsdXNoVG9vbHMgPSAoKSA9PiB7XG4gICAgaWYoYWN0aXZlIHx8ICFjdXJyZW50SWQpIHJldHVybjtcbiAgICAvLyBTeW5jaHJvbm91cyBjYWxscyBtdXN0IGFsbCBiZSBzYXRpc2ZpZWQgYmVmb3JlIHN0YXJ0aW5nIGFub3RoZXIgcmVzcG9uc2UuXG4gICAgaWYoWy4uLmNhbGxzLnZhbHVlcygpXS5zb21lKCh7aXRlbSwgb3V0cHV0fSkgPT4gIWl0ZW0uYXN5bmMgJiYgb3V0cHV0ID09PSB1bmRlZmluZWQpKSByZXR1cm47XG4gICAgY29uc3QgcmVhZHkgPSBbLi4uY2FsbHMuZW50cmllcygpXS5maWx0ZXIoKFssIGNhbGxdKSA9PiBjYWxsLm91dHB1dCAhPT0gdW5kZWZpbmVkKTtcbiAgICBpZighcmVhZHkubGVuZ3RoKSByZXR1cm47XG4gICAgY3JlYXRlKHJlYWR5Lm1hcCgoW2NhbGxJZCwge2l0ZW0sIG91dHB1dH1dKSA9PiAoe1xuICAgICAgY2FsbF9pZDogY2FsbElkLFxuICAgICAgb3V0cHV0LFxuICAgICAgdHlwZTogaXRlbS50eXBlID09PSAnY3VzdG9tX3Rvb2xfY2FsbCcgPyAnY3VzdG9tX3Rvb2xfY2FsbF9vdXRwdXQnIDogJ2Z1bmN0aW9uX2NhbGxfb3V0cHV0J1xuICAgIH0pKSk7XG4gICAgZm9yKGNvbnN0IFtpZF0gb2YgcmVhZHkpIGNhbGxzLmRlbGV0ZShpZCk7XG4gIH07XG4gIGNvbnN0IHJlZ2lzdGVyQ2FsbCA9IChpdGVtOiBJdGVtKSA9PiB7XG4gICAgaWYoIVsnZnVuY3Rpb25fY2FsbCcsICdjdXN0b21fdG9vbF9jYWxsJ10uaW5jbHVkZXMoU3RyaW5nKGl0ZW0udHlwZSkpKSByZXR1cm47XG4gICAgY29uc3QgaWQgPSBTdHJpbmcoaXRlbS5jYWxsX2lkIHx8ICcnKTtcbiAgICBpZighaWQpIHRocm93IG5ldyBFcnJvcignT3BlbkFJIHRvb2wgY2FsbCBpcyBtaXNzaW5nIGl0cyBjYWxsX2lkLicpO1xuICAgIGlmKHNlZW5DYWxscy5oYXMoaWQpKSByZXR1cm47XG4gICAgaWYoc2VlbkNhbGxzLnNpemUgPj0gY29uZmlnLm1heFRvb2xDYWxscykgdGhyb3cgbmV3IEVycm9yKCdTZXNzaW9uIHRvb2wtY2FsbCBsaW1pdCBleGNlZWRlZC4nKTtcbiAgICBpZihpdGVtLnN0YXR1cyA9PT0gJ2luY29tcGxldGUnKSB0aHJvdyBuZXcgRXJyb3IoJ09wZW5BSSByZXR1cm5lZCBhbiBpbmNvbXBsZXRlIHRvb2wgY2FsbC4nKTtcbiAgICBpZighb3B0aW9ucy50b29scz8uc29tZSgodG9vbCkgPT4gdG9vbC5uYW1lID09PSBpdGVtLm5hbWUgJiYgdG9vbC50eXBlID09PSAoaXRlbS50eXBlID09PSAnZnVuY3Rpb25fY2FsbCcgPyAnZnVuY3Rpb24nIDogJ2N1c3RvbScpKSkgdGhyb3cgbmV3IEVycm9yKCdPcGVuQUkgcmVxdWVzdGVkIGFuIHVucmVnaXN0ZXJlZCB0b29sLicpO1xuICAgIHNlZW5DYWxscy5hZGQoaWQpO1xuICAgIGNhbGxzLnNldChpZCwge2l0ZW19KTtcbiAgICBvbkV2ZW50KHtpdGVtLCB0eXBlOiAnc2Vzc2lvbi50b29sX2NhbGwnfSk7XG4gIH07XG4gIHNvY2tldC5vbignb3BlbicsICgpID0+IHtcbiAgICBpZihjbG9zZWQpIHJldHVybjtcbiAgICB0cnkgeyBjcmVhdGUob3B0aW9ucy5pbnB1dCk7IH0gY2F0Y2goZXJyb3IpIHsgZmFpbCgoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2UpOyB9XG4gIH0pO1xuICBzb2NrZXQub24oJ21lc3NhZ2UnLCAoZGF0YSkgPT4ge1xuICAgIGlmKGNsb3NlZCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBldmVudCA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpKSBhcyBPcGVuQUlSZXNwb25zZUV2ZW50O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBldmVudC5yZXNwb25zZSBhcyBPcGVuQUlSZXNwb25zZU91dHB1dCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmKGV2ZW50LnR5cGUgPT09ICdyZXNwb25zZS5jcmVhdGVkJyAmJiByZXNwb25zZSkge1xuICAgICAgICBpZihwZW5kaW5nU3RlZXIgJiYgcmVzcG9uc2UuaWQgIT09IHBlbmRpbmdTdGVlcikgcGVuZGluZ1N0ZWVyID0gdW5kZWZpbmVkO1xuICAgICAgICBjdXJyZW50SWQgPSByZXNwb25zZS5pZDtcbiAgICAgICAgYWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmKGV2ZW50LnR5cGUgPT09ICdyZXNwb25zZS5vdXRwdXRfaXRlbS5kb25lJykgcmVnaXN0ZXJDYWxsKGV2ZW50Lml0ZW0gYXMgSXRlbSk7XG4gICAgICBvbkV2ZW50KGV2ZW50KTtcbiAgICAgIGlmKGNsb3NlZCkgcmV0dXJuO1xuICAgICAgaWYoWydlcnJvcicsICdyZXNwb25zZS5mYWlsZWQnLCAncmVzcG9uc2Uuc3RlZXIuZmFpbGVkJ10uaW5jbHVkZXMoZXZlbnQudHlwZSkpIHtcbiAgICAgICAgY29uc3QgZGV0YWlsID0gKGV2ZW50LmVycm9yIHx8IChldmVudC5yZXNwb25zZSBhcyB7ZXJyb3I/OiB7bWVzc2FnZT86IHN0cmluZ319KT8uZXJyb3IpIGFzIHttZXNzYWdlPzogc3RyaW5nfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgZmFpbChkZXRhaWw/Lm1lc3NhZ2U/LnNsaWNlKDAsIDIwMDApIHx8ICdPcGVuQUkgcmVzcG9uc2Ugb3Igc3RlZXJpbmcgZmFpbGVkLiBTZWUgdGhlIHByZWNlZGluZyBwcm92aWRlciBldmVudC4nKTtcbiAgICAgIH0gZWxzZSBpZihldmVudC50eXBlID09PSAncmVzcG9uc2UuaW5jb21wbGV0ZScpIHtcbiAgICAgICAgaWYocmVzcG9uc2U/LmluY29tcGxldGVfZGV0YWlscz8ucmVhc29uICE9PSAnc3RlZXJlZCcgfHwgIXBlbmRpbmdTdGVlcikge1xuICAgICAgICAgIGZhaWwoYE9wZW5BSSByZXNwb25zZSBkaWQgbm90IGNvbXBsZXRlOiAke3Jlc3BvbnNlPy5pbmNvbXBsZXRlX2RldGFpbHM/LnJlYXNvbiB8fCAndW5rbm93bid9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZihldmVudC50eXBlID09PSAncmVzcG9uc2UuY29tcGxldGVkJyAmJiByZXNwb25zZSkge1xuICAgICAgICBpZihyZXNwb25zZS5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29tcGxldGVkIHJlc3BvbnNlLicpO1xuICAgICAgICBmb3IoY29uc3QgaXRlbSBvZiByZXNwb25zZS5vdXRwdXQgfHwgW10pIHJlZ2lzdGVyQ2FsbChpdGVtIGFzIEl0ZW0pO1xuICAgICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYoY2FsbHMuc2l6ZSkge1xuICAgICAgICAgIG9uRXZlbnQoe3BlbmRpbmc6IFsuLi5jYWxscy5rZXlzKCldLCB0eXBlOiAnc2Vzc2lvbi50b29sc19wZW5kaW5nJ30pO1xuICAgICAgICAgIGZsdXNoVG9vbHMoKTtcbiAgICAgICAgfSBlbHNlIGlmKCFwZW5kaW5nU3RlZXIpIHtcbiAgICAgICAgICBvbkV2ZW50KHtyZXNwb25zZSwgdGV4dDogcmVhZE9wZW5BSVJlc3BvbnNlVGV4dChyZXNwb25zZSksIHR5cGU6ICdzZXNzaW9uLnR1cm4uY29tcGxldGVkJ30pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYoZXZlbnQudHlwZSA9PT0gJ3Jlc3BvbnNlLnN0ZWVyLnBlbmRpbmcnKSB7XG4gICAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBmbHVzaFRvb2xzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnJvcikgeyBmYWlsKChlcnJvciBhcyBFcnJvcikubWVzc2FnZSk7IH1cbiAgfSk7XG4gIHNvY2tldC5vbignZXJyb3InLCAoKSA9PiBmYWlsKCdPcGVuQUkgV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkLicpKTtcbiAgc29ja2V0Lm9uKCdjbG9zZScsICgpID0+IGZhaWwoJ09wZW5BSSBjb25uZWN0aW9uIGNsb3NlZC4gUGVuZGluZyB3b3JrIHdhcyBub3QgcmVwbGF5ZWQuJykpO1xuICBjb25maWcuc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGNsb3NlLCB7b25jZTogdHJ1ZX0pO1xuICBhcm1UaW1lb3V0KCk7XG4gIHJldHVybiB7XG4gICAgY2xvc2UsXG4gICAgY29udGludWU6ICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmKGNsb3NlZCkgdGhyb3cgbmV3IEVycm9yKCdPcGVuQUkgY29ubmVjdGlvbiBpcyBub3Qgb3Blbi4nKTtcbiAgICAgIGlmKGFjdGl2ZSB8fCBwZW5kaW5nU3RlZXIgfHwgWy4uLmNhbGxzLnZhbHVlcygpXS5zb21lKCh7aXRlbX0pID0+ICFpdGVtLmFzeW5jKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dhaXQgZm9yIHRoZSBjdXJyZW50IHJlc3BvbnNlIG9yIHJlcXVpcmVkIHRvb2wgcmVzdWx0cyBiZWZvcmUgY29udGludWluZy4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlucHV0OiBJdGVtW10gPSBbXTtcbiAgICAgIGlmKG5leHRFZmZvcnQpIGlucHV0LnB1c2goe3JlYXNvbmluZzoge2VmZm9ydDogbmV4dEVmZm9ydH0sIHR5cGU6ICdjb25maWd1cmF0aW9uX3VwZGF0ZSd9KTtcbiAgICAgIGlucHV0LnB1c2goe2NvbnRlbnQ6IHRleHQsIHJvbGU6ICd1c2VyJ30pO1xuICAgICAgY3JlYXRlKGlucHV0KTtcbiAgICAgIG5leHRFZmZvcnQgPSB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICByZWFzb25pbmc6IChlZmZvcnQ6IE9wZW5BSVJlc3BvbnNlUmVhc29uaW5nRWZmb3J0KSA9PiB7XG4gICAgICBpZihjbG9zZWQpIHRocm93IG5ldyBFcnJvcignT3BlbkFJIGNvbm5lY3Rpb24gaXMgbm90IG9wZW4uJyk7XG4gICAgICBuZXh0RWZmb3J0ID0gcmVhc29uaW5nRWZmb3J0LnBhcnNlKGVmZm9ydCk7XG4gICAgICBvbkV2ZW50KHtlZmZvcnQ6IG5leHRFZmZvcnQsIHR5cGU6ICdzZXNzaW9uLnJlYXNvbmluZy5xdWV1ZWQnfSk7XG4gICAgfSxcbiAgICBzdGVlcjogKHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgaWYoIWFjdGl2ZSB8fCAhY3VycmVudElkIHx8IHBlbmRpbmdTdGVlcikgdGhyb3cgbmV3IEVycm9yKCdTdGVlcmluZyByZXF1aXJlcyBhbiBhY3RpdmUgcmVzcG9uc2Ugd2l0aCBubyBwZW5kaW5nIHN0ZWVyaW5nLicpO1xuICAgICAgc2VuZCh7aW5wdXQ6IHRleHQsIHByZXZpb3VzX3Jlc3BvbnNlX2lkOiBjdXJyZW50SWQsIHR5cGU6ICdyZXNwb25zZS5zdGVlcid9KTtcbiAgICAgIHBlbmRpbmdTdGVlciA9IGN1cnJlbnRJZDtcbiAgICB9LFxuICAgIHRvb2xSZXN1bHQ6IChjYWxsSWQ6IHN0cmluZywgb3V0cHV0OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGNhbGwgPSBjYWxscy5nZXQoY2FsbElkKTtcbiAgICAgIGlmKCFjYWxsIHx8IGNhbGwub3V0cHV0ICE9PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignVW5rbm93biBvciBkdXBsaWNhdGUgdG9vbCByZXN1bHQuJyk7XG4gICAgICBjYWxsLm91dHB1dCA9IG91dHB1dDtcbiAgICAgIGZsdXNoVG9vbHMoKTtcbiAgICB9XG4gIH07XG59O1xuIl0sIm5hbWVzIjpbIldlYlNvY2tldCIsInoiLCJyZWFzb25pbmdFZmZvcnQiLCJlbnVtIiwicmVhZE9wZW5BSVJlc3BvbnNlVGV4dCIsInJlc3BvbnNlIiwic3RhdHVzIiwib3V0cHV0Iiwic29tZSIsIml0ZW0iLCJFcnJvciIsImluY29tcGxldGVfZGV0YWlscyIsInJlYXNvbiIsImNvbnRlbnQiLCJwYXJ0IiwidHlwZSIsInRleHQiLCJmbGF0TWFwIiwiZmlsdGVyIiwibWFwIiwiam9pbiIsInRyaW0iLCJjcmVhdGVPcGVuQUlSZXNwb25zZVNlc3Npb24iLCJvcHRpb25zIiwib25FdmVudCIsImNvbmZpZyIsImFwaUtleSIsIm1vZGVsIiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwibWF4X291dHB1dF90b2tlbnMiLCJ0aW1lb3V0TXMiLCJtYXhUb29sQ2FsbHMiLCJzaWduYWwiLCJhYm9ydGVkIiwicmVhc29uaW5nIiwicGFyc2UiLCJlZmZvcnQiLCJzZXR0aW5ncyIsImlucHV0IiwidW5kZWZpbmVkIiwic3RvcmUiLCJ0cnVuY2F0aW9uIiwiY29ubmVjdCIsImhhbmRzaGFrZVRpbWVvdXQiLCJNYXRoIiwibWluIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJtYXhQYXlsb2FkIiwic29ja2V0Iiwic2VlbkNhbGxzIiwiU2V0IiwiY2FsbHMiLCJNYXAiLCJhY3RpdmUiLCJjbG9zZWQiLCJjdXJyZW50SWQiLCJwZW5kaW5nU3RlZXIiLCJuZXh0RWZmb3J0IiwidGltZXIiLCJjbG9zZSIsImNsZWFyVGltZW91dCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjbGVhciIsImZhaWwiLCJtZXNzYWdlIiwiYXJtVGltZW91dCIsInNldFRpbWVvdXQiLCJ1bnJlZiIsInNlbmQiLCJldmVudCIsInJlYWR5U3RhdGUiLCJPUEVOIiwiSlNPTiIsInN0cmluZ2lmeSIsImNyZWF0ZSIsInByZXZpb3VzX3Jlc3BvbnNlX2lkIiwiZmx1c2hUb29scyIsInZhbHVlcyIsImFzeW5jIiwicmVhZHkiLCJlbnRyaWVzIiwiY2FsbCIsImxlbmd0aCIsImNhbGxJZCIsImNhbGxfaWQiLCJpZCIsImRlbGV0ZSIsInJlZ2lzdGVyQ2FsbCIsImluY2x1ZGVzIiwiU3RyaW5nIiwiaGFzIiwic2l6ZSIsInRvb2xzIiwidG9vbCIsIm5hbWUiLCJhZGQiLCJzZXQiLCJvbiIsImVycm9yIiwiZGF0YSIsInRvU3RyaW5nIiwiZGV0YWlsIiwic2xpY2UiLCJwZW5kaW5nIiwia2V5cyIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbmNlIiwiY29udGludWUiLCJwdXNoIiwicm9sZSIsInN0ZWVyIiwidG9vbFJlc3VsdCIsImdldCJdLCJtYXBwaW5ncyI6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
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import type { GeminiVideoInput } from '../adapters/geminiGenerationAdapter.js';
|
|
2
2
|
import type { SeedanceReferenceVideoInput, SeedanceVideoInput } from '../adapters/higgsfieldAdapter.js';
|
|
3
3
|
import type { ApiContext } from '../types/auth.types.js';
|
|
4
|
-
export type VideoGenerationInput = (GeminiVideoInput | SeedanceVideoInput | SeedanceReferenceVideoInput) & {
|
|
4
|
+
export type VideoGenerationInput = ((GeminiVideoInput | SeedanceVideoInput | SeedanceReferenceVideoInput) & {
|
|
5
5
|
provider?: string;
|
|
6
|
+
}) | {
|
|
7
|
+
model: string;
|
|
8
|
+
modelInput: Record<string, unknown>;
|
|
9
|
+
provider: 'higgsfield';
|
|
6
10
|
};
|
|
7
11
|
export interface VideoGenerationResult {
|
|
8
12
|
cancelUrl?: string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { getHiggsfieldModel } from '../adapters/higgsfieldModelCatalog.js';
|
|
1
2
|
import { Config } from '../config.js';
|
|
2
3
|
import { generateGeminiVideo } from './geminiVideo.js';
|
|
3
|
-
import { generateSeedanceReferenceVideo, generateSeedanceVideo } from './higgsfield.js';
|
|
4
|
+
import { generateHiggsfieldModel, generateSeedanceReferenceVideo, generateSeedanceVideo } from './higgsfield.js';
|
|
4
5
|
/** Generic video submission; providers must be explicitly selected in the input or configuration. */ export const generateVideo = async (context, input, config = context.config?.videoGeneration || Config.get('videoGeneration') || {}, webhookUrl)=>{
|
|
5
6
|
const { provider = config.provider, ...options } = input;
|
|
6
7
|
if (!provider) {
|
|
@@ -15,6 +16,16 @@ import { generateSeedanceReferenceVideo, generateSeedanceVideo } from './higgsfi
|
|
|
15
16
|
if (provider !== 'higgsfield') {
|
|
16
17
|
throw new Error('Unsupported video provider.');
|
|
17
18
|
}
|
|
19
|
+
if ('modelInput' in input && typeof input.model === 'string') {
|
|
20
|
+
if (getHiggsfieldModel(input.model).kind !== 'video') {
|
|
21
|
+
throw new Error('Choose a video model.');
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
...await generateHiggsfieldModel(context, input.model, input.modelInput, webhookUrl),
|
|
25
|
+
provider,
|
|
26
|
+
status: 'queued'
|
|
27
|
+
};
|
|
28
|
+
}
|
|
18
29
|
const mediaOptions = options;
|
|
19
30
|
const references = [
|
|
20
31
|
mediaOptions.imageUrls,
|
|
@@ -29,4 +40,4 @@ import { generateSeedanceReferenceVideo, generateSeedanceVideo } from './higgsfi
|
|
|
29
40
|
};
|
|
30
41
|
};
|
|
31
42
|
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy92aWRlb0dlbmVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtnZXRIaWdnc2ZpZWxkTW9kZWx9IGZyb20gJy4uL2FkYXB0ZXJzL2hpZ2dzZmllbGRNb2RlbENhdGFsb2cuanMnO1xuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge2dlbmVyYXRlR2VtaW5pVmlkZW99IGZyb20gJy4vZ2VtaW5pVmlkZW8uanMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhpZ2dzZmllbGRNb2RlbCwgZ2VuZXJhdGVTZWVkYW5jZVJlZmVyZW5jZVZpZGVvLCBnZW5lcmF0ZVNlZWRhbmNlVmlkZW99IGZyb20gJy4vaGlnZ3NmaWVsZC5qcyc7XG5cbmltcG9ydCB0eXBlIHtHZW1pbmlWaWRlb0lucHV0fSBmcm9tICcuLi9hZGFwdGVycy9nZW1pbmlHZW5lcmF0aW9uQWRhcHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7U2VlZGFuY2VSZWZlcmVuY2VWaWRlb0lucHV0LCBTZWVkYW5jZVZpZGVvSW5wdXR9IGZyb20gJy4uL2FkYXB0ZXJzL2hpZ2dzZmllbGRBZGFwdGVyLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgVmlkZW9HZW5lcmF0aW9uSW5wdXQgPSAoR2VtaW5pVmlkZW9JbnB1dCB8IFNlZWRhbmNlVmlkZW9JbnB1dCB8IFNlZWRhbmNlUmVmZXJlbmNlVmlkZW9JbnB1dCkgJiB7XG4gIHByb3ZpZGVyPzogc3RyaW5nO1xufSB8IHttb2RlbDogc3RyaW5nOyBtb2RlbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgcHJvdmlkZXI6ICdoaWdnc2ZpZWxkJ307XG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvR2VuZXJhdGlvblJlc3VsdCB7XG4gIGNhbmNlbFVybD86IHN0cmluZztcbiAgcHJvdmlkZXI6IHN0cmluZztcbiAgcmVxdWVzdElkOiBzdHJpbmc7XG4gIHN0YXR1czogJ3F1ZXVlZCc7XG4gIHN0YXR1c1VybDogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0dlbmVyYXRpb25Db25maWcge1xuICBnZW1pbmlLZXk/OiBzdHJpbmc7XG4gIGdlbWluaU1vZGVsPzogc3RyaW5nO1xuICBwcm92aWRlcj86IHN0cmluZztcbn1cblxuLyoqIEdlbmVyaWMgdmlkZW8gc3VibWlzc2lvbjsgcHJvdmlkZXJzIG11c3QgYmUgZXhwbGljaXRseSBzZWxlY3RlZCBpbiB0aGUgaW5wdXQgb3IgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVZpZGVvID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LCBpbnB1dDogVmlkZW9HZW5lcmF0aW9uSW5wdXQsXG4gIGNvbmZpZzogVmlkZW9HZW5lcmF0aW9uQ29uZmlnID0gY29udGV4dC5jb25maWc/LnZpZGVvR2VuZXJhdGlvbiB8fCBDb25maWcuZ2V0KCd2aWRlb0dlbmVyYXRpb24nKSB8fCB7fSxcbiAgd2ViaG9va1VybD86IHN0cmluZ1xuKTogUHJvbWlzZTxWaWRlb0dlbmVyYXRpb25SZXN1bHQ+ID0+IHtcbiAgY29uc3Qge3Byb3ZpZGVyID0gY29uZmlnLnByb3ZpZGVyLCAuLi5vcHRpb25zfSA9IGlucHV0O1xuICBpZighcHJvdmlkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgdmlkZW8gZ2VuZXJhdGlvbiBwcm92aWRlciBpcyByZXF1aXJlZC4nKTtcbiAgfVxuICBpZihwcm92aWRlciA9PT0gJ2dlbWluaScpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVHZW1pbmlWaWRlbyhjb250ZXh0LCBvcHRpb25zIGFzIEdlbWluaVZpZGVvSW5wdXQsIHtcbiAgICAgIGtleTogY29uZmlnLmdlbWluaUtleSwgbW9kZWw6IGNvbmZpZy5nZW1pbmlNb2RlbFxuICAgIH0pO1xuICB9XG4gIGlmKHByb3ZpZGVyICE9PSAnaGlnZ3NmaWVsZCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZpZGVvIHByb3ZpZGVyLicpO1xuICB9XG4gIGlmKCdtb2RlbElucHV0JyBpbiBpbnB1dCAmJiB0eXBlb2YgaW5wdXQubW9kZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYoZ2V0SGlnZ3NmaWVsZE1vZGVsKGlucHV0Lm1vZGVsKS5raW5kICE9PSAndmlkZW8nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nob29zZSBhIHZpZGVvIG1vZGVsLicpO1xuICAgIH1cbiAgICByZXR1cm4gey4uLmF3YWl0IGdlbmVyYXRlSGlnZ3NmaWVsZE1vZGVsKGNvbnRleHQsIGlucHV0Lm1vZGVsLCBpbnB1dC5tb2RlbElucHV0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB3ZWJob29rVXJsKSwgcHJvdmlkZXIsIHN0YXR1czogJ3F1ZXVlZCd9O1xuICB9XG4gIGNvbnN0IG1lZGlhT3B0aW9ucyA9IG9wdGlvbnMgYXMgU2VlZGFuY2VSZWZlcmVuY2VWaWRlb0lucHV0O1xuICBjb25zdCByZWZlcmVuY2VzID0gW21lZGlhT3B0aW9ucy5pbWFnZVVybHMsIG1lZGlhT3B0aW9ucy5hdWRpb1VybHMsIG1lZGlhT3B0aW9ucy52aWRlb1VybHNdXG4gICAgLnNvbWUoKHVybHMpID0+IEFycmF5LmlzQXJyYXkodXJscykgJiYgdXJscy5sZW5ndGggPiAwKTtcbiAgY29uc3QgcmVzdWx0ID0gcmVmZXJlbmNlc1xuICAgID8gYXdhaXQgZ2VuZXJhdGVTZWVkYW5jZVJlZmVyZW5jZVZpZGVvKGNvbnRleHQsIG9wdGlvbnMgYXMgU2VlZGFuY2VSZWZlcmVuY2VWaWRlb0lucHV0LCB3ZWJob29rVXJsKVxuICAgIDogYXdhaXQgZ2VuZXJhdGVTZWVkYW5jZVZpZGVvKGNvbnRleHQsIG9wdGlvbnMgYXMgU2VlZGFuY2VWaWRlb0lucHV0LCB3ZWJob29rVXJsKTtcbiAgcmV0dXJuIHsuLi5yZXN1bHQsIHByb3ZpZGVyLCBzdGF0dXM6ICdxdWV1ZWQnfTtcbn07XG4iXSwibmFtZXMiOlsiZ2V0SGlnZ3NmaWVsZE1vZGVsIiwiQ29uZmlnIiwiZ2VuZXJhdGVHZW1pbmlWaWRlbyIsImdlbmVyYXRlSGlnZ3NmaWVsZE1vZGVsIiwiZ2VuZXJhdGVTZWVkYW5jZVJlZmVyZW5jZVZpZGVvIiwiZ2VuZXJhdGVTZWVkYW5jZVZpZGVvIiwiZ2VuZXJhdGVWaWRlbyIsImNvbnRleHQiLCJpbnB1dCIsImNvbmZpZyIsInZpZGVvR2VuZXJhdGlvbiIsImdldCIsIndlYmhvb2tVcmwiLCJwcm92aWRlciIsIm9wdGlvbnMiLCJFcnJvciIsImtleSIsImdlbWluaUtleSIsIm1vZGVsIiwiZ2VtaW5pTW9kZWwiLCJraW5kIiwibW9kZWxJbnB1dCIsInN0YXR1cyIsIm1lZGlhT3B0aW9ucyIsInJlZmVyZW5jZXMiLCJpbWFnZVVybHMiLCJhdWRpb1VybHMiLCJ2aWRlb1VybHMiLCJzb21lIiwidXJscyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInJlc3VsdCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsa0JBQWtCLFFBQU8sd0NBQXdDO0FBQ3pFLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBQ3BDLFNBQVFDLG1CQUFtQixRQUFPLG1CQUFtQjtBQUNyRCxTQUFRQyx1QkFBdUIsRUFBRUMsOEJBQThCLEVBQUVDLHFCQUFxQixRQUFPLGtCQUFrQjtBQXNCL0csbUdBQW1HLEdBQ25HLE9BQU8sTUFBTUMsZ0JBQWdCLE9BQzNCQyxTQUFxQkMsT0FDckJDLFNBQWdDRixRQUFRRSxNQUFNLEVBQUVDLG1CQUFtQlQsT0FBT1UsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFDdEdDO0lBRUEsTUFBTSxFQUFDQyxXQUFXSixPQUFPSSxRQUFRLEVBQUUsR0FBR0MsU0FBUSxHQUFHTjtJQUNqRCxJQUFHLENBQUNLLFVBQVU7UUFDWixNQUFNLElBQUlFLE1BQU07SUFDbEI7SUFDQSxJQUFHRixhQUFhLFVBQVU7UUFDeEIsT0FBT1gsb0JBQW9CSyxTQUFTTyxTQUE2QjtZQUMvREUsS0FBS1AsT0FBT1EsU0FBUztZQUFFQyxPQUFPVCxPQUFPVSxXQUFXO1FBQ2xEO0lBQ0Y7SUFDQSxJQUFHTixhQUFhLGNBQWM7UUFDNUIsTUFBTSxJQUFJRSxNQUFNO0lBQ2xCO0lBQ0EsSUFBRyxnQkFBZ0JQLFNBQVMsT0FBT0EsTUFBTVUsS0FBSyxLQUFLLFVBQVU7UUFDM0QsSUFBR2xCLG1CQUFtQlEsTUFBTVUsS0FBSyxFQUFFRSxJQUFJLEtBQUssU0FBUztZQUNuRCxNQUFNLElBQUlMLE1BQU07UUFDbEI7UUFDQSxPQUFPO1lBQUMsR0FBRyxNQUFNWix3QkFBd0JJLFNBQVNDLE1BQU1VLEtBQUssRUFBRVYsTUFBTWEsVUFBVSxFQUE2QlQsV0FBVztZQUFFQztZQUFVUyxRQUFRO1FBQVE7SUFDcko7SUFDQSxNQUFNQyxlQUFlVDtJQUNyQixNQUFNVSxhQUFhO1FBQUNELGFBQWFFLFNBQVM7UUFBRUYsYUFBYUcsU0FBUztRQUFFSCxhQUFhSSxTQUFTO0tBQUMsQ0FDeEZDLElBQUksQ0FBQyxDQUFDQyxPQUFTQyxNQUFNQyxPQUFPLENBQUNGLFNBQVNBLEtBQUtHLE1BQU0sR0FBRztJQUN2RCxNQUFNQyxTQUFTVCxhQUNYLE1BQU1wQiwrQkFBK0JHLFNBQVNPLFNBQXdDRixjQUN0RixNQUFNUCxzQkFBc0JFLFNBQVNPLFNBQStCRjtJQUN4RSxPQUFPO1FBQUMsR0FBR3FCLE1BQU07UUFBRXBCO1FBQVVTLFFBQVE7SUFBUTtBQUMvQyxFQUFFIn0=
|
|
@@ -101,20 +101,26 @@ export declare const validateSoulImageInput: (input: unknown) => SoulImageInput;
|
|
|
101
101
|
export declare const validateSeedanceVideoInput: (input: unknown) => SeedanceVideoInput;
|
|
102
102
|
export declare const validateSeedanceReferenceVideoInput: (input: unknown) => SeedanceReferenceVideoInput;
|
|
103
103
|
export declare const validateMarketingStudioImageInput: (input: unknown) => MarketingStudioImageInput;
|
|
104
|
-
|
|
105
|
-
error
|
|
106
|
-
payload
|
|
107
|
-
images
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
video
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
request_id:
|
|
117
|
-
status:
|
|
118
|
-
|
|
104
|
+
declare const HiggsfieldWebhookSchema: z.ZodObject<{
|
|
105
|
+
error: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
106
|
+
payload: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
107
|
+
images: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
108
|
+
content_type: z.ZodOptional<z.ZodString>;
|
|
109
|
+
url: z.ZodOptional<z.ZodString>;
|
|
110
|
+
}, z.core.$strip>>>;
|
|
111
|
+
video: z.ZodOptional<z.ZodObject<{
|
|
112
|
+
content_type: z.ZodOptional<z.ZodString>;
|
|
113
|
+
url: z.ZodOptional<z.ZodString>;
|
|
114
|
+
}, z.core.$strip>>;
|
|
115
|
+
}, z.core.$strip>>>;
|
|
116
|
+
request_id: z.ZodString;
|
|
117
|
+
status: z.ZodEnum<{
|
|
118
|
+
completed: "completed";
|
|
119
|
+
failed: "failed";
|
|
120
|
+
nsfw: "nsfw";
|
|
121
|
+
}>;
|
|
122
|
+
}, z.core.$strip>;
|
|
123
|
+
export type HiggsfieldWebhookPayload = z.output<typeof HiggsfieldWebhookSchema>;
|
|
124
|
+
/** Validates the documented envelope only; callers must authenticate and reconcile before settlement. */
|
|
119
125
|
export declare const parseHiggsfieldWebhookPayload: (body: unknown) => HiggsfieldWebhookPayload;
|
|
120
126
|
export {};
|