@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.
Files changed (43) hide show
  1. package/README.md +4 -0
  2. package/docs/GENERATION.md +135 -0
  3. package/lib/actions/contentGeneration.d.ts +30 -1
  4. package/lib/actions/contentGeneration.js +103 -16
  5. package/lib/actions/databaseAccounts.d.ts +14 -0
  6. package/lib/actions/databaseAccounts.js +211 -0
  7. package/lib/actions/databaseProvisioningLease.d.ts +6 -0
  8. package/lib/actions/databaseProvisioningLease.js +166 -0
  9. package/lib/actions/higgsfield.d.ts +2 -0
  10. package/lib/actions/higgsfield.js +7 -1
  11. package/lib/actions/imageGeneration.d.ts +5 -1
  12. package/lib/actions/imageGeneration.js +13 -2
  13. package/lib/actions/index.d.ts +3 -0
  14. package/lib/actions/index.js +4 -1
  15. package/lib/actions/openaiResponseSession.d.ts +60 -0
  16. package/lib/actions/openaiResponseSession.js +248 -0
  17. package/lib/actions/videoGeneration.d.ts +5 -1
  18. package/lib/actions/videoGeneration.js +13 -2
  19. package/lib/adapters/higgsfieldAdapter.d.ts +21 -15
  20. package/lib/adapters/higgsfieldAdapter.js +24 -11
  21. package/lib/adapters/higgsfieldModelCatalog.d.ts +10 -0
  22. package/lib/adapters/higgsfieldModelCatalog.js +5363 -0
  23. package/lib/adapters/higgsfieldModels.d.ts +2 -0
  24. package/lib/adapters/higgsfieldModels.js +37 -0
  25. package/lib/index.d.ts +4 -0
  26. package/lib/index.js +4 -1
  27. package/lib/objectTypes/contentGeneration.js +26 -3
  28. package/lib/objectTypes/imageGeneration.js +3 -2
  29. package/lib/objectTypes/videoGeneration.js +2 -1
  30. package/lib/types/databaseCredentials.types.d.ts +30 -0
  31. package/lib/types/databaseCredentials.types.js +3 -0
  32. package/lib/types/index.d.ts +1 -0
  33. package/lib/types/index.js +2 -1
  34. package/lib/utils/databaseCredentials.d.ts +5 -0
  35. package/lib/utils/databaseCredentials.js +100 -0
  36. package/lib/utils/generationCallback.d.ts +23 -0
  37. package/lib/utils/generationCallback.js +49 -0
  38. package/lib/utils/index.d.ts +3 -0
  39. package/lib/utils/index.js +4 -1
  40. package/lib/utils/secretDatabase.d.ts +8 -0
  41. package/lib/utils/secretDatabase.js +153 -0
  42. package/lib/utils/testUtils.js +10 -2
  43. 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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
@@ -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';
@@ -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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9hcHBzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYW5hbHl0aWNzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29ubmVjdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb252ZXJzYXRpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY3JtLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZHluYW1vZGIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9lbWFpbC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmxhZ3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9ncm91cHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9oaWdnc2ZpZWxkLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vaW1hZ2VzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vaW9zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbG9jYXRpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9ub3RpZmljYXRpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGF5bWVudHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wb3N0cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVhY3Rpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcnVtLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vczMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2guanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zbXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGF0aXN0aWNzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3Vic2NyaXB0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3RhZ3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91c2Vycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZGVvcy5qcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vaW1hZ2VHZW5lcmF0aW9uLmpzJztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250ZW50R2VuZXJhdGlvbi5qcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vdmlkZW9HZW5lcmF0aW9uLmpzJztcblxuZXhwb3J0ICogZnJvbSAnLi9nZW1pbmlWaWRlby5qcyc7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsY0FBYyxZQUFZO0FBQzFCLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsbUJBQW1CO0FBQ2pDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsV0FBVztBQUN6QixjQUFjLGdCQUFnQjtBQUM5QixjQUFjLGFBQWE7QUFDM0IsY0FBYyxhQUFhO0FBQzNCLGNBQWMsYUFBYTtBQUMzQixjQUFjLGNBQWM7QUFDNUIsY0FBYyxrQkFBa0I7QUFDaEMsY0FBYyxjQUFjO0FBQzVCLGNBQWMsV0FBVztBQUN6QixjQUFjLGlCQUFpQjtBQUMvQixjQUFjLGdCQUFnQjtBQUM5QixjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLGdCQUFnQjtBQUM5QixjQUFjLGFBQWE7QUFDM0IsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxXQUFXO0FBQ3pCLGNBQWMsVUFBVTtBQUN4QixjQUFjLGNBQWM7QUFDNUIsY0FBYyxXQUFXO0FBQ3pCLGNBQWMsa0JBQWtCO0FBQ2hDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsWUFBWTtBQUMxQixjQUFjLGFBQWE7QUFDM0IsY0FBYyxjQUFjO0FBRTVCLGNBQWMsdUJBQXVCO0FBRXJDLGNBQWMseUJBQXlCO0FBRXZDLGNBQWMsdUJBQXVCO0FBRXJDLGNBQWMsbUJBQW1CIn0=
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy92aWRlb0dlbmVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge2dlbmVyYXRlR2VtaW5pVmlkZW99IGZyb20gJy4vZ2VtaW5pVmlkZW8uanMnO1xuaW1wb3J0IHtnZW5lcmF0ZVNlZWRhbmNlUmVmZXJlbmNlVmlkZW8sIGdlbmVyYXRlU2VlZGFuY2VWaWRlb30gZnJvbSAnLi9oaWdnc2ZpZWxkLmpzJztcblxuaW1wb3J0IHR5cGUge0dlbWluaVZpZGVvSW5wdXR9IGZyb20gJy4uL2FkYXB0ZXJzL2dlbWluaUdlbmVyYXRpb25BZGFwdGVyLmpzJztcbmltcG9ydCB0eXBlIHtTZWVkYW5jZVJlZmVyZW5jZVZpZGVvSW5wdXQsIFNlZWRhbmNlVmlkZW9JbnB1dH0gZnJvbSAnLi4vYWRhcHRlcnMvaGlnZ3NmaWVsZEFkYXB0ZXIuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuXG5leHBvcnQgdHlwZSBWaWRlb0dlbmVyYXRpb25JbnB1dCA9IChHZW1pbmlWaWRlb0lucHV0IHwgU2VlZGFuY2VWaWRlb0lucHV0IHwgU2VlZGFuY2VSZWZlcmVuY2VWaWRlb0lucHV0KSAmIHtcbiAgcHJvdmlkZXI/OiBzdHJpbmc7XG59O1xuZXhwb3J0IGludGVyZmFjZSBWaWRlb0dlbmVyYXRpb25SZXN1bHQge1xuICBjYW5jZWxVcmw/OiBzdHJpbmc7XG4gIHByb3ZpZGVyOiBzdHJpbmc7XG4gIHJlcXVlc3RJZDogc3RyaW5nO1xuICBzdGF0dXM6ICdxdWV1ZWQnO1xuICBzdGF0dXNVcmw6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9HZW5lcmF0aW9uQ29uZmlnIHtcbiAgZ2VtaW5pS2V5Pzogc3RyaW5nO1xuICBnZW1pbmlNb2RlbD86IHN0cmluZztcbiAgcHJvdmlkZXI/OiBzdHJpbmc7XG59XG5cbi8qKiBHZW5lcmljIHZpZGVvIHN1Ym1pc3Npb247IHByb3ZpZGVycyBtdXN0IGJlIGV4cGxpY2l0bHkgc2VsZWN0ZWQgaW4gdGhlIGlucHV0IG9yIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVWaWRlbyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCwgaW5wdXQ6IFZpZGVvR2VuZXJhdGlvbklucHV0LFxuICBjb25maWc6IFZpZGVvR2VuZXJhdGlvbkNvbmZpZyA9IGNvbnRleHQuY29uZmlnPy52aWRlb0dlbmVyYXRpb24gfHwgQ29uZmlnLmdldCgndmlkZW9HZW5lcmF0aW9uJykgfHwge30sXG4gIHdlYmhvb2tVcmw/OiBzdHJpbmdcbik6IFByb21pc2U8VmlkZW9HZW5lcmF0aW9uUmVzdWx0PiA9PiB7XG4gIGNvbnN0IHtwcm92aWRlciA9IGNvbmZpZy5wcm92aWRlciwgLi4ub3B0aW9uc30gPSBpbnB1dDtcbiAgaWYoIXByb3ZpZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIHZpZGVvIGdlbmVyYXRpb24gcHJvdmlkZXIgaXMgcmVxdWlyZWQuJyk7XG4gIH1cbiAgaWYocHJvdmlkZXIgPT09ICdnZW1pbmknKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlR2VtaW5pVmlkZW8oY29udGV4dCwgb3B0aW9ucyBhcyBHZW1pbmlWaWRlb0lucHV0LCB7XG4gICAgICBrZXk6IGNvbmZpZy5nZW1pbmlLZXksIG1vZGVsOiBjb25maWcuZ2VtaW5pTW9kZWxcbiAgICB9KTtcbiAgfVxuICBpZihwcm92aWRlciAhPT0gJ2hpZ2dzZmllbGQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2aWRlbyBwcm92aWRlci4nKTtcbiAgfVxuICBjb25zdCBtZWRpYU9wdGlvbnMgPSBvcHRpb25zIGFzIFNlZWRhbmNlUmVmZXJlbmNlVmlkZW9JbnB1dDtcbiAgY29uc3QgcmVmZXJlbmNlcyA9IFttZWRpYU9wdGlvbnMuaW1hZ2VVcmxzLCBtZWRpYU9wdGlvbnMuYXVkaW9VcmxzLCBtZWRpYU9wdGlvbnMudmlkZW9VcmxzXVxuICAgIC5zb21lKCh1cmxzKSA9PiBBcnJheS5pc0FycmF5KHVybHMpICYmIHVybHMubGVuZ3RoID4gMCk7XG4gIGNvbnN0IHJlc3VsdCA9IHJlZmVyZW5jZXNcbiAgICA/IGF3YWl0IGdlbmVyYXRlU2VlZGFuY2VSZWZlcmVuY2VWaWRlbyhjb250ZXh0LCBvcHRpb25zIGFzIFNlZWRhbmNlUmVmZXJlbmNlVmlkZW9JbnB1dCwgd2ViaG9va1VybClcbiAgICA6IGF3YWl0IGdlbmVyYXRlU2VlZGFuY2VWaWRlbyhjb250ZXh0LCBvcHRpb25zIGFzIFNlZWRhbmNlVmlkZW9JbnB1dCwgd2ViaG9va1VybCk7XG4gIHJldHVybiB7Li4ucmVzdWx0LCBwcm92aWRlciwgc3RhdHVzOiAncXVldWVkJ307XG59O1xuIl0sIm5hbWVzIjpbIkNvbmZpZyIsImdlbmVyYXRlR2VtaW5pVmlkZW8iLCJnZW5lcmF0ZVNlZWRhbmNlUmVmZXJlbmNlVmlkZW8iLCJnZW5lcmF0ZVNlZWRhbmNlVmlkZW8iLCJnZW5lcmF0ZVZpZGVvIiwiY29udGV4dCIsImlucHV0IiwiY29uZmlnIiwidmlkZW9HZW5lcmF0aW9uIiwiZ2V0Iiwid2ViaG9va1VybCIsInByb3ZpZGVyIiwib3B0aW9ucyIsIkVycm9yIiwia2V5IiwiZ2VtaW5pS2V5IiwibW9kZWwiLCJnZW1pbmlNb2RlbCIsIm1lZGlhT3B0aW9ucyIsInJlZmVyZW5jZXMiLCJpbWFnZVVybHMiLCJhdWRpb1VybHMiLCJ2aWRlb1VybHMiLCJzb21lIiwidXJscyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInJlc3VsdCIsInN0YXR1cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsTUFBTSxRQUFPLGVBQWU7QUFDcEMsU0FBUUMsbUJBQW1CLFFBQU8sbUJBQW1CO0FBQ3JELFNBQVFDLDhCQUE4QixFQUFFQyxxQkFBcUIsUUFBTyxrQkFBa0I7QUFzQnRGLG1HQUFtRyxHQUNuRyxPQUFPLE1BQU1DLGdCQUFnQixPQUMzQkMsU0FBcUJDLE9BQ3JCQyxTQUFnQ0YsUUFBUUUsTUFBTSxFQUFFQyxtQkFBbUJSLE9BQU9TLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEVBQ3RHQztJQUVBLE1BQU0sRUFBQ0MsV0FBV0osT0FBT0ksUUFBUSxFQUFFLEdBQUdDLFNBQVEsR0FBR047SUFDakQsSUFBRyxDQUFDSyxVQUFVO1FBQ1osTUFBTSxJQUFJRSxNQUFNO0lBQ2xCO0lBQ0EsSUFBR0YsYUFBYSxVQUFVO1FBQ3hCLE9BQU9WLG9CQUFvQkksU0FBU08sU0FBNkI7WUFDL0RFLEtBQUtQLE9BQU9RLFNBQVM7WUFBRUMsT0FBT1QsT0FBT1UsV0FBVztRQUNsRDtJQUNGO0lBQ0EsSUFBR04sYUFBYSxjQUFjO1FBQzVCLE1BQU0sSUFBSUUsTUFBTTtJQUNsQjtJQUNBLE1BQU1LLGVBQWVOO0lBQ3JCLE1BQU1PLGFBQWE7UUFBQ0QsYUFBYUUsU0FBUztRQUFFRixhQUFhRyxTQUFTO1FBQUVILGFBQWFJLFNBQVM7S0FBQyxDQUN4RkMsSUFBSSxDQUFDLENBQUNDLE9BQVNDLE1BQU1DLE9BQU8sQ0FBQ0YsU0FBU0EsS0FBS0csTUFBTSxHQUFHO0lBQ3ZELE1BQU1DLFNBQVNULGFBQ1gsTUFBTWpCLCtCQUErQkcsU0FBU08sU0FBd0NGLGNBQ3RGLE1BQU1QLHNCQUFzQkUsU0FBU08sU0FBK0JGO0lBQ3hFLE9BQU87UUFBQyxHQUFHa0IsTUFBTTtRQUFFakI7UUFBVWtCLFFBQVE7SUFBUTtBQUMvQyxFQUFFIn0=
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
- export interface HiggsfieldWebhookPayload {
105
- error?: string | null;
106
- payload?: {
107
- images?: {
108
- url?: string;
109
- content_type?: string;
110
- }[];
111
- video?: {
112
- url?: string;
113
- content_type?: string;
114
- };
115
- };
116
- request_id: string;
117
- status: string;
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 {};