@opencode-ai/cli-linux-x64-baseline 0.0.0-beta-202606050000

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 (137) hide show
  1. package/bin/chunk-01tb5qes.js.map +131 -0
  2. package/bin/chunk-06d8aa69.js.map +10 -0
  3. package/bin/chunk-07w2xsfy.js.map +50 -0
  4. package/bin/chunk-0azwkk9z.js.map +12 -0
  5. package/bin/chunk-0d9ja06r.js.map +9 -0
  6. package/bin/chunk-14kv2kjk.js.map +13 -0
  7. package/bin/chunk-17j53wgt.js.map +11 -0
  8. package/bin/chunk-191djt7z.js.map +113 -0
  9. package/bin/chunk-1brm44vt.js.map +10 -0
  10. package/bin/chunk-1jb1dn9p.js.map +10 -0
  11. package/bin/chunk-1paeax4j.js.map +56 -0
  12. package/bin/chunk-1wb39pye.js.map +9 -0
  13. package/bin/chunk-2mjmecen.js.map +10 -0
  14. package/bin/chunk-2wqpg9fb.js.map +10 -0
  15. package/bin/chunk-32ewzcjk.js.map +10 -0
  16. package/bin/chunk-334z6v35.js.map +9 -0
  17. package/bin/chunk-3jqjf0hd.js.map +10 -0
  18. package/bin/chunk-3n6vddyq.js.map +73 -0
  19. package/bin/chunk-3zmvhepw.js.map +10 -0
  20. package/bin/chunk-4980h0t7.js.map +37 -0
  21. package/bin/chunk-4q5k6a0e.js.map +10 -0
  22. package/bin/chunk-5ft9zwf9.js.map +10 -0
  23. package/bin/chunk-6ttpn29p.js.map +10 -0
  24. package/bin/chunk-7fvpf4bs.js.map +10 -0
  25. package/bin/chunk-7vb6kdat.js.map +10 -0
  26. package/bin/chunk-84amh6xf.js.map +11 -0
  27. package/bin/chunk-8akfq1ty.js.map +19 -0
  28. package/bin/chunk-8rd9r1gb.js.map +11 -0
  29. package/bin/chunk-8x80qvzn.js.map +10 -0
  30. package/bin/chunk-943th5qs.js.map +10 -0
  31. package/bin/chunk-94yf089p.js.map +10 -0
  32. package/bin/chunk-98cxndhz.js.map +9 -0
  33. package/bin/chunk-9f8tmby0.js.map +9 -0
  34. package/bin/chunk-9fbstsnw.js.map +9 -0
  35. package/bin/chunk-9hq8aywf.js.map +10 -0
  36. package/bin/chunk-9m7hf7ms.js.map +10 -0
  37. package/bin/chunk-9vf55fj3.js.map +10 -0
  38. package/bin/chunk-9w9rk9en.js.map +20 -0
  39. package/bin/chunk-9y4hgfns.js.map +10 -0
  40. package/bin/chunk-aag5p1fp.js.map +10 -0
  41. package/bin/chunk-axy1v6wd.js.map +27 -0
  42. package/bin/chunk-bj9msmj2.js.map +10 -0
  43. package/bin/chunk-bt0r89ee.js.map +9 -0
  44. package/bin/chunk-c2gsyspz.js.map +10 -0
  45. package/bin/chunk-c8hr0q5n.js.map +10 -0
  46. package/bin/chunk-cab6ccj0.js.map +10 -0
  47. package/bin/chunk-ck4nkjtx.js.map +193 -0
  48. package/bin/chunk-cvm4kr56.js.map +23 -0
  49. package/bin/chunk-cyb9bpgm.js.map +10 -0
  50. package/bin/chunk-d1p8awq6.js.map +10 -0
  51. package/bin/chunk-d6nz1m6v.js.map +10 -0
  52. package/bin/chunk-d9g5798m.js.map +81 -0
  53. package/bin/chunk-dcn0azxw.js.map +10 -0
  54. package/bin/chunk-dd9pfwmr.js.map +10 -0
  55. package/bin/chunk-dk4qekzk.js.map +10 -0
  56. package/bin/chunk-dk9tgwkh.js.map +9 -0
  57. package/bin/chunk-dzzhxh1c.js.map +10 -0
  58. package/bin/chunk-efsmps94.js.map +9 -0
  59. package/bin/chunk-fdw7znt6.js.map +11 -0
  60. package/bin/chunk-fs6t8jdg.js.map +10 -0
  61. package/bin/chunk-fzcqzwx5.js.map +10 -0
  62. package/bin/chunk-g4fcmhkj.js.map +11 -0
  63. package/bin/chunk-g4ff66n8.js.map +10 -0
  64. package/bin/chunk-g8mpn6ke.js.map +11 -0
  65. package/bin/chunk-gahs293a.js.map +10 -0
  66. package/bin/chunk-gh9dcqbv.js.map +10 -0
  67. package/bin/chunk-grvxd8zq.js.map +10 -0
  68. package/bin/chunk-gv6nagng.js.map +10 -0
  69. package/bin/chunk-h1vz14ze.js.map +167 -0
  70. package/bin/chunk-hav16yge.js.map +10 -0
  71. package/bin/chunk-hp5nnq6f.js.map +11 -0
  72. package/bin/chunk-hrcbafh3.js.map +9 -0
  73. package/bin/chunk-hxfsfpek.js.map +10 -0
  74. package/bin/chunk-jcqp2wmf.js.map +10 -0
  75. package/bin/chunk-jt9t8203.js.map +9 -0
  76. package/bin/chunk-k0980eb5.js.map +10 -0
  77. package/bin/chunk-kghptcgb.js.map +9 -0
  78. package/bin/chunk-kkvk5eez.js.map +10 -0
  79. package/bin/chunk-kv0b3sh5.js.map +10 -0
  80. package/bin/chunk-kvfs5rat.js.map +10 -0
  81. package/bin/chunk-mf0qqhvb.js.map +10 -0
  82. package/bin/chunk-mkze6twx.js.map +10 -0
  83. package/bin/chunk-mzjs3qj3.js.map +10 -0
  84. package/bin/chunk-n10mj2m3.js.map +17 -0
  85. package/bin/chunk-n2fbt143.js.map +9 -0
  86. package/bin/chunk-n6a0rctn.js.map +9 -0
  87. package/bin/chunk-nd3yv9bg.js.map +388 -0
  88. package/bin/chunk-njn9a3jp.js.map +13 -0
  89. package/bin/chunk-nkhzpsnk.js.map +13 -0
  90. package/bin/chunk-ny5cyeha.js.map +10 -0
  91. package/bin/chunk-p3nkd9t2.js.map +10 -0
  92. package/bin/chunk-p3pr1t3k.js.map +10 -0
  93. package/bin/chunk-p7j7e7hb.js.map +10 -0
  94. package/bin/chunk-p89bk96c.js.map +10 -0
  95. package/bin/chunk-pnkd37ss.js.map +20 -0
  96. package/bin/chunk-prat77ba.js.map +577 -0
  97. package/bin/chunk-q6nf6fka.js.map +10 -0
  98. package/bin/chunk-qbpebjh2.js.map +10 -0
  99. package/bin/chunk-qzx2gre7.js.map +13 -0
  100. package/bin/chunk-r55kafff.js.map +9 -0
  101. package/bin/chunk-rrwp4x01.js.map +10 -0
  102. package/bin/chunk-rt02k446.js.map +11 -0
  103. package/bin/chunk-s39nwv01.js.map +9 -0
  104. package/bin/chunk-s983v0dp.js.map +10 -0
  105. package/bin/chunk-san15sca.js.map +10 -0
  106. package/bin/chunk-sfk73pp2.js.map +10 -0
  107. package/bin/chunk-sjd3wbjd.js.map +10 -0
  108. package/bin/chunk-swbdmja3.js.map +10 -0
  109. package/bin/chunk-tc8tvjey.js.map +33 -0
  110. package/bin/chunk-tcqtz83b.js.map +10 -0
  111. package/bin/chunk-tgxxchfy.js.map +28 -0
  112. package/bin/chunk-tvxakxv2.js.map +10 -0
  113. package/bin/chunk-v81ta3tx.js.map +15 -0
  114. package/bin/chunk-va2h4xya.js.map +37 -0
  115. package/bin/chunk-vezq3hc4.js.map +9 -0
  116. package/bin/chunk-vmbpvmpg.js.map +10 -0
  117. package/bin/chunk-w7p62pb6.js.map +17 -0
  118. package/bin/chunk-wr4x72qd.js.map +13 -0
  119. package/bin/chunk-x3ywttp7.js.map +10 -0
  120. package/bin/chunk-x988wmrk.js.map +10 -0
  121. package/bin/chunk-x9zjg1f7.js.map +20 -0
  122. package/bin/chunk-xaqrhtz6.js.map +10 -0
  123. package/bin/chunk-xd2mrkwy.js.map +10 -0
  124. package/bin/chunk-xfh2377b.js.map +10 -0
  125. package/bin/chunk-xs0ras4j.js.map +51 -0
  126. package/bin/chunk-xt7ap9fb.js.map +10 -0
  127. package/bin/chunk-xya5qk3h.js.map +16 -0
  128. package/bin/chunk-yg7w4jgd.js.map +10 -0
  129. package/bin/chunk-yhpv46tb.js.map +20 -0
  130. package/bin/chunk-ymy66kr8.js.map +15 -0
  131. package/bin/chunk-yx4z6xsb.js.map +11 -0
  132. package/bin/chunk-yymwxqpy.js.map +10 -0
  133. package/bin/chunk-z70c75xe.js.map +11 -0
  134. package/bin/chunk-zkqyr3hc.js.map +10 -0
  135. package/bin/index.js.map +12 -0
  136. package/bin/lildax +0 -0
  137. package/package.json +15 -0
@@ -0,0 +1,193 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/tslib.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/utils/uuid.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/errors.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/core/error.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/utils/values.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/utils/sleep.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/version.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/shims.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/request-options.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/utils/bytes.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/decoders/line.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/utils/log.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/core/streaming.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/parse.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/core/api-promise.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/core/pagination.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/uploads.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/to-file.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/core/resource.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/headers.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/utils/path.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/resources/beta/files.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/resources/beta/models.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/constants.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/lib/beta-parser.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/_vendor/partial-json-parser/parser.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/lib/tools/CompactionControl.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/resources/completions.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/resources/messages/batches.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/resources/messages/messages.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/resources/models.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/internal/utils/env.mjs", "../../node_modules/.bun/@anthropic-ai+sdk@0.71.2+27912429049419a2/node_modules/@anthropic-ai/sdk/client.mjs", "../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/util.js", "../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/ZodError.js", "../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/locales/en.js", "../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/errors.js", "../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js", "../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js", "../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/types.js", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/tslib.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/utils/uuid.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/errors.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/core/error.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/utils/values.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/utils/sleep.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/version.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/detect-platform.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/shims.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/request-options.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/qs/formats.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/qs/utils.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/qs/stringify.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/utils/query.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/utils/bytes.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/decoders/line.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/utils/log.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/core/streaming.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/parse.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/core/api-promise.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/core/pagination.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/auth/workload-identity-auth.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/uploads.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/to-file.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/core/resource.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/utils/path.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/chat/completions/messages.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/lib/parser.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/lib/chatCompletionUtils.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/lib/EventStream.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/lib/RunnableFunction.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/lib/AbstractChatCompletionRunner.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/lib/ChatCompletionRunner.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/_vendor/partial-json-parser/parser.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/lib/ChatCompletionStream.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/lib/ChatCompletionStreamingRunner.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/chat/completions/completions.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/chat/chat.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/admin-api-keys.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/audit-logs.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/certificates.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/data-retention.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/invites.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/roles.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/spend-alerts.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/usage.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/groups/roles.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/groups/users.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/groups/groups.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/projects/api-keys.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/projects/certificates.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/projects/data-retention.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/projects/hosted-tool-permissions.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/projects/model-permissions.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/projects/rate-limits.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/projects/roles.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/projects/service-accounts.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/projects/spend-alerts.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/projects/groups/roles.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/projects/groups/groups.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/projects/users/roles.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/projects/users/users.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/projects/projects.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/users/roles.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/users/users.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/organization/organization.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/admin/admin.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/headers.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/audio/speech.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/audio/transcriptions.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/audio/translations.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/audio/audio.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/batches.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/beta/assistants.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/beta/realtime/sessions.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/beta/realtime/transcription-sessions.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/beta/realtime/realtime.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/beta/chatkit/sessions.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/beta/chatkit/threads.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/beta/chatkit/chatkit.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/beta/threads/messages.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/beta/threads/runs/steps.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/utils/base64.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/internal/utils/env.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/lib/AssistantStream.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/beta/threads/runs/runs.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/beta/threads/threads.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/beta/beta.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/completions.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/containers/files/content.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/containers/files/files.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/containers/containers.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/conversations/items.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/conversations/conversations.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/embeddings.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/evals/runs/output-items.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/evals/runs/runs.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/evals/evals.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/files.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/fine-tuning/methods.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/fine-tuning/alpha/graders.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/fine-tuning/alpha/alpha.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/fine-tuning/jobs/jobs.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/fine-tuning/fine-tuning.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/graders/grader-models.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/graders/graders.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/images.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/models.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/moderations.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/realtime/calls.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/realtime/client-secrets.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/realtime/realtime.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/lib/ResponsesParser.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/lib/responses/ResponseStream.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/responses/input-items.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/responses/input-tokens.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/responses/responses.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/skills/content.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/skills/versions/content.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/skills/versions/versions.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/skills/skills.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/uploads/parts.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/uploads/uploads.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/lib/Util.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/vector-stores/file-batches.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/vector-stores/files.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/vector-stores/vector-stores.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/videos.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/resources/webhooks/webhooks.mjs", "../../node_modules/.bun/openai@6.39.1+cf0d6ffc04b17afe/node_modules/openai/client.mjs", "../../node_modules/.bun/gitlab-ai-provider@6.8.0+6dfbf2eb88514315/node_modules/gitlab-ai-provider/dist/index.mjs"],
4
+ "sourcesContent": [
5
+ "function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n",
6
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map",
7
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map",
8
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class AnthropicError extends Error {\n}\nexport class APIError extends AnthropicError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('request-id');\n this.error = error;\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse;\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\n//# sourceMappingURL=error.mjs.map",
9
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { AnthropicError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new AnthropicError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new AnthropicError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new AnthropicError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new AnthropicError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new AnthropicError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n// Gets a value from an object, deletes the key, and returns the value (or undefined if not found)\nexport const pop = (obj, key) => {\n const value = obj[key];\n delete obj[key];\n return value;\n};\n//# sourceMappingURL=values.mjs.map",
10
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map",
11
+ "export const VERSION = '0.71.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map",
12
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map",
13
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map",
14
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map",
15
+ "export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map",
16
+ "var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map",
17
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'x-api-key' ||\n name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map",
18
+ "var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { AnthropicError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { safeJSON } from \"../internal/utils/values.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new AnthropicError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (sse.event === 'completion') {\n try {\n yield JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n }\n if (sse.event === 'message_start' ||\n sse.event === 'message_delta' ||\n sse.event === 'message_stop' ||\n sse.event === 'content_block_start' ||\n sse.event === 'content_block_delta' ||\n sse.event === 'content_block_stop') {\n try {\n yield JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n }\n if (sse.event === 'ping') {\n continue;\n }\n if (sse.event === 'error') {\n throw new APIError(undefined, safeJSON(sse.data) ?? sse.data, undefined, response.headers);\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new AnthropicError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new AnthropicError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new AnthropicError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map",
19
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream<T>`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller);\n }\n return Stream.fromSSEResponse(response, props.controller);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map",
20
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the `request-id` header which is useful for debugging requests and resporting\n * issues to Anthropic.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map",
21
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { AnthropicError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new AnthropicError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.first_id = body.first_id || null;\n this.last_id = body.last_id || null;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n if (this.options.query?.['before_id']) {\n // in reverse\n const first_id = this.first_id;\n if (!first_id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n before_id: first_id,\n },\n };\n }\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after_id: cursor,\n },\n };\n }\n}\nexport class TokenPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.next_page = body.next_page || null;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.next_page;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n page_token: cursor,\n },\n };\n }\n}\nexport class PageCursor extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.next_page = body.next_page || null;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.next_page;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n page: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map",
22
+ "import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n let options = {};\n const contentType = value.headers.get('Content-Type');\n if (contentType) {\n options = { type: contentType };\n }\n form.append(key, makeFile([await value.blob()], getName(value), options));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, makeFile([value], getName(value), { type: value.type }));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map",
23
+ "import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, BlobLikePart, or AsyncIterable of BlobLikeParts\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n name || (name = getName(value));\n // If we've been given a `File` we don't need to do anything if the name / options\n // have not been customised.\n if (isFileLike(value)) {\n if (value instanceof File && name == null && options == null) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], name ?? value.name, {\n type: value.type,\n lastModified: value.lastModified,\n ...options,\n });\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map",
24
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map",
25
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = Symbol.for('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map",
26
+ "import { AnthropicError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new AnthropicError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map",
27
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * List Files\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fileMetadata of client.beta.files.list()) {\n * // ...\n * }\n * ```\n */\n list(params = {}, options) {\n const { betas, ...query } = params ?? {};\n return this._client.getAPIList('/v1/files', (Page), {\n query,\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'files-api-2025-04-14'].toString() },\n options?.headers,\n ]),\n });\n }\n /**\n * Delete File\n *\n * @example\n * ```ts\n * const deletedFile = await client.beta.files.delete(\n * 'file_id',\n * );\n * ```\n */\n delete(fileID, params = {}, options) {\n const { betas } = params ?? {};\n return this._client.delete(path `/v1/files/${fileID}`, {\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'files-api-2025-04-14'].toString() },\n options?.headers,\n ]),\n });\n }\n /**\n * Download File\n *\n * @example\n * ```ts\n * const response = await client.beta.files.download(\n * 'file_id',\n * );\n *\n * const content = await response.blob();\n * console.log(content);\n * ```\n */\n download(fileID, params = {}, options) {\n const { betas } = params ?? {};\n return this._client.get(path `/v1/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([\n {\n 'anthropic-beta': [...(betas ?? []), 'files-api-2025-04-14'].toString(),\n Accept: 'application/binary',\n },\n options?.headers,\n ]),\n __binaryResponse: true,\n });\n }\n /**\n * Get File Metadata\n *\n * @example\n * ```ts\n * const fileMetadata =\n * await client.beta.files.retrieveMetadata('file_id');\n * ```\n */\n retrieveMetadata(fileID, params = {}, options) {\n const { betas } = params ?? {};\n return this._client.get(path `/v1/files/${fileID}`, {\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'files-api-2025-04-14'].toString() },\n options?.headers,\n ]),\n });\n }\n /**\n * Upload File\n *\n * @example\n * ```ts\n * const fileMetadata = await client.beta.files.upload({\n * file: fs.createReadStream('path/to/file'),\n * });\n * ```\n */\n upload(params, options) {\n const { betas, ...body } = params;\n return this._client.post('/v1/files', multipartFormRequestOptions({\n body,\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'files-api-2025-04-14'].toString() },\n options?.headers,\n ]),\n }, this._client));\n }\n}\n//# sourceMappingURL=files.mjs.map",
28
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Get a specific model.\n *\n * The Models API response can be used to determine information about a specific\n * model or resolve a model alias to a model ID.\n *\n * @example\n * ```ts\n * const betaModelInfo = await client.beta.models.retrieve(\n * 'model_id',\n * );\n * ```\n */\n retrieve(modelID, params = {}, options) {\n const { betas } = params ?? {};\n return this._client.get(path `/v1/models/${modelID}?beta=true`, {\n ...options,\n headers: buildHeaders([\n { ...(betas?.toString() != null ? { 'anthropic-beta': betas?.toString() } : undefined) },\n options?.headers,\n ]),\n });\n }\n /**\n * List available models.\n *\n * The Models API response can be used to determine which models are available for\n * use in the API. More recently released models are listed first.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const betaModelInfo of client.beta.models.list()) {\n * // ...\n * }\n * ```\n */\n list(params = {}, options) {\n const { betas, ...query } = params ?? {};\n return this._client.getAPIList('/v1/models?beta=true', (Page), {\n query,\n ...options,\n headers: buildHeaders([\n { ...(betas?.toString() != null ? { 'anthropic-beta': betas?.toString() } : undefined) },\n options?.headers,\n ]),\n });\n }\n}\n//# sourceMappingURL=models.mjs.map",
29
+ "// File containing shared constants\n/**\n * Model-specific timeout constraints for non-streaming requests\n */\nexport const MODEL_NONSTREAMING_TOKENS = {\n 'claude-opus-4-20250514': 8192,\n 'claude-opus-4-0': 8192,\n 'claude-4-opus-20250514': 8192,\n 'anthropic.claude-opus-4-20250514-v1:0': 8192,\n 'claude-opus-4@20250514': 8192,\n 'claude-opus-4-1-20250805': 8192,\n 'anthropic.claude-opus-4-1-20250805-v1:0': 8192,\n 'claude-opus-4-1@20250805': 8192,\n};\n//# sourceMappingURL=constants.mjs.map",
30
+ "import { AnthropicError } from \"../core/error.mjs\";\nexport function maybeParseBetaMessage(message, params, opts) {\n if (!params || !('parse' in (params.output_format ?? {}))) {\n return {\n ...message,\n content: message.content.map((block) => {\n if (block.type === 'text') {\n const parsedBlock = Object.defineProperty({ ...block }, 'parsed_output', {\n value: null,\n enumerable: false,\n });\n return Object.defineProperty(parsedBlock, 'parsed', {\n get() {\n opts.logger.warn('The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead.');\n return null;\n },\n enumerable: false,\n });\n }\n return block;\n }),\n parsed_output: null,\n };\n }\n return parseBetaMessage(message, params, opts);\n}\nexport function parseBetaMessage(message, params, opts) {\n let firstParsedOutput = null;\n const content = message.content.map((block) => {\n if (block.type === 'text') {\n const parsedOutput = parseBetaOutputFormat(params, block.text);\n if (firstParsedOutput === null) {\n firstParsedOutput = parsedOutput;\n }\n const parsedBlock = Object.defineProperty({ ...block }, 'parsed_output', {\n value: parsedOutput,\n enumerable: false,\n });\n return Object.defineProperty(parsedBlock, 'parsed', {\n get() {\n opts.logger.warn('The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead.');\n return parsedOutput;\n },\n enumerable: false,\n });\n }\n return block;\n });\n return {\n ...message,\n content,\n parsed_output: firstParsedOutput,\n };\n}\nfunction parseBetaOutputFormat(params, content) {\n if (params.output_format?.type !== 'json_schema') {\n return null;\n }\n try {\n if ('parse' in params.output_format) {\n return params.output_format.parse(content);\n }\n return JSON.parse(content);\n }\n catch (error) {\n throw new AnthropicError(`Failed to parse structured output: ${error}`);\n }\n}\n//# sourceMappingURL=beta-parser.mjs.map",
31
+ "const tokenize = (input) => {\n let current = 0;\n let tokens = [];\n while (current < input.length) {\n let char = input[current];\n if (char === '\\\\') {\n current++;\n continue;\n }\n if (char === '{') {\n tokens.push({\n type: 'brace',\n value: '{',\n });\n current++;\n continue;\n }\n if (char === '}') {\n tokens.push({\n type: 'brace',\n value: '}',\n });\n current++;\n continue;\n }\n if (char === '[') {\n tokens.push({\n type: 'paren',\n value: '[',\n });\n current++;\n continue;\n }\n if (char === ']') {\n tokens.push({\n type: 'paren',\n value: ']',\n });\n current++;\n continue;\n }\n if (char === ':') {\n tokens.push({\n type: 'separator',\n value: ':',\n });\n current++;\n continue;\n }\n if (char === ',') {\n tokens.push({\n type: 'delimiter',\n value: ',',\n });\n current++;\n continue;\n }\n if (char === '\"') {\n let value = '';\n let danglingQuote = false;\n char = input[++current];\n while (char !== '\"') {\n if (current === input.length) {\n danglingQuote = true;\n break;\n }\n if (char === '\\\\') {\n current++;\n if (current === input.length) {\n danglingQuote = true;\n break;\n }\n value += char + input[current];\n char = input[++current];\n }\n else {\n value += char;\n char = input[++current];\n }\n }\n char = input[++current];\n if (!danglingQuote) {\n tokens.push({\n type: 'string',\n value,\n });\n }\n continue;\n }\n let WHITESPACE = /\\s/;\n if (char && WHITESPACE.test(char)) {\n current++;\n continue;\n }\n let NUMBERS = /[0-9]/;\n if ((char && NUMBERS.test(char)) || char === '-' || char === '.') {\n let value = '';\n if (char === '-') {\n value += char;\n char = input[++current];\n }\n while ((char && NUMBERS.test(char)) || char === '.') {\n value += char;\n char = input[++current];\n }\n tokens.push({\n type: 'number',\n value,\n });\n continue;\n }\n let LETTERS = /[a-z]/i;\n if (char && LETTERS.test(char)) {\n let value = '';\n while (char && LETTERS.test(char)) {\n if (current === input.length) {\n break;\n }\n value += char;\n char = input[++current];\n }\n if (value == 'true' || value == 'false' || value === 'null') {\n tokens.push({\n type: 'name',\n value,\n });\n }\n else {\n // unknown token, e.g. `nul` which isn't quite `null`\n current++;\n continue;\n }\n continue;\n }\n current++;\n }\n return tokens;\n}, strip = (tokens) => {\n if (tokens.length === 0) {\n return tokens;\n }\n let lastToken = tokens[tokens.length - 1];\n switch (lastToken.type) {\n case 'separator':\n tokens = tokens.slice(0, tokens.length - 1);\n return strip(tokens);\n break;\n case 'number':\n let lastCharacterOfLastToken = lastToken.value[lastToken.value.length - 1];\n if (lastCharacterOfLastToken === '.' || lastCharacterOfLastToken === '-') {\n tokens = tokens.slice(0, tokens.length - 1);\n return strip(tokens);\n }\n case 'string':\n let tokenBeforeTheLastToken = tokens[tokens.length - 2];\n if (tokenBeforeTheLastToken?.type === 'delimiter') {\n tokens = tokens.slice(0, tokens.length - 1);\n return strip(tokens);\n }\n else if (tokenBeforeTheLastToken?.type === 'brace' && tokenBeforeTheLastToken.value === '{') {\n tokens = tokens.slice(0, tokens.length - 1);\n return strip(tokens);\n }\n break;\n case 'delimiter':\n tokens = tokens.slice(0, tokens.length - 1);\n return strip(tokens);\n break;\n }\n return tokens;\n}, unstrip = (tokens) => {\n let tail = [];\n tokens.map((token) => {\n if (token.type === 'brace') {\n if (token.value === '{') {\n tail.push('}');\n }\n else {\n tail.splice(tail.lastIndexOf('}'), 1);\n }\n }\n if (token.type === 'paren') {\n if (token.value === '[') {\n tail.push(']');\n }\n else {\n tail.splice(tail.lastIndexOf(']'), 1);\n }\n }\n });\n if (tail.length > 0) {\n tail.reverse().map((item) => {\n if (item === '}') {\n tokens.push({\n type: 'brace',\n value: '}',\n });\n }\n else if (item === ']') {\n tokens.push({\n type: 'paren',\n value: ']',\n });\n }\n });\n }\n return tokens;\n}, generate = (tokens) => {\n let output = '';\n tokens.map((token) => {\n switch (token.type) {\n case 'string':\n output += '\"' + token.value + '\"';\n break;\n default:\n output += token.value;\n break;\n }\n });\n return output;\n}, partialParse = (input) => JSON.parse(generate(unstrip(strip(tokenize(input)))));\nexport { partialParse };\n//# sourceMappingURL=parser.mjs.map",
32
+ "var _BetaMessageStream_instances, _BetaMessageStream_currentMessageSnapshot, _BetaMessageStream_params, _BetaMessageStream_connectedPromise, _BetaMessageStream_resolveConnectedPromise, _BetaMessageStream_rejectConnectedPromise, _BetaMessageStream_endPromise, _BetaMessageStream_resolveEndPromise, _BetaMessageStream_rejectEndPromise, _BetaMessageStream_listeners, _BetaMessageStream_ended, _BetaMessageStream_errored, _BetaMessageStream_aborted, _BetaMessageStream_catchingPromiseCreated, _BetaMessageStream_response, _BetaMessageStream_request_id, _BetaMessageStream_logger, _BetaMessageStream_getFinalMessage, _BetaMessageStream_getFinalText, _BetaMessageStream_handleError, _BetaMessageStream_beginRequest, _BetaMessageStream_addStreamEvent, _BetaMessageStream_endRequest, _BetaMessageStream_accumulateMessage;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { AnthropicError, APIUserAbortError } from \"../error.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { maybeParseBetaMessage } from \"./beta-parser.mjs\";\nconst JSON_BUF_PROPERTY = '__json_buf';\nfunction tracksToolInput(content) {\n return content.type === 'tool_use' || content.type === 'server_tool_use' || content.type === 'mcp_tool_use';\n}\nexport class BetaMessageStream {\n constructor(params, opts) {\n _BetaMessageStream_instances.add(this);\n this.messages = [];\n this.receivedMessages = [];\n _BetaMessageStream_currentMessageSnapshot.set(this, void 0);\n _BetaMessageStream_params.set(this, null);\n this.controller = new AbortController();\n _BetaMessageStream_connectedPromise.set(this, void 0);\n _BetaMessageStream_resolveConnectedPromise.set(this, () => { });\n _BetaMessageStream_rejectConnectedPromise.set(this, () => { });\n _BetaMessageStream_endPromise.set(this, void 0);\n _BetaMessageStream_resolveEndPromise.set(this, () => { });\n _BetaMessageStream_rejectEndPromise.set(this, () => { });\n _BetaMessageStream_listeners.set(this, {});\n _BetaMessageStream_ended.set(this, false);\n _BetaMessageStream_errored.set(this, false);\n _BetaMessageStream_aborted.set(this, false);\n _BetaMessageStream_catchingPromiseCreated.set(this, false);\n _BetaMessageStream_response.set(this, void 0);\n _BetaMessageStream_request_id.set(this, void 0);\n _BetaMessageStream_logger.set(this, void 0);\n _BetaMessageStream_handleError.set(this, (error) => {\n __classPrivateFieldSet(this, _BetaMessageStream_errored, true, \"f\");\n if (isAbortError(error)) {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _BetaMessageStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof AnthropicError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const anthropicError = new AnthropicError(error.message);\n // @ts-ignore\n anthropicError.cause = error;\n return this._emit('error', anthropicError);\n }\n return this._emit('error', new AnthropicError(String(error)));\n });\n __classPrivateFieldSet(this, _BetaMessageStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _BetaMessageStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _BetaMessageStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _BetaMessageStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _BetaMessageStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _BetaMessageStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _BetaMessageStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _BetaMessageStream_endPromise, \"f\").catch(() => { });\n __classPrivateFieldSet(this, _BetaMessageStream_params, params, \"f\");\n __classPrivateFieldSet(this, _BetaMessageStream_logger, opts?.logger ?? console, \"f\");\n }\n get response() {\n return __classPrivateFieldGet(this, _BetaMessageStream_response, \"f\");\n }\n get request_id() {\n return __classPrivateFieldGet(this, _BetaMessageStream_request_id, \"f\");\n }\n /**\n * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request,\n * returned vie the `request-id` header which is useful for debugging requests and resporting\n * issues to Anthropic.\n *\n * This is the same as the `APIPromise.withResponse()` method.\n *\n * This method will raise an error if you created the stream using `MessageStream.fromReadableStream`\n * as no `Response` is available.\n */\n async withResponse() {\n __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, \"f\");\n const response = await __classPrivateFieldGet(this, _BetaMessageStream_connectedPromise, \"f\");\n if (!response) {\n throw new Error('Could not resolve a `Response` object');\n }\n return {\n data: this,\n response,\n request_id: response.headers.get('request-id'),\n };\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new BetaMessageStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createMessage(messages, params, options, { logger } = {}) {\n const runner = new BetaMessageStream(params, { logger });\n for (const message of params.messages) {\n runner._addMessageParam(message);\n }\n __classPrivateFieldSet(runner, _BetaMessageStream_params, { ...params, stream: true }, \"f\");\n runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n _run(executor) {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _BetaMessageStream_handleError, \"f\"));\n }\n _addMessageParam(message) {\n this.messages.push(message);\n }\n _addMessage(message, emit = true) {\n this.receivedMessages.push(message);\n if (emit) {\n this._emit('message', message);\n }\n }\n async _createMessage(messages, params, options) {\n const signal = options?.signal;\n let abortHandler;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n abortHandler = this.controller.abort.bind(this.controller);\n signal.addEventListener('abort', abortHandler);\n }\n try {\n __classPrivateFieldGet(this, _BetaMessageStream_instances, \"m\", _BetaMessageStream_beginRequest).call(this);\n const { response, data: stream } = await messages\n .create({ ...params, stream: true }, { ...options, signal: this.controller.signal })\n .withResponse();\n this._connected(response);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _BetaMessageStream_instances, \"m\", _BetaMessageStream_addStreamEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n __classPrivateFieldGet(this, _BetaMessageStream_instances, \"m\", _BetaMessageStream_endRequest).call(this);\n }\n finally {\n if (signal && abortHandler) {\n signal.removeEventListener('abort', abortHandler);\n }\n }\n }\n _connected(response) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _BetaMessageStream_response, response, \"f\");\n __classPrivateFieldSet(this, _BetaMessageStream_request_id, response?.headers.get('request-id'), \"f\");\n __classPrivateFieldGet(this, _BetaMessageStream_resolveConnectedPromise, \"f\").call(this, response);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _BetaMessageStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _BetaMessageStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _BetaMessageStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this MessageStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _BetaMessageStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this MessageStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this MessageStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _BetaMessageStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _BetaMessageStream_endPromise, \"f\");\n }\n get currentMessage() {\n return __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, \"f\");\n }\n /**\n * @returns a promise that resolves with the the final assistant Message response,\n * or rejects if an error occurred or the stream ended prematurely without producing a Message.\n * If structured outputs were used, this will be a ParsedMessage with a `parsed` field.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _BetaMessageStream_instances, \"m\", _BetaMessageStream_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant Message's text response, concatenated\n * together if there are more than one text blocks.\n * Rejects if an error occurred or the stream ended prematurely without producing a Message.\n */\n async finalText() {\n await this.done();\n return __classPrivateFieldGet(this, _BetaMessageStream_instances, \"m\", _BetaMessageStream_getFinalText).call(this);\n }\n _emit(event, ...args) {\n // make sure we don't emit any MessageStreamEvents after end\n if (__classPrivateFieldGet(this, _BetaMessageStream_ended, \"f\"))\n return;\n if (event === 'end') {\n __classPrivateFieldSet(this, _BetaMessageStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _BetaMessageStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _BetaMessageStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _BetaMessageStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _BetaMessageStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _BetaMessageStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _BetaMessageStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.final...()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _BetaMessageStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _BetaMessageStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() {\n const finalMessage = this.receivedMessages.at(-1);\n if (finalMessage) {\n this._emit('finalMessage', __classPrivateFieldGet(this, _BetaMessageStream_instances, \"m\", _BetaMessageStream_getFinalMessage).call(this));\n }\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n let abortHandler;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n abortHandler = this.controller.abort.bind(this.controller);\n signal.addEventListener('abort', abortHandler);\n }\n try {\n __classPrivateFieldGet(this, _BetaMessageStream_instances, \"m\", _BetaMessageStream_beginRequest).call(this);\n this._connected(null);\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _BetaMessageStream_instances, \"m\", _BetaMessageStream_addStreamEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n __classPrivateFieldGet(this, _BetaMessageStream_instances, \"m\", _BetaMessageStream_endRequest).call(this);\n }\n finally {\n if (signal && abortHandler) {\n signal.removeEventListener('abort', abortHandler);\n }\n }\n }\n [(_BetaMessageStream_currentMessageSnapshot = new WeakMap(), _BetaMessageStream_params = new WeakMap(), _BetaMessageStream_connectedPromise = new WeakMap(), _BetaMessageStream_resolveConnectedPromise = new WeakMap(), _BetaMessageStream_rejectConnectedPromise = new WeakMap(), _BetaMessageStream_endPromise = new WeakMap(), _BetaMessageStream_resolveEndPromise = new WeakMap(), _BetaMessageStream_rejectEndPromise = new WeakMap(), _BetaMessageStream_listeners = new WeakMap(), _BetaMessageStream_ended = new WeakMap(), _BetaMessageStream_errored = new WeakMap(), _BetaMessageStream_aborted = new WeakMap(), _BetaMessageStream_catchingPromiseCreated = new WeakMap(), _BetaMessageStream_response = new WeakMap(), _BetaMessageStream_request_id = new WeakMap(), _BetaMessageStream_logger = new WeakMap(), _BetaMessageStream_handleError = new WeakMap(), _BetaMessageStream_instances = new WeakSet(), _BetaMessageStream_getFinalMessage = function _BetaMessageStream_getFinalMessage() {\n if (this.receivedMessages.length === 0) {\n throw new AnthropicError('stream ended without producing a Message with role=assistant');\n }\n return this.receivedMessages.at(-1);\n }, _BetaMessageStream_getFinalText = function _BetaMessageStream_getFinalText() {\n if (this.receivedMessages.length === 0) {\n throw new AnthropicError('stream ended without producing a Message with role=assistant');\n }\n const textBlocks = this.receivedMessages\n .at(-1)\n .content.filter((block) => block.type === 'text')\n .map((block) => block.text);\n if (textBlocks.length === 0) {\n throw new AnthropicError('stream ended without producing a content block with type=text');\n }\n return textBlocks.join(' ');\n }, _BetaMessageStream_beginRequest = function _BetaMessageStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, undefined, \"f\");\n }, _BetaMessageStream_addStreamEvent = function _BetaMessageStream_addStreamEvent(event) {\n if (this.ended)\n return;\n const messageSnapshot = __classPrivateFieldGet(this, _BetaMessageStream_instances, \"m\", _BetaMessageStream_accumulateMessage).call(this, event);\n this._emit('streamEvent', event, messageSnapshot);\n switch (event.type) {\n case 'content_block_delta': {\n const content = messageSnapshot.content.at(-1);\n switch (event.delta.type) {\n case 'text_delta': {\n if (content.type === 'text') {\n this._emit('text', event.delta.text, content.text || '');\n }\n break;\n }\n case 'citations_delta': {\n if (content.type === 'text') {\n this._emit('citation', event.delta.citation, content.citations ?? []);\n }\n break;\n }\n case 'input_json_delta': {\n if (tracksToolInput(content) && content.input) {\n this._emit('inputJson', event.delta.partial_json, content.input);\n }\n break;\n }\n case 'thinking_delta': {\n if (content.type === 'thinking') {\n this._emit('thinking', event.delta.thinking, content.thinking);\n }\n break;\n }\n case 'signature_delta': {\n if (content.type === 'thinking') {\n this._emit('signature', content.signature);\n }\n break;\n }\n default:\n checkNever(event.delta);\n }\n break;\n }\n case 'message_stop': {\n this._addMessageParam(messageSnapshot);\n this._addMessage(maybeParseBetaMessage(messageSnapshot, __classPrivateFieldGet(this, _BetaMessageStream_params, \"f\"), { logger: __classPrivateFieldGet(this, _BetaMessageStream_logger, \"f\") }), true);\n break;\n }\n case 'content_block_stop': {\n this._emit('contentBlock', messageSnapshot.content.at(-1));\n break;\n }\n case 'message_start': {\n __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, messageSnapshot, \"f\");\n break;\n }\n case 'content_block_start':\n case 'message_delta':\n break;\n }\n }, _BetaMessageStream_endRequest = function _BetaMessageStream_endRequest() {\n if (this.ended) {\n throw new AnthropicError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, \"f\");\n if (!snapshot) {\n throw new AnthropicError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, undefined, \"f\");\n return maybeParseBetaMessage(snapshot, __classPrivateFieldGet(this, _BetaMessageStream_params, \"f\"), { logger: __classPrivateFieldGet(this, _BetaMessageStream_logger, \"f\") });\n }, _BetaMessageStream_accumulateMessage = function _BetaMessageStream_accumulateMessage(event) {\n let snapshot = __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, \"f\");\n if (event.type === 'message_start') {\n if (snapshot) {\n throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving \"message_stop\"`);\n }\n return event.message;\n }\n if (!snapshot) {\n throw new AnthropicError(`Unexpected event order, got ${event.type} before \"message_start\"`);\n }\n switch (event.type) {\n case 'message_stop':\n return snapshot;\n case 'message_delta':\n snapshot.container = event.delta.container;\n snapshot.stop_reason = event.delta.stop_reason;\n snapshot.stop_sequence = event.delta.stop_sequence;\n snapshot.usage.output_tokens = event.usage.output_tokens;\n snapshot.context_management = event.context_management;\n if (event.usage.input_tokens != null) {\n snapshot.usage.input_tokens = event.usage.input_tokens;\n }\n if (event.usage.cache_creation_input_tokens != null) {\n snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens;\n }\n if (event.usage.cache_read_input_tokens != null) {\n snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens;\n }\n if (event.usage.server_tool_use != null) {\n snapshot.usage.server_tool_use = event.usage.server_tool_use;\n }\n return snapshot;\n case 'content_block_start':\n snapshot.content.push(event.content_block);\n return snapshot;\n case 'content_block_delta': {\n const snapshotContent = snapshot.content.at(event.index);\n switch (event.delta.type) {\n case 'text_delta': {\n if (snapshotContent?.type === 'text') {\n snapshot.content[event.index] = {\n ...snapshotContent,\n text: (snapshotContent.text || '') + event.delta.text,\n };\n }\n break;\n }\n case 'citations_delta': {\n if (snapshotContent?.type === 'text') {\n snapshot.content[event.index] = {\n ...snapshotContent,\n citations: [...(snapshotContent.citations ?? []), event.delta.citation],\n };\n }\n break;\n }\n case 'input_json_delta': {\n if (snapshotContent && tracksToolInput(snapshotContent)) {\n // we need to keep track of the raw JSON string as well so that we can\n // re-parse it for each delta, for now we just store it as an untyped\n // non-enumerable property on the snapshot\n let jsonBuf = snapshotContent[JSON_BUF_PROPERTY] || '';\n jsonBuf += event.delta.partial_json;\n const newContent = { ...snapshotContent };\n Object.defineProperty(newContent, JSON_BUF_PROPERTY, {\n value: jsonBuf,\n enumerable: false,\n writable: true,\n });\n if (jsonBuf) {\n try {\n newContent.input = partialParse(jsonBuf);\n }\n catch (err) {\n const error = new AnthropicError(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${err}. JSON: ${jsonBuf}`);\n __classPrivateFieldGet(this, _BetaMessageStream_handleError, \"f\").call(this, error);\n }\n }\n snapshot.content[event.index] = newContent;\n }\n break;\n }\n case 'thinking_delta': {\n if (snapshotContent?.type === 'thinking') {\n snapshot.content[event.index] = {\n ...snapshotContent,\n thinking: snapshotContent.thinking + event.delta.thinking,\n };\n }\n break;\n }\n case 'signature_delta': {\n if (snapshotContent?.type === 'thinking') {\n snapshot.content[event.index] = {\n ...snapshotContent,\n signature: event.delta.signature,\n };\n }\n break;\n }\n default:\n checkNever(event.delta);\n }\n return snapshot;\n }\n case 'content_block_stop':\n return snapshot;\n }\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('streamEvent', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\n// used to ensure exhaustive case matching without throwing a runtime error\nfunction checkNever(x) { }\n//# sourceMappingURL=BetaMessageStream.mjs.map",
33
+ "export const DEFAULT_TOKEN_THRESHOLD = 100000;\nexport const DEFAULT_SUMMARY_PROMPT = `You have been working on the task described above but have not yet completed it. Write a continuation summary that will allow you (or another instance of yourself) to resume work efficiently in a future context window where the conversation history will be replaced with this summary. Your summary should be structured, concise, and actionable. Include:\n1. Task Overview\nThe user's core request and success criteria\nAny clarifications or constraints they specified\n2. Current State\nWhat has been completed so far\nFiles created, modified, or analyzed (with paths if relevant)\nKey outputs or artifacts produced\n3. Important Discoveries\nTechnical constraints or requirements uncovered\nDecisions made and their rationale\nErrors encountered and how they were resolved\nWhat approaches were tried that didn't work (and why)\n4. Next Steps\nSpecific actions needed to complete the task\nAny blockers or open questions to resolve\nPriority order if multiple steps remain\n5. Context to Preserve\nUser preferences or style requirements\nDomain-specific details that aren't obvious\nAny promises made to the user\nBe concise but complete—err on the side of including information that would prevent duplicate work or repeated mistakes. Write in a way that enables immediate resumption of the task.\nWrap your summary in <summary></summary> tags.`;\n//# sourceMappingURL=CompactionControl.mjs.map",
34
+ "var _BetaToolRunner_instances, _BetaToolRunner_consumed, _BetaToolRunner_mutated, _BetaToolRunner_state, _BetaToolRunner_options, _BetaToolRunner_message, _BetaToolRunner_toolResponse, _BetaToolRunner_completion, _BetaToolRunner_iterationCount, _BetaToolRunner_checkAndCompact, _BetaToolRunner_generateToolResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { AnthropicError } from \"../../core/error.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { DEFAULT_SUMMARY_PROMPT, DEFAULT_TOKEN_THRESHOLD } from \"./CompactionControl.mjs\";\n/**\n * Just Promise.withResolvers(), which is not available in all environments.\n */\nfunction promiseWithResolvers() {\n let resolve;\n let reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve: resolve, reject: reject };\n}\n/**\n * A ToolRunner handles the automatic conversation loop between the assistant and tools.\n *\n * A ToolRunner is an async iterable that yields either BetaMessage or BetaMessageStream objects\n * depending on the streaming configuration.\n */\nexport class BetaToolRunner {\n constructor(client, params, options) {\n _BetaToolRunner_instances.add(this);\n this.client = client;\n /** Whether the async iterator has been consumed */\n _BetaToolRunner_consumed.set(this, false);\n /** Whether parameters have been mutated since the last API call */\n _BetaToolRunner_mutated.set(this, false);\n /** Current state containing the request parameters */\n _BetaToolRunner_state.set(this, void 0);\n _BetaToolRunner_options.set(this, void 0);\n /** Promise for the last message received from the assistant */\n _BetaToolRunner_message.set(this, void 0);\n /** Cached tool response to avoid redundant executions */\n _BetaToolRunner_toolResponse.set(this, void 0);\n /** Promise resolvers for waiting on completion */\n _BetaToolRunner_completion.set(this, void 0);\n /** Number of iterations (API requests) made so far */\n _BetaToolRunner_iterationCount.set(this, 0);\n __classPrivateFieldSet(this, _BetaToolRunner_state, {\n params: {\n // You can't clone the entire params since there are functions as handlers.\n // You also don't really need to clone params.messages, but it probably will prevent a foot gun\n // somewhere.\n ...params,\n messages: structuredClone(params.messages),\n },\n }, \"f\");\n __classPrivateFieldSet(this, _BetaToolRunner_options, {\n ...options,\n headers: buildHeaders([{ 'x-stainless-helper': 'BetaToolRunner' }, options?.headers]),\n }, \"f\");\n __classPrivateFieldSet(this, _BetaToolRunner_completion, promiseWithResolvers(), \"f\");\n }\n async *[(_BetaToolRunner_consumed = new WeakMap(), _BetaToolRunner_mutated = new WeakMap(), _BetaToolRunner_state = new WeakMap(), _BetaToolRunner_options = new WeakMap(), _BetaToolRunner_message = new WeakMap(), _BetaToolRunner_toolResponse = new WeakMap(), _BetaToolRunner_completion = new WeakMap(), _BetaToolRunner_iterationCount = new WeakMap(), _BetaToolRunner_instances = new WeakSet(), _BetaToolRunner_checkAndCompact = async function _BetaToolRunner_checkAndCompact() {\n const compactionControl = __classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params.compactionControl;\n if (!compactionControl || !compactionControl.enabled) {\n return false;\n }\n let tokensUsed = 0;\n if (__classPrivateFieldGet(this, _BetaToolRunner_message, \"f\") !== undefined) {\n try {\n const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, \"f\");\n const totalInputTokens = message.usage.input_tokens +\n (message.usage.cache_creation_input_tokens ?? 0) +\n (message.usage.cache_read_input_tokens ?? 0);\n tokensUsed = totalInputTokens + message.usage.output_tokens;\n }\n catch {\n // If we can't get the message, skip compaction\n return false;\n }\n }\n const threshold = compactionControl.contextTokenThreshold ?? DEFAULT_TOKEN_THRESHOLD;\n if (tokensUsed < threshold) {\n return false;\n }\n const model = compactionControl.model ?? __classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params.model;\n const summaryPrompt = compactionControl.summaryPrompt ?? DEFAULT_SUMMARY_PROMPT;\n const messages = __classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params.messages;\n if (messages[messages.length - 1].role === 'assistant') {\n // Remove tool_use blocks from the last message to avoid 400 error\n // (tool_use requires tool_result, which we don't have yet)\n const lastMessage = messages[messages.length - 1];\n if (Array.isArray(lastMessage.content)) {\n const nonToolBlocks = lastMessage.content.filter((block) => block.type !== 'tool_use');\n if (nonToolBlocks.length === 0) {\n // If all blocks were tool_use, just remove the message entirely\n messages.pop();\n }\n else {\n lastMessage.content = nonToolBlocks;\n }\n }\n }\n const response = await this.client.beta.messages.create({\n model,\n messages: [\n ...messages,\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: summaryPrompt,\n },\n ],\n },\n ],\n max_tokens: __classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params.max_tokens,\n }, {\n headers: { 'x-stainless-helper': 'compaction' },\n });\n if (response.content[0]?.type !== 'text') {\n throw new AnthropicError('Expected text response for compaction');\n }\n __classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params.messages = [\n {\n role: 'user',\n content: response.content,\n },\n ];\n return true;\n }, Symbol.asyncIterator)]() {\n var _a;\n if (__classPrivateFieldGet(this, _BetaToolRunner_consumed, \"f\")) {\n throw new AnthropicError('Cannot iterate over a consumed stream');\n }\n __classPrivateFieldSet(this, _BetaToolRunner_consumed, true, \"f\");\n __classPrivateFieldSet(this, _BetaToolRunner_mutated, true, \"f\");\n __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, \"f\");\n try {\n while (true) {\n let stream;\n try {\n if (__classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params.max_iterations &&\n __classPrivateFieldGet(this, _BetaToolRunner_iterationCount, \"f\") >= __classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params.max_iterations) {\n break;\n }\n __classPrivateFieldSet(this, _BetaToolRunner_mutated, false, \"f\");\n __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, \"f\");\n __classPrivateFieldSet(this, _BetaToolRunner_iterationCount, (_a = __classPrivateFieldGet(this, _BetaToolRunner_iterationCount, \"f\"), _a++, _a), \"f\");\n __classPrivateFieldSet(this, _BetaToolRunner_message, undefined, \"f\");\n const { max_iterations, compactionControl, ...params } = __classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params;\n if (params.stream) {\n stream = this.client.beta.messages.stream({ ...params }, __classPrivateFieldGet(this, _BetaToolRunner_options, \"f\"));\n __classPrivateFieldSet(this, _BetaToolRunner_message, stream.finalMessage(), \"f\");\n // Make sure that this promise doesn't throw before we get the option to do something about it.\n // Error will be caught when we call await this.#message ultimately\n __classPrivateFieldGet(this, _BetaToolRunner_message, \"f\").catch(() => { });\n yield stream;\n }\n else {\n __classPrivateFieldSet(this, _BetaToolRunner_message, this.client.beta.messages.create({ ...params, stream: false }, __classPrivateFieldGet(this, _BetaToolRunner_options, \"f\")), \"f\");\n yield __classPrivateFieldGet(this, _BetaToolRunner_message, \"f\");\n }\n const isCompacted = await __classPrivateFieldGet(this, _BetaToolRunner_instances, \"m\", _BetaToolRunner_checkAndCompact).call(this);\n if (!isCompacted) {\n if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, \"f\")) {\n const { role, content } = await __classPrivateFieldGet(this, _BetaToolRunner_message, \"f\");\n __classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params.messages.push({ role, content });\n }\n const toolMessage = await __classPrivateFieldGet(this, _BetaToolRunner_instances, \"m\", _BetaToolRunner_generateToolResponse).call(this, __classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params.messages.at(-1));\n if (toolMessage) {\n __classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params.messages.push(toolMessage);\n }\n else if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, \"f\")) {\n break;\n }\n }\n }\n finally {\n if (stream) {\n stream.abort();\n }\n }\n }\n if (!__classPrivateFieldGet(this, _BetaToolRunner_message, \"f\")) {\n throw new AnthropicError('ToolRunner concluded without a message from the server');\n }\n __classPrivateFieldGet(this, _BetaToolRunner_completion, \"f\").resolve(await __classPrivateFieldGet(this, _BetaToolRunner_message, \"f\"));\n }\n catch (error) {\n __classPrivateFieldSet(this, _BetaToolRunner_consumed, false, \"f\");\n // Silence unhandled promise errors\n __classPrivateFieldGet(this, _BetaToolRunner_completion, \"f\").promise.catch(() => { });\n __classPrivateFieldGet(this, _BetaToolRunner_completion, \"f\").reject(error);\n __classPrivateFieldSet(this, _BetaToolRunner_completion, promiseWithResolvers(), \"f\");\n throw error;\n }\n }\n setMessagesParams(paramsOrMutator) {\n if (typeof paramsOrMutator === 'function') {\n __classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params = paramsOrMutator(__classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params);\n }\n else {\n __classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params = paramsOrMutator;\n }\n __classPrivateFieldSet(this, _BetaToolRunner_mutated, true, \"f\");\n // Invalidate cached tool response since parameters changed\n __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, undefined, \"f\");\n }\n /**\n * Get the tool response for the last message from the assistant.\n * Avoids redundant tool executions by caching results.\n *\n * @returns A promise that resolves to a BetaMessageParam containing tool results, or null if no tools need to be executed\n *\n * @example\n * const toolResponse = await runner.generateToolResponse();\n * if (toolResponse) {\n * console.log('Tool results:', toolResponse.content);\n * }\n */\n async generateToolResponse() {\n const message = (await __classPrivateFieldGet(this, _BetaToolRunner_message, \"f\")) ?? this.params.messages.at(-1);\n if (!message) {\n return null;\n }\n return __classPrivateFieldGet(this, _BetaToolRunner_instances, \"m\", _BetaToolRunner_generateToolResponse).call(this, message);\n }\n /**\n * Wait for the async iterator to complete. This works even if the async iterator hasn't yet started, and\n * will wait for an instance to start and go to completion.\n *\n * @returns A promise that resolves to the final BetaMessage when the iterator completes\n *\n * @example\n * // Start consuming the iterator\n * for await (const message of runner) {\n * console.log('Message:', message.content);\n * }\n *\n * // Meanwhile, wait for completion from another part of the code\n * const finalMessage = await runner.done();\n * console.log('Final response:', finalMessage.content);\n */\n done() {\n return __classPrivateFieldGet(this, _BetaToolRunner_completion, \"f\").promise;\n }\n /**\n * Returns a promise indicating that the stream is done. Unlike .done(), this will eagerly read the stream:\n * * If the iterator has not been consumed, consume the entire iterator and return the final message from the\n * assistant.\n * * If the iterator has been consumed, waits for it to complete and returns the final message.\n *\n * @returns A promise that resolves to the final BetaMessage from the conversation\n * @throws {AnthropicError} If no messages were processed during the conversation\n *\n * @example\n * const finalMessage = await runner.runUntilDone();\n * console.log('Final response:', finalMessage.content);\n */\n async runUntilDone() {\n // If not yet consumed, start consuming and wait for completion\n if (!__classPrivateFieldGet(this, _BetaToolRunner_consumed, \"f\")) {\n for await (const _ of this) {\n // Iterator naturally populates this.#message\n }\n }\n // If consumed but not completed, wait for completion\n return this.done();\n }\n /**\n * Get the current parameters being used by the ToolRunner.\n *\n * @returns A readonly view of the current ToolRunnerParams\n *\n * @example\n * const currentParams = runner.params;\n * console.log('Current model:', currentParams.model);\n * console.log('Message count:', currentParams.messages.length);\n */\n get params() {\n return __classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params;\n }\n /**\n * Add one or more messages to the conversation history.\n *\n * @param messages - One or more BetaMessageParam objects to add to the conversation\n *\n * @example\n * runner.pushMessages(\n * { role: 'user', content: 'Also, what about the weather in NYC?' }\n * );\n *\n * @example\n * // Adding multiple messages\n * runner.pushMessages(\n * { role: 'user', content: 'What about NYC?' },\n * { role: 'user', content: 'And Boston?' }\n * );\n */\n pushMessages(...messages) {\n this.setMessagesParams((params) => ({\n ...params,\n messages: [...params.messages, ...messages],\n }));\n }\n /**\n * Makes the ToolRunner directly awaitable, equivalent to calling .runUntilDone()\n * This allows using `await runner` instead of `await runner.runUntilDone()`\n */\n then(onfulfilled, onrejected) {\n return this.runUntilDone().then(onfulfilled, onrejected);\n }\n}\n_BetaToolRunner_generateToolResponse = async function _BetaToolRunner_generateToolResponse(lastMessage) {\n if (__classPrivateFieldGet(this, _BetaToolRunner_toolResponse, \"f\") !== undefined) {\n return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, \"f\");\n }\n __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, generateToolResponse(__classPrivateFieldGet(this, _BetaToolRunner_state, \"f\").params, lastMessage), \"f\");\n return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, \"f\");\n};\nasync function generateToolResponse(params, lastMessage = params.messages.at(-1)) {\n // Only process if the last message is from the assistant and has tool use blocks\n if (!lastMessage ||\n lastMessage.role !== 'assistant' ||\n !lastMessage.content ||\n typeof lastMessage.content === 'string') {\n return null;\n }\n const toolUseBlocks = lastMessage.content.filter((content) => content.type === 'tool_use');\n if (toolUseBlocks.length === 0) {\n return null;\n }\n const toolResults = await Promise.all(toolUseBlocks.map(async (toolUse) => {\n const tool = params.tools.find((t) => ('name' in t ? t.name : t.mcp_server_name) === toolUse.name);\n if (!tool || !('run' in tool)) {\n return {\n type: 'tool_result',\n tool_use_id: toolUse.id,\n content: `Error: Tool '${toolUse.name}' not found`,\n is_error: true,\n };\n }\n try {\n let input = toolUse.input;\n if ('parse' in tool && tool.parse) {\n input = tool.parse(input);\n }\n const result = await tool.run(input);\n return {\n type: 'tool_result',\n tool_use_id: toolUse.id,\n content: result,\n };\n }\n catch (error) {\n return {\n type: 'tool_result',\n tool_use_id: toolUse.id,\n content: `Error: ${error instanceof Error ? error.message : String(error)}`,\n is_error: true,\n };\n }\n }));\n return {\n role: 'user',\n content: toolResults,\n };\n}\n//# sourceMappingURL=BetaToolRunner.mjs.map",
35
+ "import { AnthropicError } from \"../../core/error.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../shims.mjs\";\nimport { LineDecoder } from \"./line.mjs\";\nexport class JSONLDecoder {\n constructor(iterator, controller) {\n this.iterator = iterator;\n this.controller = controller;\n }\n async *decoder() {\n const lineDecoder = new LineDecoder();\n for await (const chunk of this.iterator) {\n for (const line of lineDecoder.decode(chunk)) {\n yield JSON.parse(line);\n }\n }\n for (const line of lineDecoder.flush()) {\n yield JSON.parse(line);\n }\n }\n [Symbol.asyncIterator]() {\n return this.decoder();\n }\n static fromResponse(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new AnthropicError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new AnthropicError(`Attempted to iterate over a response with no body`);\n }\n return new JSONLDecoder(ReadableStreamToAsyncIterable(response.body), controller);\n }\n}\n//# sourceMappingURL=jsonl.mjs.map",
36
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { JSONLDecoder } from \"../../../internal/decoders/jsonl.mjs\";\nimport { AnthropicError } from \"../../../error.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Send a batch of Message creation requests.\n *\n * The Message Batches API can be used to process multiple Messages API requests at\n * once. Once a Message Batch is created, it begins processing immediately. Batches\n * can take up to 24 hours to complete.\n *\n * Learn more about the Message Batches API in our\n * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)\n *\n * @example\n * ```ts\n * const betaMessageBatch =\n * await client.beta.messages.batches.create({\n * requests: [\n * {\n * custom_id: 'my-custom-id-1',\n * params: {\n * max_tokens: 1024,\n * messages: [\n * { content: 'Hello, world', role: 'user' },\n * ],\n * model: 'claude-sonnet-4-5-20250929',\n * },\n * },\n * ],\n * });\n * ```\n */\n create(params, options) {\n const { betas, ...body } = params;\n return this._client.post('/v1/messages/batches?beta=true', {\n body,\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString() },\n options?.headers,\n ]),\n });\n }\n /**\n * This endpoint is idempotent and can be used to poll for Message Batch\n * completion. To access the results of a Message Batch, make a request to the\n * `results_url` field in the response.\n *\n * Learn more about the Message Batches API in our\n * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)\n *\n * @example\n * ```ts\n * const betaMessageBatch =\n * await client.beta.messages.batches.retrieve(\n * 'message_batch_id',\n * );\n * ```\n */\n retrieve(messageBatchID, params = {}, options) {\n const { betas } = params ?? {};\n return this._client.get(path `/v1/messages/batches/${messageBatchID}?beta=true`, {\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString() },\n options?.headers,\n ]),\n });\n }\n /**\n * List all Message Batches within a Workspace. Most recently created batches are\n * returned first.\n *\n * Learn more about the Message Batches API in our\n * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const betaMessageBatch of client.beta.messages.batches.list()) {\n * // ...\n * }\n * ```\n */\n list(params = {}, options) {\n const { betas, ...query } = params ?? {};\n return this._client.getAPIList('/v1/messages/batches?beta=true', (Page), {\n query,\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString() },\n options?.headers,\n ]),\n });\n }\n /**\n * Delete a Message Batch.\n *\n * Message Batches can only be deleted once they've finished processing. If you'd\n * like to delete an in-progress batch, you must first cancel it.\n *\n * Learn more about the Message Batches API in our\n * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)\n *\n * @example\n * ```ts\n * const betaDeletedMessageBatch =\n * await client.beta.messages.batches.delete(\n * 'message_batch_id',\n * );\n * ```\n */\n delete(messageBatchID, params = {}, options) {\n const { betas } = params ?? {};\n return this._client.delete(path `/v1/messages/batches/${messageBatchID}?beta=true`, {\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString() },\n options?.headers,\n ]),\n });\n }\n /**\n * Batches may be canceled any time before processing ends. Once cancellation is\n * initiated, the batch enters a `canceling` state, at which time the system may\n * complete any in-progress, non-interruptible requests before finalizing\n * cancellation.\n *\n * The number of canceled requests is specified in `request_counts`. To determine\n * which requests were canceled, check the individual results within the batch.\n * Note that cancellation may not result in any canceled requests if they were\n * non-interruptible.\n *\n * Learn more about the Message Batches API in our\n * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)\n *\n * @example\n * ```ts\n * const betaMessageBatch =\n * await client.beta.messages.batches.cancel(\n * 'message_batch_id',\n * );\n * ```\n */\n cancel(messageBatchID, params = {}, options) {\n const { betas } = params ?? {};\n return this._client.post(path `/v1/messages/batches/${messageBatchID}/cancel?beta=true`, {\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString() },\n options?.headers,\n ]),\n });\n }\n /**\n * Streams the results of a Message Batch as a `.jsonl` file.\n *\n * Each line in the file is a JSON object containing the result of a single request\n * in the Message Batch. Results are not guaranteed to be in the same order as\n * requests. Use the `custom_id` field to match results to requests.\n *\n * Learn more about the Message Batches API in our\n * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)\n *\n * @example\n * ```ts\n * const betaMessageBatchIndividualResponse =\n * await client.beta.messages.batches.results(\n * 'message_batch_id',\n * );\n * ```\n */\n async results(messageBatchID, params = {}, options) {\n const batch = await this.retrieve(messageBatchID);\n if (!batch.results_url) {\n throw new AnthropicError(`No batch \\`results_url\\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`);\n }\n const { betas } = params ?? {};\n return this._client\n .get(batch.results_url, {\n ...options,\n headers: buildHeaders([\n {\n 'anthropic-beta': [...(betas ?? []), 'message-batches-2024-09-24'].toString(),\n Accept: 'application/binary',\n },\n options?.headers,\n ]),\n stream: true,\n __binaryResponse: true,\n })\n ._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller));\n }\n}\n//# sourceMappingURL=batches.mjs.map",
37
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { MODEL_NONSTREAMING_TOKENS } from \"../../../internal/constants.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { parseBetaMessage, } from \"../../../lib/beta-parser.mjs\";\nimport { BetaMessageStream } from \"../../../lib/BetaMessageStream.mjs\";\nimport { BetaToolRunner, } from \"../../../lib/tools/BetaToolRunner.mjs\";\nimport * as BatchesAPI from \"./batches.mjs\";\nimport { Batches, } from \"./batches.mjs\";\nconst DEPRECATED_MODELS = {\n 'claude-1.3': 'November 6th, 2024',\n 'claude-1.3-100k': 'November 6th, 2024',\n 'claude-instant-1.1': 'November 6th, 2024',\n 'claude-instant-1.1-100k': 'November 6th, 2024',\n 'claude-instant-1.2': 'November 6th, 2024',\n 'claude-3-sonnet-20240229': 'July 21st, 2025',\n 'claude-3-opus-20240229': 'January 5th, 2026',\n 'claude-2.1': 'July 21st, 2025',\n 'claude-2.0': 'July 21st, 2025',\n 'claude-3-7-sonnet-latest': 'February 19th, 2026',\n 'claude-3-7-sonnet-20250219': 'February 19th, 2026',\n};\nexport class Messages extends APIResource {\n constructor() {\n super(...arguments);\n this.batches = new BatchesAPI.Batches(this._client);\n }\n create(params, options) {\n const { betas, ...body } = params;\n if (body.model in DEPRECATED_MODELS) {\n console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS[body.model]}\\nPlease migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);\n }\n let timeout = this._client._options.timeout;\n if (!body.stream && timeout == null) {\n const maxNonstreamingTokens = MODEL_NONSTREAMING_TOKENS[body.model] ?? undefined;\n timeout = this._client.calculateNonstreamingTimeout(body.max_tokens, maxNonstreamingTokens);\n }\n return this._client.post('/v1/messages?beta=true', {\n body,\n timeout: timeout ?? 600000,\n ...options,\n headers: buildHeaders([\n { ...(betas?.toString() != null ? { 'anthropic-beta': betas?.toString() } : undefined) },\n options?.headers,\n ]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Send a structured list of input messages with text and/or image content, along with an expected `output_format` and\n * the response will be automatically parsed and available in the `parsed_output` property of the message.\n *\n * @example\n * ```ts\n * const message = await client.beta.messages.parse({\n * model: 'claude-3-5-sonnet-20241022',\n * max_tokens: 1024,\n * messages: [{ role: 'user', content: 'What is 2+2?' }],\n * output_format: zodOutputFormat(z.object({ answer: z.number() }), 'math'),\n * });\n *\n * console.log(message.parsed_output?.answer); // 4\n * ```\n */\n parse(params, options) {\n options = {\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(params.betas ?? []), 'structured-outputs-2025-11-13'].toString() },\n options?.headers,\n ]),\n };\n return this.create(params, options).then((message) => parseBetaMessage(message, params, { logger: this._client.logger ?? console }));\n }\n /**\n * Create a Message stream\n */\n stream(body, options) {\n return BetaMessageStream.createMessage(this, body, options);\n }\n /**\n * Count the number of tokens in a Message.\n *\n * The Token Count API can be used to count the number of tokens in a Message,\n * including tools, images, and documents, without creating it.\n *\n * Learn more about token counting in our\n * [user guide](https://docs.claude.com/en/docs/build-with-claude/token-counting)\n *\n * @example\n * ```ts\n * const betaMessageTokensCount =\n * await client.beta.messages.countTokens({\n * messages: [{ content: 'string', role: 'user' }],\n * model: 'claude-opus-4-5-20251101',\n * });\n * ```\n */\n countTokens(params, options) {\n const { betas, ...body } = params;\n return this._client.post('/v1/messages/count_tokens?beta=true', {\n body,\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'token-counting-2024-11-01'].toString() },\n options?.headers,\n ]),\n });\n }\n toolRunner(body, options) {\n return new BetaToolRunner(this._client, body, options);\n }\n}\nexport { BetaToolRunner } from \"../../../lib/tools/BetaToolRunner.mjs\";\nMessages.Batches = Batches;\nMessages.BetaToolRunner = BetaToolRunner;\n//# sourceMappingURL=messages.mjs.map",
38
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { PageCursor } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Versions extends APIResource {\n /**\n * Create Skill Version\n *\n * @example\n * ```ts\n * const version = await client.beta.skills.versions.create(\n * 'skill_id',\n * );\n * ```\n */\n create(skillID, params = {}, options) {\n const { betas, ...body } = params ?? {};\n return this._client.post(path `/v1/skills/${skillID}/versions?beta=true`, multipartFormRequestOptions({\n body,\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'skills-2025-10-02'].toString() },\n options?.headers,\n ]),\n }, this._client));\n }\n /**\n * Get Skill Version\n *\n * @example\n * ```ts\n * const version = await client.beta.skills.versions.retrieve(\n * 'version',\n * { skill_id: 'skill_id' },\n * );\n * ```\n */\n retrieve(version, params, options) {\n const { skill_id, betas } = params;\n return this._client.get(path `/v1/skills/${skill_id}/versions/${version}?beta=true`, {\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'skills-2025-10-02'].toString() },\n options?.headers,\n ]),\n });\n }\n /**\n * List Skill Versions\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const versionListResponse of client.beta.skills.versions.list(\n * 'skill_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(skillID, params = {}, options) {\n const { betas, ...query } = params ?? {};\n return this._client.getAPIList(path `/v1/skills/${skillID}/versions?beta=true`, (PageCursor), {\n query,\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'skills-2025-10-02'].toString() },\n options?.headers,\n ]),\n });\n }\n /**\n * Delete Skill Version\n *\n * @example\n * ```ts\n * const version = await client.beta.skills.versions.delete(\n * 'version',\n * { skill_id: 'skill_id' },\n * );\n * ```\n */\n delete(version, params, options) {\n const { skill_id, betas } = params;\n return this._client.delete(path `/v1/skills/${skill_id}/versions/${version}?beta=true`, {\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'skills-2025-10-02'].toString() },\n options?.headers,\n ]),\n });\n }\n}\n//# sourceMappingURL=versions.mjs.map",
39
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as VersionsAPI from \"./versions.mjs\";\nimport { Versions, } from \"./versions.mjs\";\nimport { PageCursor } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Skills extends APIResource {\n constructor() {\n super(...arguments);\n this.versions = new VersionsAPI.Versions(this._client);\n }\n /**\n * Create Skill\n *\n * @example\n * ```ts\n * const skill = await client.beta.skills.create();\n * ```\n */\n create(params = {}, options) {\n const { betas, ...body } = params ?? {};\n return this._client.post('/v1/skills?beta=true', multipartFormRequestOptions({\n body,\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'skills-2025-10-02'].toString() },\n options?.headers,\n ]),\n }, this._client));\n }\n /**\n * Get Skill\n *\n * @example\n * ```ts\n * const skill = await client.beta.skills.retrieve('skill_id');\n * ```\n */\n retrieve(skillID, params = {}, options) {\n const { betas } = params ?? {};\n return this._client.get(path `/v1/skills/${skillID}?beta=true`, {\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'skills-2025-10-02'].toString() },\n options?.headers,\n ]),\n });\n }\n /**\n * List Skills\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const skillListResponse of client.beta.skills.list()) {\n * // ...\n * }\n * ```\n */\n list(params = {}, options) {\n const { betas, ...query } = params ?? {};\n return this._client.getAPIList('/v1/skills?beta=true', (PageCursor), {\n query,\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'skills-2025-10-02'].toString() },\n options?.headers,\n ]),\n });\n }\n /**\n * Delete Skill\n *\n * @example\n * ```ts\n * const skill = await client.beta.skills.delete('skill_id');\n * ```\n */\n delete(skillID, params = {}, options) {\n const { betas } = params ?? {};\n return this._client.delete(path `/v1/skills/${skillID}?beta=true`, {\n ...options,\n headers: buildHeaders([\n { 'anthropic-beta': [...(betas ?? []), 'skills-2025-10-02'].toString() },\n options?.headers,\n ]),\n });\n }\n}\nSkills.Versions = Versions;\n//# sourceMappingURL=skills.mjs.map",
40
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport * as ModelsAPI from \"./models.mjs\";\nimport { Models } from \"./models.mjs\";\nimport * as MessagesAPI from \"./messages/messages.mjs\";\nimport { Messages, } from \"./messages/messages.mjs\";\nimport * as SkillsAPI from \"./skills/skills.mjs\";\nimport { Skills, } from \"./skills/skills.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.models = new ModelsAPI.Models(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n this.files = new FilesAPI.Files(this._client);\n this.skills = new SkillsAPI.Skills(this._client);\n }\n}\nBeta.Models = Models;\nBeta.Messages = Messages;\nBeta.Files = Files;\nBeta.Skills = Skills;\n//# sourceMappingURL=beta.mjs.map",
41
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Completions extends APIResource {\n create(params, options) {\n const { betas, ...body } = params;\n return this._client.post('/v1/complete', {\n body,\n timeout: this._client._options.timeout ?? 600000,\n ...options,\n headers: buildHeaders([\n { ...(betas?.toString() != null ? { 'anthropic-beta': betas?.toString() } : undefined) },\n options?.headers,\n ]),\n stream: params.stream ?? false,\n });\n }\n}\n//# sourceMappingURL=completions.mjs.map",
42
+ "var _MessageStream_instances, _MessageStream_currentMessageSnapshot, _MessageStream_connectedPromise, _MessageStream_resolveConnectedPromise, _MessageStream_rejectConnectedPromise, _MessageStream_endPromise, _MessageStream_resolveEndPromise, _MessageStream_rejectEndPromise, _MessageStream_listeners, _MessageStream_ended, _MessageStream_errored, _MessageStream_aborted, _MessageStream_catchingPromiseCreated, _MessageStream_response, _MessageStream_request_id, _MessageStream_getFinalMessage, _MessageStream_getFinalText, _MessageStream_handleError, _MessageStream_beginRequest, _MessageStream_addStreamEvent, _MessageStream_endRequest, _MessageStream_accumulateMessage;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { AnthropicError, APIUserAbortError } from \"../error.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nconst JSON_BUF_PROPERTY = '__json_buf';\nfunction tracksToolInput(content) {\n return content.type === 'tool_use' || content.type === 'server_tool_use';\n}\nexport class MessageStream {\n constructor() {\n _MessageStream_instances.add(this);\n this.messages = [];\n this.receivedMessages = [];\n _MessageStream_currentMessageSnapshot.set(this, void 0);\n this.controller = new AbortController();\n _MessageStream_connectedPromise.set(this, void 0);\n _MessageStream_resolveConnectedPromise.set(this, () => { });\n _MessageStream_rejectConnectedPromise.set(this, () => { });\n _MessageStream_endPromise.set(this, void 0);\n _MessageStream_resolveEndPromise.set(this, () => { });\n _MessageStream_rejectEndPromise.set(this, () => { });\n _MessageStream_listeners.set(this, {});\n _MessageStream_ended.set(this, false);\n _MessageStream_errored.set(this, false);\n _MessageStream_aborted.set(this, false);\n _MessageStream_catchingPromiseCreated.set(this, false);\n _MessageStream_response.set(this, void 0);\n _MessageStream_request_id.set(this, void 0);\n _MessageStream_handleError.set(this, (error) => {\n __classPrivateFieldSet(this, _MessageStream_errored, true, \"f\");\n if (isAbortError(error)) {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _MessageStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof AnthropicError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const anthropicError = new AnthropicError(error.message);\n // @ts-ignore\n anthropicError.cause = error;\n return this._emit('error', anthropicError);\n }\n return this._emit('error', new AnthropicError(String(error)));\n });\n __classPrivateFieldSet(this, _MessageStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _MessageStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _MessageStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _MessageStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _MessageStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _MessageStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _MessageStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _MessageStream_endPromise, \"f\").catch(() => { });\n }\n get response() {\n return __classPrivateFieldGet(this, _MessageStream_response, \"f\");\n }\n get request_id() {\n return __classPrivateFieldGet(this, _MessageStream_request_id, \"f\");\n }\n /**\n * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request,\n * returned vie the `request-id` header which is useful for debugging requests and resporting\n * issues to Anthropic.\n *\n * This is the same as the `APIPromise.withResponse()` method.\n *\n * This method will raise an error if you created the stream using `MessageStream.fromReadableStream`\n * as no `Response` is available.\n */\n async withResponse() {\n __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, \"f\");\n const response = await __classPrivateFieldGet(this, _MessageStream_connectedPromise, \"f\");\n if (!response) {\n throw new Error('Could not resolve a `Response` object');\n }\n return {\n data: this,\n response,\n request_id: response.headers.get('request-id'),\n };\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new MessageStream();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createMessage(messages, params, options) {\n const runner = new MessageStream();\n for (const message of params.messages) {\n runner._addMessageParam(message);\n }\n runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n _run(executor) {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _MessageStream_handleError, \"f\"));\n }\n _addMessageParam(message) {\n this.messages.push(message);\n }\n _addMessage(message, emit = true) {\n this.receivedMessages.push(message);\n if (emit) {\n this._emit('message', message);\n }\n }\n async _createMessage(messages, params, options) {\n const signal = options?.signal;\n let abortHandler;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n abortHandler = this.controller.abort.bind(this.controller);\n signal.addEventListener('abort', abortHandler);\n }\n try {\n __classPrivateFieldGet(this, _MessageStream_instances, \"m\", _MessageStream_beginRequest).call(this);\n const { response, data: stream } = await messages\n .create({ ...params, stream: true }, { ...options, signal: this.controller.signal })\n .withResponse();\n this._connected(response);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _MessageStream_instances, \"m\", _MessageStream_addStreamEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n __classPrivateFieldGet(this, _MessageStream_instances, \"m\", _MessageStream_endRequest).call(this);\n }\n finally {\n if (signal && abortHandler) {\n signal.removeEventListener('abort', abortHandler);\n }\n }\n }\n _connected(response) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _MessageStream_response, response, \"f\");\n __classPrivateFieldSet(this, _MessageStream_request_id, response?.headers.get('request-id'), \"f\");\n __classPrivateFieldGet(this, _MessageStream_resolveConnectedPromise, \"f\").call(this, response);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _MessageStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _MessageStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _MessageStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this MessageStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this MessageStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this MessageStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _MessageStream_endPromise, \"f\");\n }\n get currentMessage() {\n return __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, \"f\");\n }\n /**\n * @returns a promise that resolves with the the final assistant Message response,\n * or rejects if an error occurred or the stream ended prematurely without producing a Message.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _MessageStream_instances, \"m\", _MessageStream_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant Message's text response, concatenated\n * together if there are more than one text blocks.\n * Rejects if an error occurred or the stream ended prematurely without producing a Message.\n */\n async finalText() {\n await this.done();\n return __classPrivateFieldGet(this, _MessageStream_instances, \"m\", _MessageStream_getFinalText).call(this);\n }\n _emit(event, ...args) {\n // make sure we don't emit any MessageStreamEvents after end\n if (__classPrivateFieldGet(this, _MessageStream_ended, \"f\"))\n return;\n if (event === 'end') {\n __classPrivateFieldSet(this, _MessageStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _MessageStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _MessageStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _MessageStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.final...()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _MessageStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() {\n const finalMessage = this.receivedMessages.at(-1);\n if (finalMessage) {\n this._emit('finalMessage', __classPrivateFieldGet(this, _MessageStream_instances, \"m\", _MessageStream_getFinalMessage).call(this));\n }\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n let abortHandler;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n abortHandler = this.controller.abort.bind(this.controller);\n signal.addEventListener('abort', abortHandler);\n }\n try {\n __classPrivateFieldGet(this, _MessageStream_instances, \"m\", _MessageStream_beginRequest).call(this);\n this._connected(null);\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _MessageStream_instances, \"m\", _MessageStream_addStreamEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n __classPrivateFieldGet(this, _MessageStream_instances, \"m\", _MessageStream_endRequest).call(this);\n }\n finally {\n if (signal && abortHandler) {\n signal.removeEventListener('abort', abortHandler);\n }\n }\n }\n [(_MessageStream_currentMessageSnapshot = new WeakMap(), _MessageStream_connectedPromise = new WeakMap(), _MessageStream_resolveConnectedPromise = new WeakMap(), _MessageStream_rejectConnectedPromise = new WeakMap(), _MessageStream_endPromise = new WeakMap(), _MessageStream_resolveEndPromise = new WeakMap(), _MessageStream_rejectEndPromise = new WeakMap(), _MessageStream_listeners = new WeakMap(), _MessageStream_ended = new WeakMap(), _MessageStream_errored = new WeakMap(), _MessageStream_aborted = new WeakMap(), _MessageStream_catchingPromiseCreated = new WeakMap(), _MessageStream_response = new WeakMap(), _MessageStream_request_id = new WeakMap(), _MessageStream_handleError = new WeakMap(), _MessageStream_instances = new WeakSet(), _MessageStream_getFinalMessage = function _MessageStream_getFinalMessage() {\n if (this.receivedMessages.length === 0) {\n throw new AnthropicError('stream ended without producing a Message with role=assistant');\n }\n return this.receivedMessages.at(-1);\n }, _MessageStream_getFinalText = function _MessageStream_getFinalText() {\n if (this.receivedMessages.length === 0) {\n throw new AnthropicError('stream ended without producing a Message with role=assistant');\n }\n const textBlocks = this.receivedMessages\n .at(-1)\n .content.filter((block) => block.type === 'text')\n .map((block) => block.text);\n if (textBlocks.length === 0) {\n throw new AnthropicError('stream ended without producing a content block with type=text');\n }\n return textBlocks.join(' ');\n }, _MessageStream_beginRequest = function _MessageStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, undefined, \"f\");\n }, _MessageStream_addStreamEvent = function _MessageStream_addStreamEvent(event) {\n if (this.ended)\n return;\n const messageSnapshot = __classPrivateFieldGet(this, _MessageStream_instances, \"m\", _MessageStream_accumulateMessage).call(this, event);\n this._emit('streamEvent', event, messageSnapshot);\n switch (event.type) {\n case 'content_block_delta': {\n const content = messageSnapshot.content.at(-1);\n switch (event.delta.type) {\n case 'text_delta': {\n if (content.type === 'text') {\n this._emit('text', event.delta.text, content.text || '');\n }\n break;\n }\n case 'citations_delta': {\n if (content.type === 'text') {\n this._emit('citation', event.delta.citation, content.citations ?? []);\n }\n break;\n }\n case 'input_json_delta': {\n if (tracksToolInput(content) && content.input) {\n this._emit('inputJson', event.delta.partial_json, content.input);\n }\n break;\n }\n case 'thinking_delta': {\n if (content.type === 'thinking') {\n this._emit('thinking', event.delta.thinking, content.thinking);\n }\n break;\n }\n case 'signature_delta': {\n if (content.type === 'thinking') {\n this._emit('signature', content.signature);\n }\n break;\n }\n default:\n checkNever(event.delta);\n }\n break;\n }\n case 'message_stop': {\n this._addMessageParam(messageSnapshot);\n this._addMessage(messageSnapshot, true);\n break;\n }\n case 'content_block_stop': {\n this._emit('contentBlock', messageSnapshot.content.at(-1));\n break;\n }\n case 'message_start': {\n __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, messageSnapshot, \"f\");\n break;\n }\n case 'content_block_start':\n case 'message_delta':\n break;\n }\n }, _MessageStream_endRequest = function _MessageStream_endRequest() {\n if (this.ended) {\n throw new AnthropicError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, \"f\");\n if (!snapshot) {\n throw new AnthropicError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, undefined, \"f\");\n return snapshot;\n }, _MessageStream_accumulateMessage = function _MessageStream_accumulateMessage(event) {\n let snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, \"f\");\n if (event.type === 'message_start') {\n if (snapshot) {\n throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving \"message_stop\"`);\n }\n return event.message;\n }\n if (!snapshot) {\n throw new AnthropicError(`Unexpected event order, got ${event.type} before \"message_start\"`);\n }\n switch (event.type) {\n case 'message_stop':\n return snapshot;\n case 'message_delta':\n snapshot.stop_reason = event.delta.stop_reason;\n snapshot.stop_sequence = event.delta.stop_sequence;\n snapshot.usage.output_tokens = event.usage.output_tokens;\n // Update other usage fields if they exist in the event\n if (event.usage.input_tokens != null) {\n snapshot.usage.input_tokens = event.usage.input_tokens;\n }\n if (event.usage.cache_creation_input_tokens != null) {\n snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens;\n }\n if (event.usage.cache_read_input_tokens != null) {\n snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens;\n }\n if (event.usage.server_tool_use != null) {\n snapshot.usage.server_tool_use = event.usage.server_tool_use;\n }\n return snapshot;\n case 'content_block_start':\n snapshot.content.push({ ...event.content_block });\n return snapshot;\n case 'content_block_delta': {\n const snapshotContent = snapshot.content.at(event.index);\n switch (event.delta.type) {\n case 'text_delta': {\n if (snapshotContent?.type === 'text') {\n snapshot.content[event.index] = {\n ...snapshotContent,\n text: (snapshotContent.text || '') + event.delta.text,\n };\n }\n break;\n }\n case 'citations_delta': {\n if (snapshotContent?.type === 'text') {\n snapshot.content[event.index] = {\n ...snapshotContent,\n citations: [...(snapshotContent.citations ?? []), event.delta.citation],\n };\n }\n break;\n }\n case 'input_json_delta': {\n if (snapshotContent && tracksToolInput(snapshotContent)) {\n // we need to keep track of the raw JSON string as well so that we can\n // re-parse it for each delta, for now we just store it as an untyped\n // non-enumerable property on the snapshot\n let jsonBuf = snapshotContent[JSON_BUF_PROPERTY] || '';\n jsonBuf += event.delta.partial_json;\n const newContent = { ...snapshotContent };\n Object.defineProperty(newContent, JSON_BUF_PROPERTY, {\n value: jsonBuf,\n enumerable: false,\n writable: true,\n });\n if (jsonBuf) {\n newContent.input = partialParse(jsonBuf);\n }\n snapshot.content[event.index] = newContent;\n }\n break;\n }\n case 'thinking_delta': {\n if (snapshotContent?.type === 'thinking') {\n snapshot.content[event.index] = {\n ...snapshotContent,\n thinking: snapshotContent.thinking + event.delta.thinking,\n };\n }\n break;\n }\n case 'signature_delta': {\n if (snapshotContent?.type === 'thinking') {\n snapshot.content[event.index] = {\n ...snapshotContent,\n signature: event.delta.signature,\n };\n }\n break;\n }\n default:\n checkNever(event.delta);\n }\n return snapshot;\n }\n case 'content_block_stop':\n return snapshot;\n }\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('streamEvent', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\n// used to ensure exhaustive case matching without throwing a runtime error\nfunction checkNever(x) { }\n//# sourceMappingURL=MessageStream.mjs.map",
43
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { JSONLDecoder } from \"../../internal/decoders/jsonl.mjs\";\nimport { AnthropicError } from \"../../error.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Send a batch of Message creation requests.\n *\n * The Message Batches API can be used to process multiple Messages API requests at\n * once. Once a Message Batch is created, it begins processing immediately. Batches\n * can take up to 24 hours to complete.\n *\n * Learn more about the Message Batches API in our\n * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)\n *\n * @example\n * ```ts\n * const messageBatch = await client.messages.batches.create({\n * requests: [\n * {\n * custom_id: 'my-custom-id-1',\n * params: {\n * max_tokens: 1024,\n * messages: [\n * { content: 'Hello, world', role: 'user' },\n * ],\n * model: 'claude-sonnet-4-5-20250929',\n * },\n * },\n * ],\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/v1/messages/batches', { body, ...options });\n }\n /**\n * This endpoint is idempotent and can be used to poll for Message Batch\n * completion. To access the results of a Message Batch, make a request to the\n * `results_url` field in the response.\n *\n * Learn more about the Message Batches API in our\n * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)\n *\n * @example\n * ```ts\n * const messageBatch = await client.messages.batches.retrieve(\n * 'message_batch_id',\n * );\n * ```\n */\n retrieve(messageBatchID, options) {\n return this._client.get(path `/v1/messages/batches/${messageBatchID}`, options);\n }\n /**\n * List all Message Batches within a Workspace. Most recently created batches are\n * returned first.\n *\n * Learn more about the Message Batches API in our\n * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const messageBatch of client.messages.batches.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/v1/messages/batches', (Page), { query, ...options });\n }\n /**\n * Delete a Message Batch.\n *\n * Message Batches can only be deleted once they've finished processing. If you'd\n * like to delete an in-progress batch, you must first cancel it.\n *\n * Learn more about the Message Batches API in our\n * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)\n *\n * @example\n * ```ts\n * const deletedMessageBatch =\n * await client.messages.batches.delete('message_batch_id');\n * ```\n */\n delete(messageBatchID, options) {\n return this._client.delete(path `/v1/messages/batches/${messageBatchID}`, options);\n }\n /**\n * Batches may be canceled any time before processing ends. Once cancellation is\n * initiated, the batch enters a `canceling` state, at which time the system may\n * complete any in-progress, non-interruptible requests before finalizing\n * cancellation.\n *\n * The number of canceled requests is specified in `request_counts`. To determine\n * which requests were canceled, check the individual results within the batch.\n * Note that cancellation may not result in any canceled requests if they were\n * non-interruptible.\n *\n * Learn more about the Message Batches API in our\n * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)\n *\n * @example\n * ```ts\n * const messageBatch = await client.messages.batches.cancel(\n * 'message_batch_id',\n * );\n * ```\n */\n cancel(messageBatchID, options) {\n return this._client.post(path `/v1/messages/batches/${messageBatchID}/cancel`, options);\n }\n /**\n * Streams the results of a Message Batch as a `.jsonl` file.\n *\n * Each line in the file is a JSON object containing the result of a single request\n * in the Message Batch. Results are not guaranteed to be in the same order as\n * requests. Use the `custom_id` field to match results to requests.\n *\n * Learn more about the Message Batches API in our\n * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)\n *\n * @example\n * ```ts\n * const messageBatchIndividualResponse =\n * await client.messages.batches.results('message_batch_id');\n * ```\n */\n async results(messageBatchID, options) {\n const batch = await this.retrieve(messageBatchID);\n if (!batch.results_url) {\n throw new AnthropicError(`No batch \\`results_url\\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`);\n }\n return this._client\n .get(batch.results_url, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n stream: true,\n __binaryResponse: true,\n })\n ._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller));\n }\n}\n//# sourceMappingURL=batches.mjs.map",
44
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { MessageStream } from \"../../lib/MessageStream.mjs\";\nimport * as BatchesAPI from \"./batches.mjs\";\nimport { Batches, } from \"./batches.mjs\";\nimport { MODEL_NONSTREAMING_TOKENS } from \"../../internal/constants.mjs\";\nexport class Messages extends APIResource {\n constructor() {\n super(...arguments);\n this.batches = new BatchesAPI.Batches(this._client);\n }\n create(body, options) {\n if (body.model in DEPRECATED_MODELS) {\n console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS[body.model]}\\nPlease migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);\n }\n let timeout = this._client._options.timeout;\n if (!body.stream && timeout == null) {\n const maxNonstreamingTokens = MODEL_NONSTREAMING_TOKENS[body.model] ?? undefined;\n timeout = this._client.calculateNonstreamingTimeout(body.max_tokens, maxNonstreamingTokens);\n }\n return this._client.post('/v1/messages', {\n body,\n timeout: timeout ?? 600000,\n ...options,\n stream: body.stream ?? false,\n });\n }\n /**\n * Create a Message stream\n */\n stream(body, options) {\n return MessageStream.createMessage(this, body, options);\n }\n /**\n * Count the number of tokens in a Message.\n *\n * The Token Count API can be used to count the number of tokens in a Message,\n * including tools, images, and documents, without creating it.\n *\n * Learn more about token counting in our\n * [user guide](https://docs.claude.com/en/docs/build-with-claude/token-counting)\n *\n * @example\n * ```ts\n * const messageTokensCount =\n * await client.messages.countTokens({\n * messages: [{ content: 'string', role: 'user' }],\n * model: 'claude-opus-4-5-20251101',\n * });\n * ```\n */\n countTokens(body, options) {\n return this._client.post('/v1/messages/count_tokens', { body, ...options });\n }\n}\nconst DEPRECATED_MODELS = {\n 'claude-1.3': 'November 6th, 2024',\n 'claude-1.3-100k': 'November 6th, 2024',\n 'claude-instant-1.1': 'November 6th, 2024',\n 'claude-instant-1.1-100k': 'November 6th, 2024',\n 'claude-instant-1.2': 'November 6th, 2024',\n 'claude-3-sonnet-20240229': 'July 21st, 2025',\n 'claude-3-opus-20240229': 'January 5th, 2026',\n 'claude-2.1': 'July 21st, 2025',\n 'claude-2.0': 'July 21st, 2025',\n 'claude-3-7-sonnet-latest': 'February 19th, 2026',\n 'claude-3-7-sonnet-20250219': 'February 19th, 2026',\n};\nMessages.Batches = Batches;\n//# sourceMappingURL=messages.mjs.map",
45
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Get a specific model.\n *\n * The Models API response can be used to determine information about a specific\n * model or resolve a model alias to a model ID.\n */\n retrieve(modelID, params = {}, options) {\n const { betas } = params ?? {};\n return this._client.get(path `/v1/models/${modelID}`, {\n ...options,\n headers: buildHeaders([\n { ...(betas?.toString() != null ? { 'anthropic-beta': betas?.toString() } : undefined) },\n options?.headers,\n ]),\n });\n }\n /**\n * List available models.\n *\n * The Models API response can be used to determine which models are available for\n * use in the API. More recently released models are listed first.\n */\n list(params = {}, options) {\n const { betas, ...query } = params ?? {};\n return this._client.getAPIList('/v1/models', (Page), {\n query,\n ...options,\n headers: buildHeaders([\n { ...(betas?.toString() != null ? { 'anthropic-beta': betas?.toString() } : undefined) },\n options?.headers,\n ]),\n });\n }\n}\n//# sourceMappingURL=models.mjs.map",
46
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map",
47
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _BaseAnthropic_instances, _a, _BaseAnthropic_encoder, _BaseAnthropic_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Beta, } from \"./resources/beta/beta.mjs\";\nimport { Messages, } from \"./resources/messages/messages.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\nexport const HUMAN_PROMPT = '\\\\n\\\\nHuman:';\nexport const AI_PROMPT = '\\\\n\\\\nAssistant:';\n/**\n * Base class for Anthropic API clients.\n */\nexport class BaseAnthropic {\n /**\n * API Client for interfacing with the Anthropic API.\n *\n * @param {string | null | undefined} [opts.apiKey=process.env['ANTHROPIC_API_KEY'] ?? null]\n * @param {string | null | undefined} [opts.authToken=process.env['ANTHROPIC_AUTH_TOKEN'] ?? null]\n * @param {string} [opts.baseURL=process.env['ANTHROPIC_BASE_URL'] ?? https://api.anthropic.com] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record<string, string | undefined>} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('ANTHROPIC_BASE_URL'), apiKey = readEnv('ANTHROPIC_API_KEY') ?? null, authToken = readEnv('ANTHROPIC_AUTH_TOKEN') ?? null, ...opts } = {}) {\n _BaseAnthropic_instances.add(this);\n _BaseAnthropic_encoder.set(this, void 0);\n const options = {\n apiKey,\n authToken,\n ...opts,\n baseURL: baseURL || `https://api.anthropic.com`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.AnthropicError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew Anthropic({ apiKey, dangerouslyAllowBrowser: true });\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('ANTHROPIC_LOG'), \"process.env['ANTHROPIC_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _BaseAnthropic_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : null;\n this.authToken = authToken;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n authToken: this.authToken,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n if (values.get('x-api-key') || values.get('authorization')) {\n return;\n }\n if (this.apiKey && values.get('x-api-key')) {\n return;\n }\n if (nulls.has('x-api-key')) {\n return;\n }\n if (this.authToken && values.get('authorization')) {\n return;\n }\n if (nulls.has('authorization')) {\n return;\n }\n throw new Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the \"X-Api-Key\" or \"Authorization\" headers to be explicitly omitted');\n }\n async authHeaders(opts) {\n return buildHeaders([await this.apiKeyAuth(opts), await this.bearerAuth(opts)]);\n }\n async apiKeyAuth(opts) {\n if (this.apiKey == null) {\n return undefined;\n }\n return buildHeaders([{ 'X-Api-Key': this.apiKey }]);\n }\n async bearerAuth(opts) {\n if (this.authToken == null) {\n return undefined;\n }\n return buildHeaders([{ Authorization: `Bearer ${this.authToken}` }]);\n }\n /**\n * Basic re-implementation of `qs.stringify` for primitive types.\n */\n stringifyQuery(query) {\n return Object.entries(query)\n .filter(([_, value]) => typeof value !== 'undefined')\n .map(([key, value]) => {\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n }\n if (value === null) {\n return `${encodeURIComponent(key)}=`;\n }\n throw new Errors.AnthropicError(`Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`);\n })\n .join('&');\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _BaseAnthropic_instances, \"m\", _BaseAnthropic_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n _calculateNonstreamingTimeout(maxTokens) {\n const defaultTimeout = 10 * 60;\n const expectedTimeout = (60 * 60 * maxTokens) / 128000;\n if (expectedTimeout > defaultTimeout) {\n throw new Errors.AnthropicError('Streaming is required for operations that may take longer than 10 minutes. ' +\n 'See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details');\n }\n return defaultTimeout * 1000;\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) { }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n calculateNonstreamingTimeout(maxTokens, maxNonstreamingTokens) {\n const maxTime = 60 * 60 * 1000; // 60 minutes\n const defaultTime = 60 * 10 * 1000; // 10 minutes\n const expectedTime = (maxTime * maxTokens) / 128000;\n if (expectedTime > defaultTime || (maxNonstreamingTokens != null && maxTokens > maxNonstreamingTokens)) {\n throw new Errors.AnthropicError('Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details');\n }\n return defaultTime;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n ...(this._options.dangerouslyAllowBrowser ?\n { 'anthropic-dangerous-direct-browser-access': 'true' }\n : undefined),\n 'anthropic-version': '2023-06-01',\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _BaseAnthropic_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = BaseAnthropic, _BaseAnthropic_encoder = new WeakMap(), _BaseAnthropic_instances = new WeakSet(), _BaseAnthropic_baseURLOverridden = function _BaseAnthropic_baseURLOverridden() {\n return this.baseURL !== 'https://api.anthropic.com';\n};\nBaseAnthropic.Anthropic = _a;\nBaseAnthropic.HUMAN_PROMPT = HUMAN_PROMPT;\nBaseAnthropic.AI_PROMPT = AI_PROMPT;\nBaseAnthropic.DEFAULT_TIMEOUT = 600000; // 10 minutes\nBaseAnthropic.AnthropicError = Errors.AnthropicError;\nBaseAnthropic.APIError = Errors.APIError;\nBaseAnthropic.APIConnectionError = Errors.APIConnectionError;\nBaseAnthropic.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nBaseAnthropic.APIUserAbortError = Errors.APIUserAbortError;\nBaseAnthropic.NotFoundError = Errors.NotFoundError;\nBaseAnthropic.ConflictError = Errors.ConflictError;\nBaseAnthropic.RateLimitError = Errors.RateLimitError;\nBaseAnthropic.BadRequestError = Errors.BadRequestError;\nBaseAnthropic.AuthenticationError = Errors.AuthenticationError;\nBaseAnthropic.InternalServerError = Errors.InternalServerError;\nBaseAnthropic.PermissionDeniedError = Errors.PermissionDeniedError;\nBaseAnthropic.UnprocessableEntityError = Errors.UnprocessableEntityError;\nBaseAnthropic.toFile = Uploads.toFile;\n/**\n * API Client for interfacing with the Anthropic API.\n */\nexport class Anthropic extends BaseAnthropic {\n constructor() {\n super(...arguments);\n this.completions = new API.Completions(this);\n this.messages = new API.Messages(this);\n this.models = new API.Models(this);\n this.beta = new API.Beta(this);\n }\n}\nAnthropic.Completions = Completions;\nAnthropic.Messages = Messages;\nAnthropic.Models = Models;\nAnthropic.Beta = Beta;\n//# sourceMappingURL=client.mjs.map",
48
+ "export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n",
49
+ "import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n",
50
+ "import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n",
51
+ "import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n",
52
+ "import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n",
53
+ "export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n",
54
+ "import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n",
55
+ "function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n",
56
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map",
57
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map",
58
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n/**\n * Error thrown by the API server during OAuth token exchange.\n * Can have status codes 400, 401, or 403.\n * Other status codes from OAuth endpoints are raised as normal APIError types.\n */\nexport class OAuthError extends APIError {\n constructor(status, error, headers) {\n let finalMessage = 'OAuth2 authentication error';\n let error_code = undefined;\n if (error && typeof error === 'object') {\n const errorData = error;\n error_code = errorData['error'];\n const description = errorData['error_description'];\n if (description && typeof description === 'string') {\n finalMessage = description;\n }\n else if (error_code) {\n finalMessage = error_code;\n }\n }\n super(status, error, finalMessage, headers);\n this.error_code = error_code;\n }\n}\nexport class SubjectTokenProviderError extends OpenAIError {\n constructor(message, provider, cause) {\n super(message);\n this.provider = provider;\n this.cause = cause;\n }\n}\n//# sourceMappingURL=error.mjs.map",
59
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map",
60
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map",
61
+ "export const VERSION = '6.39.1'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map",
62
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map",
63
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map",
64
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map",
65
+ "export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map",
66
+ "import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map",
67
+ "import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map",
68
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport * as qs from \"../qs/stringify.mjs\";\nexport function stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n}\n//# sourceMappingURL=query.mjs.map",
69
+ "export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map",
70
+ "var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map",
71
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'api-key' ||\n name.toLowerCase() === 'x-api-key' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map",
72
+ "var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client, synthesizeEventData) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield synthesizeEventData ? { event: sse.event, data } : data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map",
73
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream<T>`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client, props.options.__synthesizeEventData);\n }\n return Stream.fromSSEResponse(response, props.controller, client, props.options.__synthesizeEventData);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const contentLength = response.headers.get('content-length');\n if (contentLength === '0') {\n // if there is no content we can't do anything\n return undefined;\n }\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map",
74
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map",
75
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\nexport class NextCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.next = body.next || null;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.next;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map",
76
+ "import * as Shims from \"../internal/shims.mjs\";\nimport { APIError, OAuthError } from \"../core/error.mjs\";\nconst SUBJECT_TOKEN_TYPES = {\n jwt: 'urn:ietf:params:oauth:token-type:jwt',\n id: 'urn:ietf:params:oauth:token-type:id_token',\n};\nconst TOKEN_EXCHANGE_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:token-exchange';\nexport class WorkloadIdentityAuth {\n constructor(config, fetch) {\n this.cachedToken = null;\n this.refreshPromise = null;\n this.tokenExchangeUrl = 'https://auth.openai.com/oauth/token';\n this.config = config;\n this.fetch = fetch ?? Shims.getDefaultFetch();\n }\n async getToken() {\n if (!this.cachedToken || this.isTokenExpired(this.cachedToken)) {\n if (this.refreshPromise) {\n return await this.refreshPromise;\n }\n this.refreshPromise = this.refreshToken();\n try {\n const token = await this.refreshPromise;\n return token;\n }\n finally {\n this.refreshPromise = null;\n }\n }\n if (this.needsRefresh(this.cachedToken) && !this.refreshPromise) {\n this.refreshPromise = this.refreshToken().finally(() => {\n this.refreshPromise = null;\n });\n }\n return this.cachedToken.token;\n }\n async refreshToken() {\n const subjectToken = await this.config.provider.getToken();\n const body = {\n grant_type: TOKEN_EXCHANGE_GRANT_TYPE,\n subject_token: subjectToken,\n subject_token_type: SUBJECT_TOKEN_TYPES[this.config.provider.tokenType],\n identity_provider_id: this.config.identityProviderId,\n service_account_id: this.config.serviceAccountId,\n };\n if (this.config.clientId) {\n body['client_id'] = this.config.clientId;\n }\n const response = await this.fetch(this.tokenExchangeUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n });\n if (!response.ok) {\n const errorText = await response.text();\n let body = undefined;\n try {\n body = JSON.parse(errorText);\n }\n catch { }\n if (response.status === 400 || response.status === 401 || response.status === 403) {\n throw new OAuthError(response.status, body, response.headers);\n }\n throw APIError.generate(response.status, body, `Token exchange failed with status ${response.status}`, response.headers);\n }\n const tokenResponse = (await response.json());\n const expiresIn = tokenResponse.expires_in || 3600;\n const expiresAt = Date.now() + expiresIn * 1000;\n this.cachedToken = {\n token: tokenResponse.access_token,\n expiresAt,\n };\n return tokenResponse.access_token;\n }\n isTokenExpired(cachedToken) {\n return Date.now() >= cachedToken.expiresAt;\n }\n needsRefresh(cachedToken) {\n const bufferSeconds = this.config.refreshBufferSeconds ?? 1200;\n const bufferMs = bufferSeconds * 1000;\n return Date.now() >= cachedToken.expiresAt - bufferMs;\n }\n invalidateToken() {\n this.cachedToken = null;\n this.refreshPromise = null;\n }\n}\n//# sourceMappingURL=workload-identity-auth.mjs.map",
77
+ "import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map",
78
+ "import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, BlobLikePart, or AsyncIterable of BlobLikeParts\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map",
79
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map",
80
+ "import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map",
81
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * Given a list of messages comprising a conversation, the model will return a response.\n */\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options, __security: { bearerAuth: true } });\n }\n}\n//# sourceMappingURL=messages.mjs.map",
82
+ "import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map",
83
+ "export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map",
84
+ "var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map",
85
+ "export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map",
86
+ "var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map",
87
+ "import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map",
88
+ "const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map",
89
+ "var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map",
90
+ "import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map",
91
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\n/**\n * Given a list of messages comprising a conversation, the model will return a response.\n */\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', {\n body,\n ...options,\n stream: body.stream ?? false,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, {\n body,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), {\n query,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map",
92
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map",
93
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class AdminAPIKeys extends APIResource {\n /**\n * Create an organization admin API key\n *\n * @example\n * ```ts\n * const adminAPIKey =\n * await client.admin.organization.adminAPIKeys.create({\n * name: 'New Admin Key',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/organization/admin_api_keys', {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Retrieve a single organization API key\n *\n * @example\n * ```ts\n * const adminAPIKey =\n * await client.admin.organization.adminAPIKeys.retrieve(\n * 'key_id',\n * );\n * ```\n */\n retrieve(keyID, options) {\n return this._client.get(path `/organization/admin_api_keys/${keyID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * List organization API keys\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const adminAPIKey of client.admin.organization.adminAPIKeys.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/organization/admin_api_keys', (CursorPage), {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Delete an organization admin API key\n *\n * @example\n * ```ts\n * const adminAPIKey =\n * await client.admin.organization.adminAPIKeys.delete(\n * 'key_id',\n * );\n * ```\n */\n delete(keyID, options) {\n return this._client.delete(path `/organization/admin_api_keys/${keyID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=admin-api-keys.mjs.map",
94
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../../core/pagination.mjs\";\n/**\n * List user actions and configuration changes within this organization.\n */\nexport class AuditLogs extends APIResource {\n /**\n * List user actions and configuration changes within this organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const auditLogListResponse of client.admin.organization.auditLogs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/organization/audit_logs', (ConversationCursorPage), {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=audit-logs.mjs.map",
95
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { ConversationCursorPage, Page, } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Certificates extends APIResource {\n /**\n * Upload a certificate to the organization. This does **not** automatically\n * activate the certificate.\n *\n * Organizations can upload up to 50 certificates.\n *\n * @example\n * ```ts\n * const certificate =\n * await client.admin.organization.certificates.create({\n * certificate: 'certificate',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/organization/certificates', {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Get a certificate that has been uploaded to the organization.\n *\n * You can get a certificate regardless of whether it is active or not.\n *\n * @example\n * ```ts\n * const certificate =\n * await client.admin.organization.certificates.retrieve(\n * 'certificate_id',\n * );\n * ```\n */\n retrieve(certificateID, query = {}, options) {\n return this._client.get(path `/organization/certificates/${certificateID}`, {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Modify a certificate. Note that only the name can be modified.\n *\n * @example\n * ```ts\n * const certificate =\n * await client.admin.organization.certificates.update(\n * 'certificate_id',\n * );\n * ```\n */\n update(certificateID, body, options) {\n return this._client.post(path `/organization/certificates/${certificateID}`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * List uploaded certificates for this organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const certificateListResponse of client.admin.organization.certificates.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/organization/certificates', (ConversationCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Delete a certificate from the organization.\n *\n * The certificate must be inactive for the organization and all projects.\n *\n * @example\n * ```ts\n * const certificate =\n * await client.admin.organization.certificates.delete(\n * 'certificate_id',\n * );\n * ```\n */\n delete(certificateID, options) {\n return this._client.delete(path `/organization/certificates/${certificateID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Activate certificates at the organization level.\n *\n * You can atomically and idempotently activate up to 10 certificates at a time.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const certificateActivateResponse of client.admin.organization.certificates.activate(\n * { certificate_ids: ['cert_abc'] },\n * )) {\n * // ...\n * }\n * ```\n */\n activate(body, options) {\n return this._client.getAPIList('/organization/certificates/activate', (Page), {\n body,\n method: 'post',\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Deactivate certificates at the organization level.\n *\n * You can atomically and idempotently deactivate up to 10 certificates at a time.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const certificateDeactivateResponse of client.admin.organization.certificates.deactivate(\n * { certificate_ids: ['cert_abc'] },\n * )) {\n * // ...\n * }\n * ```\n */\n deactivate(body, options) {\n return this._client.getAPIList('/organization/certificates/deactivate', (Page), { body, method: 'post', ...options, __security: { adminAPIKeyAuth: true } });\n }\n}\n//# sourceMappingURL=certificates.mjs.map",
96
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class DataRetention extends APIResource {\n /**\n * Retrieves organization data retention controls.\n *\n * @example\n * ```ts\n * const organizationDataRetention =\n * await client.admin.organization.dataRetention.retrieve();\n * ```\n */\n retrieve(options) {\n return this._client.get('/organization/data_retention', {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Updates organization data retention controls.\n *\n * @example\n * ```ts\n * const organizationDataRetention =\n * await client.admin.organization.dataRetention.update({\n * retention_type: 'zero_data_retention',\n * });\n * ```\n */\n update(body, options) {\n return this._client.post('/organization/data_retention', {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=data-retention.mjs.map",
97
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Invites extends APIResource {\n /**\n * Create an invite for a user to the organization. The invite must be accepted by\n * the user before they have access to the organization.\n *\n * @example\n * ```ts\n * const invite =\n * await client.admin.organization.invites.create({\n * email: 'email',\n * role: 'reader',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/organization/invites', {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Retrieves an invite.\n *\n * @example\n * ```ts\n * const invite =\n * await client.admin.organization.invites.retrieve(\n * 'invite_id',\n * );\n * ```\n */\n retrieve(inviteID, options) {\n return this._client.get(path `/organization/invites/${inviteID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Returns a list of invites in the organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const invite of client.admin.organization.invites.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/organization/invites', (ConversationCursorPage), {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Delete an invite. If the invite has already been accepted, it cannot be deleted.\n *\n * @example\n * ```ts\n * const invite =\n * await client.admin.organization.invites.delete(\n * 'invite_id',\n * );\n * ```\n */\n delete(inviteID, options) {\n return this._client.delete(path `/organization/invites/${inviteID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=invites.mjs.map",
98
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { NextCursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Roles extends APIResource {\n /**\n * Creates a custom role for the organization.\n *\n * @example\n * ```ts\n * const role = await client.admin.organization.roles.create({\n * permissions: ['string'],\n * role_name: 'role_name',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/organization/roles', {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Retrieves an organization role.\n *\n * @example\n * ```ts\n * const role = await client.admin.organization.roles.retrieve(\n * 'role_id',\n * );\n * ```\n */\n retrieve(roleID, options) {\n return this._client.get(path `/organization/roles/${roleID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Updates an existing organization role.\n *\n * @example\n * ```ts\n * const role = await client.admin.organization.roles.update(\n * 'role_id',\n * );\n * ```\n */\n update(roleID, body, options) {\n return this._client.post(path `/organization/roles/${roleID}`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Lists the roles configured for the organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const role of client.admin.organization.roles.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/organization/roles', (NextCursorPage), {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Deletes a custom role from the organization.\n *\n * @example\n * ```ts\n * const role = await client.admin.organization.roles.delete(\n * 'role_id',\n * );\n * ```\n */\n delete(roleID, options) {\n return this._client.delete(path `/organization/roles/${roleID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=roles.mjs.map",
99
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class SpendAlerts extends APIResource {\n /**\n * Creates an organization spend alert.\n *\n * @example\n * ```ts\n * const organizationSpendAlert =\n * await client.admin.organization.spendAlerts.create({\n * currency: 'USD',\n * interval: 'month',\n * notification_channel: {\n * recipients: ['string'],\n * type: 'email',\n * },\n * threshold_amount: 0,\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/organization/spend_alerts', {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Updates an organization spend alert.\n *\n * @example\n * ```ts\n * const organizationSpendAlert =\n * await client.admin.organization.spendAlerts.update(\n * 'alert_id',\n * {\n * currency: 'USD',\n * interval: 'month',\n * notification_channel: {\n * recipients: ['string'],\n * type: 'email',\n * },\n * threshold_amount: 0,\n * },\n * );\n * ```\n */\n update(alertID, body, options) {\n return this._client.post(path `/organization/spend_alerts/${alertID}`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Lists organization spend alerts.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const organizationSpendAlert of client.admin.organization.spendAlerts.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/organization/spend_alerts', (ConversationCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Deletes an organization spend alert.\n *\n * @example\n * ```ts\n * const organizationSpendAlertDeleted =\n * await client.admin.organization.spendAlerts.delete(\n * 'alert_id',\n * );\n * ```\n */\n delete(alertID, options) {\n return this._client.delete(path `/organization/spend_alerts/${alertID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=spend-alerts.mjs.map",
100
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Usage extends APIResource {\n /**\n * Get audio speeches usage details for the organization.\n *\n * @example\n * ```ts\n * const response =\n * await client.admin.organization.usage.audioSpeeches({\n * start_time: 0,\n * });\n * ```\n */\n audioSpeeches(query, options) {\n return this._client.get('/organization/usage/audio_speeches', {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Get audio transcriptions usage details for the organization.\n *\n * @example\n * ```ts\n * const response =\n * await client.admin.organization.usage.audioTranscriptions(\n * { start_time: 0 },\n * );\n * ```\n */\n audioTranscriptions(query, options) {\n return this._client.get('/organization/usage/audio_transcriptions', {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Get code interpreter sessions usage details for the organization.\n *\n * @example\n * ```ts\n * const response =\n * await client.admin.organization.usage.codeInterpreterSessions(\n * { start_time: 0 },\n * );\n * ```\n */\n codeInterpreterSessions(query, options) {\n return this._client.get('/organization/usage/code_interpreter_sessions', {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Get completions usage details for the organization.\n *\n * @example\n * ```ts\n * const response =\n * await client.admin.organization.usage.completions({\n * start_time: 0,\n * });\n * ```\n */\n completions(query, options) {\n return this._client.get('/organization/usage/completions', {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Get costs details for the organization.\n *\n * @example\n * ```ts\n * const response =\n * await client.admin.organization.usage.costs({\n * start_time: 0,\n * });\n * ```\n */\n costs(query, options) {\n return this._client.get('/organization/costs', {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Get embeddings usage details for the organization.\n *\n * @example\n * ```ts\n * const response =\n * await client.admin.organization.usage.embeddings({\n * start_time: 0,\n * });\n * ```\n */\n embeddings(query, options) {\n return this._client.get('/organization/usage/embeddings', {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Get file search calls usage details for the organization.\n *\n * @example\n * ```ts\n * const response =\n * await client.admin.organization.usage.fileSearchCalls({\n * start_time: 0,\n * });\n * ```\n */\n fileSearchCalls(query, options) {\n return this._client.get('/organization/usage/file_search_calls', {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Get images usage details for the organization.\n *\n * @example\n * ```ts\n * const response =\n * await client.admin.organization.usage.images({\n * start_time: 0,\n * });\n * ```\n */\n images(query, options) {\n return this._client.get('/organization/usage/images', {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Get moderations usage details for the organization.\n *\n * @example\n * ```ts\n * const response =\n * await client.admin.organization.usage.moderations({\n * start_time: 0,\n * });\n * ```\n */\n moderations(query, options) {\n return this._client.get('/organization/usage/moderations', {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Get vector stores usage details for the organization.\n *\n * @example\n * ```ts\n * const response =\n * await client.admin.organization.usage.vectorStores({\n * start_time: 0,\n * });\n * ```\n */\n vectorStores(query, options) {\n return this._client.get('/organization/usage/vector_stores', {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Get web search calls usage details for the organization.\n *\n * @example\n * ```ts\n * const response =\n * await client.admin.organization.usage.webSearchCalls({\n * start_time: 0,\n * });\n * ```\n */\n webSearchCalls(query, options) {\n return this._client.get('/organization/usage/web_search_calls', {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=usage.mjs.map",
101
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { NextCursorPage } from \"../../../../core/pagination.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class Roles extends APIResource {\n /**\n * Assigns an organization role to a group within the organization.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.groups.roles.create(\n * 'group_id',\n * { role_id: 'role_id' },\n * );\n * ```\n */\n create(groupID, body, options) {\n return this._client.post(path `/organization/groups/${groupID}/roles`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Retrieves an organization role assigned to a group.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.groups.roles.retrieve(\n * 'role_id',\n * { group_id: 'group_id' },\n * );\n * ```\n */\n retrieve(roleID, params, options) {\n const { group_id } = params;\n return this._client.get(path `/organization/groups/${group_id}/roles/${roleID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Lists the organization roles assigned to a group within the organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const roleListResponse of client.admin.organization.groups.roles.list(\n * 'group_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(groupID, query = {}, options) {\n return this._client.getAPIList(path `/organization/groups/${groupID}/roles`, (NextCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Unassigns an organization role from a group within the organization.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.groups.roles.delete(\n * 'role_id',\n * { group_id: 'group_id' },\n * );\n * ```\n */\n delete(roleID, params, options) {\n const { group_id } = params;\n return this._client.delete(path `/organization/groups/${group_id}/roles/${roleID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=roles.mjs.map",
102
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { NextCursorPage } from \"../../../../core/pagination.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class Users extends APIResource {\n /**\n * Adds a user to a group.\n *\n * @example\n * ```ts\n * const user =\n * await client.admin.organization.groups.users.create(\n * 'group_id',\n * { user_id: 'user_id' },\n * );\n * ```\n */\n create(groupID, body, options) {\n return this._client.post(path `/organization/groups/${groupID}/users`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Retrieves a user in a group.\n *\n * @example\n * ```ts\n * const user =\n * await client.admin.organization.groups.users.retrieve(\n * 'user_id',\n * { group_id: 'group_id' },\n * );\n * ```\n */\n retrieve(userID, params, options) {\n const { group_id } = params;\n return this._client.get(path `/organization/groups/${group_id}/users/${userID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Lists the users assigned to a group.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const organizationGroupUser of client.admin.organization.groups.users.list(\n * 'group_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(groupID, query = {}, options) {\n return this._client.getAPIList(path `/organization/groups/${groupID}/users`, (NextCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Removes a user from a group.\n *\n * @example\n * ```ts\n * const user =\n * await client.admin.organization.groups.users.delete(\n * 'user_id',\n * { group_id: 'group_id' },\n * );\n * ```\n */\n delete(userID, params, options) {\n const { group_id } = params;\n return this._client.delete(path `/organization/groups/${group_id}/users/${userID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=users.mjs.map",
103
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as RolesAPI from \"./roles.mjs\";\nimport { Roles, } from \"./roles.mjs\";\nimport * as UsersAPI from \"./users.mjs\";\nimport { Users, } from \"./users.mjs\";\nimport { NextCursorPage } from \"../../../../core/pagination.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class Groups extends APIResource {\n constructor() {\n super(...arguments);\n this.users = new UsersAPI.Users(this._client);\n this.roles = new RolesAPI.Roles(this._client);\n }\n /**\n * Creates a new group in the organization.\n *\n * @example\n * ```ts\n * const group = await client.admin.organization.groups.create(\n * { name: 'x' },\n * );\n * ```\n */\n create(body, options) {\n return this._client.post('/organization/groups', {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Retrieves a group.\n *\n * @example\n * ```ts\n * const group =\n * await client.admin.organization.groups.retrieve(\n * 'group_id',\n * );\n * ```\n */\n retrieve(groupID, options) {\n return this._client.get(path `/organization/groups/${groupID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Updates a group's information.\n *\n * @example\n * ```ts\n * const group = await client.admin.organization.groups.update(\n * 'group_id',\n * { name: 'x' },\n * );\n * ```\n */\n update(groupID, body, options) {\n return this._client.post(path `/organization/groups/${groupID}`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Lists all groups in the organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const group of client.admin.organization.groups.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/organization/groups', (NextCursorPage), {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Deletes a group from the organization.\n *\n * @example\n * ```ts\n * const group = await client.admin.organization.groups.delete(\n * 'group_id',\n * );\n * ```\n */\n delete(groupID, options) {\n return this._client.delete(path `/organization/groups/${groupID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\nGroups.Users = Users;\nGroups.Roles = Roles;\n//# sourceMappingURL=groups.mjs.map",
104
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../../../core/pagination.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class APIKeys extends APIResource {\n /**\n * Retrieves an API key in the project.\n *\n * @example\n * ```ts\n * const projectAPIKey =\n * await client.admin.organization.projects.apiKeys.retrieve(\n * 'api_key_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n retrieve(apiKeyID, params, options) {\n const { project_id } = params;\n return this._client.get(path `/organization/projects/${project_id}/api_keys/${apiKeyID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Returns a list of API keys in the project.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const projectAPIKey of client.admin.organization.projects.apiKeys.list(\n * 'project_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(projectID, query = {}, options) {\n return this._client.getAPIList(path `/organization/projects/${projectID}/api_keys`, (ConversationCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Deletes an API key from the project.\n *\n * Returns confirmation of the key deletion, or an error if the key belonged to a\n * service account.\n *\n * @example\n * ```ts\n * const apiKey =\n * await client.admin.organization.projects.apiKeys.delete(\n * 'api_key_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n delete(apiKeyID, params, options) {\n const { project_id } = params;\n return this._client.delete(path `/organization/projects/${project_id}/api_keys/${apiKeyID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=api-keys.mjs.map",
105
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { ConversationCursorPage, Page, } from \"../../../../core/pagination.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class Certificates extends APIResource {\n /**\n * List certificates for this project.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const certificateListResponse of client.admin.organization.projects.certificates.list(\n * 'project_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(projectID, query = {}, options) {\n return this._client.getAPIList(path `/organization/projects/${projectID}/certificates`, (ConversationCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Activate certificates at the project level.\n *\n * You can atomically and idempotently activate up to 10 certificates at a time.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const certificateActivateResponse of client.admin.organization.projects.certificates.activate(\n * 'project_id',\n * { certificate_ids: ['cert_abc'] },\n * )) {\n * // ...\n * }\n * ```\n */\n activate(projectID, body, options) {\n return this._client.getAPIList(path `/organization/projects/${projectID}/certificates/activate`, (Page), { body, method: 'post', ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Deactivate certificates at the project level. You can atomically and\n * idempotently deactivate up to 10 certificates at a time.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const certificateDeactivateResponse of client.admin.organization.projects.certificates.deactivate(\n * 'project_id',\n * { certificate_ids: ['cert_abc'] },\n * )) {\n * // ...\n * }\n * ```\n */\n deactivate(projectID, body, options) {\n return this._client.getAPIList(path `/organization/projects/${projectID}/certificates/deactivate`, (Page), { body, method: 'post', ...options, __security: { adminAPIKeyAuth: true } });\n }\n}\n//# sourceMappingURL=certificates.mjs.map",
106
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class DataRetention extends APIResource {\n /**\n * Retrieves project data retention controls.\n *\n * @example\n * ```ts\n * const projectDataRetention =\n * await client.admin.organization.projects.dataRetention.retrieve(\n * 'project_id',\n * );\n * ```\n */\n retrieve(projectID, options) {\n return this._client.get(path `/organization/projects/${projectID}/data_retention`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Updates project data retention controls.\n *\n * @example\n * ```ts\n * const projectDataRetention =\n * await client.admin.organization.projects.dataRetention.update(\n * 'project_id',\n * { retention_type: 'organization_default' },\n * );\n * ```\n */\n update(projectID, body, options) {\n return this._client.post(path `/organization/projects/${projectID}/data_retention`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=data-retention.mjs.map",
107
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class HostedToolPermissions extends APIResource {\n /**\n * Returns hosted tool permissions for a project.\n *\n * @example\n * ```ts\n * const projectHostedToolPermissions =\n * await client.admin.organization.projects.hostedToolPermissions.retrieve(\n * 'project_id',\n * );\n * ```\n */\n retrieve(projectID, options) {\n return this._client.get(path `/organization/projects/${projectID}/hosted_tool_permissions`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Updates hosted tool permissions for a project.\n *\n * @example\n * ```ts\n * const projectHostedToolPermissions =\n * await client.admin.organization.projects.hostedToolPermissions.update(\n * 'project_id',\n * );\n * ```\n */\n update(projectID, body, options) {\n return this._client.post(path `/organization/projects/${projectID}/hosted_tool_permissions`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=hosted-tool-permissions.mjs.map",
108
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class ModelPermissions extends APIResource {\n /**\n * Returns model permissions for a project.\n *\n * @example\n * ```ts\n * const projectModelPermissions =\n * await client.admin.organization.projects.modelPermissions.retrieve(\n * 'project_id',\n * );\n * ```\n */\n retrieve(projectID, options) {\n return this._client.get(path `/organization/projects/${projectID}/model_permissions`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Updates model permissions for a project.\n *\n * @example\n * ```ts\n * const projectModelPermissions =\n * await client.admin.organization.projects.modelPermissions.update(\n * 'project_id',\n * { mode: 'allow_list', model_ids: ['string'] },\n * );\n * ```\n */\n update(projectID, body, options) {\n return this._client.post(path `/organization/projects/${projectID}/model_permissions`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Deletes model permissions for a project.\n *\n * @example\n * ```ts\n * const projectModelPermissionsDeleted =\n * await client.admin.organization.projects.modelPermissions.delete(\n * 'project_id',\n * );\n * ```\n */\n delete(projectID, options) {\n return this._client.delete(path `/organization/projects/${projectID}/model_permissions`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=model-permissions.mjs.map",
109
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../../../core/pagination.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class RateLimits extends APIResource {\n /**\n * Returns the rate limits per model for a project.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const projectRateLimit of client.admin.organization.projects.rateLimits.listRateLimits(\n * 'project_id',\n * )) {\n * // ...\n * }\n * ```\n */\n listRateLimits(projectID, query = {}, options) {\n return this._client.getAPIList(path `/organization/projects/${projectID}/rate_limits`, (ConversationCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Updates a project rate limit.\n *\n * @example\n * ```ts\n * const projectRateLimit =\n * await client.admin.organization.projects.rateLimits.updateRateLimit(\n * 'rate_limit_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n updateRateLimit(rateLimitID, params, options) {\n const { project_id, ...body } = params;\n return this._client.post(path `/organization/projects/${project_id}/rate_limits/${rateLimitID}`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=rate-limits.mjs.map",
110
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { NextCursorPage } from \"../../../../core/pagination.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class Roles extends APIResource {\n /**\n * Creates a custom role for a project.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.projects.roles.create(\n * 'project_id',\n * { permissions: ['string'], role_name: 'role_name' },\n * );\n * ```\n */\n create(projectID, body, options) {\n return this._client.post(path `/projects/${projectID}/roles`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Retrieves a project role.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.projects.roles.retrieve(\n * 'role_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n retrieve(roleID, params, options) {\n const { project_id } = params;\n return this._client.get(path `/projects/${project_id}/roles/${roleID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Updates an existing project role.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.projects.roles.update(\n * 'role_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n update(roleID, params, options) {\n const { project_id, ...body } = params;\n return this._client.post(path `/projects/${project_id}/roles/${roleID}`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Lists the roles configured for a project.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const role of client.admin.organization.projects.roles.list(\n * 'project_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(projectID, query = {}, options) {\n return this._client.getAPIList(path `/projects/${projectID}/roles`, (NextCursorPage), {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Deletes a custom role from a project.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.projects.roles.delete(\n * 'role_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n delete(roleID, params, options) {\n const { project_id } = params;\n return this._client.delete(path `/projects/${project_id}/roles/${roleID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=roles.mjs.map",
111
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../../../core/pagination.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class ServiceAccounts extends APIResource {\n /**\n * Creates a new service account in the project. This also returns an unredacted\n * API key for the service account.\n *\n * @example\n * ```ts\n * const serviceAccount =\n * await client.admin.organization.projects.serviceAccounts.create(\n * 'project_id',\n * { name: 'name' },\n * );\n * ```\n */\n create(projectID, body, options) {\n return this._client.post(path `/organization/projects/${projectID}/service_accounts`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Retrieves a service account in the project.\n *\n * @example\n * ```ts\n * const projectServiceAccount =\n * await client.admin.organization.projects.serviceAccounts.retrieve(\n * 'service_account_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n retrieve(serviceAccountID, params, options) {\n const { project_id } = params;\n return this._client.get(path `/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Updates a service account in the project.\n *\n * @example\n * ```ts\n * const projectServiceAccount =\n * await client.admin.organization.projects.serviceAccounts.update(\n * 'service_account_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n update(serviceAccountID, params, options) {\n const { project_id, ...body } = params;\n return this._client.post(path `/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { body, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Returns a list of service accounts in the project.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const projectServiceAccount of client.admin.organization.projects.serviceAccounts.list(\n * 'project_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(projectID, query = {}, options) {\n return this._client.getAPIList(path `/organization/projects/${projectID}/service_accounts`, (ConversationCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Deletes a service account from the project.\n *\n * Returns confirmation of service account deletion, or an error if the project is\n * archived (archived projects have no service accounts).\n *\n * @example\n * ```ts\n * const serviceAccount =\n * await client.admin.organization.projects.serviceAccounts.delete(\n * 'service_account_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n delete(serviceAccountID, params, options) {\n const { project_id } = params;\n return this._client.delete(path `/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { ...options, __security: { adminAPIKeyAuth: true } });\n }\n}\n//# sourceMappingURL=service-accounts.mjs.map",
112
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../../../core/pagination.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class SpendAlerts extends APIResource {\n /**\n * Creates a project spend alert.\n *\n * @example\n * ```ts\n * const projectSpendAlert =\n * await client.admin.organization.projects.spendAlerts.create(\n * 'project_id',\n * {\n * currency: 'USD',\n * interval: 'month',\n * notification_channel: {\n * recipients: ['string'],\n * type: 'email',\n * },\n * threshold_amount: 0,\n * },\n * );\n * ```\n */\n create(projectID, body, options) {\n return this._client.post(path `/organization/projects/${projectID}/spend_alerts`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Updates a project spend alert.\n *\n * @example\n * ```ts\n * const projectSpendAlert =\n * await client.admin.organization.projects.spendAlerts.update(\n * 'alert_id',\n * {\n * project_id: 'project_id',\n * currency: 'USD',\n * interval: 'month',\n * notification_channel: {\n * recipients: ['string'],\n * type: 'email',\n * },\n * threshold_amount: 0,\n * },\n * );\n * ```\n */\n update(alertID, params, options) {\n const { project_id, ...body } = params;\n return this._client.post(path `/organization/projects/${project_id}/spend_alerts/${alertID}`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Lists project spend alerts.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const projectSpendAlert of client.admin.organization.projects.spendAlerts.list(\n * 'project_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(projectID, query = {}, options) {\n return this._client.getAPIList(path `/organization/projects/${projectID}/spend_alerts`, (ConversationCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Deletes a project spend alert.\n *\n * @example\n * ```ts\n * const projectSpendAlertDeleted =\n * await client.admin.organization.projects.spendAlerts.delete(\n * 'alert_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n delete(alertID, params, options) {\n const { project_id } = params;\n return this._client.delete(path `/organization/projects/${project_id}/spend_alerts/${alertID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=spend-alerts.mjs.map",
113
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../../core/resource.mjs\";\nimport { NextCursorPage } from \"../../../../../core/pagination.mjs\";\nimport { path } from \"../../../../../internal/utils/path.mjs\";\nexport class Roles extends APIResource {\n /**\n * Assigns a project role to a group within a project.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.projects.groups.roles.create(\n * 'group_id',\n * { project_id: 'project_id', role_id: 'role_id' },\n * );\n * ```\n */\n create(groupID, params, options) {\n const { project_id, ...body } = params;\n return this._client.post(path `/projects/${project_id}/groups/${groupID}/roles`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Retrieves a project role assigned to a group.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.projects.groups.roles.retrieve(\n * 'role_id',\n * { project_id: 'project_id', group_id: 'group_id' },\n * );\n * ```\n */\n retrieve(roleID, params, options) {\n const { project_id, group_id } = params;\n return this._client.get(path `/projects/${project_id}/groups/${group_id}/roles/${roleID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Lists the project roles assigned to a group within a project.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const roleListResponse of client.admin.organization.projects.groups.roles.list(\n * 'group_id',\n * { project_id: 'project_id' },\n * )) {\n * // ...\n * }\n * ```\n */\n list(groupID, params, options) {\n const { project_id, ...query } = params;\n return this._client.getAPIList(path `/projects/${project_id}/groups/${groupID}/roles`, (NextCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Unassigns a project role from a group within a project.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.projects.groups.roles.delete(\n * 'role_id',\n * { project_id: 'project_id', group_id: 'group_id' },\n * );\n * ```\n */\n delete(roleID, params, options) {\n const { project_id, group_id } = params;\n return this._client.delete(path `/projects/${project_id}/groups/${group_id}/roles/${roleID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=roles.mjs.map",
114
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../../core/resource.mjs\";\nimport * as RolesAPI from \"./roles.mjs\";\nimport { Roles, } from \"./roles.mjs\";\nimport { NextCursorPage } from \"../../../../../core/pagination.mjs\";\nimport { path } from \"../../../../../internal/utils/path.mjs\";\nexport class Groups extends APIResource {\n constructor() {\n super(...arguments);\n this.roles = new RolesAPI.Roles(this._client);\n }\n /**\n * Grants a group access to a project.\n *\n * @example\n * ```ts\n * const projectGroup =\n * await client.admin.organization.projects.groups.create(\n * 'project_id',\n * { group_id: 'group_id', role: 'role' },\n * );\n * ```\n */\n create(projectID, body, options) {\n return this._client.post(path `/organization/projects/${projectID}/groups`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Retrieves a project's group.\n *\n * @example\n * ```ts\n * const projectGroup =\n * await client.admin.organization.projects.groups.retrieve(\n * 'group_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n retrieve(groupID, params, options) {\n const { project_id, ...query } = params;\n return this._client.get(path `/organization/projects/${project_id}/groups/${groupID}`, {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Lists the groups that have access to a project.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const projectGroup of client.admin.organization.projects.groups.list(\n * 'project_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(projectID, query = {}, options) {\n return this._client.getAPIList(path `/organization/projects/${projectID}/groups`, (NextCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Revokes a group's access to a project.\n *\n * @example\n * ```ts\n * const group =\n * await client.admin.organization.projects.groups.delete(\n * 'group_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n delete(groupID, params, options) {\n const { project_id } = params;\n return this._client.delete(path `/organization/projects/${project_id}/groups/${groupID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\nGroups.Roles = Roles;\n//# sourceMappingURL=groups.mjs.map",
115
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../../core/resource.mjs\";\nimport { NextCursorPage } from \"../../../../../core/pagination.mjs\";\nimport { path } from \"../../../../../internal/utils/path.mjs\";\nexport class Roles extends APIResource {\n /**\n * Assigns a project role to a user within a project.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.projects.users.roles.create(\n * 'user_id',\n * { project_id: 'project_id', role_id: 'role_id' },\n * );\n * ```\n */\n create(userID, params, options) {\n const { project_id, ...body } = params;\n return this._client.post(path `/projects/${project_id}/users/${userID}/roles`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Retrieves a project role assigned to a user.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.projects.users.roles.retrieve(\n * 'role_id',\n * { project_id: 'project_id', user_id: 'user_id' },\n * );\n * ```\n */\n retrieve(roleID, params, options) {\n const { project_id, user_id } = params;\n return this._client.get(path `/projects/${project_id}/users/${user_id}/roles/${roleID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Lists the project roles assigned to a user within a project.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const roleListResponse of client.admin.organization.projects.users.roles.list(\n * 'user_id',\n * { project_id: 'project_id' },\n * )) {\n * // ...\n * }\n * ```\n */\n list(userID, params, options) {\n const { project_id, ...query } = params;\n return this._client.getAPIList(path `/projects/${project_id}/users/${userID}/roles`, (NextCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Unassigns a project role from a user within a project.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.projects.users.roles.delete(\n * 'role_id',\n * { project_id: 'project_id', user_id: 'user_id' },\n * );\n * ```\n */\n delete(roleID, params, options) {\n const { project_id, user_id } = params;\n return this._client.delete(path `/projects/${project_id}/users/${user_id}/roles/${roleID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=roles.mjs.map",
116
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../../core/resource.mjs\";\nimport * as RolesAPI from \"./roles.mjs\";\nimport { Roles, } from \"./roles.mjs\";\nimport { ConversationCursorPage, } from \"../../../../../core/pagination.mjs\";\nimport { path } from \"../../../../../internal/utils/path.mjs\";\nexport class Users extends APIResource {\n constructor() {\n super(...arguments);\n this.roles = new RolesAPI.Roles(this._client);\n }\n /**\n * Adds a user to the project. Users must already be members of the organization to\n * be added to a project.\n *\n * @example\n * ```ts\n * const projectUser =\n * await client.admin.organization.projects.users.create(\n * 'project_id',\n * { role: 'role' },\n * );\n * ```\n */\n create(projectID, body, options) {\n return this._client.post(path `/organization/projects/${projectID}/users`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Retrieves a user in the project.\n *\n * @example\n * ```ts\n * const projectUser =\n * await client.admin.organization.projects.users.retrieve(\n * 'user_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n retrieve(userID, params, options) {\n const { project_id } = params;\n return this._client.get(path `/organization/projects/${project_id}/users/${userID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Modifies a user's role in the project.\n *\n * @example\n * ```ts\n * const projectUser =\n * await client.admin.organization.projects.users.update(\n * 'user_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n update(userID, params, options) {\n const { project_id, ...body } = params;\n return this._client.post(path `/organization/projects/${project_id}/users/${userID}`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Returns a list of users in the project.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const projectUser of client.admin.organization.projects.users.list(\n * 'project_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(projectID, query = {}, options) {\n return this._client.getAPIList(path `/organization/projects/${projectID}/users`, (ConversationCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Deletes a user from the project.\n *\n * Returns confirmation of project user deletion, or an error if the project is\n * archived (archived projects have no users).\n *\n * @example\n * ```ts\n * const user =\n * await client.admin.organization.projects.users.delete(\n * 'user_id',\n * { project_id: 'project_id' },\n * );\n * ```\n */\n delete(userID, params, options) {\n const { project_id } = params;\n return this._client.delete(path `/organization/projects/${project_id}/users/${userID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\nUsers.Roles = Roles;\n//# sourceMappingURL=users.mjs.map",
117
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as APIKeysAPI from \"./api-keys.mjs\";\nimport { APIKeys, } from \"./api-keys.mjs\";\nimport * as CertificatesAPI from \"./certificates.mjs\";\nimport { Certificates, } from \"./certificates.mjs\";\nimport * as DataRetentionAPI from \"./data-retention.mjs\";\nimport { DataRetention } from \"./data-retention.mjs\";\nimport * as HostedToolPermissionsAPI from \"./hosted-tool-permissions.mjs\";\nimport { HostedToolPermissions, } from \"./hosted-tool-permissions.mjs\";\nimport * as ModelPermissionsAPI from \"./model-permissions.mjs\";\nimport { ModelPermissions, } from \"./model-permissions.mjs\";\nimport * as RateLimitsAPI from \"./rate-limits.mjs\";\nimport { RateLimits, } from \"./rate-limits.mjs\";\nimport * as RolesAPI from \"./roles.mjs\";\nimport { Roles, } from \"./roles.mjs\";\nimport * as ServiceAccountsAPI from \"./service-accounts.mjs\";\nimport { ServiceAccounts, } from \"./service-accounts.mjs\";\nimport * as SpendAlertsAPI from \"./spend-alerts.mjs\";\nimport { SpendAlerts, } from \"./spend-alerts.mjs\";\nimport * as GroupsAPI from \"./groups/groups.mjs\";\nimport { Groups, } from \"./groups/groups.mjs\";\nimport * as UsersAPI from \"./users/users.mjs\";\nimport { Users, } from \"./users/users.mjs\";\nimport { ConversationCursorPage, } from \"../../../../core/pagination.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class Projects extends APIResource {\n constructor() {\n super(...arguments);\n this.users = new UsersAPI.Users(this._client);\n this.serviceAccounts = new ServiceAccountsAPI.ServiceAccounts(this._client);\n this.apiKeys = new APIKeysAPI.APIKeys(this._client);\n this.rateLimits = new RateLimitsAPI.RateLimits(this._client);\n this.modelPermissions = new ModelPermissionsAPI.ModelPermissions(this._client);\n this.hostedToolPermissions = new HostedToolPermissionsAPI.HostedToolPermissions(this._client);\n this.groups = new GroupsAPI.Groups(this._client);\n this.roles = new RolesAPI.Roles(this._client);\n this.dataRetention = new DataRetentionAPI.DataRetention(this._client);\n this.spendAlerts = new SpendAlertsAPI.SpendAlerts(this._client);\n this.certificates = new CertificatesAPI.Certificates(this._client);\n }\n /**\n * Create a new project in the organization. Projects can be created and archived,\n * but cannot be deleted.\n *\n * @example\n * ```ts\n * const project =\n * await client.admin.organization.projects.create({\n * name: 'name',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/organization/projects', {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Retrieves a project.\n *\n * @example\n * ```ts\n * const project =\n * await client.admin.organization.projects.retrieve(\n * 'project_id',\n * );\n * ```\n */\n retrieve(projectID, options) {\n return this._client.get(path `/organization/projects/${projectID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Modifies a project in the organization.\n *\n * @example\n * ```ts\n * const project =\n * await client.admin.organization.projects.update(\n * 'project_id',\n * );\n * ```\n */\n update(projectID, body, options) {\n return this._client.post(path `/organization/projects/${projectID}`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Returns a list of projects.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const project of client.admin.organization.projects.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/organization/projects', (ConversationCursorPage), {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Archives a project in the organization. Archived projects cannot be used or\n * updated.\n *\n * @example\n * ```ts\n * const project =\n * await client.admin.organization.projects.archive(\n * 'project_id',\n * );\n * ```\n */\n archive(projectID, options) {\n return this._client.post(path `/organization/projects/${projectID}/archive`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\nProjects.Users = Users;\nProjects.ServiceAccounts = ServiceAccounts;\nProjects.APIKeys = APIKeys;\nProjects.RateLimits = RateLimits;\nProjects.ModelPermissions = ModelPermissions;\nProjects.HostedToolPermissions = HostedToolPermissions;\nProjects.Groups = Groups;\nProjects.Roles = Roles;\nProjects.DataRetention = DataRetention;\nProjects.SpendAlerts = SpendAlerts;\nProjects.Certificates = Certificates;\n//# sourceMappingURL=projects.mjs.map",
118
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { NextCursorPage } from \"../../../../core/pagination.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class Roles extends APIResource {\n /**\n * Assigns an organization role to a user within the organization.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.users.roles.create(\n * 'user_id',\n * { role_id: 'role_id' },\n * );\n * ```\n */\n create(userID, body, options) {\n return this._client.post(path `/organization/users/${userID}/roles`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Retrieves an organization role assigned to a user.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.users.roles.retrieve(\n * 'role_id',\n * { user_id: 'user_id' },\n * );\n * ```\n */\n retrieve(roleID, params, options) {\n const { user_id } = params;\n return this._client.get(path `/organization/users/${user_id}/roles/${roleID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Lists the organization roles assigned to a user within the organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const roleListResponse of client.admin.organization.users.roles.list(\n * 'user_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(userID, query = {}, options) {\n return this._client.getAPIList(path `/organization/users/${userID}/roles`, (NextCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * Unassigns an organization role from a user within the organization.\n *\n * @example\n * ```ts\n * const role =\n * await client.admin.organization.users.roles.delete(\n * 'role_id',\n * { user_id: 'user_id' },\n * );\n * ```\n */\n delete(roleID, params, options) {\n const { user_id } = params;\n return this._client.delete(path `/organization/users/${user_id}/roles/${roleID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\n//# sourceMappingURL=roles.mjs.map",
119
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as RolesAPI from \"./roles.mjs\";\nimport { Roles, } from \"./roles.mjs\";\nimport { ConversationCursorPage, } from \"../../../../core/pagination.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\nexport class Users extends APIResource {\n constructor() {\n super(...arguments);\n this.roles = new RolesAPI.Roles(this._client);\n }\n /**\n * Retrieves a user by their identifier.\n *\n * @example\n * ```ts\n * const organizationUser =\n * await client.admin.organization.users.retrieve('user_id');\n * ```\n */\n retrieve(userID, options) {\n return this._client.get(path `/organization/users/${userID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Modifies a user's role in the organization.\n *\n * @example\n * ```ts\n * const organizationUser =\n * await client.admin.organization.users.update('user_id');\n * ```\n */\n update(userID, body, options) {\n return this._client.post(path `/organization/users/${userID}`, {\n body,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Lists all of the users in the organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const organizationUser of client.admin.organization.users.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/organization/users', (ConversationCursorPage), {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * Deletes a user from the organization.\n *\n * @example\n * ```ts\n * const user = await client.admin.organization.users.delete(\n * 'user_id',\n * );\n * ```\n */\n delete(userID, options) {\n return this._client.delete(path `/organization/users/${userID}`, {\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n}\nUsers.Roles = Roles;\n//# sourceMappingURL=users.mjs.map",
120
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as AdminAPIKeysAPI from \"./admin-api-keys.mjs\";\nimport { AdminAPIKeys, } from \"./admin-api-keys.mjs\";\nimport * as AuditLogsAPI from \"./audit-logs.mjs\";\nimport { AuditLogs } from \"./audit-logs.mjs\";\nimport * as CertificatesAPI from \"./certificates.mjs\";\nimport { Certificates, } from \"./certificates.mjs\";\nimport * as DataRetentionAPI from \"./data-retention.mjs\";\nimport { DataRetention } from \"./data-retention.mjs\";\nimport * as InvitesAPI from \"./invites.mjs\";\nimport { Invites, } from \"./invites.mjs\";\nimport * as RolesAPI from \"./roles.mjs\";\nimport { Roles, } from \"./roles.mjs\";\nimport * as SpendAlertsAPI from \"./spend-alerts.mjs\";\nimport { SpendAlerts, } from \"./spend-alerts.mjs\";\nimport * as UsageAPI from \"./usage.mjs\";\nimport { Usage, } from \"./usage.mjs\";\nimport * as GroupsAPI from \"./groups/groups.mjs\";\nimport { Groups, } from \"./groups/groups.mjs\";\nimport * as ProjectsAPI from \"./projects/projects.mjs\";\nimport { Projects, } from \"./projects/projects.mjs\";\nimport * as UsersAPI from \"./users/users.mjs\";\nimport { Users, } from \"./users/users.mjs\";\nexport class Organization extends APIResource {\n constructor() {\n super(...arguments);\n this.auditLogs = new AuditLogsAPI.AuditLogs(this._client);\n this.adminAPIKeys = new AdminAPIKeysAPI.AdminAPIKeys(this._client);\n this.usage = new UsageAPI.Usage(this._client);\n this.invites = new InvitesAPI.Invites(this._client);\n this.users = new UsersAPI.Users(this._client);\n this.groups = new GroupsAPI.Groups(this._client);\n this.roles = new RolesAPI.Roles(this._client);\n this.dataRetention = new DataRetentionAPI.DataRetention(this._client);\n this.spendAlerts = new SpendAlertsAPI.SpendAlerts(this._client);\n this.certificates = new CertificatesAPI.Certificates(this._client);\n this.projects = new ProjectsAPI.Projects(this._client);\n }\n}\nOrganization.AuditLogs = AuditLogs;\nOrganization.AdminAPIKeys = AdminAPIKeys;\nOrganization.Usage = Usage;\nOrganization.Invites = Invites;\nOrganization.Users = Users;\nOrganization.Groups = Groups;\nOrganization.Roles = Roles;\nOrganization.DataRetention = DataRetention;\nOrganization.SpendAlerts = SpendAlerts;\nOrganization.Certificates = Certificates;\nOrganization.Projects = Projects;\n//# sourceMappingURL=organization.mjs.map",
121
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as OrganizationAPI from \"./organization/organization.mjs\";\nimport { Organization } from \"./organization/organization.mjs\";\nexport class Admin extends APIResource {\n constructor() {\n super(...arguments);\n this.organization = new OrganizationAPI.Organization(this._client);\n }\n}\nAdmin.Organization = Organization;\n//# sourceMappingURL=admin.mjs.map",
122
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map",
123
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\n/**\n * Turn audio into text or text into audio.\n */\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * Returns the audio file content, or a stream of audio events.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'tts-1',\n * voice: 'alloy',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __security: { bearerAuth: true },\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map",
124
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\n/**\n * Turn audio into text or text into audio.\n */\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n __security: { bearerAuth: true },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map",
125
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\n/**\n * Turn audio into text or text into audio.\n */\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model }, __security: { bearerAuth: true } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map",
126
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map",
127
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\n/**\n * Create large batches of API requests to run asynchronously.\n */\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options, __security: { bearerAuth: true } });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, { ...options, __security: { bearerAuth: true } });\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), {\n query,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=batches.mjs.map",
128
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\n/**\n * Build Assistants that can call models and use tools.\n */\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @deprecated\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @deprecated\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Modifies an assistant.\n *\n * @deprecated\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @deprecated\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Delete an assistant.\n *\n * @deprecated\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map",
129
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map",
130
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map",
131
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map",
132
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create a ChatKit session.\n *\n * @example\n * ```ts\n * const chatSession =\n * await client.beta.chatkit.sessions.create({\n * user: 'x',\n * workflow: { id: 'id' },\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/chatkit/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Cancel an active ChatKit session and return its most recent metadata.\n *\n * Cancelling prevents new requests from using the issued client secret.\n *\n * @example\n * ```ts\n * const chatSession =\n * await client.beta.chatkit.sessions.cancel('cksess_123');\n * ```\n */\n cancel(sessionID, options) {\n return this._client.post(path `/chatkit/sessions/${sessionID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map",
133
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Threads extends APIResource {\n /**\n * Retrieve a ChatKit thread by its identifier.\n *\n * @example\n * ```ts\n * const chatkitThread =\n * await client.beta.chatkit.threads.retrieve('cthr_123');\n * ```\n */\n retrieve(threadID, options) {\n return this._client.get(path `/chatkit/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * List ChatKit threads with optional pagination and user filters.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatkitThread of client.beta.chatkit.threads.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chatkit/threads', (ConversationCursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Delete a ChatKit thread along with its items and stored attachments.\n *\n * @example\n * ```ts\n * const thread = await client.beta.chatkit.threads.delete(\n * 'cthr_123',\n * );\n * ```\n */\n delete(threadID, options) {\n return this._client.delete(path `/chatkit/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * List items that belong to a ChatKit thread.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const thread of client.beta.chatkit.threads.listItems(\n * 'cthr_123',\n * )) {\n * // ...\n * }\n * ```\n */\n listItems(threadID, query = {}, options) {\n return this._client.getAPIList(path `/chatkit/threads/${threadID}/items`, (ConversationCursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=threads.mjs.map",
134
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions } from \"./sessions.mjs\";\nimport * as ThreadsAPI from \"./threads.mjs\";\nimport { Threads, } from \"./threads.mjs\";\nexport class ChatKit extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nChatKit.Sessions = Sessions;\nChatKit.Threads = Threads;\n//# sourceMappingURL=chatkit.mjs.map",
135
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * Build Assistants that can call models and use tools.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map",
136
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * Build Assistants that can call models and use tools.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map",
137
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map",
138
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() || undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim() || undefined;\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map",
139
+ "var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map",
140
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * Build Assistants that can call models and use tools.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n __synthesizeEventData: true,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n __synthesizeEventData: true,\n __security: { bearerAuth: true },\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map",
141
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * Build Assistants that can call models and use tools.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n __synthesizeEventData: true,\n __security: { bearerAuth: true },\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map",
142
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ChatKitAPI from \"./chatkit/chatkit.mjs\";\nimport { ChatKit } from \"./chatkit/chatkit.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.chatkit = new ChatKitAPI.ChatKit(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.ChatKit = ChatKit;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map",
143
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\n/**\n * Given a prompt, the model will return one or more predicted completions, and can also return the probabilities of alternative tokens at each position.\n */\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', {\n body,\n ...options,\n stream: body.stream ?? false,\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=completions.mjs.map",
144
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __security: { bearerAuth: true },\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map",
145
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { maybeMultipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map",
146
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options, __security: { bearerAuth: true } });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), {\n query,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map",
147
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\n/**\n * Manage conversations and conversation items.\n */\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, {\n query,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options, __security: { bearerAuth: true } });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=items.mjs.map",
148
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\n/**\n * Manage conversations and conversation items.\n */\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options, __security: { bearerAuth: true } });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, {\n body,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map",
149
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\n/**\n * Get a vector representation of a given input that can be easily consumed by machine learning models and algorithms.\n */\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n __security: { bearerAuth: true },\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map",
150
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * Manage and run evals in the OpenAI platform.\n */\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options, __security: { bearerAuth: true } });\n }\n}\n//# sourceMappingURL=output-items.mjs.map",
151
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * Manage and run evals in the OpenAI platform.\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, {\n body,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map",
152
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\n/**\n * Manage and run evals in the OpenAI platform.\n */\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options, __security: { bearerAuth: true } });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, { ...options, __security: { bearerAuth: true } });\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options, __security: { bearerAuth: true } });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), {\n query,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, { ...options, __security: { bearerAuth: true } });\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map",
153
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\n/**\n * Files are used to upload documents that can be used with features like Assistants and Fine-tuning.\n */\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and each project can store up to 2.5 TB of files in total. There\n * is no organization-wide storage limit. Uploads to this endpoint are rate-limited\n * to 1,000 requests per minute per authenticated user.\n *\n * - The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools)\n * for details.\n * - The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input)\n * or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n * - The Batch API only supports `.jsonl` files up to 200 MB in size. The input\n * also has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n * - For Retrieval or `file_search` ingestion, upload files here first. If you need\n * to attach multiple uploaded files to the same vector store, use\n * [`/vector_stores/{vector_store_id}/file_batches`](https://platform.openai.com/docs/api-reference/vector-stores-file-batches/createBatch)\n * instead of attaching them one by one. Vector store attachment has separate\n * limits from file upload, including 2,000 attached files per minute per\n * organization.\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, { ...options, __security: { bearerAuth: true } });\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), {\n query,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Delete a file and remove it from all vector stores.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, { ...options, __security: { bearerAuth: true } });\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __security: { bearerAuth: true },\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map",
154
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map",
155
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\n/**\n * Manage fine-tuning jobs to tailor a model to your specific training data.\n */\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', {\n body,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', {\n body,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=graders.mjs.map",
156
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map",
157
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { ConversationCursorPage, Page, } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * Manage fine-tuning jobs to tailor a model to your specific training data.\n */\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @deprecated Retrieve is deprecated. Please swap to the paginated list method instead.\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n __security: { adminAPIKeyAuth: true },\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionListResponse of client.fineTuning.checkpoints.permissions.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (ConversationCursorPage), { query, ...options, __security: { adminAPIKeyAuth: true } });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, { ...options, __security: { adminAPIKeyAuth: true } });\n }\n}\n//# sourceMappingURL=permissions.mjs.map",
158
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map",
159
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * Manage fine-tuning jobs to tailor a model to your specific training data.\n */\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options, __security: { bearerAuth: true } });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map",
160
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * Manage fine-tuning jobs to tailor a model to your specific training data.\n */\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options, __security: { bearerAuth: true } });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), {\n query,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options, __security: { bearerAuth: true } });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map",
161
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map",
162
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map",
163
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map",
164
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\n/**\n * Given a prompt and/or an input image, the model will generate a new image.\n */\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false, __security: { bearerAuth: true } }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', {\n body,\n ...options,\n stream: body.stream ?? false,\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=images.mjs.map",
165
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\n/**\n * List and describe the various models available in the API.\n */\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, { ...options, __security: { bearerAuth: true } });\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), { ...options, __security: { bearerAuth: true } });\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, { ...options, __security: { bearerAuth: true } });\n }\n}\n//# sourceMappingURL=models.mjs.map",
166
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\n/**\n * Given text and/or image inputs, classifies if those inputs are potentially harmful.\n */\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options, __security: { bearerAuth: true } });\n }\n}\n//# sourceMappingURL=moderations.mjs.map",
167
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Calls extends APIResource {\n /**\n * Accept an incoming SIP call and configure the realtime session that will handle\n * it.\n *\n * @example\n * ```ts\n * await client.realtime.calls.accept('call_id', {\n * type: 'realtime',\n * });\n * ```\n */\n accept(callID, body, options) {\n return this._client.post(path `/realtime/calls/${callID}/accept`, {\n body,\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * End an active Realtime API call, whether it was initiated over SIP or WebRTC.\n *\n * @example\n * ```ts\n * await client.realtime.calls.hangup('call_id');\n * ```\n */\n hangup(callID, options) {\n return this._client.post(path `/realtime/calls/${callID}/hangup`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Transfer an active SIP call to a new destination using the SIP REFER verb.\n *\n * @example\n * ```ts\n * await client.realtime.calls.refer('call_id', {\n * target_uri: 'tel:+14155550123',\n * });\n * ```\n */\n refer(callID, body, options) {\n return this._client.post(path `/realtime/calls/${callID}/refer`, {\n body,\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Decline an incoming SIP call by returning a SIP status code to the caller.\n *\n * @example\n * ```ts\n * await client.realtime.calls.reject('call_id');\n * ```\n */\n reject(callID, body = {}, options) {\n return this._client.post(path `/realtime/calls/${callID}/reject`, {\n body,\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=calls.mjs.map",
168
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n *\n * Client secrets are short-lived tokens that can be passed to a client app, such\n * as a web frontend or mobile client, which grants access to the Realtime API\n * without leaking your main API key. You can configure a custom TTL for each\n * client secret.\n *\n * You can also attach session configuration options to the client secret, which\n * will be applied to any sessions created using that client secret, but these can\n * also be overridden by the client connection.\n *\n * [Learn more about authentication with client secrets over WebRTC](https://platform.openai.com/docs/guides/realtime-webrtc).\n *\n * Returns the created client secret and the effective session object. The client\n * secret is a string that looks like `ek_1234`.\n *\n * @example\n * ```ts\n * const clientSecret =\n * await client.realtime.clientSecrets.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', {\n body,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map",
169
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CallsAPI from \"./calls.mjs\";\nimport { Calls } from \"./calls.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n this.calls = new CallsAPI.Calls(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\nRealtime.Calls = Calls;\n//# sourceMappingURL=realtime.mjs.map",
170
+ "import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map",
171
+ "var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map",
172
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options, __security: { bearerAuth: true } });\n }\n}\n//# sourceMappingURL=input-items.mjs.map",
173
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class InputTokens extends APIResource {\n /**\n * Returns input token counts of the request.\n *\n * Returns an object with `object` set to `response.input_tokens` and an\n * `input_tokens` count.\n *\n * @example\n * ```ts\n * const response = await client.responses.inputTokens.count();\n * ```\n */\n count(body = {}, options) {\n return this._client.post('/responses/input_tokens', {\n body,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=input-tokens.mjs.map",
174
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport * as InputTokensAPI from \"./input-tokens.mjs\";\nimport { InputTokens } from \"./input-tokens.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n this.inputTokens = new InputTokensAPI.InputTokens(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', {\n body,\n ...options,\n stream: body.stream ?? false,\n __security: { bearerAuth: true },\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n __security: { bearerAuth: true },\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Compact a conversation. Returns a compacted response object.\n *\n * Learn when and how to compact long-running conversations in the\n * [conversation state guide](https://platform.openai.com/docs/guides/conversation-state#managing-the-context-window).\n * For ZDR-compatible compaction details, see\n * [Compaction (advanced)](https://platform.openai.com/docs/guides/conversation-state#compaction-advanced).\n *\n * @example\n * ```ts\n * const compactedResponse = await client.responses.compact({\n * model: 'gpt-5.4',\n * });\n * ```\n */\n compact(body, options) {\n return this._client.post('/responses/compact', { body, ...options, __security: { bearerAuth: true } });\n }\n}\nResponses.InputItems = InputItems;\nResponses.InputTokens = InputTokens;\n//# sourceMappingURL=responses.mjs.map",
175
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Download a skill zip bundle by its ID.\n */\n retrieve(skillID, options) {\n return this._client.get(path `/skills/${skillID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __security: { bearerAuth: true },\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map",
176
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Download a skill version zip bundle.\n */\n retrieve(version, params, options) {\n const { skill_id } = params;\n return this._client.get(path `/skills/${skill_id}/versions/${version}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __security: { bearerAuth: true },\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map",
177
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { maybeMultipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Versions extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a new immutable skill version.\n */\n create(skillID, body = {}, options) {\n return this._client.post(path `/skills/${skillID}/versions`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client));\n }\n /**\n * Get a specific skill version.\n */\n retrieve(version, params, options) {\n const { skill_id } = params;\n return this._client.get(path `/skills/${skill_id}/versions/${version}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * List skill versions for a skill.\n */\n list(skillID, query = {}, options) {\n return this._client.getAPIList(path `/skills/${skillID}/versions`, (CursorPage), {\n query,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Delete a skill version.\n */\n delete(version, params, options) {\n const { skill_id } = params;\n return this._client.delete(path `/skills/${skill_id}/versions/${version}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n}\nVersions.Content = Content;\n//# sourceMappingURL=versions.mjs.map",
178
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport * as VersionsAPI from \"./versions/versions.mjs\";\nimport { Versions, } from \"./versions/versions.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { maybeMultipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Skills extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n this.versions = new VersionsAPI.Versions(this._client);\n }\n /**\n * Create a new skill.\n */\n create(body = {}, options) {\n return this._client.post('/skills', maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client));\n }\n /**\n * Get a skill by its ID.\n */\n retrieve(skillID, options) {\n return this._client.get(path `/skills/${skillID}`, { ...options, __security: { bearerAuth: true } });\n }\n /**\n * Update the default version pointer for a skill.\n */\n update(skillID, body, options) {\n return this._client.post(path `/skills/${skillID}`, {\n body,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * List all skills for the current project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/skills', (CursorPage), {\n query,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Delete a skill by its ID.\n */\n delete(skillID, options) {\n return this._client.delete(path `/skills/${skillID}`, { ...options, __security: { bearerAuth: true } });\n }\n}\nSkills.Content = Content;\nSkills.Versions = Versions;\n//# sourceMappingURL=skills.mjs.map",
179
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\n/**\n * Use Uploads to upload large files in multiple parts.\n */\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map",
180
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\n/**\n * Use Uploads to upload large files in multiple parts.\n */\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n *\n * Returns the Upload object with status `pending`.\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options, __security: { bearerAuth: true } });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n *\n * Returns the Upload object with status `cancelled`.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed. Returns the Upload object with status `completed`,\n * including an additional `file` property containing the created usable File\n * object.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, {\n body,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map",
181
+ "/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map",
182
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map",
183
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n}\n//# sourceMappingURL=files.mjs.map",
184
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n __security: { bearerAuth: true },\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map",
185
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { ConversationCursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { maybeMultipartFormRequestOptions, multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Videos extends APIResource {\n /**\n * Create a new video generation job from a prompt and optional reference assets.\n */\n create(body, options) {\n return this._client.post('/videos', multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client));\n }\n /**\n * Fetch the latest metadata for a generated video.\n */\n retrieve(videoID, options) {\n return this._client.get(path `/videos/${videoID}`, { ...options, __security: { bearerAuth: true } });\n }\n /**\n * List recently generated videos for the current project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/videos', (ConversationCursorPage), {\n query,\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Permanently delete a completed or failed video and its stored assets.\n */\n delete(videoID, options) {\n return this._client.delete(path `/videos/${videoID}`, { ...options, __security: { bearerAuth: true } });\n }\n /**\n * Create a character from an uploaded video.\n */\n createCharacter(body, options) {\n return this._client.post('/videos/characters', multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client));\n }\n /**\n * Download the generated video bytes or a derived preview asset.\n *\n * Streams the rendered video content for the specified video job.\n */\n downloadContent(videoID, query = {}, options) {\n return this._client.get(path `/videos/${videoID}/content`, {\n query,\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __security: { bearerAuth: true },\n __binaryResponse: true,\n });\n }\n /**\n * Create a new video generation job by editing a source video or existing\n * generated video.\n */\n edit(body, options) {\n return this._client.post('/videos/edits', multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client));\n }\n /**\n * Create an extension of a completed video.\n */\n extend(body, options) {\n return this._client.post('/videos/extensions', multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client));\n }\n /**\n * Fetch a character.\n */\n getCharacter(characterID, options) {\n return this._client.get(path `/videos/characters/${characterID}`, {\n ...options,\n __security: { bearerAuth: true },\n });\n }\n /**\n * Create a remix of a completed video using a refreshed prompt.\n */\n remix(videoID, body, options) {\n return this._client.post(path `/videos/${videoID}/remix`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client));\n }\n}\n//# sourceMappingURL=videos.mjs.map",
186
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../../error.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1,<base64> format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,<base64>. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map",
187
+ "// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport { stringifyQuery } from \"./internal/utils/query.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport { WorkloadIdentityAuth } from \"./auth/workload-identity-auth.mjs\";\nimport { OAuthError, SubjectTokenProviderError } from \"./core/error.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Videos, } from \"./resources/videos.mjs\";\nimport { Admin } from \"./resources/admin/admin.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Skills, } from \"./resources/skills/skills.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { Webhooks } from \"./resources/webhooks/webhooks.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\nconst WORKLOAD_IDENTITY_API_KEY_PLACEHOLDER = 'workload-identity-auth';\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | null | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? null]\n * @param {string | null | undefined} [opts.adminAPIKey=process.env['OPENAI_ADMIN_KEY'] ?? null]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record<string, string | undefined>} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY') ?? null, adminAPIKey = readEnv('OPENAI_ADMIN_KEY') ?? null, organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, workloadIdentity, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n /**\n * Given a prompt, the model will return one or more predicted completions, and can also return the probabilities of alternative tokens at each position.\n */\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n /**\n * Get a vector representation of a given input that can be easily consumed by machine learning models and algorithms.\n */\n this.embeddings = new API.Embeddings(this);\n /**\n * Files are used to upload documents that can be used with features like Assistants and Fine-tuning.\n */\n this.files = new API.Files(this);\n /**\n * Given a prompt and/or an input image, the model will generate a new image.\n */\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n /**\n * Given text and/or image inputs, classifies if those inputs are potentially harmful.\n */\n this.moderations = new API.Moderations(this);\n /**\n * List and describe the various models available in the API.\n */\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n /**\n * Create large batches of API requests to run asynchronously.\n */\n this.batches = new API.Batches(this);\n /**\n * Use Uploads to upload large files in multiple parts.\n */\n this.uploads = new API.Uploads(this);\n this.admin = new API.Admin(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n /**\n * Manage conversations and conversation items.\n */\n this.conversations = new API.Conversations(this);\n /**\n * Manage and run evals in the OpenAI platform.\n */\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n this.skills = new API.Skills(this);\n this.videos = new API.Videos(this);\n const options = {\n apiKey,\n adminAPIKey,\n organization,\n project,\n webhookSecret,\n workloadIdentity,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (apiKey && workloadIdentity) {\n throw new Errors.OpenAIError('The `apiKey` and `workloadIdentity` options are mutually exclusive');\n }\n if (!apiKey && !adminAPIKey && !workloadIdentity) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, `workloadIdentity`, `adminAPIKey`, or set the `OPENAI_API_KEY` or `OPENAI_ADMIN_KEY` environment variable.');\n }\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n const customHeadersEnv = readEnv('OPENAI_CUSTOM_HEADERS');\n if (customHeadersEnv) {\n const parsed = {};\n for (const line of customHeadersEnv.split('\\n')) {\n const colon = line.indexOf(':');\n if (colon >= 0) {\n parsed[line.substring(0, colon).trim()] = line.substring(colon + 1).trim();\n }\n }\n options.defaultHeaders = buildHeaders([parsed, options.defaultHeaders]);\n }\n this._options = options;\n if (workloadIdentity) {\n this._workloadIdentityAuth = new WorkloadIdentityAuth(workloadIdentity, this.fetch);\n }\n this.apiKey = typeof apiKey === 'string' ? apiKey : null;\n this.adminAPIKey = adminAPIKey;\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this._options.apiKey,\n adminAPIKey: this.adminAPIKey,\n workloadIdentity: this._options.workloadIdentity,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }, schemes = {\n bearerAuth: true,\n adminAPIKeyAuth: true,\n }) {\n if (values.get('authorization') || values.get('api-key')) {\n return;\n }\n if (nulls.has('authorization') || nulls.has('api-key')) {\n return;\n }\n if (this._workloadIdentityAuth && schemes.bearerAuth) {\n return;\n }\n throw new Error('Could not resolve authentication method. Expected either apiKey or adminAPIKey to be set. Or for one of the \"Authorization\" or \"api-key\" headers to be explicitly omitted');\n }\n async authHeaders(opts, schemes = {\n bearerAuth: true,\n adminAPIKeyAuth: true,\n }) {\n return buildHeaders([\n schemes.bearerAuth ? await this.bearerAuth(opts) : null,\n schemes.adminAPIKeyAuth ? await this.adminAPIKeyAuth(opts) : null,\n ]);\n }\n async bearerAuth(opts) {\n if (this._workloadIdentityAuth) {\n return buildHeaders([{ Authorization: `Bearer ${await this._workloadIdentityAuth.getToken()}` }]);\n }\n if (this.apiKey == null) {\n return undefined;\n }\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n async adminAPIKeyAuth(opts) {\n if (this.adminAPIKey == null) {\n return undefined;\n }\n return buildHeaders([{ Authorization: `Bearer ${this.adminAPIKey}` }]);\n }\n stringifyQuery(query) {\n return stringifyQuery(query);\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n const pathQuery = Object.fromEntries(url.searchParams);\n if (!isEmptyObj(defaultQuery) || !isEmptyObj(pathQuery)) {\n query = { ...pathQuery, ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n const security = options.__security ?? { bearerAuth: true };\n if (security.bearerAuth) {\n await this._callApiKey();\n }\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const security = options.__security ?? { bearerAuth: true };\n const controller = new AbortController();\n const response = await this.fetchWithAuth(url, req, timeout, controller, security).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (response instanceof OAuthError || response instanceof SubjectTokenProviderError) {\n throw response;\n }\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({\n message: getConnectionErrorMessage(response),\n cause: response,\n });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n if (response.status === 401 &&\n this._workloadIdentityAuth &&\n security.bearerAuth &&\n !options.__metadata?.['hasStreamingBody'] &&\n !options.__metadata?.['workloadIdentityTokenRefreshed']) {\n await Shims.CancelReadableStream(response.body);\n this._workloadIdentityAuth.invalidateToken();\n return this.makeRequest({\n ...options,\n __metadata: {\n ...options.__metadata,\n workloadIdentityTokenRefreshed: true,\n },\n }, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, opts && 'then' in opts ?\n opts.then((opts) => ({ method: 'get', path, ...opts }))\n : { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithAuth(url, init, timeout, controller, schemes = {\n bearerAuth: true,\n adminAPIKeyAuth: true,\n }) {\n if (this._workloadIdentityAuth && schemes.bearerAuth) {\n const headers = init.headers;\n const authHeader = headers.get('Authorization');\n if (!authHeader || authHeader === `Bearer ${WORKLOAD_IDENTITY_API_KEY_PLACEHOLDER}`) {\n const token = await this._workloadIdentityAuth.getToken();\n headers.set('Authorization', `Bearer ${token}`);\n }\n }\n const response = await this.fetchWithTimeout(url, init, timeout, controller);\n return response;\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n const abort = this._makeAbort(controller);\n if (signal)\n signal.addEventListener('abort', abort, { once: true });\n const timeout = setTimeout(abort, ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time, just do what it\n // says, but otherwise calculate a default\n if (timeoutMillis === undefined) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body, isStreamingBody } = this.buildBody({ options });\n if (isStreamingBody) {\n inputOptions.__metadata = {\n ...inputOptions.__metadata,\n hasStreamingBody: true,\n };\n }\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options, options.__security ?? { bearerAuth: true }),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers, options.__security ?? { bearerAuth: true });\n return headers.values;\n }\n _makeAbort(controller) {\n // note: we can't just inline this method inside `fetchWithTimeout()` because then the closure\n // would capture all request options, and cause a memory leak.\n return () => controller.abort();\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined, isStreamingBody: false };\n }\n const headers = buildHeaders([rawHeaders]);\n const isReadableStream = typeof globalThis.ReadableStream !== 'undefined' &&\n body instanceof globalThis.ReadableStream;\n const isRetryableBody = !isReadableStream &&\n (typeof body === 'string' ||\n body instanceof ArrayBuffer ||\n ArrayBuffer.isView(body) ||\n (typeof globalThis.Blob !== 'undefined' && body instanceof globalThis.Blob) ||\n body instanceof URLSearchParams ||\n body instanceof FormData);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n isReadableStream) {\n return { bodyHeaders: undefined, body: body, isStreamingBody: !isRetryableBody };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return {\n bodyHeaders: undefined,\n body: Shims.ReadableStreamFrom(body),\n isStreamingBody: true,\n };\n }\n else if (typeof body === 'object' &&\n headers.values.get('content-type') === 'application/x-www-form-urlencoded') {\n return {\n bodyHeaders: { 'content-type': 'application/x-www-form-urlencoded' },\n body: this.stringifyQuery(body),\n isStreamingBody: false,\n };\n }\n else {\n return { ...__classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers }), isStreamingBody: false };\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Admin = Admin;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\nOpenAI.Skills = Skills;\nOpenAI.Videos = Videos;\nfunction getConnectionErrorMessage(error) {\n if (isUndiciDispatcherVersionMismatchError(error)) {\n return `Connection error. This may be caused by passing an undici dispatcher, such as ProxyAgent, that is incompatible with the fetch implementation. If you are using undici's ProxyAgent, pass the fetch implementation from the same undici package: import { fetch, ProxyAgent } from 'undici'; new OpenAI({ fetch, fetchOptions: { dispatcher: new ProxyAgent(...) } });`;\n }\n return undefined;\n}\nfunction isUndiciDispatcherVersionMismatchError(error) {\n let current = error;\n for (let i = 0; i < 8 && current && typeof current === 'object'; i++) {\n const err = current;\n if (err.code === 'UND_ERR_INVALID_ARG' &&\n typeof err.message === 'string' &&\n err.message.includes('invalid onRequestStart method')) {\n return true;\n }\n current = err.cause;\n }\n return false;\n}\n//# sourceMappingURL=client.mjs.map",
188
+ "var __require = /* @__PURE__ */ ((x) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x, {\n get: (a, b) => (typeof require !== \"undefined\" ? require : a)[b]\n}) : x)(function(x) {\n if (typeof require !== \"undefined\") return require.apply(this, arguments);\n throw Error('Dynamic require of \"' + x + '\" is not supported');\n});\n\n// src/gitlab-anthropic-language-model.ts\nimport Anthropic from \"@anthropic-ai/sdk\";\n\n// src/gitlab-direct-access.ts\nimport { z } from \"zod\";\n\n// src/gitlab-error.ts\nvar GitLabError = class _GitLabError extends Error {\n statusCode;\n responseBody;\n cause;\n constructor(options) {\n super(options.message);\n this.name = \"GitLabError\";\n this.statusCode = options.statusCode;\n this.responseBody = options.responseBody;\n this.cause = options.cause;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, _GitLabError);\n }\n }\n static fromResponse(response, body) {\n return new _GitLabError({\n message: `GitLab API error: ${response.status} ${response.statusText}`,\n statusCode: response.status,\n responseBody: body\n });\n }\n isAuthError() {\n return this.statusCode === 401;\n }\n isRateLimitError() {\n return this.statusCode === 429;\n }\n isForbiddenError() {\n return this.statusCode === 403;\n }\n isServerError() {\n return this.statusCode !== void 0 && this.statusCode >= 500;\n }\n /**\n * Check if this error is a context overflow error (prompt too long).\n * These errors occur when the conversation exceeds the model's token limit.\n */\n isContextOverflowError() {\n if (this.statusCode !== 400) {\n return false;\n }\n const message = this.message?.toLowerCase() || \"\";\n return message.includes(\"context overflow\") || message.includes(\"prompt is too long\") || message.includes(\"prompt too long\") || message.includes(\"tokens\") && message.includes(\"maximum\");\n }\n};\n\n// src/gitlab-direct-access.ts\nvar directAccessTokenSchema = z.object({\n headers: z.record(z.string()),\n token: z.string()\n});\nvar DEFAULT_AI_GATEWAY_URL = \"https://cloud.gitlab.com\";\nvar GitLabDirectAccessClient = class {\n config;\n fetchFn;\n aiGatewayUrl;\n cachedToken = null;\n tokenExpiresAt = 0;\n constructor(config) {\n this.config = config;\n this.fetchFn = config.fetch ?? fetch;\n this.aiGatewayUrl = config.aiGatewayUrl || process.env[\"GITLAB_AI_GATEWAY_URL\"] || DEFAULT_AI_GATEWAY_URL;\n }\n /**\n * Get a direct access token for the Anthropic proxy.\n * Tokens are cached for 25 minutes (they expire after 30 minutes).\n * @param forceRefresh - If true, ignores the cache and fetches a new token\n */\n async getDirectAccessToken(forceRefresh = false) {\n const now = Date.now();\n if (!forceRefresh && this.cachedToken && this.tokenExpiresAt > now) {\n return this.cachedToken;\n }\n if (forceRefresh) {\n this.invalidateToken();\n }\n const url = `${this.config.instanceUrl}/api/v4/ai/third_party_agents/direct_access`;\n const requestBody = {};\n if (this.config.featureFlags && Object.keys(this.config.featureFlags).length > 0) {\n requestBody.feature_flags = this.config.featureFlags;\n }\n try {\n const response = await this.fetchFn(url, {\n method: \"POST\",\n headers: {\n ...this.config.getHeaders(),\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(requestBody)\n });\n if (!response.ok) {\n const errorText = await response.text();\n if (response.status === 401 && this.config.refreshApiKey && !forceRefresh) {\n try {\n await this.config.refreshApiKey();\n return await this.getDirectAccessToken(true);\n } catch (refreshError) {\n throw new GitLabError({\n message: `Failed to get direct access token: ${response.status} ${response.statusText} - ${errorText}`,\n statusCode: response.status,\n responseBody: errorText\n });\n }\n }\n if (response.status === 403) {\n throw new GitLabError({\n message: `Access denied to GitLab AI features (${this.config.instanceUrl}). This may indicate that: (1) GitLab Duo is not enabled on this instance, (2) Your account does not have access to AI features, or (3) The third-party agents feature is not available. Original error: ${response.status} ${response.statusText} - ${errorText}`,\n statusCode: response.status,\n responseBody: errorText\n });\n }\n throw new GitLabError({\n message: `Failed to get direct access token: ${response.status} ${response.statusText} - ${errorText}`,\n statusCode: response.status,\n responseBody: errorText\n });\n }\n const data = await response.json();\n const token = directAccessTokenSchema.parse(data);\n this.cachedToken = token;\n this.tokenExpiresAt = now + 25 * 60 * 1e3;\n return token;\n } catch (error) {\n if (error instanceof GitLabError) {\n throw error;\n }\n throw new GitLabError({\n message: `Failed to get direct access token: ${error}`,\n cause: error\n });\n }\n }\n /**\n * Get the Anthropic proxy base URL\n */\n getAnthropicProxyUrl() {\n const baseUrl = this.aiGatewayUrl.replace(/\\/$/, \"\");\n return `${baseUrl}/ai/v1/proxy/anthropic/`;\n }\n /**\n * Get the OpenAI proxy base URL\n * Note: The OpenAI SDK expects a base URL like https://api.openai.com/v1\n * and appends paths like /chat/completions. So we need /v1 at the end.\n */\n getOpenAIProxyUrl() {\n const baseUrl = this.aiGatewayUrl.replace(/\\/$/, \"\");\n return `${baseUrl}/ai/v1/proxy/openai/v1`;\n }\n /**\n * Invalidate the cached token\n */\n invalidateToken() {\n this.cachedToken = null;\n this.tokenExpiresAt = 0;\n }\n};\n\n// src/gitlab-anthropic-language-model.ts\nvar GitLabAnthropicLanguageModel = class {\n specificationVersion = \"v3\";\n modelId;\n supportedUrls = {};\n config;\n directAccessClient;\n anthropicClient = null;\n constructor(modelId, config) {\n this.modelId = modelId;\n this.config = config;\n this.directAccessClient = new GitLabDirectAccessClient({\n instanceUrl: config.instanceUrl,\n getHeaders: config.getHeaders,\n refreshApiKey: config.refreshApiKey,\n fetch: config.fetch,\n featureFlags: config.featureFlags,\n aiGatewayUrl: config.aiGatewayUrl\n });\n }\n get provider() {\n return this.config.provider;\n }\n /**\n * Get or create an Anthropic client with valid credentials\n * @param forceRefresh - If true, forces a token refresh before creating the client\n */\n async getAnthropicClient(forceRefresh = false) {\n const tokenData = await this.directAccessClient.getDirectAccessToken(forceRefresh);\n const { \"x-api-key\": _removed, ...filteredHeaders } = tokenData.headers;\n const mergedHeaders = {\n ...filteredHeaders,\n ...this.config.aiGatewayHeaders\n };\n this.anthropicClient = new Anthropic({\n apiKey: null,\n authToken: tokenData.token,\n baseURL: this.directAccessClient.getAnthropicProxyUrl(),\n defaultHeaders: mergedHeaders\n });\n return this.anthropicClient;\n }\n /**\n * Check if an error is a token-related authentication error that can be retried\n */\n isTokenError(error) {\n if (error instanceof Anthropic.APIError) {\n if (error.status === 401) {\n return true;\n }\n const message = error.message?.toLowerCase() || \"\";\n if (message.includes(\"token\") && (message.includes(\"expired\") || message.includes(\"revoked\") || message.includes(\"invalid\"))) {\n return true;\n }\n }\n return false;\n }\n /**\n * Check if an error is a context overflow error (prompt too long)\n * These should NOT trigger token refresh and should be reported to the user.\n */\n isContextOverflowError(error) {\n if (error instanceof Anthropic.APIError) {\n if (error.status === 400) {\n const message = error.message?.toLowerCase() || \"\";\n if (message.includes(\"prompt is too long\") || message.includes(\"prompt too long\") || message.includes(\"tokens\") && message.includes(\"maximum\")) {\n return true;\n }\n }\n }\n return false;\n }\n /**\n * Convert AI SDK tools to Anthropic tool format\n */\n convertTools(tools) {\n if (!tools || tools.length === 0) {\n return void 0;\n }\n return tools.filter((tool) => tool.type === \"function\").map((tool) => {\n const schema = tool.inputSchema;\n return {\n name: tool.name,\n description: tool.description || \"\",\n input_schema: {\n type: \"object\",\n properties: schema?.properties || {},\n required: schema?.required || []\n }\n };\n });\n }\n /**\n * Convert AI SDK tool choice to Anthropic format\n */\n convertToolChoice(toolChoice) {\n if (!toolChoice) {\n return void 0;\n }\n switch (toolChoice.type) {\n case \"auto\":\n return { type: \"auto\" };\n case \"none\":\n return void 0;\n case \"required\":\n return { type: \"any\" };\n case \"tool\":\n return { type: \"tool\", name: toolChoice.toolName };\n default:\n return void 0;\n }\n }\n /**\n * Convert AI SDK prompt to Anthropic messages format.\n *\n * Cache breakpoints (`cache_control: { type: \"ephemeral\" }`) are placed on:\n * 1. The system prompt content block — static across all turns.\n * 2. The last content block of the second-to-last message — the boundary\n * between conversation history and the current turn.\n *\n * This lets Anthropic cache the system prompt and the accumulated\n * conversation prefix, so each new turn only pays for the new content.\n *\n * @see https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching\n */\n convertPrompt(prompt) {\n let systemMessage;\n const messages = [];\n for (const message of prompt) {\n if (message.role === \"system\") {\n systemMessage = systemMessage ? `${systemMessage}\n${message.content}` : message.content;\n continue;\n }\n if (message.role === \"user\") {\n const content = [];\n for (const part of message.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text });\n } else if (part.type === \"file\") {\n }\n }\n if (content.length > 0) {\n messages.push({ role: \"user\", content });\n }\n } else if (message.role === \"assistant\") {\n const content = [];\n for (const part of message.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text });\n } else if (part.type === \"tool-call\") {\n content.push({\n type: \"tool_use\",\n id: part.toolCallId,\n name: part.toolName,\n input: typeof part.input === \"string\" ? JSON.parse(part.input) : part.input\n });\n }\n }\n if (content.length > 0) {\n messages.push({ role: \"assistant\", content });\n }\n } else if (message.role === \"tool\") {\n const content = [];\n for (const part of message.content) {\n if (part.type === \"tool-result\") {\n let resultContent;\n if (part.output.type === \"text\") {\n resultContent = part.output.value;\n } else if (part.output.type === \"json\") {\n resultContent = JSON.stringify(part.output.value);\n } else if (part.output.type === \"content\") {\n resultContent = JSON.stringify(part.output.value);\n } else if (part.output.type === \"error-text\") {\n resultContent = part.output.value;\n } else if (part.output.type === \"error-json\") {\n resultContent = JSON.stringify(part.output.value);\n } else if (part.output.type === \"execution-denied\") {\n resultContent = part.output.reason ?? \"Tool execution denied.\";\n } else {\n resultContent = JSON.stringify(part.output);\n }\n content.push({\n type: \"tool_result\",\n tool_use_id: part.toolCallId,\n content: resultContent,\n is_error: part.output.type.startsWith(\"error\")\n });\n }\n }\n if (content.length > 0) {\n messages.push({ role: \"user\", content });\n }\n }\n }\n const system = systemMessage ? [\n {\n type: \"text\",\n text: systemMessage,\n cache_control: { type: \"ephemeral\" }\n }\n ] : void 0;\n if (messages.length >= 2) {\n const penultimate = messages[messages.length - 2];\n if (Array.isArray(penultimate.content)) {\n const lastBlock = penultimate.content[penultimate.content.length - 1];\n lastBlock.cache_control = {\n type: \"ephemeral\"\n };\n }\n }\n return { system, messages };\n }\n /**\n * Convert Anthropic finish reason to AI SDK format\n */\n convertFinishReason(stopReason) {\n const unified = (() => {\n switch (stopReason) {\n case \"end_turn\":\n return \"stop\";\n case \"stop_sequence\":\n return \"stop\";\n case \"max_tokens\":\n return \"length\";\n case \"tool_use\":\n return \"tool-calls\";\n default:\n return \"other\";\n }\n })();\n return { unified, raw: stopReason ?? void 0 };\n }\n createUsage(params) {\n const inputNoCache = params?.inputTotal;\n const outputTotal = params?.outputTotal;\n const cacheRead = params?.cacheRead;\n const cacheWrite = params?.cacheWrite;\n const inputTotal = inputNoCache != null ? inputNoCache + (cacheRead ?? 0) + (cacheWrite ?? 0) : void 0;\n return {\n inputTokens: {\n total: inputTotal,\n noCache: inputNoCache,\n cacheRead,\n cacheWrite\n },\n outputTokens: {\n total: outputTotal,\n text: outputTotal,\n reasoning: params?.outputReasoning\n },\n raw: params?.raw\n };\n }\n async doGenerate(options) {\n return this.doGenerateWithRetry(options, false);\n }\n async doGenerateWithRetry(options, isRetry) {\n const client = await this.getAnthropicClient(isRetry);\n const { system, messages } = this.convertPrompt(options.prompt);\n const tools = this.convertTools(options.tools);\n const toolChoice = options.toolChoice?.type !== \"none\" ? this.convertToolChoice(options.toolChoice) : void 0;\n const anthropicModel = this.config.anthropicModel || \"claude-sonnet-4-5-20250929\";\n const maxTokens = options.maxOutputTokens || this.config.maxTokens || 8192;\n try {\n const response = await client.messages.create({\n model: anthropicModel,\n max_tokens: maxTokens,\n system,\n messages,\n tools,\n tool_choice: tools ? toolChoice : void 0,\n temperature: options.temperature,\n top_p: options.topP,\n stop_sequences: options.stopSequences\n });\n const content = [];\n for (const block of response.content) {\n if (block.type === \"text\") {\n content.push({\n type: \"text\",\n text: block.text\n });\n } else if (block.type === \"tool_use\") {\n content.push({\n type: \"tool-call\",\n toolCallId: block.id,\n toolName: block.name,\n input: JSON.stringify(block.input)\n });\n }\n }\n const rawUsage = response.usage;\n const usage = this.createUsage({\n inputTotal: response.usage.input_tokens,\n outputTotal: response.usage.output_tokens,\n cacheRead: rawUsage.cache_read_input_tokens,\n cacheWrite: rawUsage.cache_creation_input_tokens\n });\n return {\n content,\n finishReason: this.convertFinishReason(response.stop_reason),\n usage,\n warnings: []\n };\n } catch (error) {\n if (this.isContextOverflowError(error)) {\n const apiError = error;\n throw new GitLabError({\n message: `Context overflow: ${apiError.message}. Please start a new session or use /compact to reduce context.`,\n statusCode: 400,\n cause: error\n });\n }\n if (!isRetry && this.isTokenError(error)) {\n this.directAccessClient.invalidateToken();\n return this.doGenerateWithRetry(options, true);\n }\n if (error instanceof Anthropic.APIError) {\n throw new GitLabError({\n message: `Anthropic API error: ${error.message}`,\n statusCode: error.status,\n cause: error\n });\n }\n throw error;\n }\n }\n async doStream(options) {\n return this.doStreamWithRetry(options, false);\n }\n async doStreamWithRetry(options, isRetry) {\n const client = await this.getAnthropicClient(isRetry);\n const { system, messages } = this.convertPrompt(options.prompt);\n const tools = this.convertTools(options.tools);\n const toolChoice = options.toolChoice?.type !== \"none\" ? this.convertToolChoice(options.toolChoice) : void 0;\n const anthropicModel = this.config.anthropicModel || \"claude-sonnet-4-5-20250929\";\n const maxTokens = options.maxOutputTokens || this.config.maxTokens || 8192;\n const requestBody = {\n model: anthropicModel,\n max_tokens: maxTokens,\n system,\n messages,\n tools,\n tool_choice: tools ? toolChoice : void 0,\n temperature: options.temperature,\n top_p: options.topP,\n stop_sequences: options.stopSequences,\n stream: true\n };\n const self = this;\n const stream = new ReadableStream({\n start: async (controller) => {\n const contentBlocks = {};\n let usage = self.createUsage();\n let finishReason = { unified: \"other\", raw: void 0 };\n try {\n const anthropicStream = client.messages.stream(requestBody, {\n signal: options.abortSignal\n });\n controller.enqueue({\n type: \"stream-start\",\n warnings: []\n });\n await new Promise((resolve2, reject) => {\n anthropicStream.on(\"streamEvent\", (event) => {\n try {\n switch (event.type) {\n case \"message_start\":\n if (event.message.usage) {\n const msgUsage = event.message.usage;\n usage = self.createUsage({\n inputTotal: msgUsage.input_tokens,\n outputTotal: usage.outputTokens.total,\n outputReasoning: usage.outputTokens.reasoning,\n cacheRead: msgUsage.cache_read_input_tokens,\n cacheWrite: msgUsage.cache_creation_input_tokens,\n raw: usage.raw\n });\n }\n controller.enqueue({\n type: \"response-metadata\",\n id: event.message.id,\n modelId: event.message.model\n });\n break;\n case \"content_block_start\":\n if (event.content_block.type === \"text\") {\n const textId = `text-${event.index}`;\n contentBlocks[event.index] = { type: \"text\", id: textId };\n controller.enqueue({\n type: \"text-start\",\n id: textId\n });\n } else if (event.content_block.type === \"tool_use\") {\n contentBlocks[event.index] = {\n type: \"tool-call\",\n toolCallId: event.content_block.id,\n toolName: event.content_block.name,\n input: \"\"\n };\n controller.enqueue({\n type: \"tool-input-start\",\n id: event.content_block.id,\n toolName: event.content_block.name\n });\n }\n break;\n case \"content_block_delta\": {\n const block = contentBlocks[event.index];\n if (event.delta.type === \"text_delta\" && block?.type === \"text\") {\n controller.enqueue({\n type: \"text-delta\",\n id: block.id,\n delta: event.delta.text\n });\n } else if (event.delta.type === \"input_json_delta\" && block?.type === \"tool-call\") {\n block.input += event.delta.partial_json;\n controller.enqueue({\n type: \"tool-input-delta\",\n id: block.toolCallId,\n delta: event.delta.partial_json\n });\n }\n break;\n }\n case \"content_block_stop\": {\n const block = contentBlocks[event.index];\n if (block?.type === \"text\") {\n controller.enqueue({\n type: \"text-end\",\n id: block.id\n });\n } else if (block?.type === \"tool-call\") {\n controller.enqueue({\n type: \"tool-input-end\",\n id: block.toolCallId\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: block.toolCallId,\n toolName: block.toolName,\n input: block.input === \"\" ? \"{}\" : block.input\n });\n }\n delete contentBlocks[event.index];\n break;\n }\n case \"message_delta\":\n if (event.usage) {\n const deltaUsage = event.usage;\n usage = self.createUsage({\n inputTotal: usage.inputTokens.noCache,\n outputTotal: deltaUsage.output_tokens,\n outputReasoning: usage.outputTokens.reasoning,\n cacheRead: deltaUsage.cache_read_input_tokens ?? usage.inputTokens.cacheRead,\n cacheWrite: deltaUsage.cache_creation_input_tokens ?? usage.inputTokens.cacheWrite,\n raw: usage.raw\n });\n }\n if (event.delta.stop_reason) {\n finishReason = self.convertFinishReason(event.delta.stop_reason);\n }\n break;\n case \"message_stop\": {\n controller.enqueue({\n type: \"finish\",\n finishReason,\n usage\n });\n break;\n }\n }\n } catch (error) {\n controller.enqueue({\n type: \"error\",\n error: error instanceof Error ? error : new Error(String(error))\n });\n }\n });\n anthropicStream.on(\"end\", () => {\n resolve2();\n });\n anthropicStream.on(\"error\", (error) => {\n reject(error);\n });\n });\n for (const [, block] of Object.entries(contentBlocks)) {\n if (block.type === \"tool-call\") {\n controller.enqueue({\n type: \"tool-input-end\",\n id: block.toolCallId\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: block.toolCallId,\n toolName: block.toolName,\n input: block.input === \"\" ? \"{}\" : block.input\n });\n }\n }\n controller.close();\n } catch (error) {\n for (const [, block] of Object.entries(contentBlocks)) {\n if (block.type === \"tool-call\") {\n controller.enqueue({\n type: \"tool-input-end\",\n id: block.toolCallId\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: block.toolCallId,\n toolName: block.toolName,\n input: block.input === \"\" ? \"{}\" : block.input\n });\n }\n }\n if (self.isContextOverflowError(error)) {\n const apiError = error;\n controller.enqueue({\n type: \"error\",\n error: new GitLabError({\n message: `Context overflow: ${apiError.message}. Please start a new session or use /compact to reduce context.`,\n statusCode: 400,\n cause: error\n })\n });\n controller.close();\n return;\n }\n if (!isRetry && self.isTokenError(error)) {\n self.directAccessClient.invalidateToken();\n controller.enqueue({\n type: \"error\",\n error: new GitLabError({\n message: \"TOKEN_REFRESH_NEEDED\",\n cause: error\n })\n });\n controller.close();\n return;\n }\n if (error instanceof Anthropic.APIError) {\n controller.enqueue({\n type: \"error\",\n error: new GitLabError({\n message: `Anthropic API error: ${error.message}`,\n statusCode: error.status,\n cause: error\n })\n });\n } else {\n controller.enqueue({\n type: \"error\",\n error\n });\n }\n controller.close();\n }\n }\n });\n return {\n stream,\n request: { body: requestBody }\n };\n }\n};\n\n// src/gitlab-openai-language-model.ts\nimport OpenAI from \"openai\";\n\n// src/model-mappings.ts\nvar MODEL_MAPPINGS = {\n // Anthropic models\n \"duo-chat-opus-4-8\": { provider: \"anthropic\", model: \"claude-opus-4-8\" },\n \"duo-chat-opus-4-7\": { provider: \"anthropic\", model: \"claude-opus-4-7\" },\n \"duo-chat-opus-4-6\": { provider: \"anthropic\", model: \"claude-opus-4-6\" },\n \"duo-chat-sonnet-4-6\": { provider: \"anthropic\", model: \"claude-sonnet-4-6\" },\n \"duo-chat-opus-4-5\": { provider: \"anthropic\", model: \"claude-opus-4-5-20251101\" },\n \"duo-chat-sonnet-4-5\": { provider: \"anthropic\", model: \"claude-sonnet-4-5-20250929\" },\n \"duo-chat-haiku-4-5\": { provider: \"anthropic\", model: \"claude-haiku-4-5-20251001\" },\n // OpenAI models - Chat Completions API\n \"duo-chat-gpt-5-1\": { provider: \"openai\", model: \"gpt-5.1-2025-11-13\", openaiApiType: \"chat\" },\n \"duo-chat-gpt-5-2\": { provider: \"openai\", model: \"gpt-5.2-2025-12-11\", openaiApiType: \"chat\" },\n \"duo-chat-gpt-5-4\": { provider: \"openai\", model: \"gpt-5.4-2026-03-05\", openaiApiType: \"chat\" },\n \"duo-chat-gpt-5-5\": { provider: \"openai\", model: \"gpt-5.5-2026-04-23\", openaiApiType: \"chat\" },\n \"duo-chat-gpt-5-mini\": {\n provider: \"openai\",\n model: \"gpt-5-mini-2025-08-07\",\n openaiApiType: \"chat\"\n },\n \"duo-chat-gpt-5-4-mini\": { provider: \"openai\", model: \"gpt-5.4-mini\", openaiApiType: \"chat\" },\n \"duo-chat-gpt-5-4-nano\": { provider: \"openai\", model: \"gpt-5.4-nano\", openaiApiType: \"chat\" },\n // OpenAI models - Responses API (Codex models)\n \"duo-chat-gpt-5-codex\": { provider: \"openai\", model: \"gpt-5-codex\", openaiApiType: \"responses\" },\n \"duo-chat-gpt-5-2-codex\": {\n provider: \"openai\",\n model: \"gpt-5.2-codex\",\n openaiApiType: \"responses\"\n },\n \"duo-chat-gpt-5-3-codex\": {\n provider: \"openai\",\n model: \"gpt-5.3-codex\",\n openaiApiType: \"responses\"\n },\n // Duo Agent Platform model (server-side agentic via DWS WebSocket).\n // This is the single user-facing model ID. The actual underlying model ref\n // is resolved dynamically at runtime via GitLabModelDiscovery.\n \"duo-workflow\": { provider: \"workflow\", model: \"default\" },\n // Internal model refs — kept for backwards compatibility and direct use.\n // Not intended as user-facing model IDs.\n \"duo-workflow-default\": { provider: \"workflow\", model: \"default\" },\n \"duo-workflow-sonnet-4-5\": {\n provider: \"workflow\",\n model: \"anthropic/claude-sonnet-4-5-20250929\"\n },\n \"duo-workflow-sonnet-4-6\": { provider: \"workflow\", model: \"claude_sonnet_4_6\" },\n \"duo-workflow-opus-4-5\": {\n provider: \"workflow\",\n model: \"anthropic/claude-opus-4-5-20251101\"\n },\n \"duo-workflow-haiku-4-5\": { provider: \"workflow\", model: \"claude_haiku_4_5_20251001\" },\n \"duo-workflow-opus-4-6\": { provider: \"workflow\", model: \"claude_opus_4_6_20260205\" }\n};\nfunction getModelMapping(modelId) {\n return MODEL_MAPPINGS[modelId];\n}\nfunction getProviderForModelId(modelId) {\n return MODEL_MAPPINGS[modelId]?.provider;\n}\nfunction getValidModelsForProvider(provider) {\n return Object.values(MODEL_MAPPINGS).filter((m) => m.provider === provider).map((m) => m.model);\n}\nfunction getAnthropicModelForModelId(modelId) {\n const mapping = MODEL_MAPPINGS[modelId];\n return mapping?.provider === \"anthropic\" ? mapping.model : void 0;\n}\nfunction getOpenAIModelForModelId(modelId) {\n const mapping = MODEL_MAPPINGS[modelId];\n return mapping?.provider === \"openai\" ? mapping.model : void 0;\n}\nfunction getOpenAIApiType(modelId) {\n const mapping = MODEL_MAPPINGS[modelId];\n return mapping?.openaiApiType ?? \"chat\";\n}\nfunction isResponsesApiModel(modelId) {\n return getOpenAIApiType(modelId) === \"responses\";\n}\nfunction isWorkflowModel(modelId) {\n return MODEL_MAPPINGS[modelId]?.provider === \"workflow\";\n}\nfunction getWorkflowModelRef(modelId) {\n const mapping = MODEL_MAPPINGS[modelId];\n return mapping?.provider === \"workflow\" ? mapping.model : void 0;\n}\nvar MODEL_ID_TO_ANTHROPIC_MODEL = Object.fromEntries(\n Object.entries(MODEL_MAPPINGS).filter(([, v]) => v.provider === \"anthropic\").map(([k, v]) => [k, v.model])\n);\n\n// src/gitlab-openai-language-model.ts\nvar GitLabOpenAILanguageModel = class {\n specificationVersion = \"v3\";\n modelId;\n supportedUrls = {};\n config;\n directAccessClient;\n useResponsesApi;\n openaiClient = null;\n constructor(modelId, config) {\n this.modelId = modelId;\n this.config = config;\n this.useResponsesApi = config.useResponsesApi ?? isResponsesApiModel(modelId);\n this.directAccessClient = new GitLabDirectAccessClient({\n instanceUrl: config.instanceUrl,\n getHeaders: config.getHeaders,\n refreshApiKey: config.refreshApiKey,\n fetch: config.fetch,\n featureFlags: config.featureFlags,\n aiGatewayUrl: config.aiGatewayUrl\n });\n }\n get provider() {\n return this.config.provider;\n }\n async getOpenAIClient(forceRefresh = false) {\n const tokenData = await this.directAccessClient.getDirectAccessToken(forceRefresh);\n const { \"x-api-key\": _removed, ...filteredHeaders } = tokenData.headers;\n const mergedHeaders = {\n ...filteredHeaders,\n ...this.config.aiGatewayHeaders\n };\n this.openaiClient = new OpenAI({\n apiKey: tokenData.token,\n baseURL: this.directAccessClient.getOpenAIProxyUrl(),\n defaultHeaders: mergedHeaders\n });\n return this.openaiClient;\n }\n isTokenError(error) {\n if (error instanceof OpenAI.APIError) {\n if (error.status === 401) {\n return true;\n }\n const message = error.message?.toLowerCase() || \"\";\n if (message.includes(\"token\") && (message.includes(\"expired\") || message.includes(\"revoked\") || message.includes(\"invalid\"))) {\n return true;\n }\n }\n return false;\n }\n /**\n * Check if an error is a context overflow error (prompt too long)\n * These should NOT trigger token refresh and should be reported to the user.\n */\n isContextOverflowError(error) {\n if (error instanceof OpenAI.APIError) {\n if (error.status === 400) {\n const message = error.message?.toLowerCase() || \"\";\n if (message.includes(\"prompt is too long\") || message.includes(\"prompt too long\") || message.includes(\"tokens\") && message.includes(\"maximum\")) {\n return true;\n }\n }\n }\n return false;\n }\n convertTools(tools) {\n if (!tools || tools.length === 0) {\n return void 0;\n }\n return tools.filter((tool) => tool.type === \"function\").map((tool) => {\n const schema = tool.inputSchema;\n return {\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description || \"\",\n // Ensure the schema has type: 'object' as OpenAI requires it\n parameters: {\n type: \"object\",\n ...schema\n }\n }\n };\n });\n }\n convertToolChoice(toolChoice) {\n if (!toolChoice) {\n return void 0;\n }\n switch (toolChoice.type) {\n case \"auto\":\n return \"auto\";\n case \"none\":\n return \"none\";\n case \"required\":\n return \"required\";\n case \"tool\":\n return { type: \"function\", function: { name: toolChoice.toolName } };\n default:\n return void 0;\n }\n }\n convertPrompt(prompt) {\n const messages = [];\n for (const message of prompt) {\n if (message.role === \"system\") {\n messages.push({ role: \"system\", content: message.content });\n continue;\n }\n if (message.role === \"user\") {\n const textParts = message.content.filter((part) => part.type === \"text\").map((part) => part.text);\n if (textParts.length > 0) {\n messages.push({ role: \"user\", content: textParts.join(\"\\n\") });\n }\n } else if (message.role === \"assistant\") {\n const textParts = [];\n const toolCalls = [];\n for (const part of message.content) {\n if (part.type === \"text\") {\n textParts.push(part.text);\n } else if (part.type === \"tool-call\") {\n toolCalls.push({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments: typeof part.input === \"string\" ? part.input : JSON.stringify(part.input)\n }\n });\n }\n }\n const assistantMessage = {\n role: \"assistant\",\n content: textParts.length > 0 ? textParts.join(\"\\n\") : null\n };\n if (toolCalls.length > 0) {\n assistantMessage.tool_calls = toolCalls;\n }\n messages.push(assistantMessage);\n } else if (message.role === \"tool\") {\n for (const part of message.content) {\n if (part.type === \"tool-result\") {\n let resultContent;\n if (part.output.type === \"text\") {\n resultContent = part.output.value;\n } else if (part.output.type === \"json\") {\n resultContent = JSON.stringify(part.output.value);\n } else if (part.output.type === \"content\") {\n resultContent = JSON.stringify(part.output.value);\n } else if (part.output.type === \"error-text\") {\n resultContent = part.output.value;\n } else if (part.output.type === \"error-json\") {\n resultContent = JSON.stringify(part.output.value);\n } else if (part.output.type === \"execution-denied\") {\n resultContent = part.output.reason ?? \"Tool execution denied.\";\n } else {\n resultContent = JSON.stringify(part.output);\n }\n messages.push({\n role: \"tool\",\n tool_call_id: part.toolCallId,\n content: resultContent\n });\n }\n }\n }\n }\n return messages;\n }\n convertFinishReason(finishReason) {\n const unified = (() => {\n switch (finishReason) {\n case \"stop\":\n return \"stop\";\n case \"length\":\n return \"length\";\n case \"tool_calls\":\n return \"tool-calls\";\n case \"content_filter\":\n return \"content-filter\";\n default:\n return \"other\";\n }\n })();\n return { unified, raw: finishReason ?? void 0 };\n }\n createUsage(params) {\n const inputTotal = params?.inputTotal;\n const outputTotal = params?.outputTotal;\n const cacheRead = params?.cacheRead;\n return {\n inputTokens: {\n total: inputTotal,\n noCache: inputTotal == null ? void 0 : Math.max(0, inputTotal - (cacheRead ?? 0)),\n cacheRead,\n cacheWrite: void 0\n },\n outputTokens: {\n total: outputTotal,\n text: outputTotal,\n reasoning: params?.outputReasoning\n },\n raw: params?.raw\n };\n }\n /**\n * Convert tools to Responses API format\n */\n convertToolsForResponses(tools) {\n if (!tools || tools.length === 0) {\n return void 0;\n }\n return tools.filter((tool) => tool.type === \"function\").map((tool) => {\n const schema = { ...tool.inputSchema };\n delete schema[\"$schema\"];\n return {\n type: \"function\",\n name: tool.name,\n description: tool.description || \"\",\n parameters: schema,\n strict: tool.strict\n };\n });\n }\n /**\n * Convert prompt to Responses API input format\n */\n convertPromptForResponses(prompt) {\n const items = [];\n for (const message of prompt) {\n if (message.role === \"system\") {\n continue;\n }\n if (message.role === \"user\") {\n const textParts = message.content.filter((part) => part.type === \"text\").map((part) => part.text);\n if (textParts.length > 0) {\n items.push({\n type: \"message\",\n role: \"user\",\n content: textParts.map((text) => ({ type: \"input_text\", text }))\n });\n }\n } else if (message.role === \"assistant\") {\n const textParts = [];\n for (const part of message.content) {\n if (part.type === \"text\") {\n textParts.push(part.text);\n } else if (part.type === \"tool-call\") {\n items.push({\n type: \"function_call\",\n call_id: part.toolCallId,\n name: part.toolName,\n arguments: typeof part.input === \"string\" ? part.input : JSON.stringify(part.input)\n });\n }\n }\n if (textParts.length > 0) {\n items.push({\n type: \"message\",\n role: \"assistant\",\n content: [{ type: \"output_text\", text: textParts.join(\"\\n\"), annotations: [] }]\n });\n }\n } else if (message.role === \"tool\") {\n for (const part of message.content) {\n if (part.type === \"tool-result\") {\n let resultContent;\n if (part.output.type === \"text\") {\n resultContent = part.output.value;\n } else if (part.output.type === \"json\") {\n resultContent = JSON.stringify(part.output.value);\n } else if (part.output.type === \"content\") {\n resultContent = JSON.stringify(part.output.value);\n } else if (part.output.type === \"error-text\") {\n resultContent = part.output.value;\n } else if (part.output.type === \"error-json\") {\n resultContent = JSON.stringify(part.output.value);\n } else if (part.output.type === \"execution-denied\") {\n resultContent = part.output.reason ?? \"Tool execution denied.\";\n } else {\n resultContent = JSON.stringify(part.output);\n }\n items.push({\n type: \"function_call_output\",\n call_id: part.toolCallId,\n output: resultContent\n });\n }\n }\n }\n }\n return items;\n }\n /**\n * Extract system instructions from prompt\n */\n extractSystemInstructions(prompt) {\n const systemMessages = prompt.filter((m) => m.role === \"system\").map((m) => m.content).join(\"\\n\");\n return systemMessages || void 0;\n }\n /**\n * Convert Responses API status to finish reason\n * Note: Responses API returns 'completed' even when making tool calls,\n * so we need to check the content for tool calls separately.\n */\n convertResponsesStatus(status, hasToolCalls = false) {\n if (hasToolCalls) {\n return { unified: \"tool-calls\", raw: status };\n }\n const unified = (() => {\n switch (status) {\n case \"completed\":\n return \"stop\";\n case \"incomplete\":\n return \"length\";\n case \"cancelled\":\n return \"stop\";\n case \"failed\":\n return \"error\";\n default:\n return \"other\";\n }\n })();\n return { unified, raw: status };\n }\n async doGenerate(options) {\n if (this.useResponsesApi) {\n return this.doGenerateWithResponsesApi(options, false);\n }\n return this.doGenerateWithChatApi(options, false);\n }\n async doGenerateWithChatApi(options, isRetry) {\n const client = await this.getOpenAIClient(isRetry);\n const messages = this.convertPrompt(options.prompt);\n const tools = this.convertTools(options.tools);\n const toolChoice = options.toolChoice?.type !== \"none\" ? this.convertToolChoice(options.toolChoice) : void 0;\n const openaiModel = this.config.openaiModel || \"gpt-4o\";\n const maxTokens = options.maxOutputTokens || this.config.maxTokens || 8192;\n try {\n const response = await client.chat.completions.create({\n model: openaiModel,\n max_completion_tokens: maxTokens,\n messages,\n tools,\n tool_choice: tools ? toolChoice : void 0,\n temperature: options.temperature,\n top_p: options.topP,\n stop: options.stopSequences\n });\n const choice = response.choices[0];\n const content = [];\n if (choice?.message.content) {\n content.push({ type: \"text\", text: choice.message.content });\n }\n if (choice?.message.tool_calls) {\n for (const toolCall of choice.message.tool_calls) {\n if (toolCall.type === \"function\") {\n content.push({\n type: \"tool-call\",\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments\n });\n }\n }\n }\n const usage = this.createUsage({\n inputTotal: response.usage?.prompt_tokens,\n outputTotal: response.usage?.completion_tokens,\n cacheRead: response.usage?.prompt_tokens_details?.cached_tokens,\n raw: { total_tokens: response.usage?.total_tokens }\n });\n return {\n content,\n finishReason: this.convertFinishReason(choice?.finish_reason),\n usage,\n warnings: []\n };\n } catch (error) {\n if (this.isContextOverflowError(error)) {\n const apiError = error;\n throw new GitLabError({\n message: `Context overflow: ${apiError.message}. Please start a new session or use /compact to reduce context.`,\n statusCode: 400,\n cause: error\n });\n }\n if (!isRetry && this.isTokenError(error)) {\n this.directAccessClient.invalidateToken();\n return this.doGenerateWithChatApi(options, true);\n }\n if (error instanceof OpenAI.APIError) {\n throw new GitLabError({\n message: `OpenAI API error: ${error.message}`,\n statusCode: error.status,\n cause: error\n });\n }\n throw error;\n }\n }\n async doGenerateWithResponsesApi(options, isRetry) {\n const client = await this.getOpenAIClient(isRetry);\n const input = this.convertPromptForResponses(options.prompt);\n const tools = this.convertToolsForResponses(options.tools);\n const instructions = this.extractSystemInstructions(options.prompt);\n const openaiModel = this.config.openaiModel || \"gpt-5-codex\";\n const maxTokens = options.maxOutputTokens || this.config.maxTokens || 8192;\n try {\n const response = await client.responses.create({\n model: openaiModel,\n input,\n instructions,\n tools,\n max_output_tokens: maxTokens,\n temperature: options.temperature,\n top_p: options.topP,\n store: false\n });\n const content = [];\n let hasToolCalls = false;\n for (const item of response.output || []) {\n if (item.type === \"message\" && item.role === \"assistant\") {\n for (const contentItem of item.content || []) {\n if (contentItem.type === \"output_text\") {\n content.push({ type: \"text\", text: contentItem.text });\n }\n }\n } else if (item.type === \"function_call\") {\n hasToolCalls = true;\n content.push({\n type: \"tool-call\",\n toolCallId: item.call_id,\n toolName: item.name,\n input: item.arguments\n });\n }\n }\n const usage = this.createUsage({\n inputTotal: response.usage?.input_tokens,\n outputTotal: response.usage?.output_tokens,\n outputReasoning: response.usage?.output_tokens_details?.reasoning_tokens,\n cacheRead: response.usage?.input_tokens_details?.cached_tokens,\n raw: { total_tokens: response.usage?.total_tokens }\n });\n return {\n content,\n finishReason: this.convertResponsesStatus(response.status, hasToolCalls),\n usage,\n warnings: []\n };\n } catch (error) {\n if (this.isContextOverflowError(error)) {\n const apiError = error;\n throw new GitLabError({\n message: `Context overflow: ${apiError.message}. Please start a new session or use /compact to reduce context.`,\n statusCode: 400,\n cause: error\n });\n }\n if (!isRetry && this.isTokenError(error)) {\n this.directAccessClient.invalidateToken();\n return this.doGenerateWithResponsesApi(options, true);\n }\n if (error instanceof OpenAI.APIError) {\n throw new GitLabError({\n message: `OpenAI API error: ${error.message}`,\n statusCode: error.status,\n cause: error\n });\n }\n throw error;\n }\n }\n async doStream(options) {\n if (this.useResponsesApi) {\n return this.doStreamWithResponsesApi(options, false);\n }\n return this.doStreamWithChatApi(options, false);\n }\n async doStreamWithChatApi(options, isRetry) {\n const client = await this.getOpenAIClient(isRetry);\n const messages = this.convertPrompt(options.prompt);\n const tools = this.convertTools(options.tools);\n const toolChoice = options.toolChoice?.type !== \"none\" ? this.convertToolChoice(options.toolChoice) : void 0;\n const openaiModel = this.config.openaiModel || \"gpt-4o\";\n const maxTokens = options.maxOutputTokens || this.config.maxTokens || 8192;\n const requestBody = {\n model: openaiModel,\n max_completion_tokens: maxTokens,\n messages,\n tools,\n tool_choice: tools ? toolChoice : void 0,\n temperature: options.temperature,\n top_p: options.topP,\n stop: options.stopSequences,\n stream: true,\n stream_options: { include_usage: true }\n };\n const self = this;\n const stream = new ReadableStream({\n start: async (controller) => {\n const toolCalls = {};\n let usage = self.createUsage();\n let finishReason = { unified: \"other\", raw: void 0 };\n let textStarted = false;\n const textId = \"text-0\";\n try {\n const openaiStream = await client.chat.completions.create({\n ...requestBody,\n stream: true\n });\n controller.enqueue({ type: \"stream-start\", warnings: [] });\n for await (const chunk of openaiStream) {\n const choice = chunk.choices?.[0];\n if (chunk.id && !textStarted) {\n controller.enqueue({\n type: \"response-metadata\",\n id: chunk.id,\n modelId: chunk.model\n });\n }\n if (choice?.delta?.content) {\n if (!textStarted) {\n controller.enqueue({ type: \"text-start\", id: textId });\n textStarted = true;\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textId,\n delta: choice.delta.content\n });\n }\n if (choice?.delta?.tool_calls) {\n for (const tc of choice.delta.tool_calls) {\n const idx = tc.index;\n if (!toolCalls[idx]) {\n toolCalls[idx] = {\n id: tc.id || \"\",\n name: tc.function?.name || \"\",\n arguments: \"\"\n };\n controller.enqueue({\n type: \"tool-input-start\",\n id: toolCalls[idx].id,\n toolName: toolCalls[idx].name\n });\n }\n if (tc.function?.arguments) {\n toolCalls[idx].arguments += tc.function.arguments;\n controller.enqueue({\n type: \"tool-input-delta\",\n id: toolCalls[idx].id,\n delta: tc.function.arguments\n });\n }\n }\n }\n if (choice?.finish_reason) {\n finishReason = self.convertFinishReason(choice.finish_reason);\n }\n if (chunk.usage) {\n usage = self.createUsage({\n inputTotal: chunk.usage.prompt_tokens,\n outputTotal: chunk.usage.completion_tokens,\n cacheRead: chunk.usage.prompt_tokens_details?.cached_tokens,\n raw: { total_tokens: chunk.usage.total_tokens }\n });\n }\n }\n if (textStarted) {\n controller.enqueue({ type: \"text-end\", id: textId });\n }\n for (const [, tc] of Object.entries(toolCalls)) {\n controller.enqueue({ type: \"tool-input-end\", id: tc.id });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: tc.id,\n toolName: tc.name,\n input: tc.arguments || \"{}\"\n });\n }\n controller.enqueue({ type: \"finish\", finishReason, usage });\n controller.close();\n } catch (error) {\n if (self.isContextOverflowError(error)) {\n const apiError = error;\n controller.enqueue({\n type: \"error\",\n error: new GitLabError({\n message: `Context overflow: ${apiError.message}. Please start a new session or use /compact to reduce context.`,\n statusCode: 400,\n cause: error\n })\n });\n controller.close();\n return;\n }\n if (!isRetry && self.isTokenError(error)) {\n self.directAccessClient.invalidateToken();\n controller.enqueue({\n type: \"error\",\n error: new GitLabError({ message: \"TOKEN_REFRESH_NEEDED\", cause: error })\n });\n controller.close();\n return;\n }\n if (error instanceof OpenAI.APIError) {\n controller.enqueue({\n type: \"error\",\n error: new GitLabError({\n message: `OpenAI API error: ${error.message}`,\n statusCode: error.status,\n cause: error\n })\n });\n } else {\n controller.enqueue({ type: \"error\", error });\n }\n controller.close();\n }\n }\n });\n return { stream, request: { body: requestBody } };\n }\n async doStreamWithResponsesApi(options, isRetry) {\n const client = await this.getOpenAIClient(isRetry);\n const input = this.convertPromptForResponses(options.prompt);\n const tools = this.convertToolsForResponses(options.tools);\n const instructions = this.extractSystemInstructions(options.prompt);\n const openaiModel = this.config.openaiModel || \"gpt-5-codex\";\n const maxTokens = options.maxOutputTokens || this.config.maxTokens || 8192;\n const requestBody = {\n model: openaiModel,\n input,\n instructions,\n tools,\n max_output_tokens: maxTokens,\n temperature: options.temperature,\n top_p: options.topP,\n store: false,\n stream: true\n };\n const self = this;\n const stream = new ReadableStream({\n start: async (controller) => {\n const toolCalls = {};\n let usage = self.createUsage();\n let finishReason = { unified: \"other\", raw: void 0 };\n let textStarted = false;\n const textId = \"text-0\";\n try {\n const openaiStream = await client.responses.create({\n ...requestBody,\n stream: true\n });\n controller.enqueue({ type: \"stream-start\", warnings: [] });\n for await (const event of openaiStream) {\n if (event.type === \"response.created\") {\n controller.enqueue({\n type: \"response-metadata\",\n id: event.response.id,\n modelId: event.response.model\n });\n } else if (event.type === \"response.output_item.added\") {\n if (event.item.type === \"function_call\") {\n const outputIndex = event.output_index;\n const callId = event.item.call_id;\n toolCalls[outputIndex] = {\n callId,\n name: event.item.name,\n arguments: \"\"\n };\n controller.enqueue({\n type: \"tool-input-start\",\n id: callId,\n toolName: event.item.name\n });\n }\n } else if (event.type === \"response.output_text.delta\") {\n if (!textStarted) {\n controller.enqueue({ type: \"text-start\", id: textId });\n textStarted = true;\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textId,\n delta: event.delta\n });\n } else if (event.type === \"response.function_call_arguments.delta\") {\n const outputIndex = event.output_index;\n const tc = toolCalls[outputIndex];\n if (tc) {\n tc.arguments += event.delta;\n controller.enqueue({\n type: \"tool-input-delta\",\n id: tc.callId,\n delta: event.delta\n });\n }\n } else if (event.type === \"response.function_call_arguments.done\") {\n const outputIndex = event.output_index;\n const tc = toolCalls[outputIndex];\n if (tc) {\n tc.arguments = event.arguments;\n }\n } else if (event.type === \"response.completed\") {\n const hasToolCalls2 = Object.keys(toolCalls).length > 0;\n finishReason = self.convertResponsesStatus(event.response.status, hasToolCalls2);\n if (event.response.usage) {\n usage = self.createUsage({\n inputTotal: event.response.usage.input_tokens,\n outputTotal: event.response.usage.output_tokens,\n outputReasoning: event.response.usage.output_tokens_details?.reasoning_tokens,\n cacheRead: event.response.usage.input_tokens_details?.cached_tokens,\n raw: { total_tokens: event.response.usage.total_tokens }\n });\n }\n }\n }\n if (textStarted) {\n controller.enqueue({ type: \"text-end\", id: textId });\n }\n const hasToolCalls = Object.keys(toolCalls).length > 0;\n if (hasToolCalls && finishReason.unified === \"stop\") {\n finishReason = { unified: \"tool-calls\", raw: finishReason.raw };\n }\n for (const tc of Object.values(toolCalls)) {\n controller.enqueue({ type: \"tool-input-end\", id: tc.callId });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: tc.callId,\n toolName: tc.name,\n input: tc.arguments || \"{}\"\n });\n }\n controller.enqueue({ type: \"finish\", finishReason, usage });\n controller.close();\n } catch (error) {\n if (self.isContextOverflowError(error)) {\n const apiError = error;\n controller.enqueue({\n type: \"error\",\n error: new GitLabError({\n message: `Context overflow: ${apiError.message}. Please start a new session or use /compact to reduce context.`,\n statusCode: 400,\n cause: error\n })\n });\n controller.close();\n return;\n }\n if (!isRetry && self.isTokenError(error)) {\n self.directAccessClient.invalidateToken();\n controller.enqueue({\n type: \"error\",\n error: new GitLabError({ message: \"TOKEN_REFRESH_NEEDED\", cause: error })\n });\n controller.close();\n return;\n }\n if (error instanceof OpenAI.APIError) {\n controller.enqueue({\n type: \"error\",\n error: new GitLabError({\n message: `OpenAI API error: ${error.message}`,\n statusCode: error.status,\n cause: error\n })\n });\n } else {\n controller.enqueue({ type: \"error\", error });\n }\n controller.close();\n }\n }\n });\n return { stream, request: { body: requestBody } };\n }\n};\n\n// src/gitlab-workflow-client.ts\nimport WebSocket from \"isomorphic-ws\";\n\n// src/version.ts\nvar VERSION = true ? \"6.7.1\" : \"0.0.0-dev\";\n\n// src/gitlab-workflow-types.ts\nvar WorkflowType = /* @__PURE__ */ ((WorkflowType2) => {\n WorkflowType2[\"CHAT\"] = \"chat\";\n WorkflowType2[\"SOFTWARE_DEVELOPMENT\"] = \"software_development\";\n return WorkflowType2;\n})(WorkflowType || {});\nvar WS_KEEPALIVE_PING_INTERVAL_MS = 45e3;\nvar WS_HEARTBEAT_INTERVAL_MS = 6e4;\nvar DEFAULT_WORKFLOW_DEFINITION = \"chat\" /* CHAT */;\nvar DEFAULT_CLIENT_CAPABILITIES = [\"shell_command\"];\nvar CLIENT_VERSION = \"8.51.0\";\nvar STOP_REASON_USER = \"USER_ACTION_TRIGGERED_STOP\";\nvar AGENT_PRIVILEGES = {\n READ_WRITE_FILES: 1,\n READ_ONLY_GITLAB: 2,\n READ_WRITE_GITLAB: 3,\n RUN_COMMANDS: 4,\n USE_GIT: 5,\n RUN_MCP_TOOLS: 6\n};\nvar DEFAULT_AGENT_PRIVILEGES = [\n AGENT_PRIVILEGES.READ_WRITE_FILES,\n AGENT_PRIVILEGES.READ_ONLY_GITLAB,\n AGENT_PRIVILEGES.READ_WRITE_GITLAB,\n AGENT_PRIVILEGES.RUN_COMMANDS,\n AGENT_PRIVILEGES.RUN_MCP_TOOLS,\n AGENT_PRIVILEGES.USE_GIT\n];\nvar WORKFLOW_ENVIRONMENT = \"ide\";\n\n// src/gitlab-workflow-client.ts\nvar GitLabWorkflowClient = class {\n socket = null;\n keepaliveInterval = null;\n heartbeatInterval = null;\n eventCallback = null;\n closed = false;\n lastSendTime = 0;\n /**\n * Connect to the DWS WebSocket and start listening for events.\n *\n * @param options - Connection parameters\n * @param onEvent - Callback invoked for each WorkflowClientEvent\n * @returns Promise that resolves when the connection is open\n */\n connect(options, onEvent) {\n this.validateOptions(options);\n this.eventCallback = onEvent;\n this.closed = false;\n this.cleanedUp = false;\n return new Promise((resolve2, reject) => {\n const wsUrl = this.buildWebSocketUrl(options);\n const wsHeaders = this.buildWebSocketHeaders(options);\n this.socket = new WebSocket(wsUrl, { headers: wsHeaders });\n let resolved = false;\n this.socket.onopen = () => {\n resolved = true;\n this.startKeepalive();\n this.startHeartbeat();\n resolve2();\n };\n this.socket.onmessage = (event) => {\n try {\n const data = typeof event.data === \"string\" ? event.data : event.data.toString();\n const action = JSON.parse(data);\n if (!action || typeof action !== \"object\") {\n throw new Error(\"Invalid message structure: expected object\");\n }\n this.handleAction(action);\n } catch (error) {\n this.emit({\n type: \"failed\",\n error: error instanceof Error ? error : new Error(String(error))\n });\n }\n };\n this.socket.onerror = (event) => {\n const error = new Error(`WebSocket error: ${event.message || \"unknown\"}`);\n if (!resolved) {\n reject(error);\n } else {\n this.emit({ type: \"failed\", error });\n }\n };\n this.socket.onclose = (event) => {\n this.cleanup();\n if (!resolved) {\n reject(\n new Error(\n `WebSocket closed before open: code=${event.code} reason=${event.reason || \"\"}`\n )\n );\n return;\n }\n if (!this.closed) {\n this.emit({\n type: \"closed\",\n code: event.code,\n reason: event.reason || \"\"\n });\n }\n };\n });\n }\n /**\n * Send a startRequest to begin the workflow.\n */\n sendStartRequest(request) {\n this.send({ startRequest: request });\n }\n /**\n * Send an actionResponse (tool result) back to DWS.\n */\n sendActionResponse(requestID, response, error) {\n this.sendHeartbeatIfNeeded();\n const payload = {\n requestID,\n plainTextResponse: {\n response,\n error: error ?? null\n }\n };\n this.send({ actionResponse: payload });\n }\n /**\n * Stop the workflow gracefully.\n */\n stop() {\n this.send({ stopWorkflow: { reason: STOP_REASON_USER } });\n this.closed = true;\n }\n /**\n * Close the WebSocket connection.\n */\n close() {\n if (this.closed) return;\n this.closed = true;\n this.cleanup();\n const sock = this.socket;\n this.socket = null;\n if (sock) {\n if (sock.readyState === WebSocket.OPEN || sock.readyState === WebSocket.CONNECTING) {\n sock.close(1e3, \"Client closing\");\n }\n }\n }\n /**\n * Check if the WebSocket is currently connected.\n */\n get isConnected() {\n return this.socket?.readyState === WebSocket.OPEN;\n }\n // ---------------------------------------------------------------------------\n // Private\n // ---------------------------------------------------------------------------\n validateOptions(options) {\n if (!options.instanceUrl || typeof options.instanceUrl !== \"string\") {\n throw new Error(\"instanceUrl is required\");\n }\n const parsed = new URL(options.instanceUrl);\n if (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") {\n throw new Error(`Invalid instanceUrl protocol: ${parsed.protocol}`);\n }\n if (parsed.username || parsed.password) {\n throw new Error(\n \"instanceUrl must not contain authentication credentials (username/password)\"\n );\n }\n if (!options.headers || typeof options.headers !== \"object\") {\n throw new Error(\"headers are required\");\n }\n if (options.modelRef && typeof options.modelRef !== \"string\") {\n throw new Error(\"modelRef must be a string\");\n }\n }\n buildWebSocketUrl(options) {\n const baseUrl = new URL(options.instanceUrl.replace(/\\/?$/, \"/\"));\n const url = new URL(\"./api/v4/ai/duo_workflows/ws\", baseUrl);\n url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n if (options.modelRef && options.modelRef !== \"default\") {\n url.searchParams.set(\"user_selected_model_identifier\", options.modelRef);\n }\n if (options.aiCatalogItemVersionId) {\n url.searchParams.set(\"ai_catalog_item_version_id\", String(options.aiCatalogItemVersionId));\n }\n if (options.workflowDefinition) {\n url.searchParams.set(\"workflow_definition\", options.workflowDefinition);\n }\n return url.toString();\n }\n buildWebSocketHeaders(options) {\n const headers = {};\n for (const [key, value] of Object.entries(options.headers)) {\n headers[key.toLowerCase()] = value;\n }\n delete headers[\"content-type\"];\n headers[\"x-gitlab-client-type\"] = \"node-websocket\";\n headers[\"x-gitlab-language-server-version\"] = CLIENT_VERSION;\n const parsedUrl = new URL(options.instanceUrl);\n const origin = parsedUrl.origin;\n headers[\"origin\"] = origin;\n if (options.requestId) {\n headers[\"x-request-id\"] = options.requestId;\n }\n if (options.projectId) {\n headers[\"x-gitlab-project-id\"] = options.projectId;\n }\n if (options.namespaceId) {\n headers[\"x-gitlab-namespace-id\"] = options.namespaceId;\n }\n if (options.rootNamespaceId) {\n headers[\"x-gitlab-root-namespace-id\"] = options.rootNamespaceId;\n }\n if (!headers[\"user-agent\"]) {\n headers[\"user-agent\"] = `gitlab-ai-provider/${VERSION}`;\n }\n return headers;\n }\n handleAction(action) {\n if (action.newCheckpoint) {\n const checkpoint = action.newCheckpoint;\n this.emit({ type: \"checkpoint\", data: checkpoint });\n if (checkpoint.status === \"FINISHED\" || checkpoint.status === \"COMPLETED\") {\n this.emit({ type: \"completed\" });\n } else if (checkpoint.status === \"FAILED\") {\n this.emit({\n type: \"failed\",\n error: new Error(checkpoint.content || \"Workflow failed\")\n });\n } else if (checkpoint.status === \"STOPPED\" || checkpoint.status === \"CANCELLED\") {\n this.emit({ type: \"completed\" });\n } else if (checkpoint.status === \"TOOL_CALL_APPROVAL_REQUIRED\") {\n this.emit({ type: \"approval-required\", tools: this.extractApprovalTools(checkpoint) });\n } else if (checkpoint.status === \"PLAN_APPROVAL_REQUIRED\") {\n this.emit({ type: \"completed\" });\n }\n return;\n }\n if (action.runMCPTool && action.requestID) {\n this.emit({\n type: \"tool-request\",\n requestID: action.requestID,\n data: action.runMCPTool\n });\n return;\n }\n const builtinTools = [\n [\"runReadFile\", action.runReadFile],\n [\"runReadFiles\", action.runReadFiles],\n [\"runWriteFile\", action.runWriteFile],\n [\"runShellCommand\", action.runShellCommand],\n [\"runEditFile\", action.runEditFile],\n [\"listDirectory\", action.listDirectory],\n [\"findFiles\", action.findFiles],\n [\"grep\", action.grep],\n [\"mkdir\", action.mkdir],\n [\"runCommand\", action.runCommand],\n [\"runGitCommand\", action.runGitCommand],\n [\"runHTTPRequest\", action.runHTTPRequest]\n ];\n for (const [toolName, data] of builtinTools) {\n if (data && action.requestID) {\n this.emit({\n type: \"builtin-tool-request\",\n requestID: action.requestID,\n toolName,\n data\n });\n return;\n }\n }\n }\n extractApprovalTools(checkpoint) {\n if (!checkpoint.checkpoint) return [];\n let parsed;\n try {\n parsed = JSON.parse(checkpoint.checkpoint);\n } catch {\n return [];\n }\n return (parsed.channel_values?.ui_chat_log ?? []).filter(\n (e) => e.message_type === \"request\" && e.tool_info !== null\n ).map((e) => ({ name: e.tool_info.name, args: JSON.stringify(e.tool_info.args) }));\n }\n send(event) {\n if (this.socket?.readyState === WebSocket.OPEN) {\n const json = JSON.stringify(event);\n this.socket.send(json);\n this.lastSendTime = Date.now();\n }\n }\n sendHeartbeatIfNeeded() {\n const elapsed = Date.now() - this.lastSendTime;\n if (elapsed >= WS_HEARTBEAT_INTERVAL_MS / 2) {\n this.send({ heartbeat: { timestamp: Date.now() } });\n }\n }\n emit(event) {\n this.eventCallback?.(event);\n }\n /**\n * Start ws.ping() keepalive (45s interval).\n * Keeps TCP connection alive through proxies/load balancers.\n */\n startKeepalive() {\n this.keepaliveInterval = setInterval(() => {\n if (this.socket?.readyState === WebSocket.OPEN) {\n try {\n this.socket.ping();\n } catch {\n }\n }\n }, WS_KEEPALIVE_PING_INTERVAL_MS);\n }\n /**\n * Start application-level heartbeat (60s interval).\n * Prevents DWS from timing out the workflow.\n */\n startHeartbeat() {\n this.heartbeatInterval = setInterval(() => {\n this.send({ heartbeat: { timestamp: Date.now() } });\n }, WS_HEARTBEAT_INTERVAL_MS);\n }\n cleanedUp = false;\n /**\n * Clean up intervals. Idempotent — safe to call multiple times.\n */\n cleanup() {\n if (this.cleanedUp) return;\n this.cleanedUp = true;\n if (this.keepaliveInterval) {\n clearInterval(this.keepaliveInterval);\n this.keepaliveInterval = null;\n }\n if (this.heartbeatInterval) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = null;\n }\n }\n};\n\n// src/gitlab-workflow-builtins.ts\nfunction validateNoShellMetachars(value, fieldName) {\n const dangerousChars = /[;&|`$()<>]/;\n if (dangerousChars.test(value)) {\n throw new Error(\n `Invalid ${fieldName}: contains shell metacharacters. Use structured arguments instead.`\n );\n }\n}\nfunction shellEscape(arg) {\n return \"'\" + String(arg).replace(/'/g, \"'\\\\''\") + \"'\";\n}\nvar ALLOWED_URL_SCHEMES = [\"http:\", \"https:\"];\nfunction sanitizeErrorMessage(message) {\n if (!message) return \"\";\n return message.replace(/\\bBearer\\s+[A-Za-z0-9\\-_.~+/]+=*/gi, \"Bearer [REDACTED]\").replace(/\\bgl(?:pat|oat|cbt|dt|oas|rt|soat|ffct|sapat)-[A-Za-z0-9_-]+/g, \"[REDACTED]\").replace(/([?&](?:private_token|access_token|token)=)[^&\\s\"']*/gi, \"$1[REDACTED]\").replace(/:\\/\\/([^:@/\\s]+):([^@/\\s]+)@/g, \"://$1:[REDACTED]@\");\n}\nfunction mapBuiltinTool(dwsToolName, data, availableTools) {\n const has = (name) => !availableTools || availableTools.has(name);\n switch (dwsToolName) {\n case \"runReadFile\":\n return { toolName: \"read\", args: { filePath: data.filepath } };\n case \"runReadFiles\": {\n const paths = data.filepaths ?? [];\n if (paths.length <= 1) {\n return { toolName: \"read\", args: { filePath: paths[0] ?? \"\" } };\n }\n return {\n toolName: \"read\",\n args: { filePaths: paths }\n };\n }\n case \"runWriteFile\": {\n if (has(\"write\")) {\n return {\n toolName: \"write\",\n args: { filePath: data.filepath, content: data.contents }\n };\n }\n const filePath = String(data.filepath ?? \"\");\n const content = String(data.contents ?? \"\");\n const patchLines = [\n \"*** Begin Patch\",\n `*** Add File: ${filePath}`,\n ...content.split(\"\\n\").map((l) => `+${l}`),\n \"*** End Patch\"\n ].join(\"\\n\");\n return { toolName: \"apply_patch\", args: { patchText: patchLines } };\n }\n case \"runEditFile\": {\n const editOldString = String(data.oldString ?? data.old_string ?? \"\");\n const editNewString = String(data.newString ?? data.new_string ?? \"\");\n if (has(\"edit\")) {\n return {\n toolName: \"edit\",\n args: {\n filePath: data.filepath,\n oldString: editOldString,\n newString: editNewString\n }\n };\n }\n const editPath = String(data.filepath ?? \"\");\n const oldStr = editOldString;\n const newStr = editNewString;\n const oldLines = oldStr.split(\"\\n\");\n const newLines = newStr.split(\"\\n\");\n const patchContent = [\n \"*** Begin Patch\",\n `*** Update File: ${editPath}`,\n \"@@\",\n ...oldLines.map((l) => `-${l}`),\n ...newLines.map((l) => `+${l}`),\n \"*** End Patch\"\n ].join(\"\\n\");\n return { toolName: \"apply_patch\", args: { patchText: patchContent } };\n }\n case \"runShellCommand\": {\n const command = data.command;\n if (!command || typeof command !== \"string\") {\n throw new Error(\"runShellCommand: command is required and must be a string\");\n }\n if (command.length > 1e4) {\n throw new Error(\"runShellCommand: command exceeds maximum length of 10000 characters\");\n }\n return {\n toolName: \"bash\",\n args: { command, description: \"DWS shell command\" }\n };\n }\n case \"runCommand\": {\n const program = data.program;\n if (!program || typeof program !== \"string\") {\n throw new Error(\"runCommand: program is required and must be a string\");\n }\n validateNoShellMetachars(program, \"program\");\n const flags = data.flags ?? [];\n const cmdArgs = data.arguments ?? [];\n for (const flag of flags) {\n if (typeof flag === \"string\") {\n validateNoShellMetachars(flag, \"flag\");\n }\n }\n for (const arg of cmdArgs) {\n if (typeof arg === \"string\") {\n validateNoShellMetachars(arg, \"argument\");\n }\n }\n return {\n toolName: \"bash\",\n args: {\n command: [program, ...flags, ...cmdArgs].map((a) => shellEscape(String(a))).join(\" \"),\n description: `DWS run: ${program}`\n }\n };\n }\n case \"runGitCommand\": {\n const gitCmd = data.command;\n if (!gitCmd || typeof gitCmd !== \"string\") {\n throw new Error(\"runGitCommand: command is required and must be a string\");\n }\n validateNoShellMetachars(gitCmd, \"git command\");\n const gitArgs = data.arguments ?? [];\n for (const arg of gitArgs) {\n if (typeof arg === \"string\") {\n validateNoShellMetachars(arg, \"git argument\");\n }\n }\n return {\n toolName: \"bash\",\n args: {\n command: [\"git\", gitCmd, ...gitArgs].map((a) => shellEscape(String(a))).join(\" \"),\n description: `DWS git: ${gitCmd}`\n }\n };\n }\n case \"listDirectory\":\n return { toolName: \"read\", args: { filePath: data.directory ?? \".\" } };\n case \"findFiles\":\n return { toolName: \"glob\", args: { pattern: data.name_pattern ?? data.namePattern } };\n case \"grep\":\n return {\n toolName: \"grep\",\n args: {\n pattern: data.pattern,\n path: data.search_directory ?? data.searchDirectory\n }\n };\n case \"mkdir\": {\n const dirPath = String(data.directory_path ?? data.directoryPath ?? \"\");\n if (!dirPath) {\n throw new Error(\"mkdir: directory_path is required\");\n }\n if (dirPath.includes(\"\\0\")) {\n throw new Error(\"mkdir: directory_path contains null bytes\");\n }\n return {\n toolName: \"bash\",\n args: {\n command: `mkdir -p ${shellEscape(dirPath)}`,\n description: \"DWS mkdir\"\n }\n };\n }\n case \"runHTTPRequest\": {\n const methodRaw = String(data.method ?? \"GET\").toUpperCase();\n const allowedMethods = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"HEAD\", \"OPTIONS\"];\n if (!allowedMethods.includes(methodRaw)) {\n throw new Error(`runHTTPRequest: invalid HTTP method '${methodRaw}'`);\n }\n const urlPath = String(data.path ?? \"\");\n if (!urlPath) {\n throw new Error(\"runHTTPRequest: path is required\");\n }\n try {\n const parsedUrl = new URL(urlPath);\n if (!ALLOWED_URL_SCHEMES.includes(parsedUrl.protocol)) {\n throw new Error(\n `runHTTPRequest: only http:// and https:// schemes are allowed, got '${parsedUrl.protocol}'`\n );\n }\n } catch (e) {\n if (e instanceof Error && e.message.startsWith(\"runHTTPRequest:\")) throw e;\n }\n const method = shellEscape(methodRaw);\n const escapedPath = shellEscape(urlPath);\n const bodyArg = data.body ? ` -d ${shellEscape(String(data.body))}` : \"\";\n return {\n toolName: \"bash\",\n args: {\n command: `curl -s -X ${method} -- ${escapedPath}${bodyArg}`,\n description: `DWS HTTP ${methodRaw}`\n }\n };\n }\n default:\n return { toolName: dwsToolName, args: data };\n }\n}\nfunction validateSafePath(filePath) {\n if (!filePath) {\n throw new Error(\"filePath is required\");\n }\n if (filePath.includes(\"\\0\")) {\n throw new Error(\"filePath contains null bytes\");\n }\n const path5 = __require(\"path\");\n const resolved = path5.resolve(filePath);\n const cwd = process.cwd();\n if (!resolved.startsWith(cwd + path5.sep) && resolved !== cwd) {\n throw new Error(`filePath resolves outside the working directory: ${filePath}`);\n }\n return resolved;\n}\nfunction executeBuiltinFallback(toolName, argsJson) {\n if (toolName !== \"edit\" && toolName !== \"write\") {\n return null;\n }\n const fs4 = __require(\"fs\");\n let args;\n try {\n args = JSON.parse(argsJson);\n } catch {\n return { result: \"\", error: `${toolName} fallback: invalid JSON arguments` };\n }\n try {\n if (toolName === \"write\") {\n const filePath2 = String(args.filePath ?? \"\");\n if (!filePath2) {\n return { result: \"\", error: \"write fallback: filePath is required\" };\n }\n const safePath2 = validateSafePath(filePath2);\n const content2 = String(args.content ?? \"\");\n fs4.writeFileSync(safePath2, content2, \"utf-8\");\n return {\n result: \"File written successfully.\",\n title: filePath2,\n metadata: { output: \"File written successfully.\" }\n };\n }\n const filePath = String(args.filePath ?? \"\");\n const oldString = String(args.oldString ?? \"\");\n const newString = String(args.newString ?? \"\");\n if (!filePath) {\n return { result: \"\", error: \"edit fallback: filePath is required\" };\n }\n if (!oldString && !newString) {\n return { result: \"\", error: \"edit fallback: oldString and newString are both empty\" };\n }\n const safePath = validateSafePath(filePath);\n let content;\n try {\n content = fs4.readFileSync(safePath, \"utf-8\");\n } catch {\n content = \"\";\n }\n if (oldString === \"\") {\n fs4.writeFileSync(safePath, newString, \"utf-8\");\n return {\n result: \"Edit applied successfully.\",\n title: filePath,\n metadata: { output: \"Edit applied successfully.\" }\n };\n }\n const idx = content.indexOf(oldString);\n if (idx === -1) {\n return { result: \"\", error: `edit fallback: could not find oldString in ${filePath}` };\n }\n const newContent = content.substring(0, idx) + newString + content.substring(idx + oldString.length);\n fs4.writeFileSync(safePath, newContent, \"utf-8\");\n return {\n result: \"Edit applied successfully.\",\n title: filePath,\n metadata: { output: \"Edit applied successfully.\" }\n };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return { result: \"\", error: sanitizeErrorMessage(msg) };\n }\n}\n\n// src/gitlab-workflow-token-client.ts\nvar TOKEN_CACHE_DURATION_MS = 25 * 60 * 1e3;\nvar MAX_ERROR_TEXT_LENGTH = 500;\nfunction sanitizeErrorText(text) {\n const truncated = text.length > MAX_ERROR_TEXT_LENGTH ? text.slice(0, MAX_ERROR_TEXT_LENGTH) + \"...\" : text;\n return sanitizeErrorMessage(truncated);\n}\nvar CHAT_SHARED_TOKEN_KEY = \"__chat_shared__\";\nvar GitLabWorkflowTokenClient = class {\n config;\n fetchFn;\n /**\n * Token cache keyed by workflow definition type.\n *\n * - CHAT workflows use a shared key (CHAT_SHARED_TOKEN_KEY) so tokens\n * are reused across ALL chat sessions (matching gitlab-lsp behavior).\n * - SOFTWARE_DEVELOPMENT workflows would use per-workflow-id keys,\n * but since we fetch tokens before creating workflows, we key by type.\n */\n tokenCache = /* @__PURE__ */ new Map();\n constructor(config) {\n this.config = config;\n this.fetchFn = config.fetch ?? fetch;\n }\n /**\n * Resolve the cache key for a given workflow definition.\n * CHAT workflows share a single token per namespace; other types get per-type keys.\n */\n getCacheKey(workflowDefinition, rootNamespaceId) {\n const base = workflowDefinition === \"chat\" /* CHAT */ ? CHAT_SHARED_TOKEN_KEY : workflowDefinition;\n return rootNamespaceId ? `${base}:${rootNamespaceId}` : base;\n }\n /**\n * Get a DWS token, using cached value if still valid.\n *\n * Token caching strategy (matches gitlab-lsp):\n * - CHAT workflows: shared token across all sessions\n * - Other workflows: per-type token\n *\n * @param workflowDefinition - Workflow type (default: 'chat')\n * @param rootNamespaceId - Optional root namespace for scoping\n * @param forceRefresh - Bypass cache\n */\n async getToken(workflowDefinition = DEFAULT_WORKFLOW_DEFINITION, rootNamespaceId, forceRefresh = false) {\n const now = Date.now();\n const cacheKey = this.getCacheKey(workflowDefinition, rootNamespaceId);\n const cached = this.tokenCache.get(cacheKey);\n if (!forceRefresh && cached && cached.expiresAt > now) {\n return cached.token;\n }\n if (forceRefresh) {\n this.tokenCache.delete(cacheKey);\n }\n const url = `${this.config.instanceUrl}/api/v4/ai/duo_workflows/direct_access`;\n const body = {\n workflow_definition: workflowDefinition\n };\n if (rootNamespaceId) {\n body.root_namespace_id = rootNamespaceId;\n }\n if (this.config.featureFlags && Object.keys(this.config.featureFlags).length > 0) {\n body.feature_flags = this.config.featureFlags;\n }\n try {\n const response = await this.fetchFn(url, {\n method: \"POST\",\n headers: {\n ...this.config.getHeaders(),\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(body)\n });\n if (!response.ok) {\n const errorText = await response.text();\n const safeError = sanitizeErrorText(errorText);\n if (response.status === 401 && this.config.refreshApiKey && !forceRefresh) {\n try {\n await this.config.refreshApiKey();\n return await this.getToken(workflowDefinition, rootNamespaceId, true);\n } catch {\n throw new GitLabError({\n message: `Failed to get workflow token: ${response.status} ${response.statusText} - ${safeError}`,\n statusCode: response.status,\n responseBody: safeError\n });\n }\n }\n if (response.status === 403) {\n throw new GitLabError({\n message: `GitLab Duo Agent Platform access denied. GitLab Duo Agent Platform requires GitLab Ultimate with Duo Enterprise add-on. Ensure: (1) Your instance has GitLab Ultimate, (2) Duo Enterprise add-on is enabled, (3) Your account has access to AI features.`,\n statusCode: response.status,\n responseBody: safeError\n });\n }\n throw new GitLabError({\n message: `Failed to get workflow token: ${response.status} ${response.statusText} - ${safeError}`,\n statusCode: response.status,\n responseBody: safeError\n });\n }\n const data = await response.json();\n this.tokenCache.set(cacheKey, {\n token: data,\n expiresAt: now + TOKEN_CACHE_DURATION_MS\n });\n return data;\n } catch (error) {\n if (error instanceof GitLabError) throw error;\n throw new GitLabError({\n message: `Failed to get workflow token: ${error}`,\n cause: error\n });\n }\n }\n /**\n * Create a new workflow on the GitLab instance.\n *\n * @param goal - The user's message / goal for this workflow\n * @param options - Additional workflow creation options\n * @returns The created workflow's ID\n */\n async createWorkflow(goal, options) {\n if (!goal || typeof goal !== \"string\") {\n throw new GitLabError({ message: \"goal is required and must be a non-empty string\" });\n }\n if (goal.length > 1e4) {\n throw new GitLabError({ message: \"goal exceeds maximum length of 10000 characters\" });\n }\n const url = `${this.config.instanceUrl}/api/v4/ai/duo_workflows/workflows`;\n const body = {\n goal,\n project_id: options?.projectId,\n namespace_id: options?.namespaceId,\n workflow_definition: options?.workflowDefinition ?? DEFAULT_WORKFLOW_DEFINITION,\n agent_privileges: options?.agentPrivileges ?? DEFAULT_AGENT_PRIVILEGES,\n environment: options?.environment ?? WORKFLOW_ENVIRONMENT,\n allow_agent_to_request_user: options?.allowAgentToRequestUser ?? true,\n ...options?.aiCatalogItemVersionId !== void 0 && {\n ai_catalog_item_version_id: options.aiCatalogItemVersionId\n }\n };\n try {\n const response = await this.fetchFn(url, {\n method: \"POST\",\n headers: {\n ...this.config.getHeaders(),\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(body)\n });\n if (!response.ok) {\n const errorText = await response.text();\n const safeError = sanitizeErrorText(errorText);\n throw new GitLabError({\n message: `Failed to create workflow: ${response.status} ${response.statusText} - ${safeError}`,\n statusCode: response.status,\n responseBody: safeError\n });\n }\n const data = await response.json();\n return data.id.toString();\n } catch (error) {\n if (error instanceof GitLabError) throw error;\n throw new GitLabError({\n message: `Failed to create workflow: ${error}`,\n cause: error\n });\n }\n }\n /**\n * Invalidate cached tokens.\n *\n * @param workflowDefinition - If provided, only invalidate for this type.\n * If omitted, clears ALL cached tokens.\n */\n invalidateToken(workflowDefinition, rootNamespaceId) {\n if (workflowDefinition) {\n this.tokenCache.delete(this.getCacheKey(workflowDefinition, rootNamespaceId));\n } else {\n this.tokenCache.clear();\n }\n }\n};\n\n// src/gitlab-project-detector.ts\nimport { spawn } from \"child_process\";\nimport * as path from \"path\";\n\n// src/gitlab-project-cache.ts\nvar GitLabProjectCache = class {\n cache = /* @__PURE__ */ new Map();\n defaultTTL;\n /**\n * Create a new project cache\n * @param defaultTTL - Default time-to-live in milliseconds (default: 5 minutes)\n */\n constructor(defaultTTL = 5 * 60 * 1e3) {\n this.defaultTTL = defaultTTL;\n }\n /**\n * Get a cached project by key\n * @param key - Cache key (typically the working directory path)\n * @returns The cached project or null if not found or expired\n */\n get(key) {\n const entry = this.cache.get(key);\n if (!entry) {\n return null;\n }\n if (Date.now() > entry.expiresAt) {\n this.cache.delete(key);\n return null;\n }\n return entry.project;\n }\n /**\n * Store a project in the cache\n * @param key - Cache key (typically the working directory path)\n * @param project - The project to cache\n * @param ttl - Optional custom TTL in milliseconds\n */\n set(key, project, ttl) {\n this.cache.set(key, {\n project,\n expiresAt: Date.now() + (ttl ?? this.defaultTTL)\n });\n }\n /**\n * Check if a key exists in the cache (and is not expired)\n * @param key - Cache key to check\n * @returns true if the key exists and is not expired\n */\n has(key) {\n return this.get(key) !== null;\n }\n /**\n * Remove a specific entry from the cache\n * @param key - Cache key to remove\n */\n delete(key) {\n this.cache.delete(key);\n }\n /**\n * Clear all entries from the cache\n */\n clear() {\n this.cache.clear();\n }\n /**\n * Get the number of entries in the cache (including expired ones)\n */\n get size() {\n return this.cache.size;\n }\n /**\n * Clean up expired entries from the cache\n * This is useful for long-running processes to prevent memory leaks\n */\n cleanup() {\n const now = Date.now();\n for (const [key, entry] of this.cache.entries()) {\n if (now > entry.expiresAt) {\n this.cache.delete(key);\n }\n }\n }\n};\n\n// src/gitlab-project-detector.ts\nvar GitLabProjectDetector = class {\n config;\n fetchFn;\n cache;\n constructor(config) {\n this.config = {\n gitTimeout: 5e3,\n // 5 seconds default\n ...config\n };\n this.fetchFn = config.fetch ?? fetch;\n this.cache = config.cache ?? new GitLabProjectCache();\n }\n /**\n * Auto-detect GitLab project from git remote in the working directory\n *\n * @param workingDirectory - The directory to check for git remote\n * @param remoteName - The git remote name to use (default: 'origin')\n * @returns The detected project or null if not a git repo / no matching remote\n * @throws GitLabError if the API call or an unexpected error occurs\n */\n async detectProject(workingDirectory, remoteName = \"origin\") {\n const cacheKey = path.resolve(workingDirectory);\n const cached = this.cache.get(cacheKey);\n if (cached) {\n return cached;\n }\n try {\n const remoteUrl = await this.getGitRemoteUrl(workingDirectory, remoteName);\n if (!remoteUrl) {\n return null;\n }\n const projectPath = this.parseGitRemoteUrl(remoteUrl, this.config.instanceUrl);\n if (!projectPath) {\n return null;\n }\n const project = await this.getProjectByPath(projectPath);\n this.cache.set(cacheKey, project);\n return project;\n } catch (error) {\n throw error instanceof GitLabError ? error : new GitLabError({\n message: `Project detection failed: ${error}`,\n cause: error\n });\n }\n }\n /**\n * Parse a git remote URL to extract the project path\n *\n * Supports:\n * - SSH: git@gitlab.com:namespace/project.git\n * - HTTPS: https://gitlab.com/namespace/project.git\n * - HTTP: http://gitlab.local/namespace/project.git\n * - Custom domains and ports\n *\n * @param remoteUrl - The git remote URL\n * @param instanceUrl - The GitLab instance URL to match against\n * @returns The project path (e.g., \"namespace/project\") or null if parsing fails\n */\n parseGitRemoteUrl(remoteUrl, instanceUrl) {\n try {\n const instanceHost = new URL(instanceUrl).hostname;\n const sshMatch = remoteUrl.match(/^git@([^:]+):(.+?)(?:\\.git)?$/);\n if (sshMatch) {\n const [, host, pathPart] = sshMatch;\n const hostWithoutPort = host.split(\":\")[0];\n if (hostWithoutPort === instanceHost) {\n const cleanPath = pathPart.replace(/^\\d+\\//, \"\");\n return cleanPath.endsWith(\".git\") ? cleanPath.slice(0, -4) : cleanPath;\n }\n }\n const httpsMatch = remoteUrl.match(/^(https?):\\/\\/([^/]+)\\/(.+?)(?:\\.git)?$/);\n if (httpsMatch) {\n const [, , hostWithPort, pathPart] = httpsMatch;\n const host = hostWithPort.split(\":\")[0];\n if (host === instanceHost) {\n return pathPart.endsWith(\".git\") ? pathPart.slice(0, -4) : pathPart;\n }\n }\n return null;\n } catch (error) {\n return null;\n }\n }\n /**\n * Get the git remote URL from a working directory\n *\n * @param workingDirectory - The directory to check\n * @param remoteName - The git remote name (default: 'origin')\n * @returns The remote URL or null if not found\n */\n async getGitRemoteUrl(workingDirectory, remoteName = \"origin\") {\n return new Promise((resolve2) => {\n const child = spawn(\"git\", [\"config\", \"--get\", `remote.${remoteName}.url`], {\n cwd: workingDirectory,\n timeout: this.config.gitTimeout\n });\n let stdout = \"\";\n let _stderr = \"\";\n child.stdout?.on(\"data\", (data) => {\n stdout += data.toString();\n });\n child.stderr?.on(\"data\", (data) => {\n _stderr += data.toString();\n });\n child.on(\"close\", (exitCode) => {\n if (exitCode === 0 && stdout.trim()) {\n resolve2(stdout.trim());\n } else {\n resolve2(null);\n }\n });\n child.on(\"error\", () => {\n resolve2(null);\n });\n });\n }\n /**\n * Fetch project details from GitLab API by project path\n *\n * @param projectPath - The project path (e.g., \"namespace/project\")\n * @returns The project details\n * @throws GitLabError if the API call fails\n */\n async getProjectByPath(projectPath) {\n const encodedPath = encodeURIComponent(projectPath);\n const url = `${this.config.instanceUrl}/api/v4/projects/${encodedPath}`;\n try {\n const response = await this.fetchFn(url, {\n method: \"GET\",\n headers: this.config.getHeaders()\n });\n if (!response.ok) {\n throw new GitLabError({\n message: `Failed to fetch project '${projectPath}': ${response.status} ${response.statusText}`\n });\n }\n const data = await response.json();\n return {\n id: data.id,\n path: data.path,\n pathWithNamespace: data.path_with_namespace,\n name: data.name,\n namespaceId: data.namespace?.id\n };\n } catch (error) {\n if (error instanceof GitLabError) {\n throw error;\n }\n throw new GitLabError({\n message: `Failed to fetch project '${projectPath}': ${error}`,\n cause: error\n });\n }\n }\n /**\n * Clear the project cache\n */\n clearCache() {\n this.cache.clear();\n }\n /**\n * Get the cache instance (useful for testing)\n */\n getCache() {\n return this.cache;\n }\n};\n\n// src/gitlab-model-discovery.ts\nvar AI_CHAT_AVAILABLE_MODELS_QUERY = `\n query aiChatAvailableModels($rootNamespaceId: GroupID!) {\n metadata {\n featureFlags(names: [\"ai_user_model_switching\"]) {\n enabled\n name\n }\n version\n }\n\n aiChatAvailableModels(rootNamespaceId: $rootNamespaceId) {\n defaultModel {\n name\n ref\n }\n selectableModels {\n name\n ref\n }\n pinnedModel {\n name\n ref\n }\n }\n }\n`;\nvar DISCOVERY_CACHE_TTL_MS = 10 * 60 * 1e3;\nvar GitLabModelDiscovery = class {\n config;\n fetchFn;\n cache = /* @__PURE__ */ new Map();\n constructor(config) {\n this.config = config;\n this.fetchFn = config.fetch ?? fetch;\n }\n /**\n * Discover available models for a given root namespace.\n *\n * Results are cached per `rootNamespaceId` with a 10-minute TTL.\n * Use `invalidateCache()` to force an immediate refresh.\n *\n * @param rootNamespaceId - GitLab group ID (e.g., 'gid://gitlab/Group/12345')\n */\n async discover(rootNamespaceId) {\n const cached = this.cache.get(rootNamespaceId);\n if (cached && cached.expiresAt > Date.now()) {\n return cached.data;\n }\n const url = `${this.config.instanceUrl}/api/graphql`;\n try {\n const response = await this.fetchFn(url, {\n method: \"POST\",\n headers: {\n ...this.config.getHeaders(),\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n query: AI_CHAT_AVAILABLE_MODELS_QUERY,\n variables: { rootNamespaceId }\n })\n });\n if (!response.ok) {\n const errorText = await response.text();\n throw new GitLabError({\n message: `Model discovery GraphQL request failed: ${response.status} ${response.statusText} - ${errorText}`,\n statusCode: response.status,\n responseBody: errorText\n });\n }\n const json = await response.json();\n if (json.errors && json.errors.length > 0) {\n throw new GitLabError({\n message: `Model discovery GraphQL errors: ${json.errors.map((e) => e.message).join(\", \")}`\n });\n }\n const models = json.data?.aiChatAvailableModels;\n const metadata = json.data?.metadata;\n const modelSwitchingEnabled = metadata?.featureFlags?.find((f) => f.name === \"ai_user_model_switching\")?.enabled ?? false;\n const result = {\n defaultModel: models?.defaultModel ?? null,\n selectableModels: models?.selectableModels ?? [],\n pinnedModel: models?.pinnedModel ?? null,\n modelSwitchingEnabled,\n instanceVersion: metadata?.version ?? null\n };\n this.cache.set(rootNamespaceId, {\n data: result,\n expiresAt: Date.now() + DISCOVERY_CACHE_TTL_MS\n });\n return result;\n } catch (error) {\n if (error instanceof GitLabError) throw error;\n throw new GitLabError({\n message: `Model discovery failed: ${error}`,\n cause: error\n });\n }\n }\n /**\n * Get the effective model ref to use for a workflow.\n *\n * Priority: pinned > user-selected > default.\n *\n * @param rootNamespaceId - GitLab group ID\n * @param userSelectedRef - Optional user preference\n */\n async getEffectiveModelRef(rootNamespaceId, userSelectedRef) {\n const discovered = await this.discover(rootNamespaceId);\n if (discovered.pinnedModel) {\n return discovered.pinnedModel.ref;\n }\n if (userSelectedRef && discovered.modelSwitchingEnabled) {\n const isValid = discovered.selectableModels.some((m) => m.ref === userSelectedRef);\n if (isValid) {\n return userSelectedRef;\n }\n }\n return discovered.defaultModel?.ref ?? null;\n }\n /**\n * Invalidate the cached discovery results.\n */\n invalidateCache() {\n this.cache.clear();\n }\n};\n\n// src/gitlab-model-cache.ts\nimport * as fs from \"fs\";\nimport * as path2 from \"path\";\nimport * as os from \"os\";\nimport * as crypto from \"crypto\";\nvar DISCOVERY_TTL_MS = 10 * 60 * 1e3;\nfunction getCacheFilePath() {\n const cacheHome = process.env.XDG_CACHE_HOME || path2.join(os.homedir(), \".cache\");\n return path2.join(cacheHome, \"opencode\", \"gitlab-workflow-model-cache.json\");\n}\nfunction computeCacheKey(workDir, instanceUrl) {\n const normalizedUrl = (instanceUrl || \"https://gitlab.com\").replace(/\\/$/, \"\");\n return crypto.createHash(\"sha256\").update(`${workDir}\\0${normalizedUrl}`).digest(\"hex\").slice(0, 12);\n}\nvar GitLabModelCache = class {\n filePath;\n key;\n constructor(workDir, instanceUrl) {\n this.filePath = getCacheFilePath();\n this.key = computeCacheKey(workDir, instanceUrl);\n }\n readAll() {\n try {\n if (!fs.existsSync(this.filePath)) {\n return {};\n }\n const raw = fs.readFileSync(this.filePath, \"utf-8\");\n return JSON.parse(raw);\n } catch {\n return {};\n }\n }\n writeAll(data) {\n try {\n const dir = path2.dirname(this.filePath);\n fs.mkdirSync(dir, { recursive: true, mode: 448 });\n fs.writeFileSync(this.filePath, JSON.stringify(data, null, 2), { mode: 384 });\n } catch {\n }\n }\n /**\n * Load the cached entry for this workspace.\n * Returns null if no cache exists or is unreadable.\n */\n load() {\n return this.readAll()[this.key] ?? null;\n }\n /**\n * Persist the full cache entry to disk.\n */\n save(entry) {\n const data = this.readAll();\n data[this.key] = entry;\n this.writeAll(data);\n }\n /**\n * Returns true if the discovery data is missing or older than DISCOVERY_TTL_MS.\n */\n isDiscoveryExpired() {\n const entry = this.load();\n if (!entry?.discovery || !entry.updatedAt) return true;\n return Date.now() - new Date(entry.updatedAt).getTime() > DISCOVERY_TTL_MS;\n }\n /**\n * Update only the discovery portion of the cache, preserving selection.\n * Optionally persists the associated GitLab project.\n */\n saveDiscovery(discovery, project) {\n const existing = this.load();\n this.save({\n discovery,\n project: project !== void 0 ? project : existing?.project ?? null,\n selectedModelRef: existing?.selectedModelRef ?? null,\n selectedModelName: existing?.selectedModelName ?? null,\n updatedAt: (/* @__PURE__ */ new Date()).toISOString()\n });\n }\n /**\n * Update only the selected model, preserving the discovery data.\n * If name is null but ref is provided, attempts to resolve the name\n * from the cached discovery data.\n */\n saveSelection(ref, name) {\n const existing = this.load();\n let resolved = name;\n if (!resolved && ref && existing?.discovery) {\n const d = existing.discovery;\n const match = d.pinnedModel?.ref === ref ? d.pinnedModel : d.selectableModels.find((m) => m.ref === ref) ?? (d.defaultModel?.ref === ref ? d.defaultModel : null);\n resolved = match?.name ?? null;\n }\n this.save({\n discovery: existing?.discovery ?? null,\n project: existing?.project ?? null,\n selectedModelRef: ref,\n selectedModelName: resolved,\n updatedAt: (/* @__PURE__ */ new Date()).toISOString()\n });\n }\n /**\n * Remove the entry for this workspace from the cache file.\n */\n clear() {\n const data = this.readAll();\n delete data[this.key];\n if (Object.keys(data).length === 0) {\n try {\n if (fs.existsSync(this.filePath)) {\n fs.unlinkSync(this.filePath);\n }\n } catch {\n }\n } else {\n this.writeAll(data);\n }\n }\n /**\n * Convenience: get the cached selected model ref (or null).\n */\n getSelectedModelRef() {\n return this.load()?.selectedModelRef ?? null;\n }\n /**\n * Convenience: get the cached selected model name (or null).\n */\n getSelectedModelName() {\n return this.load()?.selectedModelName ?? null;\n }\n /**\n * Convenience: get the cached discovery result (or null).\n */\n getDiscovery() {\n return this.load()?.discovery ?? null;\n }\n};\n\n// src/gitlab-workflow-language-model.ts\nfunction simplifySchemaObj(schema) {\n if (!schema || typeof schema !== \"object\") return schema;\n const result = {};\n for (const [key, value] of Object.entries(schema)) {\n if (key === \"description\" || key === \"examples\" || key === \"default\") {\n continue;\n }\n if (key === \"properties\" && typeof value === \"object\" && value !== null) {\n const props = {};\n for (const [propName, propValue] of Object.entries(value)) {\n if (typeof propValue === \"object\" && propValue !== null) {\n props[propName] = simplifySchemaObj(propValue);\n } else {\n props[propName] = propValue;\n }\n }\n result[key] = props;\n } else if (key === \"items\" && typeof value === \"object\" && value !== null) {\n result[key] = simplifySchemaObj(value);\n } else {\n result[key] = value;\n }\n }\n return result;\n}\nfunction simplifySchema(schemaStr) {\n try {\n return JSON.stringify(simplifySchemaObj(JSON.parse(schemaStr)));\n } catch {\n return schemaStr;\n }\n}\nfunction minimalSchemaObj(schema) {\n if (!schema || typeof schema !== \"object\") return schema;\n const result = { type: schema.type || \"object\" };\n if (schema.required) {\n result.required = schema.required;\n }\n if (schema.properties && typeof schema.properties === \"object\") {\n const props = {};\n for (const [propName, propValue] of Object.entries(\n schema.properties\n )) {\n if (typeof propValue === \"object\" && propValue !== null) {\n const pv = propValue;\n props[propName] = { type: pv.type || \"string\" };\n } else {\n props[propName] = { type: \"string\" };\n }\n }\n result.properties = props;\n }\n return result;\n}\nfunction minimalSchema(schemaStr) {\n try {\n return JSON.stringify(minimalSchemaObj(JSON.parse(schemaStr)));\n } catch {\n return schemaStr;\n }\n}\nvar GitLabWorkflowLanguageModel = class _GitLabWorkflowLanguageModel {\n specificationVersion = \"v3\";\n modelId;\n supportedUrls = {};\n config;\n workflowOptions;\n tokenClient;\n projectDetector;\n modelDiscovery;\n modelCache;\n // Cached detected project path\n detectedProjectPath = null;\n // Workflow ID persisted across turns for multi-turn conversations.\n // Per-session workflow state. Keyed by opencode sessionID (x-opencode-session header).\n // Each opencode session gets its own DWS workflow, reused across turns within that session.\n sessionWorkflows = /* @__PURE__ */ new Map();\n // Fallback for callers that don't pass x-opencode-session (e.g. direct SDK use).\n currentWorkflowId = null;\n currentWorkflowDefinition = null;\n persistedAgentEmitted = /* @__PURE__ */ new Map();\n // Track all active stream clients so stopWorkflow() can stop them all.\n activeClients = /* @__PURE__ */ new Set();\n // Cache resolved values to avoid redundant GraphQL calls\n _selectedModelRef;\n _selectedModelName;\n _rootNamespaceId;\n _discoveryPromise;\n /**\n * Get the cached selected model ref.\n */\n get selectedModelRef() {\n return this._selectedModelRef ?? null;\n }\n /**\n * Set the selected model ref (e.g., from an eager discover call).\n * This will be used by resolveModelRef() to skip the picker.\n * Also persists to the file-based workspace cache.\n */\n set selectedModelRef(ref) {\n this._selectedModelRef = ref ?? void 0;\n this._selectedModelName = void 0;\n this.modelCache.saveSelection(ref, null);\n }\n /**\n * Get the cached selected model display name.\n */\n get selectedModelName() {\n return this._selectedModelName ?? null;\n }\n /**\n * Set the selected model display name.\n * Also persists to the file-based workspace cache.\n */\n set selectedModelName(name) {\n this._selectedModelName = name ?? void 0;\n this.modelCache.saveSelection(this._selectedModelRef ?? null, name);\n }\n /**\n * Optional external tool executor. When set, this is called for tool\n * requests instead of looking up tools from `options.tools`.\n * This allows the consumer (OpenCode) to wire in its permission system.\n *\n * The executor is automatically bound to the async context at the time\n * it is set, so that AsyncLocalStorage-based contexts (like Instance)\n * remain available when the executor is invoked from WebSocket callbacks.\n */\n _toolExecutor = null;\n /**\n * Optional callback invoked with intermediate token usage estimates\n * after each tool execution completes. This allows the consumer to\n * display live token counts during long-running DWS workflows, since\n * the AI SDK only surfaces usage via finish-step at stream end.\n */\n onUsageUpdate = null;\n /**\n * Tool names pre-approved for the current session.\n * Set by the host (e.g., opencode) and merged into preapproved_tools on each StartRequest.\n * Updated when the user chooses \"always\" in the approval prompt.\n */\n sessionPreapprovedTools = [];\n /**\n * The opencode session ID. Set per-stream by the host to key per-session\n * DWS workflows. Different sessions get different DWS workflows.\n */\n sessionID = \"\";\n /**\n * Set the approval handler callback.\n * Called when DWS requires tool call approval. Host (e.g., opencode) wires this\n * to its permission system each stream call, similar to toolExecutor.\n */\n set approvalHandler(handler) {\n this.workflowOptions.approvalHandler = handler ?? void 0;\n }\n get approvalHandler() {\n return this.workflowOptions.approvalHandler ?? null;\n }\n /**\n * Optional callback invoked when multiple workflow models are available\n * and the user should pick one. Set per-stream by the host (e.g., OpenCode)\n * alongside `toolExecutor`. Takes precedence over `workflowOptions.onSelectModel`.\n */\n onSelectModel = null;\n /**\n * Set the system prompt to override DWS's default.\n * Sent via `flowConfig.prompts[].prompt_template.system` at stream time.\n * Can be updated between doStream() calls (e.g., per agent/session).\n */\n set systemPrompt(prompt) {\n this.workflowOptions.systemPrompt = prompt ?? void 0;\n }\n get systemPrompt() {\n return this.workflowOptions.systemPrompt ?? null;\n }\n get toolExecutor() {\n return this._toolExecutor;\n }\n set toolExecutor(executor) {\n if (executor) {\n try {\n const { AsyncResource } = __require(\"async_hooks\");\n this._toolExecutor = AsyncResource.bind(executor);\n } catch {\n this._toolExecutor = executor;\n }\n } else {\n this._toolExecutor = null;\n }\n }\n constructor(modelId, config, workflowOptions = {}) {\n this.modelId = modelId;\n this.config = config;\n this.workflowOptions = workflowOptions;\n const workDir = workflowOptions.workingDirectory ?? process.cwd();\n this.modelCache = new GitLabModelCache(workDir, config.instanceUrl);\n const cached = this.modelCache.load();\n if (cached?.selectedModelRef) {\n this._selectedModelRef = cached.selectedModelRef;\n }\n if (cached?.selectedModelName) {\n this._selectedModelName = cached.selectedModelName;\n }\n this.tokenClient = new GitLabWorkflowTokenClient({\n instanceUrl: config.instanceUrl,\n getHeaders: config.getHeaders,\n refreshApiKey: config.refreshApiKey,\n fetch: config.fetch,\n featureFlags: config.featureFlags\n });\n this.projectDetector = new GitLabProjectDetector({\n instanceUrl: config.instanceUrl,\n getHeaders: config.getHeaders,\n fetch: config.fetch\n });\n this.modelDiscovery = new GitLabModelDiscovery({\n instanceUrl: config.instanceUrl,\n getHeaders: config.getHeaders,\n fetch: config.fetch\n });\n }\n get provider() {\n return this.config.provider;\n }\n /**\n * Resolve the project ID (path) to use for workflow creation.\n * Priority: explicit option > auto-detected from git remote > undefined.\n */\n async resolveProjectId() {\n if (this.workflowOptions.projectId) {\n return this.workflowOptions.projectId;\n }\n if (this.detectedProjectPath) {\n return this.detectedProjectPath;\n }\n const workDir = this.workflowOptions.workingDirectory ?? process.cwd();\n const project = await this.projectDetector.detectProject(workDir);\n if (project) {\n this.detectedProjectPath = project.pathWithNamespace;\n return project.pathWithNamespace;\n }\n return void 0;\n }\n /**\n * Resolve the root namespace GID to use for model discovery.\n *\n * Priority:\n * 1. Explicit `rootNamespaceId` in workflowOptions (caller-provided GID)\n * 2. Auto-detected from git remote via project detector (namespace.id → GID)\n * 3. Cached from previous call\n */\n async resolveRootNamespaceId() {\n if (this.workflowOptions.rootNamespaceId) {\n return this.workflowOptions.rootNamespaceId;\n }\n if (this._rootNamespaceId !== void 0) {\n return this._rootNamespaceId;\n }\n const workDir = this.workflowOptions.workingDirectory ?? process.cwd();\n const project = await this.projectDetector.detectProject(workDir);\n if (project?.namespaceId) {\n const gid = `gid://gitlab/Group/${project.namespaceId}`;\n this._rootNamespaceId = gid;\n return gid;\n }\n this._rootNamespaceId = null;\n return null;\n }\n /**\n * Resolve the effective DWS model ref to use for this stream.\n * Deduplicates concurrent calls via a shared promise.\n *\n * Priority for the canonical `duo-workflow` model ID:\n * 1. Admin-pinned model (from GitLabModelDiscovery) — always wins\n * 2. User selection via onSelectModel callback (if model switching enabled)\n * 3. Workspace default model\n * 4. File-cached discovery/selection — used when live discovery fails\n * 5. Hard-coded 'default' (DWS decides) — fallback when discovery fails\n *\n * For all other `duo-workflow-*` model IDs the static mapping is used as-is.\n */\n async resolveModelRef() {\n const staticRef = getWorkflowModelRef(this.modelId);\n if (this.modelId !== \"duo-workflow\") {\n return staticRef ?? \"default\";\n }\n if (this._selectedModelRef) {\n return this._selectedModelRef;\n }\n if (!this._discoveryPromise) {\n this._discoveryPromise = this.doResolveModelRef();\n this._discoveryPromise.finally(() => {\n this._discoveryPromise = void 0;\n });\n }\n return this._discoveryPromise;\n }\n async doResolveModelRef() {\n const rootNamespaceId = await this.resolveRootNamespaceId();\n if (!rootNamespaceId) {\n this._selectedModelRef = \"default\";\n return \"default\";\n }\n try {\n const discovered = await this.modelDiscovery.discover(rootNamespaceId);\n this.modelCache.saveDiscovery(discovered);\n if (discovered.pinnedModel) {\n this._selectedModelRef = discovered.pinnedModel.ref;\n this._selectedModelName = discovered.pinnedModel.name;\n this.modelCache.saveSelection(discovered.pinnedModel.ref, discovered.pinnedModel.name);\n return discovered.pinnedModel.ref;\n }\n const selectFn = this.onSelectModel ?? this.workflowOptions.onSelectModel;\n if (discovered.selectableModels.length > 0 && selectFn) {\n const selected = await selectFn(discovered.selectableModels);\n if (selected) {\n const match = discovered.selectableModels.find((m) => m.ref === selected);\n if (match) {\n this._selectedModelRef = match.ref;\n this._selectedModelName = match.name;\n this.modelCache.saveSelection(match.ref, match.name);\n return match.ref;\n }\n }\n }\n if (discovered.defaultModel) {\n this._selectedModelRef = discovered.defaultModel.ref;\n this._selectedModelName = discovered.defaultModel.name;\n this.modelCache.saveSelection(discovered.defaultModel.ref, discovered.defaultModel.name);\n return discovered.defaultModel.ref;\n }\n } catch {\n const cachedEntry = this.modelCache.load();\n if (cachedEntry?.selectedModelRef) {\n this._selectedModelRef = cachedEntry.selectedModelRef;\n this._selectedModelName = cachedEntry.selectedModelName ?? void 0;\n return cachedEntry.selectedModelRef;\n }\n }\n this._selectedModelRef = \"default\";\n return \"default\";\n }\n /**\n * Pre-fetch available models for the workspace.\n * Call this early (e.g., on IDE startup) to avoid blocking the first stream.\n * Results are persisted to the workspace model cache.\n *\n * @param rootNamespaceId - GitLab group ID (e.g., 'gid://gitlab/Group/12345')\n * @returns Discovered models with default, selectable, and pinned models\n */\n async discoverModels(rootNamespaceId) {\n const result = await this.modelDiscovery.discover(rootNamespaceId);\n this.modelCache.saveDiscovery(result);\n return result;\n }\n /**\n * Get the file-based model cache instance for this workspace.\n * Useful for consumers that need direct cache access (e.g., the discover route).\n */\n getModelCache() {\n return this.modelCache;\n }\n /**\n * Stop the active workflow.\n */\n stopWorkflow() {\n for (const client of this.activeClients) {\n if (client.isConnected) {\n client.stop();\n }\n }\n }\n /**\n * Reset the workflow state, forcing a new workflow to be created on the\n * next doStream() call. Call this when starting a new conversation.\n */\n resetWorkflow(sessionKey) {\n if (sessionKey) {\n this.sessionWorkflows.delete(sessionKey);\n } else {\n this.sessionWorkflows.clear();\n this.currentWorkflowId = null;\n this.persistedAgentEmitted.clear();\n }\n }\n /**\n * Get the current workflow ID (if any).\n * Useful for consumers that need to track workflow state.\n */\n get workflowId() {\n return this.currentWorkflowId;\n }\n createUsage(params) {\n return {\n inputTokens: {\n total: params?.inputTotal,\n noCache: params?.inputTotal,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: params?.outputTotal,\n text: params?.outputTotal,\n reasoning: void 0\n }\n };\n }\n createFinishReason(unified, raw) {\n return { unified, raw };\n }\n // ---------------------------------------------------------------------------\n // LanguageModelV3 — doGenerate (non-streaming)\n // ---------------------------------------------------------------------------\n async doGenerate(options) {\n const { stream } = await this.doStream(options);\n const reader = stream.getReader();\n const textParts = [];\n const toolCalls = [];\n let finishReason = { unified: \"other\", raw: void 0 };\n let usage = this.createUsage();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n switch (value.type) {\n case \"text-delta\":\n textParts.push(value.delta);\n break;\n case \"tool-call\":\n toolCalls.push({\n type: \"tool-call\",\n toolCallId: value.toolCallId,\n toolName: value.toolName,\n input: value.input\n });\n break;\n case \"finish\":\n finishReason = value.finishReason;\n if (value.usage) {\n usage = value.usage;\n }\n break;\n case \"error\":\n throw value.error;\n }\n }\n } finally {\n reader.releaseLock();\n }\n const content = [];\n const fullText = textParts.join(\"\");\n if (fullText) {\n content.push({ type: \"text\", text: fullText });\n }\n content.push(...toolCalls);\n return { content, finishReason, usage, warnings: [] };\n }\n // ---------------------------------------------------------------------------\n // LanguageModelV3 — doStream (streaming)\n // ---------------------------------------------------------------------------\n async doStream(options) {\n const goal = this.extractGoalFromPrompt(options.prompt);\n const modelRef = await this.resolveModelRef();\n const mcpTools = this.extractMcpTools(options);\n const preapprovedTools = [\n ...this.workflowOptions.preapprovedTools ?? mcpTools.map((t) => t.name),\n ...this.sessionPreapprovedTools\n ];\n const additionalContext = this.buildAdditionalContext(options.prompt);\n const toolExecutor = this.toolExecutor ?? null;\n const availableToolNames = new Set(options.tools?.map((t) => t.name) ?? []);\n const gitlabProviderOptions = options.providerOptions?.[\"gitlab\"];\n const callWorkflowDefinition = gitlabProviderOptions?.workflowDefinition ?? this.workflowOptions.workflowDefinition;\n const callFlowConfig = gitlabProviderOptions?.flowConfig ?? void 0;\n const callFlowConfigSchemaVersion = gitlabProviderOptions?.flowConfigSchemaVersion ?? void 0;\n const callAiCatalogItemVersionId = gitlabProviderOptions?.aiCatalogItemVersionId ?? void 0;\n await this.tokenClient.getToken(\n callWorkflowDefinition ?? DEFAULT_WORKFLOW_DEFINITION,\n this.workflowOptions.rootNamespaceId\n );\n const projectId = await this.resolveProjectId();\n const effectiveDefinition = callFlowConfig ?? callWorkflowDefinition ?? DEFAULT_WORKFLOW_DEFINITION;\n const sessionKey = this.sessionID;\n let sess = this.sessionWorkflows.get(sessionKey);\n if (sess && sess.workflowDefinition !== effectiveDefinition) {\n this.sessionWorkflows.delete(sessionKey);\n sess = void 0;\n }\n const useLegacy = sessionKey === \"\";\n if (useLegacy && this.currentWorkflowId && this.currentWorkflowDefinition !== effectiveDefinition) {\n this.currentWorkflowId = null;\n this.currentWorkflowDefinition = null;\n }\n let workflowId;\n if (sess) {\n workflowId = sess.workflowId;\n } else if (useLegacy && this.currentWorkflowId) {\n workflowId = this.currentWorkflowId;\n } else {\n workflowId = await this.tokenClient.createWorkflow(goal, {\n projectId,\n namespaceId: this.workflowOptions.namespaceId,\n workflowDefinition: callWorkflowDefinition,\n agentPrivileges: this.workflowOptions.agentPrivileges,\n aiCatalogItemVersionId: callAiCatalogItemVersionId\n });\n if (useLegacy) {\n this.currentWorkflowId = workflowId;\n this.currentWorkflowDefinition = effectiveDefinition;\n } else {\n this.sessionWorkflows.set(sessionKey, {\n workflowId,\n workflowDefinition: effectiveDefinition,\n agentEmitted: /* @__PURE__ */ new Map(),\n toolEntries: /* @__PURE__ */ new Set()\n });\n sess = this.sessionWorkflows.get(sessionKey);\n }\n }\n const wsClient = new GitLabWorkflowClient();\n this.activeClients.add(wsClient);\n let textBlockCounter = 0;\n const ss = {\n streamClosed: false,\n streamedInputChars: 0,\n streamedOutputChars: 0,\n pendingToolCount: 0,\n approvalPending: false,\n deferredClose: null,\n activeTextBlockId: null,\n agentMessageEmitted: new Map(sess?.agentEmitted ?? this.persistedAgentEmitted),\n currentAgentMessageId: \"\",\n activeClient: wsClient,\n processedRequestIDs: /* @__PURE__ */ new Set(),\n emittedToolEntries: new Set(sess?.toolEntries),\n emittedToolKeys: /* @__PURE__ */ new Set(),\n sessionKey\n };\n for (const msg of options.prompt) {\n if (msg.role === \"system\") {\n ss.streamedInputChars += msg.content.length;\n } else if (msg.role === \"user\") {\n for (const part of msg.content) {\n if (part.type === \"text\") {\n ss.streamedInputChars += part.text.length;\n }\n }\n }\n }\n let startReq;\n const stream = new ReadableStream({\n start: async (controller) => {\n try {\n await wsClient.connect(\n {\n instanceUrl: this.config.instanceUrl,\n modelRef,\n headers: this.config.getHeaders(),\n projectId: this.workflowOptions.projectId,\n namespaceId: this.workflowOptions.namespaceId,\n rootNamespaceId: this.workflowOptions.rootNamespaceId,\n aiCatalogItemVersionId: callAiCatalogItemVersionId,\n workflowDefinition: callWorkflowDefinition ?? this.workflowOptions.workflowDefinition\n },\n (event) => {\n this.handleWorkflowEvent(\n ss,\n event,\n controller,\n wsClient,\n toolExecutor,\n () => `text-${textBlockCounter++}`,\n availableToolNames,\n startReq,\n {\n aiCatalogItemVersionId: callAiCatalogItemVersionId,\n workflowDefinition: callWorkflowDefinition ?? this.workflowOptions.workflowDefinition\n }\n );\n }\n );\n const workflowDef = callWorkflowDefinition ?? DEFAULT_WORKFLOW_DEFINITION;\n const capabilities = this.workflowOptions.clientCapabilities ?? DEFAULT_CLIENT_CAPABILITIES;\n const workflowMetadata = await this.buildWorkflowMetadata();\n const metadataStr = JSON.stringify(workflowMetadata);\n const basePayload = {\n workflowID: workflowId,\n clientVersion: CLIENT_VERSION,\n workflowDefinition: workflowDef,\n goal,\n workflowMetadata: metadataStr,\n clientCapabilities: capabilities,\n preapproved_tools: preapprovedTools\n };\n const baseSize = JSON.stringify(basePayload).length + 100;\n const trimmed = this.trimPayload(mcpTools, additionalContext, baseSize);\n const trimmedPreapproved = preapprovedTools.filter(\n (name) => trimmed.mcpTools.some((t) => t.name === name)\n );\n startReq = {\n workflowID: workflowId,\n clientVersion: CLIENT_VERSION,\n workflowDefinition: workflowDef,\n goal,\n workflowMetadata: metadataStr,\n additional_context: trimmed.additionalContext,\n clientCapabilities: capabilities,\n mcpTools: trimmed.mcpTools,\n preapproved_tools: trimmedPreapproved\n };\n const resolvedFlowConfig = callFlowConfig ?? this.workflowOptions.flowConfig;\n const resolvedFlowConfigSchemaVersion = callFlowConfigSchemaVersion ?? this.workflowOptions.flowConfigSchemaVersion;\n if (resolvedFlowConfig) {\n startReq.flowConfig = resolvedFlowConfig;\n }\n if (resolvedFlowConfigSchemaVersion) {\n startReq.flowConfigSchemaVersion = resolvedFlowConfigSchemaVersion;\n } else if (startReq.flowConfig) {\n startReq.flowConfigSchemaVersion = \"v1\";\n }\n wsClient.sendStartRequest(startReq);\n controller.enqueue({\n type: \"stream-start\",\n warnings: []\n });\n controller.enqueue({\n type: \"response-metadata\",\n id: workflowId,\n modelId: modelRef\n });\n } catch (error) {\n if (!ss.streamClosed) {\n controller.enqueue({\n type: \"error\",\n error: error instanceof GitLabError ? error : new GitLabError({\n message: `Workflow connection failed: ${error}`,\n cause: error\n })\n });\n ss.streamClosed = true;\n controller.close();\n }\n }\n },\n cancel: (_reason) => {\n wsClient.stop();\n wsClient.close();\n this.activeClients.delete(wsClient);\n ss.activeClient = null;\n if (!ss.streamClosed) {\n if (ss.sessionKey) {\n this.sessionWorkflows.delete(ss.sessionKey);\n } else {\n this.currentWorkflowId = null;\n }\n }\n }\n });\n return {\n stream,\n request: {\n body: { workflowId, modelRef, goal }\n }\n };\n }\n // ---------------------------------------------------------------------------\n // Event handling\n // ---------------------------------------------------------------------------\n handleWorkflowEvent(ss, event, controller, wsClient, toolExecutor, nextTextId, availableToolNames, startReq, wsExtras) {\n if (ss.streamClosed) {\n return;\n }\n switch (event.type) {\n case \"checkpoint\": {\n this.processCheckpoint(ss, event.data, controller, nextTextId);\n break;\n }\n case \"tool-request\": {\n const { requestID, data } = event;\n if (ss.processedRequestIDs.has(requestID)) break;\n ss.processedRequestIDs.add(requestID);\n ss.emittedToolKeys.add(data.name);\n let parsedArgs;\n try {\n JSON.parse(data.args);\n parsedArgs = data.args;\n } catch {\n parsedArgs = data.args || \"{}\";\n }\n if (ss.activeTextBlockId) {\n controller.enqueue({ type: \"text-end\", id: ss.activeTextBlockId });\n ss.activeTextBlockId = null;\n }\n controller.enqueue({\n type: \"tool-input-start\",\n id: requestID,\n toolName: data.name,\n providerExecuted: true\n });\n controller.enqueue({\n type: \"tool-input-delta\",\n id: requestID,\n delta: parsedArgs\n });\n controller.enqueue({\n type: \"tool-input-end\",\n id: requestID\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: requestID,\n toolName: data.name,\n input: parsedArgs,\n providerExecuted: true\n });\n this.executeToolAndRespond(\n ss,\n wsClient,\n controller,\n requestID,\n data.name,\n parsedArgs,\n toolExecutor\n ).catch(() => {\n });\n break;\n }\n case \"builtin-tool-request\": {\n if (ss.processedRequestIDs.has(event.requestID)) break;\n ss.processedRequestIDs.add(event.requestID);\n const mapped = mapBuiltinTool(event.toolName, event.data, availableToolNames);\n ss.emittedToolKeys.add(mapped.toolName);\n const mappedArgs = JSON.stringify(mapped.args);\n if (ss.activeTextBlockId) {\n controller.enqueue({ type: \"text-end\", id: ss.activeTextBlockId });\n ss.activeTextBlockId = null;\n }\n controller.enqueue({\n type: \"tool-input-start\",\n id: event.requestID,\n toolName: mapped.toolName,\n providerExecuted: true\n });\n controller.enqueue({\n type: \"tool-input-delta\",\n id: event.requestID,\n delta: mappedArgs\n });\n controller.enqueue({\n type: \"tool-input-end\",\n id: event.requestID\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: event.requestID,\n toolName: mapped.toolName,\n input: mappedArgs,\n providerExecuted: true\n });\n this.executeToolAndRespond(\n ss,\n wsClient,\n controller,\n event.requestID,\n mapped.toolName,\n mappedArgs,\n toolExecutor\n ).catch(() => {\n });\n break;\n }\n case \"approval-required\": {\n ss.approvalPending = true;\n this.approveAndResume(\n ss,\n event.tools,\n startReq,\n controller,\n toolExecutor,\n nextTextId,\n availableToolNames,\n wsExtras\n ).catch((_err) => {\n ss.approvalPending = false;\n if (ss.deferredClose) {\n const close = ss.deferredClose;\n ss.deferredClose = null;\n close();\n }\n });\n break;\n }\n case \"completed\": {\n if (ss.activeTextBlockId) {\n controller.enqueue({ type: \"text-end\", id: ss.activeTextBlockId });\n ss.activeTextBlockId = null;\n }\n const doCompleteClose = () => {\n if (ss.streamClosed) return;\n const inputTokens = Math.ceil(ss.streamedInputChars / 4);\n const outputTokens = Math.ceil(ss.streamedOutputChars / 4);\n controller.enqueue({\n type: \"finish\",\n finishReason: this.createFinishReason(\"stop\", \"completed\"),\n usage: this.createUsage({ inputTotal: inputTokens, outputTotal: outputTokens })\n });\n ss.streamClosed = true;\n controller.close();\n this.cleanupClient(ss, false);\n };\n if (ss.pendingToolCount > 0 || ss.approvalPending) {\n ss.deferredClose = doCompleteClose;\n } else {\n ss.deferredClose = null;\n doCompleteClose();\n }\n break;\n }\n case \"failed\": {\n if (ss.activeTextBlockId) {\n controller.enqueue({ type: \"text-end\", id: ss.activeTextBlockId });\n ss.activeTextBlockId = null;\n }\n controller.enqueue({\n type: \"error\",\n error: new GitLabError({\n message: `Workflow failed: ${sanitizeErrorMessage(event.error.message)}`,\n cause: event.error\n })\n });\n ss.streamClosed = true;\n controller.close();\n this.cleanupClient(ss, true);\n break;\n }\n case \"closed\": {\n if (ss.streamClosed) {\n break;\n }\n if (ss.activeTextBlockId) {\n controller.enqueue({ type: \"text-end\", id: ss.activeTextBlockId });\n ss.activeTextBlockId = null;\n }\n const doClose = () => {\n if (ss.streamClosed) return;\n if (event.code !== 1e3) {\n controller.enqueue({\n type: \"error\",\n error: new GitLabError({\n message: `WebSocket closed unexpectedly: code=${event.code} reason=${sanitizeErrorMessage(event.reason)}`,\n statusCode: event.code\n })\n });\n ss.streamClosed = true;\n controller.close();\n this.cleanupClient(ss, true);\n } else {\n const inTok = Math.ceil(ss.streamedInputChars / 4);\n const outTok = Math.ceil(ss.streamedOutputChars / 4);\n controller.enqueue({\n type: \"finish\",\n finishReason: this.createFinishReason(\"stop\", \"closed\"),\n usage: this.createUsage({ inputTotal: inTok, outputTotal: outTok })\n });\n ss.streamClosed = true;\n controller.close();\n this.cleanupClient(ss, false);\n }\n };\n if (ss.pendingToolCount > 0 || ss.approvalPending) {\n ss.deferredClose = doClose;\n } else {\n ss.deferredClose = null;\n doClose();\n }\n break;\n }\n }\n }\n // ---------------------------------------------------------------------------\n // Checkpoint content extraction\n // ---------------------------------------------------------------------------\n processCheckpoint(ss, checkpoint, controller, nextTextId) {\n if (!checkpoint.checkpoint) {\n if (checkpoint.content) {\n if (!ss.activeTextBlockId) {\n ss.activeTextBlockId = nextTextId();\n controller.enqueue({ type: \"text-start\", id: ss.activeTextBlockId });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: ss.activeTextBlockId,\n delta: checkpoint.content\n });\n ss.streamedOutputChars += checkpoint.content.length;\n }\n return;\n }\n let parsed;\n try {\n parsed = JSON.parse(checkpoint.checkpoint);\n } catch (e) {\n return;\n }\n const chatLog = parsed.channel_values?.ui_chat_log;\n if (!chatLog || !Array.isArray(chatLog) || chatLog.length === 0) {\n return;\n }\n if (checkpoint.status !== \"RUNNING\" && checkpoint.status !== \"INPUT_REQUIRED\" && checkpoint.status !== \"FINISHED\" && checkpoint.status !== \"COMPLETED\" && checkpoint.status !== \"TOOL_CALL_APPROVAL_REQUIRED\") {\n return;\n }\n for (let i = 0; i < chatLog.length; i++) {\n const entry = chatLog[i];\n if (entry.message_type === \"tool\" && entry.tool_info) {\n const toolId = entry.message_id || entry.correlation_id || `tool-${i}`;\n if (ss.emittedToolEntries.has(toolId)) continue;\n const name = entry.tool_info.name;\n const args = JSON.stringify(entry.tool_info.args ?? {});\n if (ss.emittedToolKeys.has(name)) {\n ss.emittedToolEntries.add(toolId);\n const sess2 = this.sessionWorkflows.get(ss.sessionKey);\n if (sess2) sess2.toolEntries.add(toolId);\n continue;\n }\n if (ss.activeTextBlockId) {\n controller.enqueue({ type: \"text-end\", id: ss.activeTextBlockId });\n ss.activeTextBlockId = null;\n }\n controller.enqueue({\n type: \"tool-input-start\",\n id: toolId,\n toolName: name,\n providerExecuted: true\n });\n controller.enqueue({ type: \"tool-input-delta\", id: toolId, delta: args });\n controller.enqueue({ type: \"tool-input-end\", id: toolId });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: toolId,\n toolName: name,\n input: args,\n providerExecuted: true,\n dynamic: true\n });\n const response = entry.tool_info.tool_response;\n const output = typeof response === \"string\" ? response : response ? response.content : entry.content || \"\";\n controller.enqueue({\n type: \"tool-result\",\n toolCallId: toolId,\n toolName: name,\n result: { output, title: name, metadata: {} },\n isError: false\n });\n ss.emittedToolEntries.add(toolId);\n const sess = this.sessionWorkflows.get(ss.sessionKey);\n if (sess) sess.toolEntries.add(toolId);\n continue;\n }\n if (entry.message_type !== \"agent\") continue;\n const content = entry.content || \"\";\n const msgId = entry.message_id || `idx-${i}`;\n const emittedLen = ss.agentMessageEmitted.get(msgId) ?? 0;\n if (content.length <= emittedLen) continue;\n const delta = content.slice(emittedLen);\n const isSameMsg = msgId === ss.currentAgentMessageId;\n if (!isSameMsg && ss.activeTextBlockId) {\n controller.enqueue({ type: \"text-end\", id: ss.activeTextBlockId });\n ss.activeTextBlockId = null;\n }\n if (!ss.activeTextBlockId) {\n ss.activeTextBlockId = nextTextId();\n controller.enqueue({ type: \"text-start\", id: ss.activeTextBlockId });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: ss.activeTextBlockId,\n delta\n });\n ss.streamedOutputChars += delta.length;\n ss.agentMessageEmitted.set(msgId, content.length);\n const target = this.sessionWorkflows.get(ss.sessionKey)?.agentEmitted ?? this.persistedAgentEmitted;\n target.set(msgId, content.length);\n ss.currentAgentMessageId = msgId;\n }\n }\n async executeToolAndRespond(ss, wsClient, controller, requestID, toolName, argsJson, toolExecutor) {\n ss.pendingToolCount++;\n const safeEnqueue = (part) => {\n if (ss.streamClosed) {\n return;\n }\n try {\n controller.enqueue(part);\n } catch {\n }\n };\n try {\n if (toolExecutor) {\n let result = await toolExecutor(toolName, argsJson, requestID);\n if (result.error && /^Unknown tool:/.test(result.error)) {\n const fallback = executeBuiltinFallback(toolName, argsJson);\n if (fallback) {\n result = fallback;\n }\n }\n wsClient.sendActionResponse(requestID, result.result, result.error);\n ss.streamedInputChars += argsJson.length;\n ss.streamedOutputChars += result.result.length;\n const toolOutput = result.result;\n const toolTitle = result.title ?? `${toolName} result`;\n const toolMetadata = result.metadata ?? { output: result.result };\n if (result.error) {\n let errorText;\n if (typeof result.error === \"string\") {\n errorText = result.error;\n } else if (result.error && typeof result.error === \"object\") {\n errorText = JSON.stringify(result.error);\n } else {\n errorText = String(result.error);\n }\n safeEnqueue({\n type: \"tool-result\",\n toolCallId: requestID,\n toolName,\n result: errorText,\n isError: true\n });\n } else {\n safeEnqueue({\n type: \"tool-result\",\n toolCallId: requestID,\n toolName,\n result: {\n output: toolOutput,\n title: toolTitle,\n metadata: toolMetadata\n },\n isError: false\n });\n }\n } else {\n const errorMsg = `Tool executor not configured for tool: ${toolName}`;\n wsClient.sendActionResponse(requestID, \"\", errorMsg);\n safeEnqueue({\n type: \"tool-result\",\n toolCallId: requestID,\n toolName,\n result: errorMsg,\n isError: true\n });\n }\n } catch (error) {\n const rawMsg = error instanceof Error ? error.message : String(error);\n const errorMsg = sanitizeErrorMessage(rawMsg);\n wsClient.sendActionResponse(requestID, \"\", errorMsg);\n safeEnqueue({\n type: \"tool-result\",\n toolCallId: requestID,\n toolName,\n result: errorMsg,\n isError: true\n });\n } finally {\n ss.pendingToolCount--;\n if (this.onUsageUpdate) {\n try {\n this.onUsageUpdate({\n inputTokens: Math.ceil(ss.streamedInputChars / 4),\n outputTokens: Math.ceil(ss.streamedOutputChars / 4)\n });\n } catch {\n }\n }\n if (ss.pendingToolCount <= 0 && ss.deferredClose) {\n const close = ss.deferredClose;\n ss.deferredClose = null;\n close();\n }\n }\n }\n cleanupClient(ss, clearWorkflow = false) {\n if (ss.activeClient) {\n ss.activeClient.close();\n this.activeClients.delete(ss.activeClient);\n ss.activeClient = null;\n }\n if (clearWorkflow) {\n if (ss.sessionKey) {\n this.sessionWorkflows.delete(ss.sessionKey);\n } else {\n this.currentWorkflowId = null;\n this.persistedAgentEmitted.clear();\n }\n }\n }\n async approveAndResume(ss, tools, startReq, controller, toolExecutor, nextTextId, availableToolNames, wsExtras) {\n const handler = this.workflowOptions.approvalHandler;\n if (!handler || !startReq) {\n ss.approvalPending = false;\n if (ss.deferredClose) {\n const close = ss.deferredClose;\n ss.deferredClose = null;\n close();\n }\n return;\n }\n let decision;\n try {\n decision = await handler(tools);\n } catch (err) {\n ss.approvalPending = false;\n if (!ss.streamClosed) controller.error(err);\n return;\n }\n ss.approvalPending = false;\n ss.deferredClose = null;\n this.cleanupClient(ss, false);\n const approval = decision.approved ? { approval: { tool_name: tools[0]?.name, tool_args_json: tools[0]?.args } } : { rejection: { message: decision.message ?? \"User rejected\" } };\n const newStartReq = {\n ...startReq,\n approval,\n preapproved_tools: decision.approved ? [...startReq.preapproved_tools ?? [], ...tools.map((t) => t.name)] : startReq.preapproved_tools ?? []\n };\n const newClient = new GitLabWorkflowClient();\n this.activeClients.add(newClient);\n ss.activeClient = newClient;\n const modelRef = await this.resolveModelRef();\n try {\n await newClient.connect(\n {\n instanceUrl: this.config.instanceUrl,\n modelRef,\n headers: this.config.getHeaders(),\n projectId: this.workflowOptions.projectId,\n namespaceId: this.workflowOptions.namespaceId,\n rootNamespaceId: this.workflowOptions.rootNamespaceId,\n aiCatalogItemVersionId: wsExtras?.aiCatalogItemVersionId,\n workflowDefinition: wsExtras?.workflowDefinition\n },\n (event) => this.handleWorkflowEvent(\n ss,\n event,\n controller,\n newClient,\n toolExecutor,\n nextTextId,\n availableToolNames,\n newStartReq,\n wsExtras\n )\n );\n newClient.sendStartRequest(newStartReq);\n } catch (err) {\n this.cleanupClient(ss, true);\n if (!ss.streamClosed) controller.error(err);\n }\n }\n // ---------------------------------------------------------------------------\n // Workflow metadata\n // ---------------------------------------------------------------------------\n async buildWorkflowMetadata() {\n const metadata = {\n extended_logging: false,\n tool_approval_for_session_enabled: true\n };\n try {\n const workDir = this.workflowOptions.workingDirectory ?? process.cwd();\n const gitInfo = await this.getGitInfo(workDir);\n if (gitInfo.url) metadata.git_url = gitInfo.url;\n if (gitInfo.sha) metadata.git_sha = gitInfo.sha;\n if (gitInfo.branch) metadata.git_branch = gitInfo.branch;\n } catch {\n }\n return metadata;\n }\n async getGitInfo(workDir) {\n const { execFile } = await import(\"child_process\");\n const { promisify } = await import(\"util\");\n const execFileAsync = promisify(execFile);\n const opts = { cwd: workDir, timeout: 3e3 };\n const run = async (cmd, args) => {\n try {\n const { stdout } = await execFileAsync(cmd, args, opts);\n return stdout.trim() || void 0;\n } catch {\n return void 0;\n }\n };\n const [url, sha, branch] = await Promise.all([\n run(\"git\", [\"remote\", \"get-url\", \"origin\"]),\n run(\"git\", [\"rev-parse\", \"HEAD\"]),\n run(\"git\", [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"])\n ]);\n return { url, sha, branch };\n }\n // ---------------------------------------------------------------------------\n // Prompt / tool extraction helpers\n // ---------------------------------------------------------------------------\n /**\n * Extract the user's goal (last user message) from the AI SDK prompt.\n */\n static SYSTEM_REMINDER_RE = /<system-reminder>([\\s\\S]*?)<\\/system-reminder>/g;\n extractGoalFromPrompt(prompt) {\n for (let i = prompt.length - 1; i >= 0; i--) {\n const message = prompt[i];\n if (message.role === \"user\") {\n const textParts = message.content.filter((part) => part.type === \"text\").map((part) => part.text);\n if (textParts.length > 0) {\n const raw = textParts.join(\"\\n\");\n const cleaned = raw.replace(_GitLabWorkflowLanguageModel.SYSTEM_REMINDER_RE, \"\").trim();\n return cleaned || raw;\n }\n }\n }\n return \"\";\n }\n /**\n * Convert AI SDK tools to DWS McpToolDefinition format.\n */\n extractMcpTools(options) {\n if (this.workflowOptions.mcpTools && this.workflowOptions.mcpTools.length > 0) {\n return this.workflowOptions.mcpTools;\n }\n if (!options.tools || options.tools.length === 0) {\n return [];\n }\n return options.tools.filter((tool) => tool.type === \"function\").map((tool) => ({\n name: tool.name,\n description: tool.description || \"\",\n inputSchema: JSON.stringify(tool.inputSchema || { type: \"object\", properties: {} })\n }));\n }\n // ---------------------------------------------------------------------------\n // Payload size management\n // ---------------------------------------------------------------------------\n static MAX_START_REQUEST_BYTES = 4 * 1024 * 1024;\n /**\n * Trim mcpTools and additionalContext to fit within the DWS 4MB gRPC\n * message size limit (`MAX_MESSAGE_SIZE` in duo_workflow_service/server.py).\n *\n * DWS has no per-field limits on tool descriptions, schemas, or context items.\n * The only hard constraint is the total serialized message size.\n *\n * Strategy (progressive, only if over budget):\n * 1. Send everything as-is\n * 2. Simplify tool input schemas (strip descriptions from properties)\n * 3. Strip schemas to minimal form (type + property names only)\n * 4. Drop tools from the end until it fits\n */\n trimPayload(mcpTools, additionalContext, basePayloadSize) {\n const budget = _GitLabWorkflowLanguageModel.MAX_START_REQUEST_BYTES - basePayloadSize;\n const contextJson = JSON.stringify(additionalContext);\n const toolsJson = JSON.stringify(mcpTools);\n const totalSize = toolsJson.length + contextJson.length;\n if (totalSize <= budget) {\n return { mcpTools, additionalContext };\n }\n const simplifiedTools = mcpTools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: simplifySchema(tool.inputSchema)\n }));\n const simpSize = JSON.stringify(simplifiedTools).length + contextJson.length;\n if (simpSize <= budget) {\n return { mcpTools: simplifiedTools, additionalContext };\n }\n const minTools = simplifiedTools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: minimalSchema(tool.inputSchema)\n }));\n const minSize = JSON.stringify(minTools).length + contextJson.length;\n if (minSize <= budget) {\n return { mcpTools: minTools, additionalContext };\n }\n const keptTools = [...minTools];\n while (keptTools.length > 0) {\n const currentSize = JSON.stringify(keptTools).length + contextJson.length;\n if (currentSize <= budget) break;\n keptTools.pop();\n }\n return { mcpTools: keptTools, additionalContext };\n }\n buildAdditionalContext(prompt) {\n const context = [];\n if (this.workflowOptions.additionalContext) {\n context.push(...this.workflowOptions.additionalContext);\n }\n for (const message of prompt) {\n if (message.role === \"system\") {\n context.push({\n category: \"system_prompt\",\n content: message.content,\n metadata: JSON.stringify({ role: \"system\" })\n });\n } else if (message.role === \"assistant\") {\n const textContent = message.content.filter((part) => part.type === \"text\").map((part) => part.text).join(\"\\n\");\n if (textContent) {\n context.push({\n category: \"conversation\",\n content: textContent,\n metadata: JSON.stringify({ role: \"assistant\" })\n });\n }\n } else if (message.role === \"user\") {\n for (const part of message.content) {\n if (part.type === \"text\") {\n const text = part.text;\n const matches = text.matchAll(_GitLabWorkflowLanguageModel.SYSTEM_REMINDER_RE);\n for (const match of matches) {\n const inner = match[1].trim();\n if (inner) {\n context.push({\n category: \"agent_context\",\n content: inner,\n metadata: JSON.stringify({ source: \"system-reminder\" })\n });\n }\n }\n }\n }\n }\n }\n return context;\n }\n};\n\n// src/gitlab-oauth-types.ts\nvar OPENCODE_GITLAB_AUTH_CLIENT_ID = \"1d89f9fdb23ee96d4e603201f6861dab6e143c5c3c00469a018a2d94bdc03d4e\";\nvar BUNDLED_CLIENT_ID = \"36f2a70cddeb5a0889d4fd8295c241b7e9848e89cf9e599d0eed2d8e5350fbf5\";\nvar GITLAB_COM_URL = \"https://gitlab.com\";\nvar TOKEN_EXPIRY_SKEW_MS = 5 * 60 * 1e3;\nvar OAUTH_SCOPES = [\"api\"];\n\n// src/gitlab-oauth-manager.ts\nvar GitLabOAuthManager = class {\n fetch;\n constructor(fetchImpl = fetch) {\n this.fetch = fetchImpl;\n }\n /**\n * Check if a token is expired\n */\n isTokenExpired(expiresAt) {\n return Date.now() >= expiresAt;\n }\n /**\n * Check if a token needs refresh (within skew window)\n */\n needsRefresh(expiresAt) {\n return Date.now() >= expiresAt - TOKEN_EXPIRY_SKEW_MS;\n }\n /**\n * Refresh tokens if needed\n * Returns the same tokens if refresh is not needed, or new tokens if refreshed\n */\n async refreshIfNeeded(tokens, clientId) {\n if (!this.needsRefresh(tokens.expiresAt)) {\n return tokens;\n }\n if (this.isTokenExpired(tokens.expiresAt)) {\n throw new GitLabError({\n message: \"OAuth token has expired and cannot be used\"\n });\n }\n return this.exchangeRefreshToken({\n instanceUrl: tokens.instanceUrl,\n refreshToken: tokens.refreshToken,\n clientId\n });\n }\n /**\n * Exchange authorization code for tokens\n * Based on gitlab-vscode-extension createOAuthAccountFromCode\n */\n async exchangeAuthorizationCode(params) {\n const { instanceUrl, code, codeVerifier, clientId, redirectUri } = params;\n const tokenResponse = await this.exchangeToken({\n instanceUrl,\n grantType: \"authorization_code\",\n code,\n codeVerifier,\n clientId: clientId || this.getClientId(instanceUrl),\n redirectUri\n });\n return this.createTokensFromResponse(tokenResponse, instanceUrl);\n }\n /**\n * Exchange refresh token for new tokens\n * Based on gitlab-vscode-extension TokenExchangeService\n */\n async exchangeRefreshToken(params) {\n const { instanceUrl, refreshToken, clientId } = params;\n const tokenResponse = await this.exchangeToken({\n instanceUrl,\n grantType: \"refresh_token\",\n refreshToken,\n clientId: clientId || this.getClientId(instanceUrl)\n });\n return this.createTokensFromResponse(tokenResponse, instanceUrl);\n }\n /**\n * Get the OAuth client ID for an instance.\n * Priority: env var > opencode-gitlab-auth default (for GitLab.com).\n * Note: callers (e.g. exchangeRefreshToken) may pass an explicit clientId\n * that bypasses this method entirely.\n */\n getClientId(instanceUrl) {\n const envClientId = process.env[\"GITLAB_OAUTH_CLIENT_ID\"];\n if (envClientId) {\n return envClientId;\n }\n if (instanceUrl === GITLAB_COM_URL) {\n return OPENCODE_GITLAB_AUTH_CLIENT_ID;\n }\n throw new GitLabError({\n message: `No OAuth client ID configured for instance ${instanceUrl}. Please provide a clientId parameter or set GITLAB_OAUTH_CLIENT_ID environment variable.`\n });\n }\n /**\n * Exchange token with GitLab OAuth endpoint\n * Based on gitlab-vscode-extension GitLabService.exchangeToken\n */\n async exchangeToken(params) {\n const { instanceUrl, grantType, code, codeVerifier, refreshToken, clientId, redirectUri } = params;\n const body = {\n client_id: clientId,\n grant_type: grantType\n };\n if (grantType === \"authorization_code\") {\n if (!code || !codeVerifier || !redirectUri) {\n throw new GitLabError({\n message: \"Authorization code, code verifier, and redirect URI are required for authorization_code grant\"\n });\n }\n body.code = code;\n body.code_verifier = codeVerifier;\n body.redirect_uri = redirectUri;\n } else if (grantType === \"refresh_token\") {\n if (!refreshToken) {\n throw new GitLabError({\n message: \"Refresh token is required for refresh_token grant\"\n });\n }\n body.refresh_token = refreshToken;\n }\n const url = `${instanceUrl}/oauth/token`;\n try {\n const response = await this.fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n },\n body: new URLSearchParams(body).toString()\n });\n if (!response.ok) {\n const errorText = await response.text();\n throw new GitLabError({\n message: `OAuth token exchange failed: ${response.status} ${response.statusText}`,\n cause: new Error(errorText)\n });\n }\n const data = await response.json();\n return data;\n } catch (error) {\n if (error instanceof GitLabError) {\n throw error;\n }\n throw new GitLabError({\n message: `Failed to exchange OAuth token: ${error instanceof Error ? error.message : String(error)}`,\n cause: error instanceof Error ? error : void 0\n });\n }\n }\n /**\n * Create GitLabOAuthTokens from token response\n */\n createTokensFromResponse(response, instanceUrl) {\n const expiresAt = this.createExpiresTimestamp(response);\n return {\n accessToken: response.access_token,\n refreshToken: response.refresh_token || \"\",\n expiresAt,\n instanceUrl\n };\n }\n /**\n * Create expiry timestamp from token response\n * Based on gitlab-vscode-extension createExpiresTimestamp\n */\n createExpiresTimestamp(response) {\n const createdAt = response.created_at * 1e3;\n const expiresIn = response.expires_in * 1e3;\n return createdAt + expiresIn;\n }\n};\n\n// src/gitlab-provider.ts\nimport * as fs2 from \"fs\";\nimport * as path3 from \"path\";\nimport * as os2 from \"os\";\nfunction getOpenCodeAuthPath() {\n const homeDir = os2.homedir();\n const xdgDataHome = process.env.XDG_DATA_HOME;\n if (xdgDataHome) {\n return path3.join(xdgDataHome, \"opencode\", \"auth.json\");\n }\n if (process.platform !== \"win32\") {\n return path3.join(homeDir, \".local\", \"share\", \"opencode\", \"auth.json\");\n }\n return path3.join(homeDir, \".opencode\", \"auth.json\");\n}\nasync function loadOpenCodeAuth(instanceUrl) {\n try {\n const authPath = getOpenCodeAuthPath();\n if (!fs2.existsSync(authPath)) {\n return void 0;\n }\n const authData = JSON.parse(fs2.readFileSync(authPath, \"utf-8\"));\n if (authData.gitlab?.type === \"oauth\") {\n const gitlabAuth = authData.gitlab;\n if (gitlabAuth.enterpriseUrl === instanceUrl || gitlabAuth.enterpriseUrl === instanceUrl.replace(/\\/$/, \"\")) {\n return gitlabAuth;\n }\n }\n const normalizedUrl = instanceUrl.replace(/\\/$/, \"\");\n const auth = authData[normalizedUrl] || authData[`${normalizedUrl}/`];\n return auth;\n } catch (error) {\n throw new Error(`Failed to load auth.json: ${error instanceof Error ? error.message : error}`);\n }\n}\nasync function loadApiKey(options, instanceUrl, clientId) {\n if (options.apiKey) {\n return options.apiKey;\n }\n const auth = await loadOpenCodeAuth(instanceUrl);\n if (auth?.type === \"oauth\") {\n const oauthManager = new GitLabOAuthManager();\n if (oauthManager.needsRefresh(auth.expires)) {\n try {\n const refreshed = await oauthManager.exchangeRefreshToken({\n instanceUrl,\n refreshToken: auth.refresh,\n clientId\n });\n const authPath = getOpenCodeAuthPath();\n const authData = JSON.parse(fs2.readFileSync(authPath, \"utf-8\"));\n authData.gitlab = {\n type: \"oauth\",\n refresh: refreshed.refreshToken,\n access: refreshed.accessToken,\n expires: refreshed.expiresAt,\n enterpriseUrl: instanceUrl\n // Use enterpriseUrl to match auth plugin format\n };\n fs2.writeFileSync(authPath, JSON.stringify(authData, null, 2), { mode: 384 });\n return refreshed.accessToken;\n } catch (error) {\n const refreshErrorMsg = error instanceof Error ? error.message : String(error);\n const envApiKey = process.env[options.environmentVariableName];\n if (envApiKey) {\n return envApiKey;\n }\n throw new GitLabError({\n message: `OAuth token refresh failed and no fallback ${options.environmentVariableName} environment variable is set. Refresh error: ${refreshErrorMsg}. Re-authenticate with 'opencode auth login gitlab' or set ${options.environmentVariableName}.`\n });\n }\n } else {\n return auth.access;\n }\n }\n const apiKey = process.env[options.environmentVariableName];\n if (!apiKey) {\n throw new GitLabError({\n message: `${options.description} API key is missing. Pass it as the 'apiKey' parameter, set the ${options.environmentVariableName} environment variable, or authenticate with 'opencode auth login gitlab'.`\n });\n }\n return apiKey;\n}\nfunction withUserAgentSuffix(headers, suffix) {\n const userAgent = headers[\"User-Agent\"];\n return {\n ...headers,\n \"User-Agent\": userAgent ? `${userAgent} ${suffix}` : suffix\n };\n}\nfunction createGitLab(options = {}) {\n const instanceUrl = options.instanceUrl ?? process.env[\"GITLAB_INSTANCE_URL\"] ?? \"https://gitlab.com\";\n const providerName = options.name ?? \"gitlab\";\n let cachedApiKey;\n let apiKeyPromise;\n const getApiKey = async () => {\n if (cachedApiKey) {\n return cachedApiKey;\n }\n if (apiKeyPromise) {\n return apiKeyPromise;\n }\n apiKeyPromise = loadApiKey(\n {\n apiKey: options.apiKey,\n environmentVariableName: \"GITLAB_TOKEN\",\n description: \"GitLab\"\n },\n instanceUrl,\n options.clientId\n );\n cachedApiKey = await apiKeyPromise;\n apiKeyPromise = void 0;\n return cachedApiKey;\n };\n const refreshApiKey = async () => {\n cachedApiKey = void 0;\n apiKeyPromise = void 0;\n cachedApiKey = await loadApiKey(\n {\n apiKey: void 0,\n // Bypass stale options.apiKey to force auth.json read\n environmentVariableName: \"GITLAB_TOKEN\",\n description: \"GitLab\"\n },\n instanceUrl,\n options.clientId\n );\n };\n const getHeaders = () => {\n const apiKey = cachedApiKey || options.apiKey || process.env[\"GITLAB_TOKEN\"] || \"\";\n if (!apiKey) {\n throw new GitLabError({\n message: \"GitLab API key is missing. Pass it as the 'apiKey' parameter, set the GITLAB_TOKEN environment variable, or authenticate with 'opencode auth login gitlab'.\"\n });\n }\n return withUserAgentSuffix(\n {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n ...options.headers\n },\n `ai-sdk-gitlab/${VERSION}`\n );\n };\n getApiKey().catch(() => {\n });\n const createAgenticChatModel = (modelId, agenticOptions) => {\n const mapping = getModelMapping(modelId);\n if (!mapping) {\n throw new GitLabError({\n message: `Unknown model ID: ${modelId}. Model must be registered in MODEL_MAPPINGS.`\n });\n }\n if (agenticOptions?.providerModel) {\n const validModels = getValidModelsForProvider(mapping.provider);\n if (!validModels.includes(agenticOptions.providerModel)) {\n throw new GitLabError({\n message: `Invalid providerModel '${agenticOptions.providerModel}' for provider '${mapping.provider}'. Valid models: ${validModels.join(\", \")}`\n });\n }\n }\n const featureFlags = {\n DuoAgentPlatformNext: true,\n ...options.featureFlags,\n ...agenticOptions?.featureFlags\n };\n const defaultAiGatewayHeaders = {\n \"User-Agent\": `gitlab-ai-provider/${VERSION}`\n };\n const aiGatewayHeaders = {\n ...defaultAiGatewayHeaders,\n ...options.aiGatewayHeaders,\n ...agenticOptions?.aiGatewayHeaders\n };\n const baseConfig = {\n provider: `${providerName}.agentic`,\n instanceUrl,\n getHeaders,\n refreshApiKey,\n fetch: options.fetch,\n maxTokens: agenticOptions?.maxTokens,\n featureFlags,\n aiGatewayUrl: options.aiGatewayUrl,\n aiGatewayHeaders\n };\n if (mapping.provider === \"openai\") {\n return new GitLabOpenAILanguageModel(modelId, {\n ...baseConfig,\n openaiModel: agenticOptions?.providerModel ?? mapping.model\n });\n }\n return new GitLabAnthropicLanguageModel(modelId, {\n ...baseConfig,\n anthropicModel: agenticOptions?.providerModel ?? mapping.model\n });\n };\n const createWorkflowChatModel = (modelId, workflowOptions) => {\n const mapping = getModelMapping(modelId);\n if (!mapping || mapping.provider !== \"workflow\") {\n throw new GitLabError({\n message: `Unknown workflow model ID: ${modelId}. Use 'duo-workflow' or a 'duo-workflow-*' model ID.`\n });\n }\n return new GitLabWorkflowLanguageModel(\n modelId,\n {\n provider: `${providerName}.workflow`,\n instanceUrl,\n getHeaders,\n refreshApiKey,\n fetch: options.fetch,\n featureFlags: {\n ...options.featureFlags,\n ...workflowOptions?.featureFlags\n },\n aiGatewayUrl: options.aiGatewayUrl\n },\n workflowOptions\n );\n };\n const createDefaultModel = (modelId) => {\n if (isWorkflowModel(modelId)) {\n return createWorkflowChatModel(modelId);\n }\n return createAgenticChatModel(modelId);\n };\n const provider = Object.assign((modelId) => createDefaultModel(modelId), {\n specificationVersion: \"v3\",\n languageModel: createDefaultModel,\n chat: createDefaultModel,\n agenticChat: createAgenticChatModel,\n workflowChat: createWorkflowChatModel\n });\n provider.embeddingModel = (modelId) => {\n throw new GitLabError({\n message: `GitLab provider does not support text embedding models. Model ID: ${modelId}`\n });\n };\n provider.imageModel = (modelId) => {\n throw new GitLabError({\n message: `GitLab provider does not support image models. Model ID: ${modelId}`\n });\n };\n return provider;\n}\nvar gitlab = createGitLab();\n\n// src/gitlab-model-config.ts\nimport * as fs3 from \"fs\";\nimport * as path4 from \"path\";\nimport * as os3 from \"os\";\nvar DEFAULT_MODELS_YML_URL = \"https://gitlab.com/gitlab-org/modelops/applied-ml/code-suggestions/ai-assist/-/raw/main/ai_gateway/model_selection/models.yml\";\nvar DEFAULT_TTL_MS = 24 * 60 * 60 * 1e3;\nvar DEFAULT_CONTEXT = 2e5;\nvar DEFAULT_OUTPUT = 64e3;\nfunction getCacheFilePath2() {\n const cacheHome = process.env.XDG_CACHE_HOME || path4.join(os3.homedir(), \".cache\");\n return path4.join(cacheHome, \"opencode\", \"gitlab-model-configs.json\");\n}\nfunction readCacheFile() {\n try {\n const filePath = getCacheFilePath2();\n if (!fs3.existsSync(filePath)) return null;\n const raw = fs3.readFileSync(filePath, \"utf-8\");\n return JSON.parse(raw);\n } catch {\n return null;\n }\n}\nfunction writeCacheFile(configs) {\n try {\n const filePath = getCacheFilePath2();\n const dir = path4.dirname(filePath);\n fs3.mkdirSync(dir, { recursive: true, mode: 448 });\n const data = {\n configs: Object.fromEntries(configs),\n updatedAt: (/* @__PURE__ */ new Date()).toISOString()\n };\n fs3.writeFileSync(filePath, JSON.stringify(data, null, 2), { mode: 384 });\n } catch {\n }\n}\nfunction loadCacheFile(ttlMs) {\n const cached = readCacheFile();\n if (!cached) return null;\n const writtenAt = new Date(cached.updatedAt).getTime();\n const age = Date.now() - writtenAt;\n if (age > ttlMs) return null;\n return { configs: new Map(Object.entries(cached.configs)), writtenAt };\n}\nvar GitLabModelConfigRegistry = class {\n url;\n ttlMs;\n fetchFn;\n memCache = null;\n memExpiresAt = 0;\n pending = null;\n constructor(options) {\n this.url = options?.url ?? DEFAULT_MODELS_YML_URL;\n this.ttlMs = options?.ttlMs ?? DEFAULT_TTL_MS;\n this.fetchFn = options?.fetch ?? fetch;\n }\n /**\n * Get model configs, fetching and caching as needed.\n * Returns a Map keyed by `gitlab_identifier` (the discovery `ref`).\n */\n async getConfigs() {\n if (this.memCache && Date.now() < this.memExpiresAt) {\n return this.memCache;\n }\n const fileCached = loadCacheFile(this.ttlMs);\n if (fileCached) {\n this.memCache = fileCached.configs;\n this.memExpiresAt = fileCached.writtenAt + this.ttlMs;\n return fileCached.configs;\n }\n if (this.pending) return this.pending;\n this.pending = this.fetchConfigs();\n try {\n return await this.pending;\n } finally {\n this.pending = null;\n }\n }\n /**\n * Look up config for a single model ref.\n * Returns defaults if the ref is not found or fetch fails.\n */\n async getConfig(ref) {\n const configs = await this.getConfigs();\n return configs.get(ref) ?? { context: DEFAULT_CONTEXT, output: DEFAULT_OUTPUT };\n }\n /** Invalidate both in-memory and file caches. */\n invalidateCache() {\n this.memCache = null;\n this.memExpiresAt = 0;\n try {\n const filePath = getCacheFilePath2();\n if (fs3.existsSync(filePath)) {\n fs3.unlinkSync(filePath);\n }\n } catch {\n }\n }\n async fetchConfigs() {\n try {\n const res = await this.fetchFn(this.url);\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const text = await res.text();\n const configs = parseModelsYml(text);\n this.memCache = configs;\n this.memExpiresAt = Date.now() + this.ttlMs;\n writeCacheFile(configs);\n return configs;\n } catch {\n return this.memCache ?? loadCacheFile(Infinity)?.configs ?? /* @__PURE__ */ new Map();\n }\n }\n};\nfunction parseModelsYml(text) {\n const configs = /* @__PURE__ */ new Map();\n let currentIdentifier = null;\n let currentContext = 0;\n let currentOutput = 0;\n let inParams = false;\n let paramsIndent = -1;\n for (const line of text.split(\"\\n\")) {\n const idMatch = line.match(/^\\s*gitlab_identifier:\\s*\"?([^\"#\\s]+)\"?/);\n if (idMatch) {\n if (currentIdentifier) {\n configs.set(currentIdentifier, {\n context: currentContext || DEFAULT_CONTEXT,\n output: currentOutput || DEFAULT_OUTPUT\n });\n }\n currentIdentifier = idMatch[1];\n currentContext = 0;\n currentOutput = 0;\n inParams = false;\n paramsIndent = -1;\n }\n const ctxMatch = line.match(/^\\s*max_context_tokens:\\s*([0-9_]+)/);\n if (ctxMatch && currentIdentifier) {\n currentContext = parseInt(ctxMatch[1].replace(/_/g, \"\"), 10);\n }\n if (/^\\s*params:\\s*$/.test(line)) {\n inParams = true;\n paramsIndent = line.match(/^(\\s*)/)?.[1].length ?? 0;\n } else if (inParams && /^\\s*\\S+:/.test(line)) {\n const indent = line.match(/^(\\s*)/)?.[1].length ?? 0;\n if (indent <= paramsIndent) {\n inParams = false;\n paramsIndent = -1;\n }\n }\n if (inParams) {\n const maxTokensMatch = line.match(/^\\s*max_tokens:\\s*([0-9_]+)/);\n if (maxTokensMatch && currentIdentifier) {\n currentOutput = parseInt(maxTokensMatch[1].replace(/_/g, \"\"), 10);\n }\n }\n }\n if (currentIdentifier) {\n configs.set(currentIdentifier, {\n context: currentContext || DEFAULT_CONTEXT,\n output: currentOutput || DEFAULT_OUTPUT\n });\n }\n return configs;\n}\n\n// src/gitlab-workflow-discovery.ts\nvar configRegistry = new GitLabModelConfigRegistry();\nasync function buildModels(discovered, project) {\n const configs = await configRegistry.getConfigs();\n const refToID = /* @__PURE__ */ new Map();\n for (const [id, mapping] of Object.entries(MODEL_MAPPINGS)) {\n if (mapping.provider === \"workflow\" && id !== \"duo-workflow\" && id !== \"duo-workflow-default\") {\n refToID.set(mapping.model, id);\n }\n }\n const all = discovered.pinnedModel ? [discovered.pinnedModel] : [\n ...discovered.selectableModels ?? [],\n ...discovered.defaultModel ? [discovered.defaultModel] : []\n ];\n const seen = /* @__PURE__ */ new Set();\n const models = [];\n for (const model of all) {\n if (!model.ref || seen.has(model.ref)) continue;\n seen.add(model.ref);\n const id = refToID.get(model.ref) ?? `duo-workflow-${model.ref.replace(/[/_]/g, \"-\")}`;\n const limits = configs.get(model.ref);\n models.push({\n id,\n ref: model.ref,\n name: model.name,\n context: limits?.context ?? 2e5,\n output: limits?.output ?? 64e3,\n pinned: !!discovered.pinnedModel && discovered.pinnedModel.ref === model.ref\n });\n }\n return { models, project };\n}\nasync function discoverWorkflowModels(config, options) {\n const cache = new GitLabModelCache(options.workingDirectory, config.instanceUrl);\n if (!cache.isDiscoveryExpired()) {\n const entry = cache.load();\n return buildModels(entry.discovery, entry.project);\n }\n const detector = new GitLabProjectDetector({\n instanceUrl: config.instanceUrl,\n getHeaders: config.getHeaders,\n fetch: config.fetch\n });\n let project = null;\n try {\n project = await detector.detectProject(options.workingDirectory);\n } catch {\n return { models: [], project: null };\n }\n const namespaceId = project?.namespaceId;\n if (!namespaceId) return { models: [], project };\n const discovery = new GitLabModelDiscovery({\n instanceUrl: config.instanceUrl,\n getHeaders: config.getHeaders,\n fetch: config.fetch\n });\n const discovered = await discovery.discover(`gid://gitlab/Group/${namespaceId}`);\n cache.saveDiscovery(discovered, project);\n if (!cache.getSelectedModelRef()) {\n const pick = discovered.pinnedModel ?? discovered.defaultModel;\n if (pick) cache.saveSelection(pick.ref, pick.name);\n }\n return buildModels(discovered, project);\n}\nexport {\n AGENT_PRIVILEGES,\n BUNDLED_CLIENT_ID,\n CLIENT_VERSION,\n DEFAULT_AGENT_PRIVILEGES,\n DEFAULT_AI_GATEWAY_URL,\n DEFAULT_CLIENT_CAPABILITIES,\n DEFAULT_WORKFLOW_DEFINITION,\n GITLAB_COM_URL,\n GitLabAnthropicLanguageModel,\n GitLabDirectAccessClient,\n GitLabError,\n GitLabModelCache,\n GitLabModelConfigRegistry,\n GitLabModelDiscovery,\n GitLabOAuthManager,\n GitLabOpenAILanguageModel,\n GitLabProjectCache,\n GitLabProjectDetector,\n GitLabWorkflowClient,\n GitLabWorkflowLanguageModel,\n GitLabWorkflowTokenClient,\n MODEL_ID_TO_ANTHROPIC_MODEL,\n MODEL_MAPPINGS,\n OAUTH_SCOPES,\n OPENCODE_GITLAB_AUTH_CLIENT_ID,\n TOKEN_EXPIRY_SKEW_MS,\n VERSION,\n WORKFLOW_ENVIRONMENT,\n WS_HEARTBEAT_INTERVAL_MS,\n WS_KEEPALIVE_PING_INTERVAL_MS,\n WorkflowType,\n createGitLab,\n discoverWorkflowModels,\n getAnthropicModelForModelId,\n getModelMapping,\n getOpenAIApiType,\n getOpenAIModelForModelId,\n getProviderForModelId,\n getValidModelsForProvider,\n getWorkflowModelRef,\n gitlab,\n isResponsesApiModel,\n isWorkflowModel,\n parseModelsYml\n};\n//# sourceMappingURL=index.mjs.map"
189
+ ],
190
+ "mappings": "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",
191
+ "debugId": "9363FB61995BB4DC64756E2164756E21",
192
+ "names": []
193
+ }