@vm0/cli 9.278.0 → 9.278.1

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 (194) hide show
  1. package/{agent-HUDTEGLK.js → agent-4F3XAJWN.js} +12 -6
  2. package/agent-4F3XAJWN.js.map +1 -0
  3. package/{banking-BMZONEXP.js → banking-CWQFQKZB.js} +61 -7
  4. package/banking-CWQFQKZB.js.map +1 -0
  5. package/{browser-LQP445CU.js → browser-BI6UFWPH.js} +4 -5
  6. package/browser-BI6UFWPH.js.map +1 -0
  7. package/{chat-UF7QAWUT.js → chat-MKIW4FPP.js} +24 -16
  8. package/chat-MKIW4FPP.js.map +1 -0
  9. package/chunk-2SJTFDC2.js +189 -0
  10. package/chunk-2SJTFDC2.js.map +1 -0
  11. package/chunk-4FTIKZKP.js +64 -0
  12. package/chunk-4FTIKZKP.js.map +1 -0
  13. package/chunk-7UZXNER2.js +568 -0
  14. package/chunk-7UZXNER2.js.map +1 -0
  15. package/chunk-A6ZRMNM3.js +102 -0
  16. package/chunk-A6ZRMNM3.js.map +1 -0
  17. package/{chunk-QC63TUJC.js → chunk-C62A6LD6.js} +2 -2
  18. package/chunk-CCTF3YVW.js +52 -0
  19. package/chunk-CCTF3YVW.js.map +1 -0
  20. package/chunk-CD2BLKGC.js +188 -0
  21. package/chunk-CD2BLKGC.js.map +1 -0
  22. package/chunk-CEJGHPF3.js +55 -0
  23. package/chunk-CEJGHPF3.js.map +1 -0
  24. package/chunk-DUA6CF7E.js +2053 -0
  25. package/chunk-DUA6CF7E.js.map +1 -0
  26. package/chunk-E2TQAKNL.js +1300 -0
  27. package/chunk-E2TQAKNL.js.map +1 -0
  28. package/{chunk-5ZZI2LSO.js → chunk-GHKWW4NC.js} +5 -5
  29. package/chunk-GV3PG6CZ.js +114 -0
  30. package/chunk-GV3PG6CZ.js.map +1 -0
  31. package/chunk-GY7D76EZ.js +81 -0
  32. package/chunk-GY7D76EZ.js.map +1 -0
  33. package/chunk-HHHHZMTA.js +434 -0
  34. package/chunk-HHHHZMTA.js.map +1 -0
  35. package/chunk-HZYOJTEE.js +1275 -0
  36. package/chunk-HZYOJTEE.js.map +1 -0
  37. package/chunk-J3ZRXVI6.js +740 -0
  38. package/chunk-J3ZRXVI6.js.map +1 -0
  39. package/chunk-JJWFO27K.js +31 -0
  40. package/chunk-JJWFO27K.js.map +1 -0
  41. package/chunk-JV6LM2YC.js +39 -0
  42. package/chunk-JV6LM2YC.js.map +1 -0
  43. package/chunk-KER77KJB.js +105 -0
  44. package/chunk-KER77KJB.js.map +1 -0
  45. package/{chunk-V5ZVB7RJ.js → chunk-KKO2XGLQ.js} +1 -6
  46. package/chunk-KKO2XGLQ.js.map +1 -0
  47. package/chunk-LIYPTQAO.js +198 -0
  48. package/chunk-LIYPTQAO.js.map +1 -0
  49. package/chunk-LYLDVUHT.js +131 -0
  50. package/chunk-LYLDVUHT.js.map +1 -0
  51. package/chunk-PFWBO2VK.js +801 -0
  52. package/chunk-PFWBO2VK.js.map +1 -0
  53. package/chunk-RTCRU35A.js +194 -0
  54. package/chunk-RTCRU35A.js.map +1 -0
  55. package/{chunk-F2AM4RWA.js → chunk-RTEEWZUT.js} +2 -2
  56. package/{chunk-F2AM4RWA.js.map → chunk-RTEEWZUT.js.map} +1 -1
  57. package/{chunk-BRV4D3P2.js → chunk-RUKMHBNQ.js} +2 -2
  58. package/chunk-SA4DYSBR.js +31 -0
  59. package/chunk-SA4DYSBR.js.map +1 -0
  60. package/chunk-SJPOFQJU.js +792 -0
  61. package/chunk-SJPOFQJU.js.map +1 -0
  62. package/{chunk-V7A6ZFHR.js → chunk-SMPSKBAP.js} +25 -774
  63. package/chunk-SMPSKBAP.js.map +1 -0
  64. package/{chunk-E53W6UVQ.js → chunk-T2X2EGV2.js} +4 -4
  65. package/chunk-T2X2EGV2.js.map +1 -0
  66. package/chunk-U2GQH6AD.js +309 -0
  67. package/chunk-U2GQH6AD.js.map +1 -0
  68. package/chunk-U6A2RPHO.js +66 -0
  69. package/chunk-U6A2RPHO.js.map +1 -0
  70. package/chunk-UIXUGVZB.js +362 -0
  71. package/chunk-UIXUGVZB.js.map +1 -0
  72. package/chunk-XRZKJACM.js +49 -0
  73. package/chunk-XRZKJACM.js.map +1 -0
  74. package/chunk-YDS3X7KB.js +202 -0
  75. package/chunk-YDS3X7KB.js.map +1 -0
  76. package/{chunk-A6TMOGPR.js → chunk-ZKNJW4K6.js} +1412 -334
  77. package/chunk-ZKNJW4K6.js.map +1 -0
  78. package/chunk-ZXSCBS77.js +90 -0
  79. package/chunk-ZXSCBS77.js.map +1 -0
  80. package/{computer-use-RRD7BCCK.js → computer-use-6AEVW47F.js} +9 -7
  81. package/computer-use-6AEVW47F.js.map +1 -0
  82. package/{connector-XX7UU6XE.js → connector-XDQ6JEBU.js} +25 -13
  83. package/connector-XDQ6JEBU.js.map +1 -0
  84. package/{credit-GDNNAQRO.js → credit-JPQA5XPA.js} +8 -10
  85. package/credit-JPQA5XPA.js.map +1 -0
  86. package/{developer-support-IISP5UBI.js → developer-support-V7NZOU2P.js} +27 -7
  87. package/developer-support-V7NZOU2P.js.map +1 -0
  88. package/{doctor-IZM2TJOH.js → doctor-FJO24TG3.js} +13 -11
  89. package/doctor-FJO24TG3.js.map +1 -0
  90. package/{feishu-XB7SQBSI.js → feishu-PNOAM33Q.js} +99 -9
  91. package/feishu-PNOAM33Q.js.map +1 -0
  92. package/{finance-OGWHKQLU.js → finance-55OJ6GYP.js} +49 -9
  93. package/finance-55OJ6GYP.js.map +1 -0
  94. package/{generate-AA2PVOYQ.js → generate-XUKBK523.js} +26 -21
  95. package/generate-XUKBK523.js.map +1 -0
  96. package/{github-VJVIBTVF.js → github-V4MD2PMM.js} +83 -8
  97. package/github-V4MD2PMM.js.map +1 -0
  98. package/{goal-7SYVHDTK.js → goal-FS5FJKVU.js} +69 -13
  99. package/goal-FS5FJKVU.js.map +1 -0
  100. package/{host-UVQMIOBA.js → host-GITTJ6PR.js} +124 -10
  101. package/host-GITTJ6PR.js.map +1 -0
  102. package/{logs-PIS4X24E.js → logs-EEUIGYUD.js} +51 -11
  103. package/logs-EEUIGYUD.js.map +1 -0
  104. package/{mail-L33OSQ2R.js → mail-G4SAJSBD.js} +39 -8
  105. package/mail-G4SAJSBD.js.map +1 -0
  106. package/{maps-D5XTXU5U.js → maps-7ANNU3BX.js} +65 -11
  107. package/maps-7ANNU3BX.js.map +1 -0
  108. package/{model-ZFMRECDM.js → model-DSPDCJLB.js} +6 -6
  109. package/model-DSPDCJLB.js.map +1 -0
  110. package/{model-provider-EZZ2DRYZ.js → model-provider-RZQ45PNG.js} +6 -6
  111. package/model-provider-RZQ45PNG.js.map +1 -0
  112. package/package.json +1 -1
  113. package/{people-search-PFTIO2QS.js → people-search-I7PUMF5M.js} +22 -6
  114. package/people-search-I7PUMF5M.js.map +1 -0
  115. package/{phone-6SG5ZUNL.js → phone-SSAPGMTW.js} +90 -9
  116. package/phone-SSAPGMTW.js.map +1 -0
  117. package/{recognize-LLU6J3SW.js → recognize-D7VORZBN.js} +27 -9
  118. package/recognize-D7VORZBN.js.map +1 -0
  119. package/{resource-FGUSXS4G.js → resource-76IV3TMW.js} +21 -7
  120. package/resource-76IV3TMW.js.map +1 -0
  121. package/{scrape-BAUZ2YFD.js → scrape-JBDLNTLB.js} +22 -6
  122. package/scrape-JBDLNTLB.js.map +1 -0
  123. package/{search-DLO5RXRM.js → search-UNZNUTZX.js} +29 -9
  124. package/search-UNZNUTZX.js.map +1 -0
  125. package/{slack-CVATPKP3.js → slack-AAH6GG2W.js} +103 -11
  126. package/slack-AAH6GG2W.js.map +1 -0
  127. package/{teams-ZZYO6YIK.js → teams-6OPXE4TX.js} +90 -9
  128. package/teams-6OPXE4TX.js.map +1 -0
  129. package/{telegram-VY7T4YAR.js → telegram-RRZG73RT.js} +101 -10
  130. package/telegram-RRZG73RT.js.map +1 -0
  131. package/{upgrade-GFA4ZUU4.js → upgrade-I5IL4UQL.js} +3 -4
  132. package/upgrade-I5IL4UQL.js.map +1 -0
  133. package/{video-STFG7BET.js → video-HV44W4X7.js} +5 -4
  134. package/video-HV44W4X7.js.map +1 -0
  135. package/{weather-ISJEHJWR.js → weather-EQ7CSADB.js} +70 -16
  136. package/weather-EQ7CSADB.js.map +1 -0
  137. package/{web-YN4CVHK7.js → web-6LIMWEOZ.js} +5 -5
  138. package/web-6LIMWEOZ.js.map +1 -0
  139. package/{web-search-PC7IECND.js → web-search-AT7WONZN.js} +22 -6
  140. package/web-search-AT7WONZN.js.map +1 -0
  141. package/{whoami-KXFXZGM6.js → whoami-RKTLLSI4.js} +16 -7
  142. package/whoami-RKTLLSI4.js.map +1 -0
  143. package/{workflow-O7YZHB7A.js → workflow-ZH32P622.js} +135 -39
  144. package/workflow-ZH32P622.js.map +1 -0
  145. package/zero.js +40 -40
  146. package/agent-HUDTEGLK.js.map +0 -1
  147. package/banking-BMZONEXP.js.map +0 -1
  148. package/browser-LQP445CU.js.map +0 -1
  149. package/chat-UF7QAWUT.js.map +0 -1
  150. package/chunk-2W73DZDW.js +0 -32
  151. package/chunk-2W73DZDW.js.map +0 -1
  152. package/chunk-6PN6QGIM.js +0 -11405
  153. package/chunk-6PN6QGIM.js.map +0 -1
  154. package/chunk-A6TMOGPR.js.map +0 -1
  155. package/chunk-ANOLYIPL.js +0 -10
  156. package/chunk-ANOLYIPL.js.map +0 -1
  157. package/chunk-E53W6UVQ.js.map +0 -1
  158. package/chunk-V5ZVB7RJ.js.map +0 -1
  159. package/chunk-V7A6ZFHR.js.map +0 -1
  160. package/computer-use-RRD7BCCK.js.map +0 -1
  161. package/connector-XX7UU6XE.js.map +0 -1
  162. package/credit-GDNNAQRO.js.map +0 -1
  163. package/developer-support-IISP5UBI.js.map +0 -1
  164. package/doctor-IZM2TJOH.js.map +0 -1
  165. package/feishu-XB7SQBSI.js.map +0 -1
  166. package/finance-OGWHKQLU.js.map +0 -1
  167. package/generate-AA2PVOYQ.js.map +0 -1
  168. package/github-VJVIBTVF.js.map +0 -1
  169. package/goal-7SYVHDTK.js.map +0 -1
  170. package/host-UVQMIOBA.js.map +0 -1
  171. package/logs-PIS4X24E.js.map +0 -1
  172. package/mail-L33OSQ2R.js.map +0 -1
  173. package/maps-D5XTXU5U.js.map +0 -1
  174. package/model-ZFMRECDM.js.map +0 -1
  175. package/model-provider-EZZ2DRYZ.js.map +0 -1
  176. package/people-search-PFTIO2QS.js.map +0 -1
  177. package/phone-6SG5ZUNL.js.map +0 -1
  178. package/recognize-LLU6J3SW.js.map +0 -1
  179. package/resource-FGUSXS4G.js.map +0 -1
  180. package/scrape-BAUZ2YFD.js.map +0 -1
  181. package/search-DLO5RXRM.js.map +0 -1
  182. package/slack-CVATPKP3.js.map +0 -1
  183. package/teams-ZZYO6YIK.js.map +0 -1
  184. package/telegram-VY7T4YAR.js.map +0 -1
  185. package/upgrade-GFA4ZUU4.js.map +0 -1
  186. package/video-STFG7BET.js.map +0 -1
  187. package/weather-ISJEHJWR.js.map +0 -1
  188. package/web-YN4CVHK7.js.map +0 -1
  189. package/web-search-PC7IECND.js.map +0 -1
  190. package/whoami-KXFXZGM6.js.map +0 -1
  191. package/workflow-O7YZHB7A.js.map +0 -1
  192. /package/{chunk-QC63TUJC.js.map → chunk-C62A6LD6.js.map} +0 -0
  193. /package/{chunk-5ZZI2LSO.js.map → chunk-GHKWW4NC.js.map} +0 -0
  194. /package/{chunk-BRV4D3P2.js.map → chunk-RUKMHBNQ.js.map} +0 -0
@@ -2,15 +2,14 @@
2
2
  import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
- ApiRequestError,
5
+ authHeadersSchema
6
+ } from "./chunk-JV6LM2YC.js";
7
+ import {
6
8
  apiErrorSchema,
7
9
  external_exports,
8
- getActiveToken,
9
- getBaseUrl,
10
- headersWithCliClientHeaders,
11
10
  initContract,
12
11
  modelProviderCodexRuntimeConfigSchema
13
- } from "./chunk-5ZZI2LSO.js";
12
+ } from "./chunk-GHKWW4NC.js";
14
13
  import {
15
14
  __commonJS,
16
15
  __esm,
@@ -606,59 +605,6 @@ var require_tr46 = __commonJS({
606
605
  }
607
606
  });
608
607
 
609
- // src/lib/api/domains/web.ts
610
- init_esm_shims();
611
- import { createWriteStream, readFileSync, statSync } from "fs";
612
- import { basename, extname } from "path";
613
- import { Readable } from "stream";
614
- import { pipeline } from "stream/promises";
615
- import { setTimeout as delay } from "timers/promises";
616
- import { Realtime } from "ably";
617
-
618
- // ../../packages/api-contracts/src/contracts/zero-avatar-video.ts
619
- init_esm_shims();
620
-
621
- // ../../packages/api-contracts/src/contracts/base.ts
622
- init_esm_shims();
623
- var MAX_DATE_TIMESTAMP_MS = 864e13;
624
- function rejectBlankQueryNumber(value) {
625
- if (typeof value === "string" && value.trim().length === 0) {
626
- return Number.NaN;
627
- }
628
- return value;
629
- }
630
- function isValidDateTimestamp(value) {
631
- return Number.isSafeInteger(value) && Math.abs(value) <= MAX_DATE_TIMESTAMP_MS;
632
- }
633
- var timestampQueryNumberSchema = external_exports.preprocess(
634
- rejectBlankQueryNumber,
635
- external_exports.coerce.number().refine(Number.isSafeInteger, {
636
- message: "Value must be a safe integer"
637
- }).refine(isValidDateTimestamp, {
638
- message: "Timestamp is out of range"
639
- })
640
- );
641
- var authHeadersSchema = external_exports.object({
642
- authorization: external_exports.string().optional()
643
- });
644
-
645
- // ../../packages/api-contracts/src/contracts/zero-built-in-generation.ts
646
- init_esm_shims();
647
-
648
- // ../../packages/api-contracts/src/contracts/realtime.ts
649
- init_esm_shims();
650
-
651
- // ../../packages/api-contracts/src/contracts/connector-identity.ts
652
- init_esm_shims();
653
- var CONNECTOR_SLUG_MAX_LENGTH = 64;
654
- var CONNECTOR_AUTH_METHOD_ID_MAX_LENGTH = 50;
655
- var connectorIdentityPattern = /^[a-z0-9][a-z0-9-]*$/u;
656
- var connectorSlugSchema = external_exports.string().min(1).max(CONNECTOR_SLUG_MAX_LENGTH).regex(connectorIdentityPattern);
657
- var connectorAuthMethodIdSchema = external_exports.string().min(1).max(CONNECTOR_AUTH_METHOD_ID_MAX_LENGTH).regex(connectorIdentityPattern);
658
-
659
- // ../../packages/api-contracts/src/contracts/runners.ts
660
- init_esm_shims();
661
-
662
608
  // ../../packages/connectors/src/firewall-types.ts
663
609
  init_esm_shims();
664
610
 
@@ -976,7 +922,25 @@ function isCanonicalIpv4Address(value) {
976
922
  });
977
923
  }
978
924
 
925
+ // ../../packages/api-contracts/src/contracts/zero-avatar-video.ts
926
+ init_esm_shims();
927
+
928
+ // ../../packages/api-contracts/src/contracts/zero-built-in-generation.ts
929
+ init_esm_shims();
930
+
931
+ // ../../packages/api-contracts/src/contracts/realtime.ts
932
+ init_esm_shims();
933
+
934
+ // ../../packages/api-contracts/src/contracts/connector-identity.ts
935
+ init_esm_shims();
936
+ var CONNECTOR_SLUG_MAX_LENGTH = 64;
937
+ var CONNECTOR_AUTH_METHOD_ID_MAX_LENGTH = 50;
938
+ var connectorIdentityPattern = /^[a-z0-9][a-z0-9-]*$/u;
939
+ var connectorSlugSchema = external_exports.string().min(1).max(CONNECTOR_SLUG_MAX_LENGTH).regex(connectorIdentityPattern);
940
+ var connectorAuthMethodIdSchema = external_exports.string().min(1).max(CONNECTOR_AUTH_METHOD_ID_MAX_LENGTH).regex(connectorIdentityPattern);
941
+
979
942
  // ../../packages/api-contracts/src/contracts/runners.ts
943
+ init_esm_shims();
980
944
  var c = initContract();
981
945
  var MIN_EPOCH_MS_TIMESTAMP = 1e12;
982
946
  var apiStartTimeSchema = external_exports.number().int().min(MIN_EPOCH_MS_TIMESTAMP);
@@ -1904,712 +1868,7 @@ var zeroAvatarVideoContract = c4.router({
1904
1868
  }
1905
1869
  });
1906
1870
 
1907
- // src/lib/api/domains/web.ts
1908
- var BUILT_IN_GENERATION_POLL_INTERVAL_MS = 2e3;
1909
- var BUILT_IN_GENERATION_WAIT_TIMEOUT_MS_BY_TYPE = {
1910
- image: 15 * 60 * 1e3,
1911
- video: 30 * 60 * 1e3,
1912
- presentation: 60 * 60 * 1e3,
1913
- website: 60 * 60 * 1e3
1914
- };
1915
- var ABLY_CONNECT_TIMEOUT_MS = 1e4;
1916
- var MIME_BY_EXTENSION = {
1917
- ".png": "image/png",
1918
- ".jpg": "image/jpeg",
1919
- ".jpeg": "image/jpeg",
1920
- ".gif": "image/gif",
1921
- ".webp": "image/webp",
1922
- ".avif": "image/avif",
1923
- ".svg": "image/svg+xml",
1924
- ".bmp": "image/bmp",
1925
- ".heic": "image/heic",
1926
- ".heif": "image/heif",
1927
- ".tif": "image/tiff",
1928
- ".tiff": "image/tiff",
1929
- ".psd": "image/vnd.adobe.photoshop",
1930
- ".mp4": "video/mp4",
1931
- ".webm": "video/webm",
1932
- ".mov": "video/quicktime",
1933
- ".aac": "audio/aac",
1934
- ".flac": "audio/flac",
1935
- ".m4a": "audio/mp4",
1936
- ".mp3": "audio/mpeg",
1937
- ".mpga": "audio/mpga",
1938
- ".oga": "audio/ogg",
1939
- ".ogg": "audio/ogg",
1940
- ".opus": "audio/opus",
1941
- ".wav": "audio/wav",
1942
- ".wave": "audio/wave",
1943
- ".pdf": "application/pdf",
1944
- ".txt": "text/plain",
1945
- ".csv": "text/csv",
1946
- ".md": "text/markdown",
1947
- ".html": "text/html",
1948
- ".htm": "text/html",
1949
- ".json": "application/json",
1950
- ".xml": "application/xml",
1951
- ".yaml": "application/yaml",
1952
- ".yml": "application/yaml",
1953
- ".tsv": "text/tab-separated-values",
1954
- ".doc": "application/msword",
1955
- ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
1956
- ".docm": "application/vnd.ms-word.document.macroenabled.12",
1957
- ".dotm": "application/vnd.ms-word.template.macroenabled.12",
1958
- ".dotx": "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
1959
- ".odt": "application/vnd.oasis.opendocument.text",
1960
- ".rtf": "application/rtf",
1961
- ".xls": "application/vnd.ms-excel",
1962
- ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
1963
- ".xlsb": "application/vnd.ms-excel.sheet.binary.macroenabled.12",
1964
- ".xlsm": "application/vnd.ms-excel.sheet.macroenabled.12",
1965
- ".xltm": "application/vnd.ms-excel.template.macroenabled.12",
1966
- ".xltx": "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
1967
- ".ods": "application/vnd.oasis.opendocument.spreadsheet",
1968
- ".ppt": "application/vnd.ms-powerpoint",
1969
- ".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
1970
- ".potm": "application/vnd.ms-powerpoint.template.macroenabled.12",
1971
- ".potx": "application/vnd.openxmlformats-officedocument.presentationml.template",
1972
- ".odp": "application/vnd.oasis.opendocument.presentation",
1973
- ".ppsx": "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
1974
- ".ppsm": "application/vnd.ms-powerpoint.slideshow.macroenabled.12",
1975
- ".pptm": "application/vnd.ms-powerpoint.presentation.macroenabled.12",
1976
- ".zip": "application/zip",
1977
- ".rar": "application/vnd.rar",
1978
- ".7z": "application/x-7z-compressed",
1979
- ".tar": "application/x-tar",
1980
- ".gz": "application/gzip",
1981
- ".tgz": "application/gzip",
1982
- ".bz2": "application/x-bzip2",
1983
- ".xz": "application/x-xz",
1984
- ".pages": "application/vnd.apple.pages",
1985
- ".numbers": "application/vnd.apple.numbers",
1986
- ".key": "application/vnd.apple.keynote",
1987
- ".parquet": "application/vnd.apache.parquet",
1988
- ".sqlite": "application/vnd.sqlite3",
1989
- ".sqlite3": "application/vnd.sqlite3",
1990
- ".db": "application/vnd.sqlite3",
1991
- ".epub": "application/epub+zip",
1992
- ".ai": "application/postscript"
1993
- };
1994
- function inferWebUploadContentType(localPath) {
1995
- const ext = extname(localPath).toLowerCase();
1996
- return MIME_BY_EXTENSION[ext] ?? "application/octet-stream";
1997
- }
1998
- async function downloadWebFile(fileId, outPath) {
1999
- const baseUrl = await getBaseUrl();
2000
- const token = await getActiveToken();
2001
- if (!token) {
2002
- throw new ApiRequestError("Not authenticated", "UNAUTHORIZED", 401);
2003
- }
2004
- const url = new URL("/api/zero/web/download-file", baseUrl);
2005
- url.searchParams.set("file_id", fileId);
2006
- const headers = {
2007
- Authorization: `Bearer ${token}`
2008
- };
2009
- const response = await fetch(url, {
2010
- headers: headersWithCliClientHeaders(headers)
2011
- });
2012
- if (!response.ok) {
2013
- let message = `Failed to download web file (HTTP ${response.status})`;
2014
- let code = "UNKNOWN";
2015
- try {
2016
- const body = await response.json();
2017
- if (body.error?.message) message = body.error.message;
2018
- if (body.error?.code) code = body.error.code;
2019
- } catch {
2020
- }
2021
- throw new ApiRequestError(message, code, response.status);
2022
- }
2023
- if (!response.body) {
2024
- throw new ApiRequestError(
2025
- "Web download response has no body",
2026
- "EMPTY_BODY",
2027
- 502
2028
- );
2029
- }
2030
- const mimetype = response.headers.get("x-file-mimetype") ?? response.headers.get("content-type") ?? "application/octet-stream";
2031
- await pipeline(
2032
- Readable.fromWeb(response.body),
2033
- createWriteStream(outPath)
2034
- );
2035
- const contentLengthHeader = response.headers.get("content-length");
2036
- const size = contentLengthHeader ? Number(contentLengthHeader) : 0;
2037
- return { path: outPath, mimetype, size };
2038
- }
2039
- function shouldIncludePayloadValue(value) {
2040
- if (value === void 0) {
2041
- return false;
2042
- }
2043
- return !Array.isArray(value) || value.length > 0;
2044
- }
2045
- function compactPayload(entries) {
2046
- return Object.fromEntries(
2047
- entries.filter(([, value]) => {
2048
- return shouldIncludePayloadValue(value);
2049
- })
2050
- );
2051
- }
2052
- function generateWebVideoPayload(options) {
2053
- return compactPayload([
2054
- ["prompt", options.prompt],
2055
- ["model", options.model],
2056
- ["aspectRatio", options.aspectRatio],
2057
- ["duration", options.duration],
2058
- ["resolution", options.resolution],
2059
- ["generateAudio", options.generateAudio],
2060
- ["negativePrompt", options.negativePrompt],
2061
- ["seed", options.seed],
2062
- ["autoFix", options.autoFix],
2063
- ["safetyTolerance", options.safetyTolerance],
2064
- ["imageUrls", options.imageUrls],
2065
- ["videoUrls", options.videoUrls],
2066
- ["audioUrls", options.audioUrls],
2067
- ["firstFrameImageUrl", options.firstFrameImageUrl],
2068
- ["lastFrameImageUrl", options.lastFrameImageUrl]
2069
- ]);
2070
- }
2071
- async function parseErrorBody(response, fallback) {
2072
- let message = `${fallback} (HTTP ${response.status})`;
2073
- let code = "UNKNOWN";
2074
- try {
2075
- const body = await response.json();
2076
- if (body.error?.message) message = body.error.message;
2077
- if (body.error?.code) code = body.error.code;
2078
- } catch {
2079
- }
2080
- return { message, code };
2081
- }
2082
- function authenticatedJsonHeaders(token) {
2083
- const headers = {
2084
- Authorization: `Bearer ${token}`,
2085
- "Content-Type": "application/json"
2086
- };
2087
- return headersWithCliClientHeaders(headers);
2088
- }
2089
- function isRecord(value) {
2090
- return typeof value === "object" && value !== null && !Array.isArray(value);
2091
- }
2092
- function isBuiltInGenerationAcceptedResponse(value) {
2093
- if (!isRecord(value)) {
2094
- return false;
2095
- }
2096
- return typeof value.generationId === "string" && value.status === "queued" && (value.type === "image" || value.type === "video" || value.type === "presentation" || value.type === "website") && isRecord(value.realtime);
2097
- }
2098
- function createBuiltInGenerationRealtime(accepted) {
2099
- let nextAuthRequest = accepted.realtime.tokenRequest;
2100
- const authCallback = (_params, callback) => {
2101
- const current = nextAuthRequest;
2102
- nextAuthRequest = accepted.realtime.tokenRequest;
2103
- callback(null, current);
2104
- };
2105
- return new Realtime({
2106
- authCallback,
2107
- autoConnect: true,
2108
- disconnectedRetryTimeout: 5e3,
2109
- suspendedRetryTimeout: 15e3
2110
- });
2111
- }
2112
- function waitForRealtimeConnected(ably, timeoutMs = ABLY_CONNECT_TIMEOUT_MS) {
2113
- if (ably.connection.state === "connected") {
2114
- return Promise.resolve();
2115
- }
2116
- if (ably.connection.state === "failed") {
2117
- return Promise.reject(new Error("Ably connection failed"));
2118
- }
2119
- return new Promise((resolve, reject) => {
2120
- const timer = setTimeout(() => {
2121
- reject(new Error("Timed out connecting to Ably"));
2122
- }, timeoutMs);
2123
- ably.connection.once("connected", () => {
2124
- clearTimeout(timer);
2125
- resolve();
2126
- });
2127
- ably.connection.once("failed", (stateChange) => {
2128
- clearTimeout(timer);
2129
- reject(
2130
- new Error(
2131
- `Ably connection failed: ${stateChange?.reason?.message ?? "unknown"}`
2132
- )
2133
- );
2134
- });
2135
- });
2136
- }
2137
- async function createBuiltInGenerationNotifier(accepted) {
2138
- const ably = createBuiltInGenerationRealtime(accepted);
2139
- try {
2140
- await waitForRealtimeConnected(ably);
2141
- const channel = ably.channels.get(accepted.realtime.channelName);
2142
- let pendingEvent = false;
2143
- let closed = false;
2144
- let wake = null;
2145
- const wakeWaiter = () => {
2146
- const current = wake;
2147
- wake = null;
2148
- current?.();
2149
- };
2150
- const onMessage = (_message) => {
2151
- if (wake) {
2152
- wakeWaiter();
2153
- return;
2154
- }
2155
- pendingEvent = true;
2156
- };
2157
- await channel.subscribe(accepted.realtime.eventName, onMessage);
2158
- return {
2159
- wait(timeoutMs) {
2160
- if (pendingEvent || closed || timeoutMs <= 0) {
2161
- pendingEvent = false;
2162
- return Promise.resolve();
2163
- }
2164
- return new Promise((resolve) => {
2165
- function done() {
2166
- clearTimeout(timer);
2167
- if (wake === done) {
2168
- wake = null;
2169
- }
2170
- resolve();
2171
- }
2172
- const timer = setTimeout(done, timeoutMs);
2173
- wake = done;
2174
- });
2175
- },
2176
- close() {
2177
- if (closed) {
2178
- return;
2179
- }
2180
- closed = true;
2181
- channel.unsubscribe(accepted.realtime.eventName, onMessage);
2182
- wakeWaiter();
2183
- ably.close();
2184
- }
2185
- };
2186
- } catch {
2187
- ably.close();
2188
- return null;
2189
- }
2190
- }
2191
- async function getBuiltInGenerationStatus(baseUrl, token, generationId) {
2192
- const response = await fetch(
2193
- new URL(`/api/zero/built-in-generations/${generationId}`, baseUrl),
2194
- { headers: authenticatedJsonHeaders(token) }
2195
- );
2196
- if (!response.ok) {
2197
- const { message, code } = await parseErrorBody(
2198
- response,
2199
- "Failed to get generation status"
2200
- );
2201
- throw new ApiRequestError(message, code, response.status);
2202
- }
2203
- return await response.json();
2204
- }
2205
- function readBuiltInGenerationResult(status, fallback) {
2206
- if (status.status === "completed") {
2207
- if (!status.result) {
2208
- throw new ApiRequestError(
2209
- `${fallback} returned no result`,
2210
- "EMPTY_RESULT",
2211
- 502
2212
- );
2213
- }
2214
- return status.result;
2215
- }
2216
- if (status.status === "failed") {
2217
- const code = status.error?.code ?? "GENERATION_FAILED";
2218
- throw new ApiRequestError(
2219
- status.error?.message ?? `${fallback} failed`,
2220
- code,
2221
- statusForBuiltInGenerationError(code)
2222
- );
2223
- }
2224
- return void 0;
2225
- }
2226
- function statusForBuiltInGenerationError(code) {
2227
- if (code === "BAD_REQUEST") {
2228
- return 400;
2229
- }
2230
- if (code === "INSUFFICIENT_CREDITS") {
2231
- return 402;
2232
- }
2233
- if (code === "NOT_CONFIGURED") {
2234
- return 503;
2235
- }
2236
- if (code === "GENERATION_TIMEOUT") {
2237
- return 504;
2238
- }
2239
- if (code.startsWith("BYTEPLUS_INVALID_PARAMETER") || code.startsWith("BYTEPLUS_INPUT_")) {
2240
- return 400;
2241
- }
2242
- if (code.startsWith("BYTEPLUS_")) {
2243
- return 502;
2244
- }
2245
- if (code.startsWith("NO_") || code.endsWith("_FAILED")) {
2246
- return 502;
2247
- }
2248
- return 500;
2249
- }
2250
- async function waitForBuiltInGenerationResult(args) {
2251
- let notifier = null;
2252
- let notifierCreated = false;
2253
- const startedAt = Date.now();
2254
- const timeoutMs = BUILT_IN_GENERATION_WAIT_TIMEOUT_MS_BY_TYPE[args.accepted.type];
2255
- try {
2256
- while (Date.now() - startedAt < timeoutMs) {
2257
- const status = await getBuiltInGenerationStatus(
2258
- args.baseUrl,
2259
- args.token,
2260
- args.accepted.generationId
2261
- );
2262
- const result = readBuiltInGenerationResult(status, args.fallback);
2263
- if (result) {
2264
- return result;
2265
- }
2266
- const elapsed = Date.now() - startedAt;
2267
- const remaining = timeoutMs - elapsed;
2268
- const waitMs = Math.min(BUILT_IN_GENERATION_POLL_INTERVAL_MS, remaining);
2269
- if (!notifierCreated) {
2270
- notifier = await createBuiltInGenerationNotifier(args.accepted);
2271
- notifierCreated = true;
2272
- }
2273
- if (notifier) {
2274
- await notifier.wait(waitMs);
2275
- } else {
2276
- await delay(waitMs);
2277
- }
2278
- }
2279
- } finally {
2280
- notifier?.close();
2281
- }
2282
- throw new ApiRequestError(
2283
- `${args.fallback} timed out (generationId: ${args.accepted.generationId})`,
2284
- "GENERATION_TIMEOUT",
2285
- 504
2286
- );
2287
- }
2288
- async function readBuiltInGenerationResponse(args) {
2289
- const body = await args.response.json();
2290
- if (isBuiltInGenerationAcceptedResponse(body)) {
2291
- return waitForBuiltInGenerationResult({
2292
- accepted: body,
2293
- baseUrl: args.baseUrl,
2294
- token: args.token,
2295
- fallback: args.fallback
2296
- });
2297
- }
2298
- if (args.response.status === 202) {
2299
- throw new ApiRequestError(
2300
- `${args.fallback} returned an invalid generation response`,
2301
- "INVALID_GENERATION_RESPONSE",
2302
- 502
2303
- );
2304
- }
2305
- return body;
2306
- }
2307
- async function uploadWebFile(localPath, options) {
2308
- const stats = statSync(localPath);
2309
- if (!stats.isFile()) {
2310
- throw new ApiRequestError(
2311
- `Not a regular file: ${localPath}`,
2312
- "BAD_REQUEST",
2313
- 400
2314
- );
2315
- }
2316
- const baseUrl = await getBaseUrl();
2317
- const token = await getActiveToken();
2318
- if (!token) {
2319
- throw new ApiRequestError("Not authenticated", "UNAUTHORIZED", 401);
2320
- }
2321
- const filename = basename(localPath);
2322
- const contentType = options?.contentType ?? inferWebUploadContentType(localPath);
2323
- const prepareHeaders = {
2324
- Authorization: `Bearer ${token}`,
2325
- "Content-Type": "application/json"
2326
- };
2327
- const prepareUrl = new URL("/api/zero/uploads/prepare", baseUrl);
2328
- const prepareRes = await fetch(prepareUrl, {
2329
- method: "POST",
2330
- headers: headersWithCliClientHeaders(prepareHeaders),
2331
- body: JSON.stringify({
2332
- filename,
2333
- contentType,
2334
- size: stats.size,
2335
- supportsUploadHeaders: true
2336
- })
2337
- });
2338
- if (!prepareRes.ok) {
2339
- const { message, code } = await parseErrorBody(
2340
- prepareRes,
2341
- "Failed to prepare upload"
2342
- );
2343
- throw new ApiRequestError(message, code, prepareRes.status);
2344
- }
2345
- const prepared = await prepareRes.json();
2346
- const bytes = readFileSync(localPath);
2347
- const putRes = await fetch(prepared.uploadUrl, {
2348
- method: "PUT",
2349
- headers: {
2350
- "Content-Type": prepared.contentType,
2351
- ...prepared.uploadHeaders
2352
- },
2353
- body: new Uint8Array(bytes)
2354
- });
2355
- if (!putRes.ok) {
2356
- throw new ApiRequestError(
2357
- `Failed to upload file to storage (HTTP ${putRes.status})`,
2358
- "UPLOAD_FAILED",
2359
- putRes.status
2360
- );
2361
- }
2362
- const completeUrl = new URL("/api/zero/uploads/complete", baseUrl);
2363
- const completeRes = await fetch(completeUrl, {
2364
- method: "POST",
2365
- headers: headersWithCliClientHeaders(prepareHeaders),
2366
- body: JSON.stringify({
2367
- id: prepared.id,
2368
- contentType: prepared.contentType
2369
- })
2370
- });
2371
- if (!completeRes.ok) {
2372
- const { message, code } = await parseErrorBody(
2373
- completeRes,
2374
- "Failed to complete upload"
2375
- );
2376
- throw new ApiRequestError(message, code, completeRes.status);
2377
- }
2378
- const completed = await completeRes.json();
2379
- return {
2380
- id: completed.id,
2381
- filename: completed.filename,
2382
- contentType: completed.contentType,
2383
- size: completed.size,
2384
- url: completed.url
2385
- };
2386
- }
2387
- async function generateWebVoice(options) {
2388
- const baseUrl = await getBaseUrl();
2389
- const token = await getActiveToken();
2390
- if (!token) {
2391
- throw new ApiRequestError("Not authenticated", "UNAUTHORIZED", 401);
2392
- }
2393
- const headers = {
2394
- Authorization: `Bearer ${token}`,
2395
- "Content-Type": "application/json"
2396
- };
2397
- const response = await fetch(new URL("/api/zero/voice-io/speech", baseUrl), {
2398
- method: "POST",
2399
- headers: headersWithCliClientHeaders(headers),
2400
- body: JSON.stringify({
2401
- text: options.text,
2402
- ...options.voice ? { voice: options.voice } : {},
2403
- ...options.instructions ? { instructions: options.instructions } : {}
2404
- })
2405
- });
2406
- if (!response.ok) {
2407
- const { message, code } = await parseErrorBody(
2408
- response,
2409
- "Failed to generate voice"
2410
- );
2411
- throw new ApiRequestError(message, code, response.status);
2412
- }
2413
- return await response.json();
2414
- }
2415
- async function generateWebImage(options) {
2416
- const baseUrl = await getBaseUrl();
2417
- const token = await getActiveToken();
2418
- if (!token) {
2419
- throw new ApiRequestError("Not authenticated", "UNAUTHORIZED", 401);
2420
- }
2421
- const headers = {
2422
- Authorization: `Bearer ${token}`,
2423
- "Content-Type": "application/json"
2424
- };
2425
- const response = await fetch(
2426
- new URL("/api/zero/image-io/generate", baseUrl),
2427
- {
2428
- method: "POST",
2429
- headers: headersWithCliClientHeaders(headers),
2430
- body: JSON.stringify({
2431
- prompt: options.prompt,
2432
- ...options.model ? { model: options.model } : {},
2433
- ...options.size ? { size: options.size } : {},
2434
- ...options.quality ? { quality: options.quality } : {},
2435
- ...options.background ? { background: options.background } : {},
2436
- ...options.outputFormat ? { outputFormat: options.outputFormat } : {},
2437
- ...options.outputCompression !== void 0 ? { outputCompression: options.outputCompression } : {},
2438
- ...options.moderation ? { moderation: options.moderation } : {},
2439
- ...options.seed !== void 0 ? { seed: options.seed } : {},
2440
- ...options.safetyTolerance ? { safetyTolerance: options.safetyTolerance } : {},
2441
- ...options.enhancePrompt !== void 0 ? { enhancePrompt: options.enhancePrompt } : {},
2442
- ...options.imageUrls && options.imageUrls.length > 0 ? { imageUrls: options.imageUrls } : {},
2443
- ...options.maskImageUrl ? { maskImageUrl: options.maskImageUrl } : {},
2444
- ...options.inputFidelity ? { inputFidelity: options.inputFidelity } : {},
2445
- ...options.imagePromptStrength !== void 0 ? { imagePromptStrength: options.imagePromptStrength } : {}
2446
- })
2447
- }
2448
- );
2449
- if (!response.ok) {
2450
- const { message, code } = await parseErrorBody(
2451
- response,
2452
- "Failed to generate image"
2453
- );
2454
- throw new ApiRequestError(message, code, response.status);
2455
- }
2456
- return readBuiltInGenerationResponse({
2457
- response,
2458
- baseUrl,
2459
- token,
2460
- fallback: "Failed to generate image"
2461
- });
2462
- }
2463
- async function generateWebVideo(options) {
2464
- const baseUrl = await getBaseUrl();
2465
- const token = await getActiveToken();
2466
- if (!token) {
2467
- throw new ApiRequestError("Not authenticated", "UNAUTHORIZED", 401);
2468
- }
2469
- const headers = {
2470
- Authorization: `Bearer ${token}`,
2471
- "Content-Type": "application/json"
2472
- };
2473
- const response = await fetch(
2474
- new URL("/api/zero/video-io/generate", baseUrl),
2475
- {
2476
- method: "POST",
2477
- headers: headersWithCliClientHeaders(headers),
2478
- body: JSON.stringify(generateWebVideoPayload(options))
2479
- }
2480
- );
2481
- if (!response.ok) {
2482
- const { message, code } = await parseErrorBody(
2483
- response,
2484
- "Failed to generate video"
2485
- );
2486
- throw new ApiRequestError(message, code, response.status);
2487
- }
2488
- return readBuiltInGenerationResponse({
2489
- response,
2490
- baseUrl,
2491
- token,
2492
- fallback: "Failed to generate video"
2493
- });
2494
- }
2495
- async function generateWebAvatarVideo(options) {
2496
- const baseUrl = await getBaseUrl();
2497
- const token = await getActiveToken();
2498
- if (!token) {
2499
- throw new ApiRequestError("Not authenticated", "UNAUTHORIZED", 401);
2500
- }
2501
- const response = await fetch(
2502
- new URL("/api/zero/avatar-video/generate", baseUrl),
2503
- {
2504
- method: "POST",
2505
- headers: headersWithCliClientHeaders({
2506
- Authorization: `Bearer ${token}`,
2507
- "Content-Type": "application/json"
2508
- }),
2509
- body: JSON.stringify(options)
2510
- }
2511
- );
2512
- if (!response.ok) {
2513
- const { message, code } = await parseErrorBody(
2514
- response,
2515
- "Failed to generate avatar video"
2516
- );
2517
- throw new ApiRequestError(message, code, response.status);
2518
- }
2519
- return readBuiltInGenerationResponse({
2520
- response,
2521
- baseUrl,
2522
- token,
2523
- fallback: "Failed to generate avatar video"
2524
- });
2525
- }
2526
- function avatarVideoCollectionUrl(baseUrl, collection, query) {
2527
- const url = new URL(`/api/zero/avatar-video/${collection}`, baseUrl);
2528
- for (const [key, value] of Object.entries(query)) {
2529
- if (value !== void 0) {
2530
- url.searchParams.set(key, String(value));
2531
- }
2532
- }
2533
- return url;
2534
- }
2535
- async function getAvatarVideoCollection(url, fallback) {
2536
- const token = await getActiveToken();
2537
- if (!token) {
2538
- throw new ApiRequestError("Not authenticated", "UNAUTHORIZED", 401);
2539
- }
2540
- const response = await fetch(url, {
2541
- headers: headersWithCliClientHeaders({
2542
- Authorization: `Bearer ${token}`
2543
- })
2544
- });
2545
- if (!response.ok) {
2546
- const { message, code } = await parseErrorBody(response, fallback);
2547
- throw new ApiRequestError(message, code, response.status);
2548
- }
2549
- return await response.json();
2550
- }
2551
- async function listWebAvatarVideoAvatars(query) {
2552
- const baseUrl = await getBaseUrl();
2553
- return zeroAvatarVideoAvatarsResponseSchema.parse(
2554
- await getAvatarVideoCollection(
2555
- avatarVideoCollectionUrl(baseUrl, "avatars", query),
2556
- "Failed to list JoggAI avatars"
2557
- )
2558
- );
2559
- }
2560
- async function listWebAvatarVideoVoices(query) {
2561
- const baseUrl = await getBaseUrl();
2562
- return zeroAvatarVideoVoicesResponseSchema.parse(
2563
- await getAvatarVideoCollection(
2564
- avatarVideoCollectionUrl(baseUrl, "voices", query),
2565
- "Failed to list JoggAI voices"
2566
- )
2567
- );
2568
- }
2569
- async function transcribeAudio(audioPath, options = {}) {
2570
- const baseUrl = await getBaseUrl();
2571
- const token = await getActiveToken();
2572
- if (!token) {
2573
- throw new ApiRequestError("Not authenticated", "UNAUTHORIZED", 401);
2574
- }
2575
- const headers = {
2576
- Authorization: `Bearer ${token}`
2577
- };
2578
- const url = new URL("/api/zero/voice-io/stt", baseUrl);
2579
- if (options.verbose) {
2580
- url.searchParams.set("verbose", "true");
2581
- }
2582
- const audioData = readFileSync(audioPath);
2583
- const filename = basename(audioPath);
2584
- const ext = extname(filename).toLowerCase();
2585
- const mimeMap = {
2586
- ".mp3": "audio/mpeg",
2587
- ".mp4": "audio/mp4",
2588
- ".m4a": "audio/m4a",
2589
- ".wav": "audio/wav",
2590
- ".webm": "audio/webm"
2591
- };
2592
- const mimeType = mimeMap[ext] ?? "audio/mpeg";
2593
- const formData = new FormData();
2594
- formData.append("file", new Blob([audioData], { type: mimeType }), filename);
2595
- const response = await fetch(url, {
2596
- method: "POST",
2597
- headers: headersWithCliClientHeaders(headers),
2598
- body: formData
2599
- });
2600
- if (!response.ok) {
2601
- const { message, code } = await parseErrorBody(
2602
- response,
2603
- "Transcription failed"
2604
- );
2605
- throw new ApiRequestError(message, code, response.status);
2606
- }
2607
- return await response.json();
2608
- }
2609
-
2610
1871
  export {
2611
- timestampQueryNumberSchema,
2612
- authHeadersSchema,
2613
1872
  firewallsSchema,
2614
1873
  executionFirewallBuiltinEntrySchema,
2615
1874
  UNKNOWN_PERMISSION_GRANT,
@@ -2626,15 +1885,7 @@ export {
2626
1885
  zeroBuiltInGenerationAcceptedResponseSchema,
2627
1886
  avatarVideoAspectRatioSchema,
2628
1887
  avatarVideoVoiceIdSchema,
2629
- inferWebUploadContentType,
2630
- downloadWebFile,
2631
- uploadWebFile,
2632
- generateWebVoice,
2633
- generateWebImage,
2634
- generateWebVideo,
2635
- generateWebAvatarVideo,
2636
- listWebAvatarVideoAvatars,
2637
- listWebAvatarVideoVoices,
2638
- transcribeAudio
1888
+ zeroAvatarVideoAvatarsResponseSchema,
1889
+ zeroAvatarVideoVoicesResponseSchema
2639
1890
  };
2640
- //# sourceMappingURL=chunk-V7A6ZFHR.js.map
1891
+ //# sourceMappingURL=chunk-SMPSKBAP.js.map