whale-code 6.5.10 → 6.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (627) hide show
  1. package/dist/cli/chat/ChatApp.js +7 -11
  2. package/dist/cli/chat/ChatApp.js.map +1 -1
  3. package/dist/cli/chat/ChatInput.js +7 -3
  4. package/dist/cli/chat/ChatInput.js.map +1 -1
  5. package/dist/cli/chat/MessageList.js +5 -6
  6. package/dist/cli/chat/MessageList.js.map +1 -1
  7. package/dist/cli/chat/StatusBar.d.ts +2 -2
  8. package/dist/cli/chat/StatusBar.js +90 -160
  9. package/dist/cli/chat/StatusBar.js.map +1 -1
  10. package/dist/cli/chat/components/LiveArea.js +78 -115
  11. package/dist/cli/chat/components/LiveArea.js.map +1 -1
  12. package/dist/cli/chat/components/StaticMessages.js +60 -79
  13. package/dist/cli/chat/components/StaticMessages.js.map +1 -1
  14. package/dist/cli/chat/hooks/useAgentLoop.js +45 -37
  15. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -1
  16. package/dist/cli/chat/store.d.ts +12 -0
  17. package/dist/cli/chat/store.js +19 -0
  18. package/dist/cli/chat/store.js.map +1 -1
  19. package/dist/cli/commands/doctor.js +1 -6
  20. package/dist/cli/commands/doctor.js.map +1 -1
  21. package/dist/cli/services/agent-loop-tools.js +11 -2
  22. package/dist/cli/services/agent-loop-tools.js.map +1 -1
  23. package/dist/cli/services/agent-loop.js +1 -1
  24. package/dist/cli/services/agent-loop.js.map +1 -1
  25. package/dist/cli/services/cli-agent-loop.js +3 -2
  26. package/dist/cli/services/cli-agent-loop.js.map +1 -1
  27. package/dist/cli/services/config-store.d.ts +8 -10
  28. package/dist/cli/services/config-store.js +14 -13
  29. package/dist/cli/services/config-store.js.map +1 -1
  30. package/dist/cli/services/memory-manager.js +2 -2
  31. package/dist/cli/services/memory-manager.js.map +1 -1
  32. package/dist/cli/services/permission-modes.js +14 -10
  33. package/dist/cli/services/permission-modes.js.map +1 -1
  34. package/dist/cli/services/session-client.js +2 -1
  35. package/dist/cli/services/session-client.js.map +1 -1
  36. package/dist/cli/services/session-persistence.js +14 -6
  37. package/dist/cli/services/session-persistence.js.map +1 -1
  38. package/dist/cli/setup/SetupApp.d.ts +2 -2
  39. package/dist/cli/setup/SetupApp.js +91 -254
  40. package/dist/cli/setup/SetupApp.js.map +1 -1
  41. package/dist/cli/shared/SpinnerSlot.js +4 -1
  42. package/dist/cli/shared/SpinnerSlot.js.map +1 -1
  43. package/dist/cli/status/StatusApp.js +3 -3
  44. package/dist/cli/status/StatusApp.js.map +1 -1
  45. package/dist/index.js +13 -3
  46. package/dist/index.js.map +1 -1
  47. package/dist/server/handlers/browser-lifecycle.js +10 -0
  48. package/dist/server/handlers/browser-lifecycle.js.map +1 -1
  49. package/dist/server/handlers/browser.js +16 -1
  50. package/dist/server/handlers/browser.js.map +1 -1
  51. package/dist/server/handlers/campaigns.js +11 -0
  52. package/dist/server/handlers/campaigns.js.map +1 -1
  53. package/dist/server/handlers/catalog-products.js +19 -5
  54. package/dist/server/handlers/catalog-products.js.map +1 -1
  55. package/dist/server/handlers/catalog.js +42 -8
  56. package/dist/server/handlers/catalog.js.map +1 -1
  57. package/dist/server/handlers/clickhouse.js +4 -4
  58. package/dist/server/handlers/clickhouse.js.map +1 -1
  59. package/dist/server/handlers/comms-email.js +70 -8
  60. package/dist/server/handlers/comms-email.js.map +1 -1
  61. package/dist/server/handlers/comms.js +63 -21
  62. package/dist/server/handlers/comms.js.map +1 -1
  63. package/dist/server/handlers/coupons.js +141 -77
  64. package/dist/server/handlers/coupons.js.map +1 -1
  65. package/dist/server/handlers/google-ads.js +280 -8
  66. package/dist/server/handlers/google-ads.js.map +1 -1
  67. package/dist/server/handlers/remove-bg.d.ts +33 -0
  68. package/dist/server/handlers/remove-bg.js +698 -44
  69. package/dist/server/handlers/remove-bg.js.map +1 -1
  70. package/dist/server/handlers/supply-chain.js +93 -1
  71. package/dist/server/handlers/supply-chain.js.map +1 -1
  72. package/dist/server/handlers/workflow-steps-types.d.ts +1 -1
  73. package/dist/server/handlers/workflow-steps-types.js +7 -1
  74. package/dist/server/handlers/workflow-steps-types.js.map +1 -1
  75. package/dist/server/handlers/workflow-steps.js +1 -1
  76. package/dist/server/handlers/workflow-steps.js.map +1 -1
  77. package/dist/server/index.js +122 -29
  78. package/dist/server/index.js.map +1 -1
  79. package/dist/server/lib/agent-loop-turn.js +33 -3
  80. package/dist/server/lib/agent-loop-turn.js.map +1 -1
  81. package/dist/server/lib/agent-loop-types.d.ts +6 -2
  82. package/dist/server/lib/agent-loop-types.js +14 -2
  83. package/dist/server/lib/agent-loop-types.js.map +1 -1
  84. package/dist/server/lib/clickhouse-client.js +4 -2
  85. package/dist/server/lib/clickhouse-client.js.map +1 -1
  86. package/dist/server/lib/code-worker.js +4 -1
  87. package/dist/server/lib/code-worker.js.map +1 -1
  88. package/dist/server/providers/anthropic.js +103 -33
  89. package/dist/server/providers/anthropic.js.map +1 -1
  90. package/dist/server/server-chat.js +2 -2
  91. package/dist/server/server-chat.js.map +1 -1
  92. package/dist/server/server-helpers.d.ts +8 -1
  93. package/dist/server/server-helpers.js +17 -3
  94. package/dist/server/server-helpers.js.map +1 -1
  95. package/dist/server/server-persist.js +34 -21
  96. package/dist/server/server-persist.js.map +1 -1
  97. package/dist/server/server-rate-limit.d.ts +0 -1
  98. package/dist/server/server-rate-limit.js +5 -5
  99. package/dist/server/server-rate-limit.js.map +1 -1
  100. package/dist/server/server-routes-approvals.js +2 -2
  101. package/dist/server/server-routes-approvals.js.map +1 -1
  102. package/dist/server/server-routes-auth.js +2 -2
  103. package/dist/server/server-routes-auth.js.map +1 -1
  104. package/dist/server/server-routes-events.js +2 -2
  105. package/dist/server/server-routes-events.js.map +1 -1
  106. package/dist/server/server-routes-public.js +4 -4
  107. package/dist/server/server-routes-public.js.map +1 -1
  108. package/dist/server/server-routes-webchat.js +3 -3
  109. package/dist/server/server-routes-webchat.js.map +1 -1
  110. package/dist/server/server-store-circuit-breaker.js +1 -1
  111. package/dist/server/server-store-circuit-breaker.js.map +1 -1
  112. package/dist/server/tool-router.js +7 -4
  113. package/dist/server/tool-router.js.map +1 -1
  114. package/dist/server/validation.js +11 -0
  115. package/dist/server/validation.js.map +1 -1
  116. package/dist/setup.js +5 -25
  117. package/dist/setup.js.map +1 -1
  118. package/dist/shared/api-client.js +38 -11
  119. package/dist/shared/api-client.js.map +1 -1
  120. package/package.json +12 -10
  121. package/vendor/ink/build/ink.js +68 -24
  122. package/vendor/ink/node_modules/react-devtools-core/README.md +152 -0
  123. package/vendor/ink/node_modules/react-devtools-core/backend.js +1 -0
  124. package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js +2 -0
  125. package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js.map +1 -0
  126. package/vendor/ink/node_modules/react-devtools-core/dist/backend.js +15691 -0
  127. package/vendor/ink/node_modules/react-devtools-core/dist/backend.js.map +1 -0
  128. package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js +2 -0
  129. package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js.map +1 -0
  130. package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js +14 -0
  131. package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js.map +1 -0
  132. package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js +2 -0
  133. package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js.map +1 -0
  134. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/LICENSE +21 -0
  135. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/README.md +495 -0
  136. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/browser.js +8 -0
  137. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/index.js +10 -0
  138. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/buffer-util.js +129 -0
  139. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/constants.js +10 -0
  140. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/event-target.js +184 -0
  141. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/extension.js +223 -0
  142. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/limiter.js +55 -0
  143. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/permessage-deflate.js +518 -0
  144. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/receiver.js +607 -0
  145. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/sender.js +409 -0
  146. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/stream.js +180 -0
  147. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/validation.js +104 -0
  148. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket-server.js +449 -0
  149. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket.js +1197 -0
  150. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/package.json +56 -0
  151. package/vendor/ink/node_modules/react-devtools-core/package.json +38 -0
  152. package/vendor/ink/node_modules/react-devtools-core/standalone.js +1 -0
  153. package/dist/cli/__tests__/print-mode-streaming.test.js +0 -270
  154. package/dist/cli/__tests__/print-mode.basic-output.test.js +0 -230
  155. package/dist/cli/__tests__/print-mode.session-errors.test.js +0 -252
  156. package/dist/cli/__tests__/print-mode.test.js +0 -273
  157. package/dist/cli/__tests__/serve-mode-messages.test.js +0 -338
  158. package/dist/cli/__tests__/serve-mode.messages.part2.test.js +0 -266
  159. package/dist/cli/__tests__/serve-mode.messages.test.js +0 -277
  160. package/dist/cli/__tests__/serve-mode.startup-http.test.js +0 -279
  161. package/dist/cli/__tests__/serve-mode.test.js +0 -345
  162. package/dist/cli/chat/NodeManager.d.ts +0 -30
  163. package/dist/cli/chat/NodeManager.js +0 -66
  164. package/dist/cli/chat/NodeManager.js.map +0 -1
  165. package/dist/cli/chat/chat-input-menu-handler.d.ts +0 -32
  166. package/dist/cli/chat/hooks/slash-imsg-handlers.js +0 -148
  167. package/dist/cli/chat/hooks/slash-imsg-handlers.js.map +0 -1
  168. package/dist/cli/chat/hooks/useStreamingReducer.d.ts +0 -66
  169. package/dist/cli/commands/__tests__/config-cmd.test.js +0 -270
  170. package/dist/cli/commands/__tests__/doctor.test.js +0 -257
  171. package/dist/cli/commands/__tests__/imsg-node-bridge.test.js +0 -99
  172. package/dist/cli/commands/__tests__/imsg-utils.test.js +0 -73
  173. package/dist/cli/commands/__tests__/init.test.js +0 -214
  174. package/dist/cli/commands/__tests__/mcp.test.js +0 -287
  175. package/dist/cli/commands/imsg-watcher-helpers.d.ts +0 -40
  176. package/dist/cli/commands/imsg-watcher-helpers.js +0 -184
  177. package/dist/cli/commands/imsg-watcher-helpers.js.map +0 -1
  178. package/dist/cli/commands/imsg-watcher.d.ts +0 -11
  179. package/dist/cli/commands/imsg-watcher.js +0 -230
  180. package/dist/cli/commands/imsg-watcher.js.map +0 -1
  181. package/dist/cli/services/__tests__/agent-definitions.test.js +0 -153
  182. package/dist/cli/services/__tests__/agent-events-global.test.js +0 -39
  183. package/dist/cli/services/__tests__/agent-events.part2.test.js +0 -113
  184. package/dist/cli/services/__tests__/agent-events.test.js +0 -157
  185. package/dist/cli/services/__tests__/agent-loop-auth.test.js +0 -392
  186. package/dist/cli/services/__tests__/agent-loop-budget.test.js +0 -389
  187. package/dist/cli/services/__tests__/agent-loop-tools-lifecycle.test.js +0 -430
  188. package/dist/cli/services/__tests__/agent-loop-tools-maxturns.test.js +0 -486
  189. package/dist/cli/services/__tests__/agent-loop-utils-execution.test.js +0 -528
  190. package/dist/cli/services/__tests__/agent-loop-utils-helpers.test.js +0 -466
  191. package/dist/cli/services/__tests__/agent-worker-base-execute.test.js +0 -257
  192. package/dist/cli/services/__tests__/agent-worker-base-helpers.test.js +0 -198
  193. package/dist/cli/services/__tests__/agent-worker-base.test.js +0 -278
  194. package/dist/cli/services/__tests__/auth-service-exports.test.js +0 -41
  195. package/dist/cli/services/__tests__/auth-service.part2.test.js +0 -169
  196. package/dist/cli/services/__tests__/auth-service.test.js +0 -242
  197. package/dist/cli/services/__tests__/background-processes.test.js +0 -282
  198. package/dist/cli/services/__tests__/claude-md-loader.test.js +0 -134
  199. package/dist/cli/services/__tests__/config-store.test.js +0 -247
  200. package/dist/cli/services/__tests__/debug-log.test.js +0 -199
  201. package/dist/cli/services/__tests__/edge-cases-caching.test.js +0 -174
  202. package/dist/cli/services/__tests__/edge-cases-compaction-core.test.js +0 -226
  203. package/dist/cli/services/__tests__/edge-cases-compaction-openai.test.js +0 -152
  204. package/dist/cli/services/__tests__/edge-cases-compaction-shapes.test.js +0 -53
  205. package/dist/cli/services/__tests__/edge-cases-compaction-thinking.test.js +0 -226
  206. package/dist/cli/services/__tests__/edge-cases-compaction.test.js +0 -131
  207. package/dist/cli/services/__tests__/edge-cases-paths.test.js +0 -86
  208. package/dist/cli/services/__tests__/error-logger-messages.test.js +0 -81
  209. package/dist/cli/services/__tests__/error-logger-transport.test.js +0 -119
  210. package/dist/cli/services/__tests__/error-logger.test.js +0 -264
  211. package/dist/cli/services/__tests__/file-history.test.js +0 -136
  212. package/dist/cli/services/__tests__/git-context-cache-reset.test.js +0 -223
  213. package/dist/cli/services/__tests__/git-context.test.js +0 -241
  214. package/dist/cli/services/__tests__/interactive-tools-execute.test.js +0 -166
  215. package/dist/cli/services/__tests__/interactive-tools-plan.test.js +0 -197
  216. package/dist/cli/services/__tests__/interactive-tools.part2.test.js +0 -168
  217. package/dist/cli/services/__tests__/interactive-tools.test.js +0 -179
  218. package/dist/cli/services/__tests__/keybinding-manager.test.js +0 -205
  219. package/dist/cli/services/__tests__/local-tools-dispatch.test.js +0 -404
  220. package/dist/cli/services/__tests__/local-tools.test.js +0 -238
  221. package/dist/cli/services/__tests__/lsp-manager.test.js +0 -364
  222. package/dist/cli/services/__tests__/mcp-client-connect-disconnect.test.js +0 -310
  223. package/dist/cli/services/__tests__/mcp-client.test.js +0 -93
  224. package/dist/cli/services/__tests__/memory-manager.test.js +0 -154
  225. package/dist/cli/services/__tests__/model-manager-utils.test.js +0 -154
  226. package/dist/cli/services/__tests__/model-manager.test.js +0 -175
  227. package/dist/cli/services/__tests__/permission-modes.test.js +0 -222
  228. package/dist/cli/services/__tests__/ripgrep.test.js +0 -328
  229. package/dist/cli/services/__tests__/server-tools-execute.test.js +0 -317
  230. package/dist/cli/services/__tests__/server-tools.test.js +0 -272
  231. package/dist/cli/services/__tests__/session-persistence.test.js +0 -245
  232. package/dist/cli/services/__tests__/subagent-basic.test.js +0 -489
  233. package/dist/cli/services/__tests__/subagent-edge.test.js +0 -545
  234. package/dist/cli/services/__tests__/subagent-prompts.test.js +0 -558
  235. package/dist/cli/services/__tests__/subagent-worker-errors.test.js +0 -255
  236. package/dist/cli/services/__tests__/subagent-worker.test.js +0 -242
  237. package/dist/cli/services/__tests__/system-prompt.test.js +0 -210
  238. package/dist/cli/services/__tests__/team-lead-comms-messaging.test.js +0 -250
  239. package/dist/cli/services/__tests__/team-lead-comms-result.test.js +0 -232
  240. package/dist/cli/services/__tests__/team-lead-comms-stop.test.js +0 -344
  241. package/dist/cli/services/__tests__/team-lead-comms.test.js +0 -285
  242. package/dist/cli/services/__tests__/team-lead-create.test.js +0 -327
  243. package/dist/cli/services/__tests__/team-lead-run.test.js +0 -318
  244. package/dist/cli/services/__tests__/team-lead-stop.test.js +0 -199
  245. package/dist/cli/services/__tests__/team-state-comms.test.js +0 -240
  246. package/dist/cli/services/__tests__/team-state-core.test.js +0 -230
  247. package/dist/cli/services/__tests__/team-state-tasks-complete-fail-available.test.js +0 -224
  248. package/dist/cli/services/__tests__/team-state-tasks.test.js +0 -184
  249. package/dist/cli/services/__tests__/telemetry-ai-metadata.test.js +0 -116
  250. package/dist/cli/services/__tests__/telemetry.part2.test.js +0 -195
  251. package/dist/cli/services/__tests__/telemetry.test.js +0 -176
  252. package/dist/cli/services/agent-loop-iteration.d.ts +0 -13
  253. package/dist/cli/services/agent-loop-setup.d.ts +0 -32
  254. package/dist/cli/services/agent-worker-base-api.d.ts +0 -19
  255. package/dist/cli/services/agent-worker-base-helpers.d.ts +0 -27
  256. package/dist/cli/services/agent-worker-base-tools.d.ts +0 -16
  257. package/dist/cli/services/agent-worker-base-types.d.ts +0 -81
  258. package/dist/cli/services/background-agents.d.ts +0 -26
  259. package/dist/cli/services/background-processes-ops.d.ts +0 -24
  260. package/dist/cli/services/background-tool-defs.d.ts +0 -50
  261. package/dist/cli/services/config-modules-model.test.js +0 -133
  262. package/dist/cli/services/config-modules-permission.test.js +0 -85
  263. package/dist/cli/services/config-modules-permissions.test.js +0 -85
  264. package/dist/cli/services/config-modules-session.test.js +0 -297
  265. package/dist/cli/services/format-server-response-columns.test.js +0 -265
  266. package/dist/cli/services/format-server-response-fallback.test.js +0 -65
  267. package/dist/cli/services/format-server-response-primitives-basic.test.js +0 -261
  268. package/dist/cli/services/format-server-response-primitives-nested.test.js +0 -188
  269. package/dist/cli/services/format-server-response-primitives.test.js +0 -300
  270. package/dist/cli/services/format-server-response-realworld.test.js +0 -248
  271. package/dist/cli/services/format-server-response-values.test.js +0 -247
  272. package/dist/cli/services/hooks-runners.test.js +0 -184
  273. package/dist/cli/services/hooks.glob-load.test.js +0 -233
  274. package/dist/cli/services/hooks.run-hooks.test.js +0 -184
  275. package/dist/cli/services/hooks.test.js +0 -233
  276. package/dist/cli/services/ink-incremental.d.ts +0 -19
  277. package/dist/cli/services/ink-incremental.js +0 -59
  278. package/dist/cli/services/ink-incremental.js.map +0 -1
  279. package/dist/cli/services/ink-resize-fix.d.ts +0 -18
  280. package/dist/cli/services/ink-resize-fix.js +0 -76
  281. package/dist/cli/services/ink-resize-fix.js.map +0 -1
  282. package/dist/cli/services/ink-sync-output.d.ts +0 -12
  283. package/dist/cli/services/ink-sync-output.js +0 -16
  284. package/dist/cli/services/ink-sync-output.js.map +0 -1
  285. package/dist/cli/services/interactive-tool-defs.d.ts +0 -80
  286. package/dist/cli/services/local-tools-definitions.d.ts +0 -6
  287. package/dist/cli/services/local-tools-files.test.js +0 -256
  288. package/dist/cli/services/local-tools-read-many.d.ts +0 -6
  289. package/dist/cli/services/model-router.test.js +0 -245
  290. package/dist/cli/services/rewind-rewindTo.test.js +0 -202
  291. package/dist/cli/services/rewind.test.js +0 -175
  292. package/dist/cli/services/sandbox.test.js +0 -198
  293. package/dist/cli/services/subagent-execution.d.ts +0 -12
  294. package/dist/cli/services/team-lead-auto.d.ts +0 -11
  295. package/dist/cli/services/team-lead-execution.d.ts +0 -28
  296. package/dist/cli/services/teammate-loop.js +0 -557
  297. package/dist/cli/services/teammate-loop.js.map +0 -1
  298. package/dist/cli/services/tools/__tests__/agent-tools-tasks-teams.test.js +0 -250
  299. package/dist/cli/services/tools/__tests__/agent-tools-teams.test.js +0 -200
  300. package/dist/cli/services/tools/__tests__/agent-tools.test.js +0 -340
  301. package/dist/cli/services/tools/__tests__/file-ops-cache.test.js +0 -152
  302. package/dist/cli/services/tools/__tests__/file-ops-notebook.test.js +0 -249
  303. package/dist/cli/services/tools/__tests__/file-ops-read.test.js +0 -261
  304. package/dist/cli/services/tools/__tests__/file-ops-write.test.js +0 -292
  305. package/dist/cli/services/tools/__tests__/search-tools-rg.test.js +0 -92
  306. package/dist/cli/services/tools/__tests__/search-tools.part2.test.js +0 -174
  307. package/dist/cli/services/tools/__tests__/search-tools.test.js +0 -227
  308. package/dist/cli/services/tools/__tests__/shell-exec-allowed-core.test.js +0 -163
  309. package/dist/cli/services/tools/__tests__/shell-exec-allowed-extended.test.js +0 -220
  310. package/dist/cli/services/tools/__tests__/shell-exec-allowed.part2.test.js +0 -215
  311. package/dist/cli/services/tools/__tests__/shell-exec-allowed.test.js +0 -154
  312. package/dist/cli/services/tools/__tests__/shell-exec-blocked.test.js +0 -132
  313. package/dist/cli/services/tools/__tests__/shell-exec-execution.test.js +0 -245
  314. package/dist/cli/services/tools/__tests__/task-manager-create.test.js +0 -110
  315. package/dist/cli/services/tools/__tests__/task-manager-crud.test.js +0 -339
  316. package/dist/cli/services/tools/__tests__/task-manager-list-get.test.js +0 -343
  317. package/dist/cli/services/tools/__tests__/task-manager-query.test.js +0 -346
  318. package/dist/cli/services/tools/__tests__/task-manager-routing.test.js +0 -58
  319. package/dist/cli/services/tools/__tests__/task-manager-update.test.js +0 -224
  320. package/dist/cli/services/tools/__tests__/task-manager.test.js +0 -159
  321. package/dist/cli/services/tools/__tests__/web-tools-html-search.test.js +0 -227
  322. package/dist/cli/services/tools/__tests__/web-tools.test.js +0 -285
  323. package/dist/cli/services/tools/shell-exec.test.js +0 -148
  324. package/dist/cli/shared/SharedTick.d.ts +0 -10
  325. package/dist/cli/shared/__tests__/markdown.test.js +0 -188
  326. package/dist/local-agent/__tests__/connection-disconnect.test.js +0 -201
  327. package/dist/local-agent/__tests__/connection-lifecycle.test.js +0 -289
  328. package/dist/local-agent/__tests__/connection-msghandling.test.js +0 -311
  329. package/dist/local-agent/__tests__/connection-reconnect.test.js +0 -230
  330. package/dist/local-agent/__tests__/connection-toolexec.test.js +0 -253
  331. package/dist/local-agent/__tests__/discovery.test.js +0 -328
  332. package/dist/local-agent/__tests__/executor-background.test.js +0 -219
  333. package/dist/local-agent/__tests__/executor-exec.test.js +0 -221
  334. package/dist/local-agent/__tests__/executor-jobs-sessions.test.js +0 -220
  335. package/dist/local-agent/__tests__/executor-system-info.test.js +0 -133
  336. package/dist/local-agent/__tests__/executor-systeminfo.test.js +0 -109
  337. package/dist/local-agent/__tests__/executor.test.js +0 -235
  338. package/dist/local-agent/__tests__/index.test.js +0 -139
  339. package/dist/node/__tests__/cli-channels.test.js +0 -293
  340. package/dist/node/__tests__/cli-config-edge.test.js +0 -154
  341. package/dist/node/__tests__/cli-config.test.js +0 -215
  342. package/dist/node/__tests__/config.test.js +0 -292
  343. package/dist/node/__tests__/runtime-heartbeat.test.js +0 -153
  344. package/dist/node/__tests__/runtime-lifecycle-init.test.js +0 -263
  345. package/dist/node/__tests__/runtime-lifecycle-stats.test.js +0 -180
  346. package/dist/node/__tests__/runtime-lifecycle.test.js +0 -305
  347. package/dist/node/__tests__/runtime-relay.test.js +0 -341
  348. package/dist/node/adapters/__tests__/base.test.js +0 -286
  349. package/dist/node/adapters/__tests__/discord.test.js +0 -284
  350. package/dist/node/adapters/__tests__/email-send.test.js +0 -295
  351. package/dist/node/adapters/__tests__/email.inbound-send.test.js +0 -217
  352. package/dist/node/adapters/__tests__/email.lifecycle.test.js +0 -211
  353. package/dist/node/adapters/__tests__/email.test.js +0 -290
  354. package/dist/node/adapters/__tests__/email.webhook-send.test.js +0 -251
  355. package/dist/node/adapters/__tests__/imessage-filter.test.js +0 -183
  356. package/dist/node/adapters/__tests__/imessage-lifecycle.test.js +0 -215
  357. package/dist/node/adapters/__tests__/imessage-send-restart.test.js +0 -227
  358. package/dist/node/adapters/__tests__/slack.part2.test.js +0 -135
  359. package/dist/node/adapters/__tests__/slack.test.js +0 -241
  360. package/dist/node/adapters/__tests__/sms-extras.test.js +0 -108
  361. package/dist/node/adapters/__tests__/sms-lifecycle.test.js +0 -203
  362. package/dist/node/adapters/__tests__/sms-messaging.test.js +0 -266
  363. package/dist/node/adapters/__tests__/sms.part2.test.js +0 -174
  364. package/dist/node/adapters/__tests__/sms.test.js +0 -253
  365. package/dist/node/adapters/__tests__/telegram-polling.test.js +0 -256
  366. package/dist/node/adapters/__tests__/telegram-send.test.js +0 -166
  367. package/dist/node/adapters/__tests__/webchat-inbound.test.js +0 -188
  368. package/dist/node/adapters/__tests__/webchat-outbound.test.js +0 -178
  369. package/dist/node/adapters/__tests__/whatsapp-inbound.test.js +0 -200
  370. package/dist/node/adapters/__tests__/whatsapp-send.test.js +0 -212
  371. package/dist/node/adapters/__tests__/whatsapp.test.js +0 -280
  372. package/dist/server/__tests__/gateway-fast-fail.test.js +0 -160
  373. package/dist/server/__tests__/local-agent-gateway.test.js +0 -186
  374. package/dist/server/__tests__/proxy-handlers-delegation.test.js +0 -240
  375. package/dist/server/__tests__/proxy-handlers-validation.test.js +0 -211
  376. package/dist/server/__tests__/proxy-handlers.part2.test.js +0 -240
  377. package/dist/server/__tests__/proxy-handlers.test.js +0 -213
  378. package/dist/server/__tests__/strip-base64-e2e.test.js +0 -303
  379. package/dist/server/__tests__/strip-base64.test.js +0 -256
  380. package/dist/server/__tests__/tool-router-agent-tools.test.js +0 -324
  381. package/dist/server/__tests__/tool-router-execute-core.test.js +0 -357
  382. package/dist/server/__tests__/tool-router-execute-permissions.test.js +0 -332
  383. package/dist/server/__tests__/tool-router-execute.test.js +0 -348
  384. package/dist/server/__tests__/tool-router-load.test.js +0 -432
  385. package/dist/server/__tests__/tool-router-permissions.test.js +0 -359
  386. package/dist/server/__tests__/tool-router-registry-cache.test.js +0 -383
  387. package/dist/server/__tests__/tool-router-registry-handlers.test.js +0 -272
  388. package/dist/server/__tests__/tool-router-registry.test.js +0 -331
  389. package/dist/server/__tests__/validation-inventory.test.js +0 -250
  390. package/dist/server/__tests__/validation-misc.test.js +0 -243
  391. package/dist/server/__tests__/validation-supply-chain.test.js +0 -188
  392. package/dist/server/__tests__/worker.test.js +0 -265
  393. package/dist/server/handlers/__tests__/conversation-lock.test.js +0 -117
  394. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-login.e2e.test.js +0 -268
  395. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-tokens.e2e.test.js +0 -264
  396. package/dist/server/handlers/__tests__/e2e/email-pipeline-send.e2e.test.js +0 -214
  397. package/dist/server/handlers/__tests__/e2e/email-pipeline-threads.e2e.test.js +0 -168
  398. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline-dedup.e2e.test.js +0 -229
  399. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline.e2e.test.js +0 -239
  400. package/dist/server/handlers/__tests__/e2e/error-logging-rate-limit.e2e.test.js +0 -150
  401. package/dist/server/handlers/__tests__/e2e/inventory-sync-guards.e2e.test.js +0 -177
  402. package/dist/server/handlers/__tests__/e2e/inventory-sync.e2e.test.js +0 -228
  403. package/dist/server/handlers/__tests__/e2e/inventory-sync.part2.e2e.test.js +0 -188
  404. package/dist/server/handlers/__tests__/e2e/order-lifecycle-fulfillment.e2e.test.js +0 -295
  405. package/dist/server/handlers/__tests__/e2e/order-lifecycle.e2e.test.js +0 -277
  406. package/dist/server/handlers/__tests__/e2e/order-lifecycle.fulfillment.e2e.test.js +0 -307
  407. package/dist/server/handlers/__tests__/e2e/order-lifecycle.setup.e2e.test.js +0 -177
  408. package/dist/server/handlers/__tests__/e2e/storefront-checkout-cart.e2e.test.js +0 -255
  409. package/dist/server/handlers/__tests__/e2e/storefront-checkout-webhook.e2e.test.js +0 -231
  410. package/dist/server/handlers/__tests__/e2e/workflow-execution-failures.e2e.test.js +0 -235
  411. package/dist/server/handlers/__tests__/e2e/workflow-execution.e2e.test.js +0 -294
  412. package/dist/server/handlers/__tests__/e2e/workflow-security.e2e.test.js +0 -311
  413. package/dist/server/handlers/__tests__/e2e/workflow-security.part2.e2e.test.js +0 -267
  414. package/dist/server/handlers/__tests__/workflow-cache.test.js +0 -237
  415. package/dist/server/handlers/analytics-errors-edge.test.js +0 -173
  416. package/dist/server/handlers/analytics.test.js +0 -280
  417. package/dist/server/handlers/api-docs-examples-ext.d.ts +0 -9
  418. package/dist/server/handlers/api-docs-examples-ext.js +0 -278
  419. package/dist/server/handlers/api-docs-examples-ext.js.map +0 -1
  420. package/dist/server/handlers/api-docs-examples.d.ts +0 -8
  421. package/dist/server/handlers/api-docs-examples.js +0 -221
  422. package/dist/server/handlers/api-docs-examples.js.map +0 -1
  423. package/dist/server/handlers/api-docs-sections-ext.d.ts +0 -2
  424. package/dist/server/handlers/api-docs-sections-ext.js +0 -497
  425. package/dist/server/handlers/api-docs-sections-ext.js.map +0 -1
  426. package/dist/server/handlers/api-docs-sections.d.ts +0 -21
  427. package/dist/server/handlers/api-docs-sections.js +0 -293
  428. package/dist/server/handlers/api-docs-sections.js.map +0 -1
  429. package/dist/server/handlers/api-keys.part2.test.js +0 -157
  430. package/dist/server/handlers/api-keys.test.js +0 -161
  431. package/dist/server/handlers/billing-routes.test.js +0 -123
  432. package/dist/server/handlers/billing.test.js +0 -215
  433. package/dist/server/handlers/browser-actions-errors.test.js +0 -94
  434. package/dist/server/handlers/browser-actions.part2.test.js +0 -190
  435. package/dist/server/handlers/browser-actions.test.js +0 -190
  436. package/dist/server/handlers/browser-validation.test.js +0 -257
  437. package/dist/server/handlers/catalog.test.js +0 -297
  438. package/dist/server/handlers/comms.test.js +0 -289
  439. package/dist/server/handlers/creations-advanced-collections.test.js +0 -214
  440. package/dist/server/handlers/creations-advanced-generate.test.js +0 -142
  441. package/dist/server/handlers/creations-advanced.test.js +0 -171
  442. package/dist/server/handlers/creations-collections-preview.test.js +0 -214
  443. package/dist/server/handlers/creations-crud.test.js +0 -260
  444. package/dist/server/handlers/creations-mutations.test.js +0 -197
  445. package/dist/server/handlers/crm.test.js +0 -179
  446. package/dist/server/handlers/discovery-advertise.test.js +0 -185
  447. package/dist/server/handlers/discovery-scan.test.js +0 -233
  448. package/dist/server/handlers/embeddings-embed-search.test.js +0 -196
  449. package/dist/server/handlers/embeddings-index-delete-stats.test.js +0 -140
  450. package/dist/server/handlers/embeddings-search.test.js +0 -221
  451. package/dist/server/handlers/embeddings.test.js +0 -137
  452. package/dist/server/handlers/enrichment-breach.d.ts +0 -8
  453. package/dist/server/handlers/enrichment-breach.js +0 -266
  454. package/dist/server/handlers/enrichment-breach.js.map +0 -1
  455. package/dist/server/handlers/enrichment-data.d.ts +0 -13
  456. package/dist/server/handlers/enrichment-data.js +0 -145
  457. package/dist/server/handlers/enrichment-data.js.map +0 -1
  458. package/dist/server/handlers/enrichment-mutations.test.js +0 -240
  459. package/dist/server/handlers/enrichment-queries.test.js +0 -181
  460. package/dist/server/handlers/enrichment-validation.test.js +0 -177
  461. package/dist/server/handlers/enrichment-writes.d.ts +0 -16
  462. package/dist/server/handlers/enrichment-writes.js +0 -226
  463. package/dist/server/handlers/enrichment-writes.js.map +0 -1
  464. package/dist/server/handlers/image-gen.test.js +0 -205
  465. package/dist/server/handlers/inventory.test.js +0 -380
  466. package/dist/server/handlers/kali-background.test.js +0 -222
  467. package/dist/server/handlers/kali-errors.test.js +0 -92
  468. package/dist/server/handlers/kali-validation.test.js +0 -234
  469. package/dist/server/handlers/llm-providers-actions.test.js +0 -220
  470. package/dist/server/handlers/llm-providers-anthropic.test.js +0 -239
  471. package/dist/server/handlers/llm-providers-failover.test.js +0 -232
  472. package/dist/server/handlers/llm-providers-providers.test.js +0 -300
  473. package/dist/server/handlers/llm-providers-validation.test.js +0 -239
  474. package/dist/server/handlers/local-agent-tools.test.js +0 -224
  475. package/dist/server/handlers/local-agent.test.js +0 -198
  476. package/dist/server/handlers/local-agent.tools-status.test.js +0 -204
  477. package/dist/server/handlers/local-agent.validation-exec.test.js +0 -182
  478. package/dist/server/handlers/meta-ads-audience-rules.test.js +0 -243
  479. package/dist/server/handlers/meta-ads-audience-targeting.test.js +0 -205
  480. package/dist/server/handlers/meta-ads-audiences-targeting.test.js +0 -383
  481. package/dist/server/handlers/meta-ads-crud-ads.test.js +0 -136
  482. package/dist/server/handlers/meta-ads-crud-campaigns.test.js +0 -189
  483. package/dist/server/handlers/meta-ads-crud-create.test.js +0 -303
  484. package/dist/server/handlers/meta-ads-crud-list-update.test.js +0 -259
  485. package/dist/server/handlers/meta-ads-delete-publish-sync.test.js +0 -282
  486. package/dist/server/handlers/meta-ads-insights.test.js +0 -80
  487. package/dist/server/handlers/meta-ads-list-get.test.js +0 -237
  488. package/dist/server/handlers/meta-ads-publish-delete.test.js +0 -254
  489. package/dist/server/handlers/meta-ads-publish-helpers.js +0 -117
  490. package/dist/server/handlers/meta-ads-publish-helpers.js.map +0 -1
  491. package/dist/server/handlers/meta-ads-publish-sync.test.js +0 -205
  492. package/dist/server/handlers/meta-ads-publish.test.js +0 -254
  493. package/dist/server/handlers/meta-ads-sync-insights.test.js +0 -184
  494. package/dist/server/handlers/meta-ads-update.test.js +0 -117
  495. package/dist/server/handlers/nodes-channels.test.js +0 -413
  496. package/dist/server/handlers/nodes-events.test.js +0 -131
  497. package/dist/server/handlers/nodes-list-delete.test.js +0 -171
  498. package/dist/server/handlers/nodes-messages-delivery.test.js +0 -208
  499. package/dist/server/handlers/nodes-messages.test.js +0 -211
  500. package/dist/server/handlers/nodes-register.test.js +0 -277
  501. package/dist/server/handlers/nodes.test.js +0 -353
  502. package/dist/server/handlers/operations.test.js +0 -136
  503. package/dist/server/handlers/platform-telemetry.test.js +0 -200
  504. package/dist/server/handlers/platform-websearch.test.js +0 -160
  505. package/dist/server/handlers/storefront.test.js +0 -329
  506. package/dist/server/handlers/supply-chain.test.js +0 -347
  507. package/dist/server/handlers/transcription.test.js +0 -118
  508. package/dist/server/handlers/video-gen-veo.js +0 -114
  509. package/dist/server/handlers/video-gen-veo.js.map +0 -1
  510. package/dist/server/handlers/video-gen.test.js +0 -146
  511. package/dist/server/handlers/voice.test.js +0 -153
  512. package/dist/server/handlers/workflow-steps.test.js +0 -330
  513. package/dist/server/handlers/workflows-extras.test.js +0 -65
  514. package/dist/server/handlers/workflows.part2.test.js +0 -170
  515. package/dist/server/handlers/workflows.test.js +0 -281
  516. package/dist/server/lib/__tests__/batch-client-conversion-jsonl.test.js +0 -171
  517. package/dist/server/lib/__tests__/batch-client-polling.test.js +0 -292
  518. package/dist/server/lib/__tests__/batch-client-queue.test.js +0 -270
  519. package/dist/server/lib/__tests__/clickhouse-buffer.test.js +0 -236
  520. package/dist/server/lib/__tests__/code-worker-edge-cases.test.js +0 -118
  521. package/dist/server/lib/__tests__/code-worker-pool-execute.test.js +0 -193
  522. package/dist/server/lib/__tests__/code-worker-pool-execution.test.js +0 -165
  523. package/dist/server/lib/__tests__/code-worker-pool-init.test.js +0 -131
  524. package/dist/server/lib/__tests__/code-worker-pool.test.js +0 -194
  525. package/dist/server/lib/__tests__/code-worker-sandbox-ops.test.js +0 -123
  526. package/dist/server/lib/__tests__/code-worker-sandbox.test.js +0 -217
  527. package/dist/server/lib/__tests__/code-worker.test.js +0 -179
  528. package/dist/server/lib/__tests__/compaction-service-generate.test.js +0 -229
  529. package/dist/server/lib/__tests__/compaction-service.test.js +0 -319
  530. package/dist/server/lib/__tests__/otel.test.js +0 -146
  531. package/dist/server/lib/__tests__/prompt-sanitizer-validation.test.js +0 -165
  532. package/dist/server/lib/__tests__/prompt-sanitizer.sanitize.test.js +0 -343
  533. package/dist/server/lib/__tests__/prompt-sanitizer.test.js +0 -328
  534. package/dist/server/lib/__tests__/prompt-sanitizer.validate-tool.test.js +0 -145
  535. package/dist/server/lib/__tests__/provider-capabilities.test.js +0 -263
  536. package/dist/server/lib/__tests__/provider-failover-routing.test.js +0 -145
  537. package/dist/server/lib/__tests__/provider-failover-state.test.js +0 -131
  538. package/dist/server/lib/__tests__/rate-limiter-budgets.test.js +0 -216
  539. package/dist/server/lib/__tests__/rate-limiter.budgets-tools.test.js +0 -113
  540. package/dist/server/lib/__tests__/rate-limiter.check-request.test.js +0 -141
  541. package/dist/server/lib/__tests__/rate-limiter.stats-lifecycle.test.js +0 -135
  542. package/dist/server/lib/__tests__/rate-limiter.test.js +0 -207
  543. package/dist/server/lib/__tests__/server-agent-loop-abort-conditions.test.js +0 -544
  544. package/dist/server/lib/__tests__/server-agent-loop-abort.part2.test.js +0 -504
  545. package/dist/server/lib/__tests__/server-agent-loop-abort.test.js +0 -396
  546. package/dist/server/lib/__tests__/server-agent-loop-compaction.test.js +0 -397
  547. package/dist/server/lib/__tests__/server-agent-loop-failover.test.js +0 -356
  548. package/dist/server/lib/__tests__/server-agent-loop-features-caching.test.js +0 -519
  549. package/dist/server/lib/__tests__/server-agent-loop-features-edges.test.js +0 -512
  550. package/dist/server/lib/__tests__/server-subagent-bailout.test.js +0 -194
  551. package/dist/server/lib/__tests__/server-subagent-basics.test.js +0 -348
  552. package/dist/server/lib/__tests__/server-subagent-errors-abort.test.js +0 -319
  553. package/dist/server/lib/__tests__/server-subagent-errors-progress.test.js +0 -253
  554. package/dist/server/lib/__tests__/server-subagent-errors.part2.test.js +0 -253
  555. package/dist/server/lib/__tests__/server-subagent-errors.test.js +0 -319
  556. package/dist/server/lib/__tests__/session-checkpoint-load.test.js +0 -275
  557. package/dist/server/lib/__tests__/session-checkpoint-save.test.js +0 -159
  558. package/dist/server/lib/__tests__/ssrf-guard.test.js +0 -93
  559. package/dist/server/lib/__tests__/supabase-client.test.js +0 -111
  560. package/dist/server/lib/__tests__/template-resolver.test.js +0 -317
  561. package/dist/server/lib/__tests__/utils-timeout.test.js +0 -49
  562. package/dist/server/lib/__tests__/utils.test.js +0 -322
  563. package/dist/server/providers/__tests__/anthropic-adapter.test.js +0 -228
  564. package/dist/server/providers/__tests__/anthropic-betas-toolchoice.test.js +0 -257
  565. package/dist/server/providers/__tests__/anthropic-errors.test.js +0 -262
  566. package/dist/server/providers/__tests__/anthropic-stream-core.test.js +0 -275
  567. package/dist/server/providers/__tests__/anthropic-streaming-betas.test.js +0 -247
  568. package/dist/server/providers/__tests__/anthropic-streaming-core.test.js +0 -275
  569. package/dist/server/providers/__tests__/bedrock-config.test.js +0 -177
  570. package/dist/server/providers/__tests__/bedrock-stream-behavior-streaming.test.js +0 -272
  571. package/dist/server/providers/__tests__/bedrock-stream-behavior-toolchoice.test.js +0 -214
  572. package/dist/server/providers/__tests__/bedrock-stream-behavior.part2.test.js +0 -165
  573. package/dist/server/providers/__tests__/bedrock-stream-behavior.test.js +0 -309
  574. package/dist/server/providers/__tests__/bedrock-stream-body-credentials.test.js +0 -170
  575. package/dist/server/providers/__tests__/bedrock-stream-body-extras.test.js +0 -183
  576. package/dist/server/providers/__tests__/bedrock-stream-body-request.test.js +0 -305
  577. package/dist/server/providers/__tests__/bedrock-stream-body.part2.test.js +0 -305
  578. package/dist/server/providers/__tests__/bedrock-stream-body.test.js +0 -175
  579. package/dist/server/providers/__tests__/bedrock-stream-errors.test.js +0 -165
  580. package/dist/server/providers/__tests__/gemini-config-methods.test.js +0 -182
  581. package/dist/server/providers/__tests__/gemini-config-streaming.test.js +0 -257
  582. package/dist/server/providers/__tests__/gemini-conversion-messages.test.js +0 -247
  583. package/dist/server/providers/__tests__/gemini-conversion-schema.test.js +0 -365
  584. package/dist/server/providers/__tests__/gemini-tools-choice.test.js +0 -221
  585. package/dist/server/providers/__tests__/gemini-tools-fn.test.js +0 -252
  586. package/dist/server/providers/__tests__/openai-config.test.js +0 -194
  587. package/dist/server/providers/__tests__/openai-conversion.test.js +0 -276
  588. package/dist/server/providers/__tests__/openai-messages.test.js +0 -261
  589. package/dist/server/providers/__tests__/openai-streaming.test.js +0 -394
  590. package/dist/server/providers/__tests__/openai-tools-cache.test.js +0 -227
  591. package/dist/server/providers/__tests__/registry.test.js +0 -183
  592. package/dist/server/providers/__tests__/shared.test.js +0 -297
  593. package/dist/shared/agent-core-config.test.js +0 -132
  594. package/dist/shared/agent-core-context-thinking.test.js +0 -293
  595. package/dist/shared/agent-core-loop-calls.test.js +0 -174
  596. package/dist/shared/agent-core-loop-detector-bail.test.js +0 -201
  597. package/dist/shared/agent-core-loop-detector.test.js +0 -195
  598. package/dist/shared/agent-core-loop-errors.test.js +0 -258
  599. package/dist/shared/agent-core-pricing.test.js +0 -191
  600. package/dist/shared/agent-core-sanitize-retry.test.js +0 -129
  601. package/dist/shared/api-client-build-request.test.js +0 -228
  602. package/dist/shared/api-client-build-system-caching.test.js +0 -107
  603. package/dist/shared/api-client-build.test.js +0 -223
  604. package/dist/shared/api-client-config.d.ts +0 -21
  605. package/dist/shared/api-client-helpers.d.ts +0 -57
  606. package/dist/shared/api-client-helpers.test.js +0 -261
  607. package/dist/shared/api-client-proxy-happy.test.js +0 -255
  608. package/dist/shared/api-client-proxy-retry.test.js +0 -307
  609. package/dist/shared/api-client-proxy.d.ts +0 -26
  610. package/dist/shared/api-client-proxy.test.js +0 -255
  611. package/dist/shared/api-client-retry.test.js +0 -307
  612. package/dist/shared/api-client-system-trimming.test.js +0 -261
  613. package/dist/shared/api-client-trimming.d.ts +0 -36
  614. package/dist/shared/api-client.test.js +0 -228
  615. package/dist/shared/compaction-thinking.test.js +0 -315
  616. package/dist/shared/compaction-trimming.test.js +0 -223
  617. package/dist/shared/sse-parser-callbacks.test.js +0 -422
  618. package/dist/shared/sse-parser-collect.test.js +0 -252
  619. package/dist/shared/sse-parser-e2e.test.js +0 -558
  620. package/dist/shared/sse-parser-parse.test.js +0 -253
  621. package/dist/shared/tool-dispatch-advanced-batch-build.test.js +0 -405
  622. package/dist/shared/tool-dispatch-advanced.test.js +0 -320
  623. package/dist/shared/tool-dispatch-basic.test.js +0 -278
  624. package/dist/shared/tool-dispatch-content.d.ts +0 -14
  625. package/dist/shared/tool-dispatch-parallel.test.js +0 -378
  626. package/dist/webchat/__tests__/widget-messaging.test.js +0 -323
  627. package/dist/webchat/__tests__/widget.test.js +0 -273
@@ -0,0 +1,1197 @@
1
+ /* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Readable$" }] */
2
+
3
+ 'use strict';
4
+
5
+ const EventEmitter = require('events');
6
+ const https = require('https');
7
+ const http = require('http');
8
+ const net = require('net');
9
+ const tls = require('tls');
10
+ const { randomBytes, createHash } = require('crypto');
11
+ const { Readable } = require('stream');
12
+ const { URL } = require('url');
13
+
14
+ const PerMessageDeflate = require('./permessage-deflate');
15
+ const Receiver = require('./receiver');
16
+ const Sender = require('./sender');
17
+ const {
18
+ BINARY_TYPES,
19
+ EMPTY_BUFFER,
20
+ GUID,
21
+ kStatusCode,
22
+ kWebSocket,
23
+ NOOP
24
+ } = require('./constants');
25
+ const { addEventListener, removeEventListener } = require('./event-target');
26
+ const { format, parse } = require('./extension');
27
+ const { toBuffer } = require('./buffer-util');
28
+
29
+ const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];
30
+ const protocolVersions = [8, 13];
31
+ const closeTimeout = 30 * 1000;
32
+
33
+ /**
34
+ * Class representing a WebSocket.
35
+ *
36
+ * @extends EventEmitter
37
+ */
38
+ class WebSocket extends EventEmitter {
39
+ /**
40
+ * Create a new `WebSocket`.
41
+ *
42
+ * @param {(String|URL)} address The URL to which to connect
43
+ * @param {(String|String[])} [protocols] The subprotocols
44
+ * @param {Object} [options] Connection options
45
+ */
46
+ constructor(address, protocols, options) {
47
+ super();
48
+
49
+ this._binaryType = BINARY_TYPES[0];
50
+ this._closeCode = 1006;
51
+ this._closeFrameReceived = false;
52
+ this._closeFrameSent = false;
53
+ this._closeMessage = '';
54
+ this._closeTimer = null;
55
+ this._extensions = {};
56
+ this._protocol = '';
57
+ this._readyState = WebSocket.CONNECTING;
58
+ this._receiver = null;
59
+ this._sender = null;
60
+ this._socket = null;
61
+
62
+ if (address !== null) {
63
+ this._bufferedAmount = 0;
64
+ this._isServer = false;
65
+ this._redirects = 0;
66
+
67
+ if (Array.isArray(protocols)) {
68
+ protocols = protocols.join(', ');
69
+ } else if (typeof protocols === 'object' && protocols !== null) {
70
+ options = protocols;
71
+ protocols = undefined;
72
+ }
73
+
74
+ initAsClient(this, address, protocols, options);
75
+ } else {
76
+ this._isServer = true;
77
+ }
78
+ }
79
+
80
+ /**
81
+ * This deviates from the WHATWG interface since ws doesn't support the
82
+ * required default "blob" type (instead we define a custom "nodebuffer"
83
+ * type).
84
+ *
85
+ * @type {String}
86
+ */
87
+ get binaryType() {
88
+ return this._binaryType;
89
+ }
90
+
91
+ set binaryType(type) {
92
+ if (!BINARY_TYPES.includes(type)) return;
93
+
94
+ this._binaryType = type;
95
+
96
+ //
97
+ // Allow to change `binaryType` on the fly.
98
+ //
99
+ if (this._receiver) this._receiver._binaryType = type;
100
+ }
101
+
102
+ /**
103
+ * @type {Number}
104
+ */
105
+ get bufferedAmount() {
106
+ if (!this._socket) return this._bufferedAmount;
107
+
108
+ return this._socket._writableState.length + this._sender._bufferedBytes;
109
+ }
110
+
111
+ /**
112
+ * @type {String}
113
+ */
114
+ get extensions() {
115
+ return Object.keys(this._extensions).join();
116
+ }
117
+
118
+ /**
119
+ * @type {Function}
120
+ */
121
+ /* istanbul ignore next */
122
+ get onclose() {
123
+ return undefined;
124
+ }
125
+
126
+ /* istanbul ignore next */
127
+ set onclose(listener) {}
128
+
129
+ /**
130
+ * @type {Function}
131
+ */
132
+ /* istanbul ignore next */
133
+ get onerror() {
134
+ return undefined;
135
+ }
136
+
137
+ /* istanbul ignore next */
138
+ set onerror(listener) {}
139
+
140
+ /**
141
+ * @type {Function}
142
+ */
143
+ /* istanbul ignore next */
144
+ get onopen() {
145
+ return undefined;
146
+ }
147
+
148
+ /* istanbul ignore next */
149
+ set onopen(listener) {}
150
+
151
+ /**
152
+ * @type {Function}
153
+ */
154
+ /* istanbul ignore next */
155
+ get onmessage() {
156
+ return undefined;
157
+ }
158
+
159
+ /* istanbul ignore next */
160
+ set onmessage(listener) {}
161
+
162
+ /**
163
+ * @type {String}
164
+ */
165
+ get protocol() {
166
+ return this._protocol;
167
+ }
168
+
169
+ /**
170
+ * @type {Number}
171
+ */
172
+ get readyState() {
173
+ return this._readyState;
174
+ }
175
+
176
+ /**
177
+ * @type {String}
178
+ */
179
+ get url() {
180
+ return this._url;
181
+ }
182
+
183
+ /**
184
+ * Set up the socket and the internal resources.
185
+ *
186
+ * @param {(net.Socket|tls.Socket)} socket The network socket between the
187
+ * server and client
188
+ * @param {Buffer} head The first packet of the upgraded stream
189
+ * @param {Number} [maxPayload=0] The maximum allowed message size
190
+ * @private
191
+ */
192
+ setSocket(socket, head, maxPayload) {
193
+ const receiver = new Receiver(
194
+ this.binaryType,
195
+ this._extensions,
196
+ this._isServer,
197
+ maxPayload
198
+ );
199
+
200
+ this._sender = new Sender(socket, this._extensions);
201
+ this._receiver = receiver;
202
+ this._socket = socket;
203
+
204
+ receiver[kWebSocket] = this;
205
+ socket[kWebSocket] = this;
206
+
207
+ receiver.on('conclude', receiverOnConclude);
208
+ receiver.on('drain', receiverOnDrain);
209
+ receiver.on('error', receiverOnError);
210
+ receiver.on('message', receiverOnMessage);
211
+ receiver.on('ping', receiverOnPing);
212
+ receiver.on('pong', receiverOnPong);
213
+
214
+ socket.setTimeout(0);
215
+ socket.setNoDelay();
216
+
217
+ if (head.length > 0) socket.unshift(head);
218
+
219
+ socket.on('close', socketOnClose);
220
+ socket.on('data', socketOnData);
221
+ socket.on('end', socketOnEnd);
222
+ socket.on('error', socketOnError);
223
+
224
+ this._readyState = WebSocket.OPEN;
225
+ this.emit('open');
226
+ }
227
+
228
+ /**
229
+ * Emit the `'close'` event.
230
+ *
231
+ * @private
232
+ */
233
+ emitClose() {
234
+ if (!this._socket) {
235
+ this._readyState = WebSocket.CLOSED;
236
+ this.emit('close', this._closeCode, this._closeMessage);
237
+ return;
238
+ }
239
+
240
+ if (this._extensions[PerMessageDeflate.extensionName]) {
241
+ this._extensions[PerMessageDeflate.extensionName].cleanup();
242
+ }
243
+
244
+ this._receiver.removeAllListeners();
245
+ this._readyState = WebSocket.CLOSED;
246
+ this.emit('close', this._closeCode, this._closeMessage);
247
+ }
248
+
249
+ /**
250
+ * Start a closing handshake.
251
+ *
252
+ * +----------+ +-----------+ +----------+
253
+ * - - -|ws.close()|-->|close frame|-->|ws.close()|- - -
254
+ * | +----------+ +-----------+ +----------+ |
255
+ * +----------+ +-----------+ |
256
+ * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING
257
+ * +----------+ +-----------+ |
258
+ * | | | +---+ |
259
+ * +------------------------+-->|fin| - - - -
260
+ * | +---+ | +---+
261
+ * - - - - -|fin|<---------------------+
262
+ * +---+
263
+ *
264
+ * @param {Number} [code] Status code explaining why the connection is closing
265
+ * @param {String} [data] A string explaining why the connection is closing
266
+ * @public
267
+ */
268
+ close(code, data) {
269
+ if (this.readyState === WebSocket.CLOSED) return;
270
+ if (this.readyState === WebSocket.CONNECTING) {
271
+ const msg = 'WebSocket was closed before the connection was established';
272
+ return abortHandshake(this, this._req, msg);
273
+ }
274
+
275
+ if (this.readyState === WebSocket.CLOSING) {
276
+ if (
277
+ this._closeFrameSent &&
278
+ (this._closeFrameReceived || this._receiver._writableState.errorEmitted)
279
+ ) {
280
+ this._socket.end();
281
+ }
282
+
283
+ return;
284
+ }
285
+
286
+ this._readyState = WebSocket.CLOSING;
287
+ this._sender.close(code, data, !this._isServer, (err) => {
288
+ //
289
+ // This error is handled by the `'error'` listener on the socket. We only
290
+ // want to know if the close frame has been sent here.
291
+ //
292
+ if (err) return;
293
+
294
+ this._closeFrameSent = true;
295
+
296
+ if (
297
+ this._closeFrameReceived ||
298
+ this._receiver._writableState.errorEmitted
299
+ ) {
300
+ this._socket.end();
301
+ }
302
+ });
303
+
304
+ //
305
+ // Specify a timeout for the closing handshake to complete.
306
+ //
307
+ this._closeTimer = setTimeout(
308
+ this._socket.destroy.bind(this._socket),
309
+ closeTimeout
310
+ );
311
+ }
312
+
313
+ /**
314
+ * Send a ping.
315
+ *
316
+ * @param {*} [data] The data to send
317
+ * @param {Boolean} [mask] Indicates whether or not to mask `data`
318
+ * @param {Function} [cb] Callback which is executed when the ping is sent
319
+ * @public
320
+ */
321
+ ping(data, mask, cb) {
322
+ if (this.readyState === WebSocket.CONNECTING) {
323
+ throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
324
+ }
325
+
326
+ if (typeof data === 'function') {
327
+ cb = data;
328
+ data = mask = undefined;
329
+ } else if (typeof mask === 'function') {
330
+ cb = mask;
331
+ mask = undefined;
332
+ }
333
+
334
+ if (typeof data === 'number') data = data.toString();
335
+
336
+ if (this.readyState !== WebSocket.OPEN) {
337
+ sendAfterClose(this, data, cb);
338
+ return;
339
+ }
340
+
341
+ if (mask === undefined) mask = !this._isServer;
342
+ this._sender.ping(data || EMPTY_BUFFER, mask, cb);
343
+ }
344
+
345
+ /**
346
+ * Send a pong.
347
+ *
348
+ * @param {*} [data] The data to send
349
+ * @param {Boolean} [mask] Indicates whether or not to mask `data`
350
+ * @param {Function} [cb] Callback which is executed when the pong is sent
351
+ * @public
352
+ */
353
+ pong(data, mask, cb) {
354
+ if (this.readyState === WebSocket.CONNECTING) {
355
+ throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
356
+ }
357
+
358
+ if (typeof data === 'function') {
359
+ cb = data;
360
+ data = mask = undefined;
361
+ } else if (typeof mask === 'function') {
362
+ cb = mask;
363
+ mask = undefined;
364
+ }
365
+
366
+ if (typeof data === 'number') data = data.toString();
367
+
368
+ if (this.readyState !== WebSocket.OPEN) {
369
+ sendAfterClose(this, data, cb);
370
+ return;
371
+ }
372
+
373
+ if (mask === undefined) mask = !this._isServer;
374
+ this._sender.pong(data || EMPTY_BUFFER, mask, cb);
375
+ }
376
+
377
+ /**
378
+ * Send a data message.
379
+ *
380
+ * @param {*} data The message to send
381
+ * @param {Object} [options] Options object
382
+ * @param {Boolean} [options.compress] Specifies whether or not to compress
383
+ * `data`
384
+ * @param {Boolean} [options.binary] Specifies whether `data` is binary or
385
+ * text
386
+ * @param {Boolean} [options.fin=true] Specifies whether the fragment is the
387
+ * last one
388
+ * @param {Boolean} [options.mask] Specifies whether or not to mask `data`
389
+ * @param {Function} [cb] Callback which is executed when data is written out
390
+ * @public
391
+ */
392
+ send(data, options, cb) {
393
+ if (this.readyState === WebSocket.CONNECTING) {
394
+ throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
395
+ }
396
+
397
+ if (typeof options === 'function') {
398
+ cb = options;
399
+ options = {};
400
+ }
401
+
402
+ if (typeof data === 'number') data = data.toString();
403
+
404
+ if (this.readyState !== WebSocket.OPEN) {
405
+ sendAfterClose(this, data, cb);
406
+ return;
407
+ }
408
+
409
+ const opts = {
410
+ binary: typeof data !== 'string',
411
+ mask: !this._isServer,
412
+ compress: true,
413
+ fin: true,
414
+ ...options
415
+ };
416
+
417
+ if (!this._extensions[PerMessageDeflate.extensionName]) {
418
+ opts.compress = false;
419
+ }
420
+
421
+ this._sender.send(data || EMPTY_BUFFER, opts, cb);
422
+ }
423
+
424
+ /**
425
+ * Forcibly close the connection.
426
+ *
427
+ * @public
428
+ */
429
+ terminate() {
430
+ if (this.readyState === WebSocket.CLOSED) return;
431
+ if (this.readyState === WebSocket.CONNECTING) {
432
+ const msg = 'WebSocket was closed before the connection was established';
433
+ return abortHandshake(this, this._req, msg);
434
+ }
435
+
436
+ if (this._socket) {
437
+ this._readyState = WebSocket.CLOSING;
438
+ this._socket.destroy();
439
+ }
440
+ }
441
+ }
442
+
443
+ /**
444
+ * @constant {Number} CONNECTING
445
+ * @memberof WebSocket
446
+ */
447
+ Object.defineProperty(WebSocket, 'CONNECTING', {
448
+ enumerable: true,
449
+ value: readyStates.indexOf('CONNECTING')
450
+ });
451
+
452
+ /**
453
+ * @constant {Number} CONNECTING
454
+ * @memberof WebSocket.prototype
455
+ */
456
+ Object.defineProperty(WebSocket.prototype, 'CONNECTING', {
457
+ enumerable: true,
458
+ value: readyStates.indexOf('CONNECTING')
459
+ });
460
+
461
+ /**
462
+ * @constant {Number} OPEN
463
+ * @memberof WebSocket
464
+ */
465
+ Object.defineProperty(WebSocket, 'OPEN', {
466
+ enumerable: true,
467
+ value: readyStates.indexOf('OPEN')
468
+ });
469
+
470
+ /**
471
+ * @constant {Number} OPEN
472
+ * @memberof WebSocket.prototype
473
+ */
474
+ Object.defineProperty(WebSocket.prototype, 'OPEN', {
475
+ enumerable: true,
476
+ value: readyStates.indexOf('OPEN')
477
+ });
478
+
479
+ /**
480
+ * @constant {Number} CLOSING
481
+ * @memberof WebSocket
482
+ */
483
+ Object.defineProperty(WebSocket, 'CLOSING', {
484
+ enumerable: true,
485
+ value: readyStates.indexOf('CLOSING')
486
+ });
487
+
488
+ /**
489
+ * @constant {Number} CLOSING
490
+ * @memberof WebSocket.prototype
491
+ */
492
+ Object.defineProperty(WebSocket.prototype, 'CLOSING', {
493
+ enumerable: true,
494
+ value: readyStates.indexOf('CLOSING')
495
+ });
496
+
497
+ /**
498
+ * @constant {Number} CLOSED
499
+ * @memberof WebSocket
500
+ */
501
+ Object.defineProperty(WebSocket, 'CLOSED', {
502
+ enumerable: true,
503
+ value: readyStates.indexOf('CLOSED')
504
+ });
505
+
506
+ /**
507
+ * @constant {Number} CLOSED
508
+ * @memberof WebSocket.prototype
509
+ */
510
+ Object.defineProperty(WebSocket.prototype, 'CLOSED', {
511
+ enumerable: true,
512
+ value: readyStates.indexOf('CLOSED')
513
+ });
514
+
515
+ [
516
+ 'binaryType',
517
+ 'bufferedAmount',
518
+ 'extensions',
519
+ 'protocol',
520
+ 'readyState',
521
+ 'url'
522
+ ].forEach((property) => {
523
+ Object.defineProperty(WebSocket.prototype, property, { enumerable: true });
524
+ });
525
+
526
+ //
527
+ // Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.
528
+ // See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface
529
+ //
530
+ ['open', 'error', 'close', 'message'].forEach((method) => {
531
+ Object.defineProperty(WebSocket.prototype, `on${method}`, {
532
+ enumerable: true,
533
+ get() {
534
+ const listeners = this.listeners(method);
535
+ for (let i = 0; i < listeners.length; i++) {
536
+ if (listeners[i]._listener) return listeners[i]._listener;
537
+ }
538
+
539
+ return undefined;
540
+ },
541
+ set(listener) {
542
+ const listeners = this.listeners(method);
543
+ for (let i = 0; i < listeners.length; i++) {
544
+ //
545
+ // Remove only the listeners added via `addEventListener`.
546
+ //
547
+ if (listeners[i]._listener) this.removeListener(method, listeners[i]);
548
+ }
549
+ this.addEventListener(method, listener);
550
+ }
551
+ });
552
+ });
553
+
554
+ WebSocket.prototype.addEventListener = addEventListener;
555
+ WebSocket.prototype.removeEventListener = removeEventListener;
556
+
557
+ module.exports = WebSocket;
558
+
559
+ /**
560
+ * Initialize a WebSocket client.
561
+ *
562
+ * @param {WebSocket} websocket The client to initialize
563
+ * @param {(String|URL)} address The URL to which to connect
564
+ * @param {String} [protocols] The subprotocols
565
+ * @param {Object} [options] Connection options
566
+ * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable
567
+ * permessage-deflate
568
+ * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the
569
+ * handshake request
570
+ * @param {Number} [options.protocolVersion=13] Value of the
571
+ * `Sec-WebSocket-Version` header
572
+ * @param {String} [options.origin] Value of the `Origin` or
573
+ * `Sec-WebSocket-Origin` header
574
+ * @param {Number} [options.maxPayload=104857600] The maximum allowed message
575
+ * size
576
+ * @param {Boolean} [options.followRedirects=false] Whether or not to follow
577
+ * redirects
578
+ * @param {Number} [options.maxRedirects=10] The maximum number of redirects
579
+ * allowed
580
+ * @private
581
+ */
582
+ function initAsClient(websocket, address, protocols, options) {
583
+ const opts = {
584
+ protocolVersion: protocolVersions[1],
585
+ maxPayload: 100 * 1024 * 1024,
586
+ perMessageDeflate: true,
587
+ followRedirects: false,
588
+ maxRedirects: 10,
589
+ ...options,
590
+ createConnection: undefined,
591
+ socketPath: undefined,
592
+ hostname: undefined,
593
+ protocol: undefined,
594
+ timeout: undefined,
595
+ method: undefined,
596
+ host: undefined,
597
+ path: undefined,
598
+ port: undefined
599
+ };
600
+
601
+ if (!protocolVersions.includes(opts.protocolVersion)) {
602
+ throw new RangeError(
603
+ `Unsupported protocol version: ${opts.protocolVersion} ` +
604
+ `(supported versions: ${protocolVersions.join(', ')})`
605
+ );
606
+ }
607
+
608
+ let parsedUrl;
609
+
610
+ if (address instanceof URL) {
611
+ parsedUrl = address;
612
+ websocket._url = address.href;
613
+ } else {
614
+ parsedUrl = new URL(address);
615
+ websocket._url = address;
616
+ }
617
+
618
+ const isUnixSocket = parsedUrl.protocol === 'ws+unix:';
619
+
620
+ if (!parsedUrl.host && (!isUnixSocket || !parsedUrl.pathname)) {
621
+ const err = new Error(`Invalid URL: ${websocket.url}`);
622
+
623
+ if (websocket._redirects === 0) {
624
+ throw err;
625
+ } else {
626
+ emitErrorAndClose(websocket, err);
627
+ return;
628
+ }
629
+ }
630
+
631
+ const isSecure =
632
+ parsedUrl.protocol === 'wss:' || parsedUrl.protocol === 'https:';
633
+ const defaultPort = isSecure ? 443 : 80;
634
+ const key = randomBytes(16).toString('base64');
635
+ const get = isSecure ? https.get : http.get;
636
+ let perMessageDeflate;
637
+
638
+ opts.createConnection = isSecure ? tlsConnect : netConnect;
639
+ opts.defaultPort = opts.defaultPort || defaultPort;
640
+ opts.port = parsedUrl.port || defaultPort;
641
+ opts.host = parsedUrl.hostname.startsWith('[')
642
+ ? parsedUrl.hostname.slice(1, -1)
643
+ : parsedUrl.hostname;
644
+ opts.headers = {
645
+ 'Sec-WebSocket-Version': opts.protocolVersion,
646
+ 'Sec-WebSocket-Key': key,
647
+ Connection: 'Upgrade',
648
+ Upgrade: 'websocket',
649
+ ...opts.headers
650
+ };
651
+ opts.path = parsedUrl.pathname + parsedUrl.search;
652
+ opts.timeout = opts.handshakeTimeout;
653
+
654
+ if (opts.perMessageDeflate) {
655
+ perMessageDeflate = new PerMessageDeflate(
656
+ opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},
657
+ false,
658
+ opts.maxPayload
659
+ );
660
+ opts.headers['Sec-WebSocket-Extensions'] = format({
661
+ [PerMessageDeflate.extensionName]: perMessageDeflate.offer()
662
+ });
663
+ }
664
+ if (protocols) {
665
+ opts.headers['Sec-WebSocket-Protocol'] = protocols;
666
+ }
667
+ if (opts.origin) {
668
+ if (opts.protocolVersion < 13) {
669
+ opts.headers['Sec-WebSocket-Origin'] = opts.origin;
670
+ } else {
671
+ opts.headers.Origin = opts.origin;
672
+ }
673
+ }
674
+ if (parsedUrl.username || parsedUrl.password) {
675
+ opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;
676
+ }
677
+
678
+ if (isUnixSocket) {
679
+ const parts = opts.path.split(':');
680
+
681
+ opts.socketPath = parts[0];
682
+ opts.path = parts[1];
683
+ }
684
+
685
+ if (opts.followRedirects) {
686
+ if (websocket._redirects === 0) {
687
+ websocket._originalUnixSocket = isUnixSocket;
688
+ websocket._originalSecure = isSecure;
689
+ websocket._originalHostOrSocketPath = isUnixSocket
690
+ ? opts.socketPath
691
+ : parsedUrl.host;
692
+
693
+ const headers = options && options.headers;
694
+
695
+ //
696
+ // Shallow copy the user provided options so that headers can be changed
697
+ // without mutating the original object.
698
+ //
699
+ options = { ...options, headers: {} };
700
+
701
+ if (headers) {
702
+ for (const [key, value] of Object.entries(headers)) {
703
+ options.headers[key.toLowerCase()] = value;
704
+ }
705
+ }
706
+ } else {
707
+ const isSameHost = isUnixSocket
708
+ ? websocket._originalUnixSocket
709
+ ? opts.socketPath === websocket._originalHostOrSocketPath
710
+ : false
711
+ : websocket._originalUnixSocket
712
+ ? false
713
+ : parsedUrl.host === websocket._originalHostOrSocketPath;
714
+
715
+ if (!isSameHost || (websocket._originalSecure && !isSecure)) {
716
+ //
717
+ // Match curl 7.77.0 behavior and drop the following headers. These
718
+ // headers are also dropped when following a redirect to a subdomain.
719
+ //
720
+ delete opts.headers.authorization;
721
+ delete opts.headers.cookie;
722
+
723
+ if (!isSameHost) delete opts.headers.host;
724
+
725
+ opts.auth = undefined;
726
+ }
727
+ }
728
+
729
+ //
730
+ // Match curl 7.77.0 behavior and make the first `Authorization` header win.
731
+ // If the `Authorization` header is set, then there is nothing to do as it
732
+ // will take precedence.
733
+ //
734
+ if (opts.auth && !options.headers.authorization) {
735
+ options.headers.authorization =
736
+ 'Basic ' + Buffer.from(opts.auth).toString('base64');
737
+ }
738
+ }
739
+
740
+ let req = (websocket._req = get(opts));
741
+
742
+ if (opts.timeout) {
743
+ req.on('timeout', () => {
744
+ abortHandshake(websocket, req, 'Opening handshake has timed out');
745
+ });
746
+ }
747
+
748
+ req.on('error', (err) => {
749
+ if (req === null || req.aborted) return;
750
+
751
+ req = websocket._req = null;
752
+ emitErrorAndClose(websocket, err);
753
+ });
754
+
755
+ req.on('response', (res) => {
756
+ const location = res.headers.location;
757
+ const statusCode = res.statusCode;
758
+
759
+ if (
760
+ location &&
761
+ opts.followRedirects &&
762
+ statusCode >= 300 &&
763
+ statusCode < 400
764
+ ) {
765
+ if (++websocket._redirects > opts.maxRedirects) {
766
+ abortHandshake(websocket, req, 'Maximum redirects exceeded');
767
+ return;
768
+ }
769
+
770
+ req.abort();
771
+
772
+ let addr;
773
+
774
+ try {
775
+ addr = new URL(location, address);
776
+ } catch (err) {
777
+ emitErrorAndClose(websocket, err);
778
+ return;
779
+ }
780
+
781
+ initAsClient(websocket, addr, protocols, options);
782
+ } else if (!websocket.emit('unexpected-response', req, res)) {
783
+ abortHandshake(
784
+ websocket,
785
+ req,
786
+ `Unexpected server response: ${res.statusCode}`
787
+ );
788
+ }
789
+ });
790
+
791
+ req.on('upgrade', (res, socket, head) => {
792
+ websocket.emit('upgrade', res);
793
+
794
+ //
795
+ // The user may have closed the connection from a listener of the `upgrade`
796
+ // event.
797
+ //
798
+ if (websocket.readyState !== WebSocket.CONNECTING) return;
799
+
800
+ req = websocket._req = null;
801
+
802
+ const upgrade = res.headers.upgrade;
803
+
804
+ if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {
805
+ abortHandshake(websocket, socket, 'Invalid Upgrade header');
806
+ return;
807
+ }
808
+
809
+ const digest = createHash('sha1')
810
+ .update(key + GUID)
811
+ .digest('base64');
812
+
813
+ if (res.headers['sec-websocket-accept'] !== digest) {
814
+ abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');
815
+ return;
816
+ }
817
+
818
+ const serverProt = res.headers['sec-websocket-protocol'];
819
+ const protList = (protocols || '').split(/, */);
820
+ let protError;
821
+
822
+ if (!protocols && serverProt) {
823
+ protError = 'Server sent a subprotocol but none was requested';
824
+ } else if (protocols && !serverProt) {
825
+ protError = 'Server sent no subprotocol';
826
+ } else if (serverProt && !protList.includes(serverProt)) {
827
+ protError = 'Server sent an invalid subprotocol';
828
+ }
829
+
830
+ if (protError) {
831
+ abortHandshake(websocket, socket, protError);
832
+ return;
833
+ }
834
+
835
+ if (serverProt) websocket._protocol = serverProt;
836
+
837
+ const secWebSocketExtensions = res.headers['sec-websocket-extensions'];
838
+
839
+ if (secWebSocketExtensions !== undefined) {
840
+ if (!perMessageDeflate) {
841
+ const message =
842
+ 'Server sent a Sec-WebSocket-Extensions header but no extension ' +
843
+ 'was requested';
844
+ abortHandshake(websocket, socket, message);
845
+ return;
846
+ }
847
+
848
+ let extensions;
849
+
850
+ try {
851
+ extensions = parse(secWebSocketExtensions);
852
+ } catch (err) {
853
+ const message = 'Invalid Sec-WebSocket-Extensions header';
854
+ abortHandshake(websocket, socket, message);
855
+ return;
856
+ }
857
+
858
+ const extensionNames = Object.keys(extensions);
859
+
860
+ if (extensionNames.length) {
861
+ if (
862
+ extensionNames.length !== 1 ||
863
+ extensionNames[0] !== PerMessageDeflate.extensionName
864
+ ) {
865
+ const message =
866
+ 'Server indicated an extension that was not requested';
867
+ abortHandshake(websocket, socket, message);
868
+ return;
869
+ }
870
+
871
+ try {
872
+ perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);
873
+ } catch (err) {
874
+ const message = 'Invalid Sec-WebSocket-Extensions header';
875
+ abortHandshake(websocket, socket, message);
876
+ return;
877
+ }
878
+
879
+ websocket._extensions[PerMessageDeflate.extensionName] =
880
+ perMessageDeflate;
881
+ }
882
+ }
883
+
884
+ websocket.setSocket(socket, head, opts.maxPayload);
885
+ });
886
+ }
887
+
888
+ /**
889
+ * Emit the `'error'` and `'close'` event.
890
+ *
891
+ * @param {WebSocket} websocket The WebSocket instance
892
+ * @param {Error} The error to emit
893
+ * @private
894
+ */
895
+ function emitErrorAndClose(websocket, err) {
896
+ websocket._readyState = WebSocket.CLOSING;
897
+ websocket.emit('error', err);
898
+ websocket.emitClose();
899
+ }
900
+
901
+ /**
902
+ * Create a `net.Socket` and initiate a connection.
903
+ *
904
+ * @param {Object} options Connection options
905
+ * @return {net.Socket} The newly created socket used to start the connection
906
+ * @private
907
+ */
908
+ function netConnect(options) {
909
+ options.path = options.socketPath;
910
+ return net.connect(options);
911
+ }
912
+
913
+ /**
914
+ * Create a `tls.TLSSocket` and initiate a connection.
915
+ *
916
+ * @param {Object} options Connection options
917
+ * @return {tls.TLSSocket} The newly created socket used to start the connection
918
+ * @private
919
+ */
920
+ function tlsConnect(options) {
921
+ options.path = undefined;
922
+
923
+ if (!options.servername && options.servername !== '') {
924
+ options.servername = net.isIP(options.host) ? '' : options.host;
925
+ }
926
+
927
+ return tls.connect(options);
928
+ }
929
+
930
+ /**
931
+ * Abort the handshake and emit an error.
932
+ *
933
+ * @param {WebSocket} websocket The WebSocket instance
934
+ * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to
935
+ * abort or the socket to destroy
936
+ * @param {String} message The error message
937
+ * @private
938
+ */
939
+ function abortHandshake(websocket, stream, message) {
940
+ websocket._readyState = WebSocket.CLOSING;
941
+
942
+ const err = new Error(message);
943
+ Error.captureStackTrace(err, abortHandshake);
944
+
945
+ if (stream.setHeader) {
946
+ stream.abort();
947
+
948
+ if (stream.socket && !stream.socket.destroyed) {
949
+ //
950
+ // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if
951
+ // called after the request completed. See
952
+ // https://github.com/websockets/ws/issues/1869.
953
+ //
954
+ stream.socket.destroy();
955
+ }
956
+
957
+ stream.once('abort', websocket.emitClose.bind(websocket));
958
+ websocket.emit('error', err);
959
+ } else {
960
+ stream.destroy(err);
961
+ stream.once('error', websocket.emit.bind(websocket, 'error'));
962
+ stream.once('close', websocket.emitClose.bind(websocket));
963
+ }
964
+ }
965
+
966
+ /**
967
+ * Handle cases where the `ping()`, `pong()`, or `send()` methods are called
968
+ * when the `readyState` attribute is `CLOSING` or `CLOSED`.
969
+ *
970
+ * @param {WebSocket} websocket The WebSocket instance
971
+ * @param {*} [data] The data to send
972
+ * @param {Function} [cb] Callback
973
+ * @private
974
+ */
975
+ function sendAfterClose(websocket, data, cb) {
976
+ if (data) {
977
+ const length = toBuffer(data).length;
978
+
979
+ //
980
+ // The `_bufferedAmount` property is used only when the peer is a client and
981
+ // the opening handshake fails. Under these circumstances, in fact, the
982
+ // `setSocket()` method is not called, so the `_socket` and `_sender`
983
+ // properties are set to `null`.
984
+ //
985
+ if (websocket._socket) websocket._sender._bufferedBytes += length;
986
+ else websocket._bufferedAmount += length;
987
+ }
988
+
989
+ if (cb) {
990
+ const err = new Error(
991
+ `WebSocket is not open: readyState ${websocket.readyState} ` +
992
+ `(${readyStates[websocket.readyState]})`
993
+ );
994
+ cb(err);
995
+ }
996
+ }
997
+
998
+ /**
999
+ * The listener of the `Receiver` `'conclude'` event.
1000
+ *
1001
+ * @param {Number} code The status code
1002
+ * @param {String} reason The reason for closing
1003
+ * @private
1004
+ */
1005
+ function receiverOnConclude(code, reason) {
1006
+ const websocket = this[kWebSocket];
1007
+
1008
+ websocket._closeFrameReceived = true;
1009
+ websocket._closeMessage = reason;
1010
+ websocket._closeCode = code;
1011
+
1012
+ if (websocket._socket[kWebSocket] === undefined) return;
1013
+
1014
+ websocket._socket.removeListener('data', socketOnData);
1015
+ process.nextTick(resume, websocket._socket);
1016
+
1017
+ if (code === 1005) websocket.close();
1018
+ else websocket.close(code, reason);
1019
+ }
1020
+
1021
+ /**
1022
+ * The listener of the `Receiver` `'drain'` event.
1023
+ *
1024
+ * @private
1025
+ */
1026
+ function receiverOnDrain() {
1027
+ this[kWebSocket]._socket.resume();
1028
+ }
1029
+
1030
+ /**
1031
+ * The listener of the `Receiver` `'error'` event.
1032
+ *
1033
+ * @param {(RangeError|Error)} err The emitted error
1034
+ * @private
1035
+ */
1036
+ function receiverOnError(err) {
1037
+ const websocket = this[kWebSocket];
1038
+
1039
+ if (websocket._socket[kWebSocket] !== undefined) {
1040
+ websocket._socket.removeListener('data', socketOnData);
1041
+
1042
+ //
1043
+ // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See
1044
+ // https://github.com/websockets/ws/issues/1940.
1045
+ //
1046
+ process.nextTick(resume, websocket._socket);
1047
+
1048
+ websocket.close(err[kStatusCode]);
1049
+ }
1050
+
1051
+ websocket.emit('error', err);
1052
+ }
1053
+
1054
+ /**
1055
+ * The listener of the `Receiver` `'finish'` event.
1056
+ *
1057
+ * @private
1058
+ */
1059
+ function receiverOnFinish() {
1060
+ this[kWebSocket].emitClose();
1061
+ }
1062
+
1063
+ /**
1064
+ * The listener of the `Receiver` `'message'` event.
1065
+ *
1066
+ * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The message
1067
+ * @private
1068
+ */
1069
+ function receiverOnMessage(data) {
1070
+ this[kWebSocket].emit('message', data);
1071
+ }
1072
+
1073
+ /**
1074
+ * The listener of the `Receiver` `'ping'` event.
1075
+ *
1076
+ * @param {Buffer} data The data included in the ping frame
1077
+ * @private
1078
+ */
1079
+ function receiverOnPing(data) {
1080
+ const websocket = this[kWebSocket];
1081
+
1082
+ websocket.pong(data, !websocket._isServer, NOOP);
1083
+ websocket.emit('ping', data);
1084
+ }
1085
+
1086
+ /**
1087
+ * The listener of the `Receiver` `'pong'` event.
1088
+ *
1089
+ * @param {Buffer} data The data included in the pong frame
1090
+ * @private
1091
+ */
1092
+ function receiverOnPong(data) {
1093
+ this[kWebSocket].emit('pong', data);
1094
+ }
1095
+
1096
+ /**
1097
+ * Resume a readable stream
1098
+ *
1099
+ * @param {Readable} stream The readable stream
1100
+ * @private
1101
+ */
1102
+ function resume(stream) {
1103
+ stream.resume();
1104
+ }
1105
+
1106
+ /**
1107
+ * The listener of the `net.Socket` `'close'` event.
1108
+ *
1109
+ * @private
1110
+ */
1111
+ function socketOnClose() {
1112
+ const websocket = this[kWebSocket];
1113
+
1114
+ this.removeListener('close', socketOnClose);
1115
+ this.removeListener('data', socketOnData);
1116
+ this.removeListener('end', socketOnEnd);
1117
+
1118
+ websocket._readyState = WebSocket.CLOSING;
1119
+
1120
+ let chunk;
1121
+
1122
+ //
1123
+ // The close frame might not have been received or the `'end'` event emitted,
1124
+ // for example, if the socket was destroyed due to an error. Ensure that the
1125
+ // `receiver` stream is closed after writing any remaining buffered data to
1126
+ // it. If the readable side of the socket is in flowing mode then there is no
1127
+ // buffered data as everything has been already written and `readable.read()`
1128
+ // will return `null`. If instead, the socket is paused, any possible buffered
1129
+ // data will be read as a single chunk.
1130
+ //
1131
+ if (
1132
+ !this._readableState.endEmitted &&
1133
+ !websocket._closeFrameReceived &&
1134
+ !websocket._receiver._writableState.errorEmitted &&
1135
+ (chunk = websocket._socket.read()) !== null
1136
+ ) {
1137
+ websocket._receiver.write(chunk);
1138
+ }
1139
+
1140
+ websocket._receiver.end();
1141
+
1142
+ this[kWebSocket] = undefined;
1143
+
1144
+ clearTimeout(websocket._closeTimer);
1145
+
1146
+ if (
1147
+ websocket._receiver._writableState.finished ||
1148
+ websocket._receiver._writableState.errorEmitted
1149
+ ) {
1150
+ websocket.emitClose();
1151
+ } else {
1152
+ websocket._receiver.on('error', receiverOnFinish);
1153
+ websocket._receiver.on('finish', receiverOnFinish);
1154
+ }
1155
+ }
1156
+
1157
+ /**
1158
+ * The listener of the `net.Socket` `'data'` event.
1159
+ *
1160
+ * @param {Buffer} chunk A chunk of data
1161
+ * @private
1162
+ */
1163
+ function socketOnData(chunk) {
1164
+ if (!this[kWebSocket]._receiver.write(chunk)) {
1165
+ this.pause();
1166
+ }
1167
+ }
1168
+
1169
+ /**
1170
+ * The listener of the `net.Socket` `'end'` event.
1171
+ *
1172
+ * @private
1173
+ */
1174
+ function socketOnEnd() {
1175
+ const websocket = this[kWebSocket];
1176
+
1177
+ websocket._readyState = WebSocket.CLOSING;
1178
+ websocket._receiver.end();
1179
+ this.end();
1180
+ }
1181
+
1182
+ /**
1183
+ * The listener of the `net.Socket` `'error'` event.
1184
+ *
1185
+ * @private
1186
+ */
1187
+ function socketOnError() {
1188
+ const websocket = this[kWebSocket];
1189
+
1190
+ this.removeListener('error', socketOnError);
1191
+ this.on('error', NOOP);
1192
+
1193
+ if (websocket) {
1194
+ websocket._readyState = WebSocket.CLOSING;
1195
+ this.destroy();
1196
+ }
1197
+ }