@dotdo/do 0.1.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 (486) hide show
  1. package/README.md +400 -0
  2. package/dist/ai/embeddings.d.ts +129 -0
  3. package/dist/ai/embeddings.d.ts.map +1 -0
  4. package/dist/ai/embeddings.js +217 -0
  5. package/dist/ai/embeddings.js.map +1 -0
  6. package/dist/ai/gateway.d.ts +139 -0
  7. package/dist/ai/gateway.d.ts.map +1 -0
  8. package/dist/ai/gateway.js +179 -0
  9. package/dist/ai/gateway.js.map +1 -0
  10. package/dist/ai/image.d.ts +140 -0
  11. package/dist/ai/image.d.ts.map +1 -0
  12. package/dist/ai/image.js +199 -0
  13. package/dist/ai/image.js.map +1 -0
  14. package/dist/ai/index.d.ts +98 -0
  15. package/dist/ai/index.d.ts.map +1 -0
  16. package/dist/ai/index.js +223 -0
  17. package/dist/ai/index.js.map +1 -0
  18. package/dist/ai/models.d.ts +81 -0
  19. package/dist/ai/models.d.ts.map +1 -0
  20. package/dist/ai/models.js +537 -0
  21. package/dist/ai/models.js.map +1 -0
  22. package/dist/ai/text.d.ts +176 -0
  23. package/dist/ai/text.d.ts.map +1 -0
  24. package/dist/ai/text.js +253 -0
  25. package/dist/ai/text.js.map +1 -0
  26. package/dist/ai/voice/agents.d.ts +224 -0
  27. package/dist/ai/voice/agents.d.ts.map +1 -0
  28. package/dist/ai/voice/agents.js +375 -0
  29. package/dist/ai/voice/agents.js.map +1 -0
  30. package/dist/ai/voice/campaigns.d.ts +307 -0
  31. package/dist/ai/voice/campaigns.d.ts.map +1 -0
  32. package/dist/ai/voice/campaigns.js +739 -0
  33. package/dist/ai/voice/campaigns.js.map +1 -0
  34. package/dist/ai/voice/index.d.ts +21 -0
  35. package/dist/ai/voice/index.d.ts.map +1 -0
  36. package/dist/ai/voice/index.js +42 -0
  37. package/dist/ai/voice/index.js.map +1 -0
  38. package/dist/ai/voice/providers.d.ts +283 -0
  39. package/dist/ai/voice/providers.d.ts.map +1 -0
  40. package/dist/ai/voice/providers.js +286 -0
  41. package/dist/ai/voice/providers.js.map +1 -0
  42. package/dist/ai/voice/sessions.d.ts +294 -0
  43. package/dist/ai/voice/sessions.d.ts.map +1 -0
  44. package/dist/ai/voice/sessions.js +531 -0
  45. package/dist/ai/voice/sessions.js.map +1 -0
  46. package/dist/ai/voice/tools.d.ts +242 -0
  47. package/dist/ai/voice/tools.d.ts.map +1 -0
  48. package/dist/ai/voice/tools.js +370 -0
  49. package/dist/ai/voice/tools.js.map +1 -0
  50. package/dist/ai/voice/tts.d.ts +173 -0
  51. package/dist/ai/voice/tts.d.ts.map +1 -0
  52. package/dist/ai/voice/tts.js +252 -0
  53. package/dist/ai/voice/tts.js.map +1 -0
  54. package/dist/ai/voice/webrtc.d.ts +228 -0
  55. package/dist/ai/voice/webrtc.d.ts.map +1 -0
  56. package/dist/ai/voice/webrtc.js +372 -0
  57. package/dist/ai/voice/webrtc.js.map +1 -0
  58. package/dist/api/index.d.ts +103 -0
  59. package/dist/api/index.d.ts.map +1 -0
  60. package/dist/api/index.js +191 -0
  61. package/dist/api/index.js.map +1 -0
  62. package/dist/api/mcp/handlers.d.ts +25 -0
  63. package/dist/api/mcp/handlers.d.ts.map +1 -0
  64. package/dist/api/mcp/handlers.js +422 -0
  65. package/dist/api/mcp/handlers.js.map +1 -0
  66. package/dist/api/mcp/index.d.ts +113 -0
  67. package/dist/api/mcp/index.d.ts.map +1 -0
  68. package/dist/api/mcp/index.js +141 -0
  69. package/dist/api/mcp/index.js.map +1 -0
  70. package/dist/api/middleware/auth.d.ts +65 -0
  71. package/dist/api/middleware/auth.d.ts.map +1 -0
  72. package/dist/api/middleware/auth.js +271 -0
  73. package/dist/api/middleware/auth.js.map +1 -0
  74. package/dist/api/middleware/cors.d.ts +62 -0
  75. package/dist/api/middleware/cors.d.ts.map +1 -0
  76. package/dist/api/middleware/cors.js +225 -0
  77. package/dist/api/middleware/cors.js.map +1 -0
  78. package/dist/api/middleware/index.d.ts +60 -0
  79. package/dist/api/middleware/index.d.ts.map +1 -0
  80. package/dist/api/middleware/index.js +175 -0
  81. package/dist/api/middleware/index.js.map +1 -0
  82. package/dist/api/middleware/rateLimit.d.ts +84 -0
  83. package/dist/api/middleware/rateLimit.d.ts.map +1 -0
  84. package/dist/api/middleware/rateLimit.js +321 -0
  85. package/dist/api/middleware/rateLimit.js.map +1 -0
  86. package/dist/api/routes/ai.d.ts +17 -0
  87. package/dist/api/routes/ai.d.ts.map +1 -0
  88. package/dist/api/routes/ai.js +430 -0
  89. package/dist/api/routes/ai.js.map +1 -0
  90. package/dist/api/routes/do.d.ts +17 -0
  91. package/dist/api/routes/do.d.ts.map +1 -0
  92. package/dist/api/routes/do.js +458 -0
  93. package/dist/api/routes/do.js.map +1 -0
  94. package/dist/api/routes/functions.d.ts +111 -0
  95. package/dist/api/routes/functions.d.ts.map +1 -0
  96. package/dist/api/routes/functions.js +548 -0
  97. package/dist/api/routes/functions.js.map +1 -0
  98. package/dist/api/routes/health.d.ts +16 -0
  99. package/dist/api/routes/health.d.ts.map +1 -0
  100. package/dist/api/routes/health.js +163 -0
  101. package/dist/api/routes/health.js.map +1 -0
  102. package/dist/api/routes/index.d.ts +41 -0
  103. package/dist/api/routes/index.d.ts.map +1 -0
  104. package/dist/api/routes/index.js +275 -0
  105. package/dist/api/routes/index.js.map +1 -0
  106. package/dist/api/routes/nouns.d.ts +26 -0
  107. package/dist/api/routes/nouns.d.ts.map +1 -0
  108. package/dist/api/routes/nouns.js +456 -0
  109. package/dist/api/routes/nouns.js.map +1 -0
  110. package/dist/api/routes/orgs.d.ts +17 -0
  111. package/dist/api/routes/orgs.d.ts.map +1 -0
  112. package/dist/api/routes/orgs.js +560 -0
  113. package/dist/api/routes/orgs.js.map +1 -0
  114. package/dist/api/routes/relationships.d.ts +30 -0
  115. package/dist/api/routes/relationships.d.ts.map +1 -0
  116. package/dist/api/routes/relationships.js +360 -0
  117. package/dist/api/routes/relationships.js.map +1 -0
  118. package/dist/api/routes/roles.d.ts +17 -0
  119. package/dist/api/routes/roles.d.ts.map +1 -0
  120. package/dist/api/routes/roles.js +721 -0
  121. package/dist/api/routes/roles.js.map +1 -0
  122. package/dist/api/routes/things.d.ts +27 -0
  123. package/dist/api/routes/things.d.ts.map +1 -0
  124. package/dist/api/routes/things.js +568 -0
  125. package/dist/api/routes/things.js.map +1 -0
  126. package/dist/api/routes/users.d.ts +17 -0
  127. package/dist/api/routes/users.d.ts.map +1 -0
  128. package/dist/api/routes/users.js +401 -0
  129. package/dist/api/routes/users.js.map +1 -0
  130. package/dist/api/routes/verbs.d.ts +31 -0
  131. package/dist/api/routes/verbs.d.ts.map +1 -0
  132. package/dist/api/routes/verbs.js +505 -0
  133. package/dist/api/routes/verbs.js.map +1 -0
  134. package/dist/api/routes/workflows.d.ts +44 -0
  135. package/dist/api/routes/workflows.d.ts.map +1 -0
  136. package/dist/api/routes/workflows.js +521 -0
  137. package/dist/api/routes/workflows.js.map +1 -0
  138. package/dist/api/types.d.ts +370 -0
  139. package/dist/api/types.d.ts.map +1 -0
  140. package/dist/api/types.js +11 -0
  141. package/dist/api/types.js.map +1 -0
  142. package/dist/db/cdc/events.d.ts +201 -0
  143. package/dist/db/cdc/events.d.ts.map +1 -0
  144. package/dist/db/cdc/events.js +271 -0
  145. package/dist/db/cdc/events.js.map +1 -0
  146. package/dist/db/cdc/index.d.ts +13 -0
  147. package/dist/db/cdc/index.d.ts.map +1 -0
  148. package/dist/db/cdc/index.js +16 -0
  149. package/dist/db/cdc/index.js.map +1 -0
  150. package/dist/db/cdc/replay.d.ts +388 -0
  151. package/dist/db/cdc/replay.d.ts.map +1 -0
  152. package/dist/db/cdc/replay.js +469 -0
  153. package/dist/db/cdc/replay.js.map +1 -0
  154. package/dist/db/cdc/storage.d.ts +567 -0
  155. package/dist/db/cdc/storage.d.ts.map +1 -0
  156. package/dist/db/cdc/storage.js +856 -0
  157. package/dist/db/cdc/storage.js.map +1 -0
  158. package/dist/db/cdc/streaming.d.ts +459 -0
  159. package/dist/db/cdc/streaming.d.ts.map +1 -0
  160. package/dist/db/cdc/streaming.js +636 -0
  161. package/dist/db/cdc/streaming.js.map +1 -0
  162. package/dist/db/collections/actions.d.ts +440 -0
  163. package/dist/db/collections/actions.d.ts.map +1 -0
  164. package/dist/db/collections/actions.js +631 -0
  165. package/dist/db/collections/actions.js.map +1 -0
  166. package/dist/db/collections/base.d.ts +342 -0
  167. package/dist/db/collections/base.d.ts.map +1 -0
  168. package/dist/db/collections/base.js +510 -0
  169. package/dist/db/collections/base.js.map +1 -0
  170. package/dist/db/collections/index.d.ts +50 -0
  171. package/dist/db/collections/index.d.ts.map +1 -0
  172. package/dist/db/collections/index.js +48 -0
  173. package/dist/db/collections/index.js.map +1 -0
  174. package/dist/db/collections/nouns.d.ts +260 -0
  175. package/dist/db/collections/nouns.d.ts.map +1 -0
  176. package/dist/db/collections/nouns.js +273 -0
  177. package/dist/db/collections/nouns.js.map +1 -0
  178. package/dist/db/collections/relationships.d.ts +484 -0
  179. package/dist/db/collections/relationships.d.ts.map +1 -0
  180. package/dist/db/collections/relationships.js +815 -0
  181. package/dist/db/collections/relationships.js.map +1 -0
  182. package/dist/db/collections/things.d.ts +439 -0
  183. package/dist/db/collections/things.d.ts.map +1 -0
  184. package/dist/db/collections/things.js +603 -0
  185. package/dist/db/collections/things.js.map +1 -0
  186. package/dist/db/collections/verbs.d.ts +308 -0
  187. package/dist/db/collections/verbs.d.ts.map +1 -0
  188. package/dist/db/collections/verbs.js +480 -0
  189. package/dist/db/collections/verbs.js.map +1 -0
  190. package/dist/db/index.d.ts +14 -0
  191. package/dist/db/index.d.ts.map +1 -0
  192. package/dist/db/index.js +23 -0
  193. package/dist/db/index.js.map +1 -0
  194. package/dist/db/storage/cold.d.ts +313 -0
  195. package/dist/db/storage/cold.d.ts.map +1 -0
  196. package/dist/db/storage/cold.js +319 -0
  197. package/dist/db/storage/cold.js.map +1 -0
  198. package/dist/db/storage/hot.d.ts +340 -0
  199. package/dist/db/storage/hot.d.ts.map +1 -0
  200. package/dist/db/storage/hot.js +333 -0
  201. package/dist/db/storage/hot.js.map +1 -0
  202. package/dist/db/storage/index.d.ts +242 -0
  203. package/dist/db/storage/index.d.ts.map +1 -0
  204. package/dist/db/storage/index.js +109 -0
  205. package/dist/db/storage/index.js.map +1 -0
  206. package/dist/db/storage/snapshots.d.ts +342 -0
  207. package/dist/db/storage/snapshots.d.ts.map +1 -0
  208. package/dist/db/storage/snapshots.js +298 -0
  209. package/dist/db/storage/snapshots.js.map +1 -0
  210. package/dist/db/storage/vortex.d.ts +324 -0
  211. package/dist/db/storage/vortex.d.ts.map +1 -0
  212. package/dist/db/storage/vortex.js +365 -0
  213. package/dist/db/storage/vortex.js.map +1 -0
  214. package/dist/db/storage/warm.d.ts +306 -0
  215. package/dist/db/storage/warm.d.ts.map +1 -0
  216. package/dist/db/storage/warm.js +339 -0
  217. package/dist/db/storage/warm.js.map +1 -0
  218. package/dist/do/DigitalObject.d.ts +595 -0
  219. package/dist/do/DigitalObject.d.ts.map +1 -0
  220. package/dist/do/DigitalObject.js +971 -0
  221. package/dist/do/DigitalObject.js.map +1 -0
  222. package/dist/do/business/financial/accounting.d.ts +436 -0
  223. package/dist/do/business/financial/accounting.d.ts.map +1 -0
  224. package/dist/do/business/financial/accounting.js +476 -0
  225. package/dist/do/business/financial/accounting.js.map +1 -0
  226. package/dist/do/business/financial/index.d.ts +15 -0
  227. package/dist/do/business/financial/index.d.ts.map +1 -0
  228. package/dist/do/business/financial/index.js +20 -0
  229. package/dist/do/business/financial/index.js.map +1 -0
  230. package/dist/do/business/financial/metrics.d.ts +370 -0
  231. package/dist/do/business/financial/metrics.d.ts.map +1 -0
  232. package/dist/do/business/financial/metrics.js +376 -0
  233. package/dist/do/business/financial/metrics.js.map +1 -0
  234. package/dist/do/business/financial/payments.d.ts +397 -0
  235. package/dist/do/business/financial/payments.d.ts.map +1 -0
  236. package/dist/do/business/financial/payments.js +395 -0
  237. package/dist/do/business/financial/payments.js.map +1 -0
  238. package/dist/do/business/financial/reports.d.ts +284 -0
  239. package/dist/do/business/financial/reports.d.ts.map +1 -0
  240. package/dist/do/business/financial/reports.js +347 -0
  241. package/dist/do/business/financial/reports.js.map +1 -0
  242. package/dist/do/business/financial/stripe.d.ts +254 -0
  243. package/dist/do/business/financial/stripe.d.ts.map +1 -0
  244. package/dist/do/business/financial/stripe.js +261 -0
  245. package/dist/do/business/financial/stripe.js.map +1 -0
  246. package/dist/do/business/financial/subscriptions.d.ts +402 -0
  247. package/dist/do/business/financial/subscriptions.d.ts.map +1 -0
  248. package/dist/do/business/financial/subscriptions.js +349 -0
  249. package/dist/do/business/financial/subscriptions.js.map +1 -0
  250. package/dist/do/business/index.d.ts +9 -0
  251. package/dist/do/business/index.d.ts.map +1 -0
  252. package/dist/do/business/index.js +10 -0
  253. package/dist/do/business/index.js.map +1 -0
  254. package/dist/do/colo/followers.d.ts +194 -0
  255. package/dist/do/colo/followers.d.ts.map +1 -0
  256. package/dist/do/colo/followers.js +224 -0
  257. package/dist/do/colo/followers.js.map +1 -0
  258. package/dist/do/colo/fork.d.ts +103 -0
  259. package/dist/do/colo/fork.d.ts.map +1 -0
  260. package/dist/do/colo/fork.js +143 -0
  261. package/dist/do/colo/fork.js.map +1 -0
  262. package/dist/do/colo/index.d.ts +181 -0
  263. package/dist/do/colo/index.d.ts.map +1 -0
  264. package/dist/do/colo/index.js +145 -0
  265. package/dist/do/colo/index.js.map +1 -0
  266. package/dist/do/colo/info.d.ts +106 -0
  267. package/dist/do/colo/info.d.ts.map +1 -0
  268. package/dist/do/colo/info.js +196 -0
  269. package/dist/do/colo/info.js.map +1 -0
  270. package/dist/do/colo/migrate.d.ts +161 -0
  271. package/dist/do/colo/migrate.d.ts.map +1 -0
  272. package/dist/do/colo/migrate.js +190 -0
  273. package/dist/do/colo/migrate.js.map +1 -0
  274. package/dist/do/colo/routing.d.ts +182 -0
  275. package/dist/do/colo/routing.d.ts.map +1 -0
  276. package/dist/do/colo/routing.js +254 -0
  277. package/dist/do/colo/routing.js.map +1 -0
  278. package/dist/do/domains/dns.d.ts +269 -0
  279. package/dist/do/domains/dns.d.ts.map +1 -0
  280. package/dist/do/domains/dns.js +215 -0
  281. package/dist/do/domains/dns.js.map +1 -0
  282. package/dist/do/domains/index.d.ts +40 -0
  283. package/dist/do/domains/index.d.ts.map +1 -0
  284. package/dist/do/domains/index.js +61 -0
  285. package/dist/do/domains/index.js.map +1 -0
  286. package/dist/do/domains/routing.d.ts +263 -0
  287. package/dist/do/domains/routing.d.ts.map +1 -0
  288. package/dist/do/domains/routing.js +362 -0
  289. package/dist/do/domains/routing.js.map +1 -0
  290. package/dist/do/domains/ssl.d.ts +217 -0
  291. package/dist/do/domains/ssl.d.ts.map +1 -0
  292. package/dist/do/domains/ssl.js +231 -0
  293. package/dist/do/domains/ssl.js.map +1 -0
  294. package/dist/do/domains/subdomains.d.ts +207 -0
  295. package/dist/do/domains/subdomains.d.ts.map +1 -0
  296. package/dist/do/domains/subdomains.js +223 -0
  297. package/dist/do/domains/subdomains.js.map +1 -0
  298. package/dist/do/domains/tlds.d.ts +175 -0
  299. package/dist/do/domains/tlds.d.ts.map +1 -0
  300. package/dist/do/domains/tlds.js +188 -0
  301. package/dist/do/domains/tlds.js.map +1 -0
  302. package/dist/do/domains/validation.d.ts +164 -0
  303. package/dist/do/domains/validation.d.ts.map +1 -0
  304. package/dist/do/domains/validation.js +290 -0
  305. package/dist/do/domains/validation.js.map +1 -0
  306. package/dist/do/hibernation.d.ts +385 -0
  307. package/dist/do/hibernation.d.ts.map +1 -0
  308. package/dist/do/hibernation.js +518 -0
  309. package/dist/do/hibernation.js.map +1 -0
  310. package/dist/do/index.d.ts +19 -0
  311. package/dist/do/index.d.ts.map +1 -0
  312. package/dist/do/index.js +23 -0
  313. package/dist/do/index.js.map +1 -0
  314. package/dist/do/state.d.ts +336 -0
  315. package/dist/do/state.d.ts.map +1 -0
  316. package/dist/do/state.js +290 -0
  317. package/dist/do/state.js.map +1 -0
  318. package/dist/index.d.ts +44 -0
  319. package/dist/index.d.ts.map +1 -0
  320. package/dist/index.js +89 -0
  321. package/dist/index.js.map +1 -0
  322. package/dist/rpc/client.d.ts +426 -0
  323. package/dist/rpc/client.d.ts.map +1 -0
  324. package/dist/rpc/client.js +826 -0
  325. package/dist/rpc/client.js.map +1 -0
  326. package/dist/rpc/index.d.ts +19 -0
  327. package/dist/rpc/index.d.ts.map +1 -0
  328. package/dist/rpc/index.js +23 -0
  329. package/dist/rpc/index.js.map +1 -0
  330. package/dist/rpc/methods.d.ts +364 -0
  331. package/dist/rpc/methods.d.ts.map +1 -0
  332. package/dist/rpc/methods.js +557 -0
  333. package/dist/rpc/methods.js.map +1 -0
  334. package/dist/rpc/protocol.d.ts +310 -0
  335. package/dist/rpc/protocol.d.ts.map +1 -0
  336. package/dist/rpc/protocol.js +672 -0
  337. package/dist/rpc/protocol.js.map +1 -0
  338. package/dist/rpc/routes.d.ts +332 -0
  339. package/dist/rpc/routes.d.ts.map +1 -0
  340. package/dist/rpc/routes.js +633 -0
  341. package/dist/rpc/routes.js.map +1 -0
  342. package/dist/rpc/server.d.ts +380 -0
  343. package/dist/rpc/server.d.ts.map +1 -0
  344. package/dist/rpc/server.js +850 -0
  345. package/dist/rpc/server.js.map +1 -0
  346. package/dist/sdk/auth.d.ts +201 -0
  347. package/dist/sdk/auth.d.ts.map +1 -0
  348. package/dist/sdk/auth.js +343 -0
  349. package/dist/sdk/auth.js.map +1 -0
  350. package/dist/sdk/client.d.ts +123 -0
  351. package/dist/sdk/client.d.ts.map +1 -0
  352. package/dist/sdk/client.js +403 -0
  353. package/dist/sdk/client.js.map +1 -0
  354. package/dist/sdk/index.d.ts +123 -0
  355. package/dist/sdk/index.d.ts.map +1 -0
  356. package/dist/sdk/index.js +230 -0
  357. package/dist/sdk/index.js.map +1 -0
  358. package/dist/sdk/rpc.d.ts +275 -0
  359. package/dist/sdk/rpc.d.ts.map +1 -0
  360. package/dist/sdk/rpc.js +249 -0
  361. package/dist/sdk/rpc.js.map +1 -0
  362. package/dist/sdk/transport.d.ts +283 -0
  363. package/dist/sdk/transport.d.ts.map +1 -0
  364. package/dist/sdk/transport.js +661 -0
  365. package/dist/sdk/transport.js.map +1 -0
  366. package/dist/sdk/types.d.ts +265 -0
  367. package/dist/sdk/types.d.ts.map +1 -0
  368. package/dist/sdk/types.js +27 -0
  369. package/dist/sdk/types.js.map +1 -0
  370. package/dist/types/ai.d.ts +533 -0
  371. package/dist/types/ai.d.ts.map +1 -0
  372. package/dist/types/ai.js +18 -0
  373. package/dist/types/ai.js.map +1 -0
  374. package/dist/types/app.d.ts +371 -0
  375. package/dist/types/app.d.ts.map +1 -0
  376. package/dist/types/app.js +151 -0
  377. package/dist/types/app.js.map +1 -0
  378. package/dist/types/business.d.ts +482 -0
  379. package/dist/types/business.d.ts.map +1 -0
  380. package/dist/types/business.js +60 -0
  381. package/dist/types/business.js.map +1 -0
  382. package/dist/types/cascade.d.ts +323 -0
  383. package/dist/types/cascade.d.ts.map +1 -0
  384. package/dist/types/cascade.js +82 -0
  385. package/dist/types/cascade.js.map +1 -0
  386. package/dist/types/collections.d.ts +704 -0
  387. package/dist/types/collections.d.ts.map +1 -0
  388. package/dist/types/collections.js +23 -0
  389. package/dist/types/collections.js.map +1 -0
  390. package/dist/types/colo.d.ts +171 -0
  391. package/dist/types/colo.d.ts.map +1 -0
  392. package/dist/types/colo.js +63 -0
  393. package/dist/types/colo.js.map +1 -0
  394. package/dist/types/communication.d.ts +595 -0
  395. package/dist/types/communication.d.ts.map +1 -0
  396. package/dist/types/communication.js +16 -0
  397. package/dist/types/communication.js.map +1 -0
  398. package/dist/types/content.d.ts +286 -0
  399. package/dist/types/content.d.ts.map +1 -0
  400. package/dist/types/content.js +8 -0
  401. package/dist/types/content.js.map +1 -0
  402. package/dist/types/context.d.ts +407 -0
  403. package/dist/types/context.d.ts.map +1 -0
  404. package/dist/types/context.js +36 -0
  405. package/dist/types/context.js.map +1 -0
  406. package/dist/types/databases.d.ts +377 -0
  407. package/dist/types/databases.d.ts.map +1 -0
  408. package/dist/types/databases.js +14 -0
  409. package/dist/types/databases.js.map +1 -0
  410. package/dist/types/domains.d.ts +132 -0
  411. package/dist/types/domains.d.ts.map +1 -0
  412. package/dist/types/domains.js +107 -0
  413. package/dist/types/domains.js.map +1 -0
  414. package/dist/types/execution.d.ts +381 -0
  415. package/dist/types/execution.d.ts.map +1 -0
  416. package/dist/types/execution.js +40 -0
  417. package/dist/types/execution.js.map +1 -0
  418. package/dist/types/financial.d.ts +608 -0
  419. package/dist/types/financial.d.ts.map +1 -0
  420. package/dist/types/financial.js +12 -0
  421. package/dist/types/financial.js.map +1 -0
  422. package/dist/types/functions.d.ts +215 -0
  423. package/dist/types/functions.d.ts.map +1 -0
  424. package/dist/types/functions.js +15 -0
  425. package/dist/types/functions.js.map +1 -0
  426. package/dist/types/git.d.ts +299 -0
  427. package/dist/types/git.d.ts.map +1 -0
  428. package/dist/types/git.js +17 -0
  429. package/dist/types/git.js.map +1 -0
  430. package/dist/types/identity.d.ts +141 -0
  431. package/dist/types/identity.d.ts.map +1 -0
  432. package/dist/types/identity.js +54 -0
  433. package/dist/types/identity.js.map +1 -0
  434. package/dist/types/index.d.ts +40 -0
  435. package/dist/types/index.d.ts.map +1 -0
  436. package/dist/types/index.js +65 -0
  437. package/dist/types/index.js.map +1 -0
  438. package/dist/types/integrations.d.ts +356 -0
  439. package/dist/types/integrations.d.ts.map +1 -0
  440. package/dist/types/integrations.js +19 -0
  441. package/dist/types/integrations.js.map +1 -0
  442. package/dist/types/mdxui.d.ts +1955 -0
  443. package/dist/types/mdxui.d.ts.map +1 -0
  444. package/dist/types/mdxui.js +751 -0
  445. package/dist/types/mdxui.js.map +1 -0
  446. package/dist/types/observability.d.ts +315 -0
  447. package/dist/types/observability.d.ts.map +1 -0
  448. package/dist/types/observability.js +13 -0
  449. package/dist/types/observability.js.map +1 -0
  450. package/dist/types/rpc.d.ts +339 -0
  451. package/dist/types/rpc.d.ts.map +1 -0
  452. package/dist/types/rpc.js +24 -0
  453. package/dist/types/rpc.js.map +1 -0
  454. package/dist/types/saas.d.ts +678 -0
  455. package/dist/types/saas.d.ts.map +1 -0
  456. package/dist/types/saas.js +59 -0
  457. package/dist/types/saas.js.map +1 -0
  458. package/dist/types/service.d.ts +676 -0
  459. package/dist/types/service.d.ts.map +1 -0
  460. package/dist/types/service.js +69 -0
  461. package/dist/types/service.js.map +1 -0
  462. package/dist/types/site.d.ts +317 -0
  463. package/dist/types/site.d.ts.map +1 -0
  464. package/dist/types/site.js +203 -0
  465. package/dist/types/site.js.map +1 -0
  466. package/dist/types/startup.d.ts +576 -0
  467. package/dist/types/startup.d.ts.map +1 -0
  468. package/dist/types/startup.js +59 -0
  469. package/dist/types/startup.js.map +1 -0
  470. package/dist/types/storage.d.ts +276 -0
  471. package/dist/types/storage.d.ts.map +1 -0
  472. package/dist/types/storage.js +35 -0
  473. package/dist/types/storage.js.map +1 -0
  474. package/dist/types/telephony.d.ts +458 -0
  475. package/dist/types/telephony.d.ts.map +1 -0
  476. package/dist/types/telephony.js +19 -0
  477. package/dist/types/telephony.js.map +1 -0
  478. package/dist/types/tenant.d.ts +708 -0
  479. package/dist/types/tenant.d.ts.map +1 -0
  480. package/dist/types/tenant.js +103 -0
  481. package/dist/types/tenant.js.map +1 -0
  482. package/dist/types/voice-ai.d.ts +459 -0
  483. package/dist/types/voice-ai.d.ts.map +1 -0
  484. package/dist/types/voice-ai.js +32 -0
  485. package/dist/types/voice-ai.js.map +1 -0
  486. package/package.json +143 -0
@@ -0,0 +1,826 @@
1
+ /**
2
+ * CapnWeb RPC Client SDK
3
+ *
4
+ * TypeScript client for connecting to Digital Objects via WebSocket or HTTP.
5
+ * Provides type inference for all RPC methods, auto-reconnection, and
6
+ * subscription support.
7
+ *
8
+ * @module rpc/client
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { createRPCClient } from 'do/rpc/client'
13
+ *
14
+ * // Connect to a Digital Object
15
+ * const client = await createRPCClient('wss://my-do.example.com/rpc')
16
+ *
17
+ * // Call methods with full type inference
18
+ * const identity = await client.call('do.identity.get')
19
+ * const things = await client.call('do.things.list', { limit: 10 })
20
+ *
21
+ * // Subscribe to events
22
+ * const unsubscribe = client.subscribe('cdc', (event) => {
23
+ * console.log('Change:', event)
24
+ * })
25
+ *
26
+ * // Batch operations
27
+ * const batch = await client.batch([
28
+ * { id: '1', method: 'do.nouns.list' },
29
+ * { id: '2', method: 'do.verbs.list' },
30
+ * ])
31
+ *
32
+ * // Clean up
33
+ * await client.close()
34
+ * ```
35
+ */
36
+ /**
37
+ * RPC Error class for rejected calls
38
+ */
39
+ class RPCCallError extends Error {
40
+ code;
41
+ data;
42
+ constructor(error) {
43
+ super(error.message);
44
+ this.name = 'RPCCallError';
45
+ this.code = error.code;
46
+ this.data = error.data;
47
+ }
48
+ }
49
+ /**
50
+ * RPC Client for Digital Objects
51
+ *
52
+ * Connects to a Digital Object and provides type-safe method calling.
53
+ * Supports both WebSocket (preferred) and HTTP transports.
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * const client = new DOClient('wss://example.com/rpc', {
58
+ * auth: 'Bearer token',
59
+ * autoReconnect: true,
60
+ * onConnectionChange: (state) => console.log('Connection:', state),
61
+ * })
62
+ *
63
+ * await client.connect()
64
+ * const result = await client.call('do.things.list')
65
+ * ```
66
+ */
67
+ export class DOClient {
68
+ url;
69
+ options;
70
+ state = 'disconnected';
71
+ transport = 'websocket';
72
+ ws = null;
73
+ pendingRequests = new Map();
74
+ subscriptions = new Map();
75
+ stateChangeCallbacks = [];
76
+ eventListeners = new Map();
77
+ requestIdCounter = 0;
78
+ reconnectAttempts = 0;
79
+ reconnectTimer = null;
80
+ intentionalClose = false;
81
+ messageQueue = [];
82
+ /**
83
+ * Create a new RPC client
84
+ *
85
+ * Does not connect automatically - call connect() to establish connection.
86
+ *
87
+ * @param url - WebSocket URL (wss://) or HTTP URL (https://)
88
+ * @param options - Client configuration
89
+ */
90
+ constructor(url, options) {
91
+ this.url = url;
92
+ this.options = options || {};
93
+ // Set default transport based on options
94
+ if (this.options.transport === 'http') {
95
+ this.transport = 'http';
96
+ }
97
+ else if (this.options.transport === 'websocket') {
98
+ this.transport = 'websocket';
99
+ }
100
+ else {
101
+ // auto or undefined - default to websocket
102
+ this.transport = 'websocket';
103
+ }
104
+ }
105
+ // ===========================================================================
106
+ // Connection Management
107
+ // ===========================================================================
108
+ /**
109
+ * Connect to the Digital Object
110
+ *
111
+ * Establishes WebSocket connection or validates HTTP endpoint.
112
+ *
113
+ * @returns Promise that resolves when connected
114
+ * @throws Error if connection fails
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * const client = new DOClient('wss://example.com/rpc')
119
+ * await client.connect()
120
+ * ```
121
+ */
122
+ async connect() {
123
+ if (this.state === 'connected') {
124
+ throw new Error('Already connected');
125
+ }
126
+ if (this.transport === 'http') {
127
+ this.setState('connected');
128
+ return;
129
+ }
130
+ // WebSocket connection
131
+ this.setState('connecting');
132
+ this.intentionalClose = false;
133
+ const wsUrl = this.buildWebSocketUrl();
134
+ const connectionTimeout = this.options.connectionTimeout || 30000;
135
+ let timeoutId;
136
+ let ws;
137
+ const timeoutPromise = new Promise((_, reject) => {
138
+ timeoutId = setTimeout(() => {
139
+ if (ws) {
140
+ ws.close();
141
+ }
142
+ reject(new Error('Connection timeout'));
143
+ }, connectionTimeout);
144
+ });
145
+ const connectionPromise = new Promise((resolve, reject) => {
146
+ ws = new WebSocket(wsUrl);
147
+ this.ws = ws;
148
+ ws.addEventListener('error', (event) => {
149
+ if (this.state === 'connecting' && this.options.fallbackToHttp) {
150
+ // Fallback to HTTP
151
+ this.transport = 'http';
152
+ this.ws = null;
153
+ this.setState('connected');
154
+ resolve();
155
+ }
156
+ else {
157
+ const err = new Error('Connection refused');
158
+ reject(err);
159
+ }
160
+ });
161
+ ws.addEventListener('open', () => {
162
+ this.reconnectAttempts = 0;
163
+ this.setState('connected');
164
+ this.flushMessageQueue();
165
+ resolve();
166
+ });
167
+ ws.addEventListener('close', (event) => {
168
+ if (this.state === 'connecting' && !this.intentionalClose) {
169
+ reject(new Error('Connection closed'));
170
+ }
171
+ this.handleClose(event);
172
+ });
173
+ ws.addEventListener('message', (event) => {
174
+ this.handleMessage(event.data);
175
+ });
176
+ });
177
+ try {
178
+ await Promise.race([connectionPromise, timeoutPromise]);
179
+ }
180
+ finally {
181
+ if (timeoutId) {
182
+ clearTimeout(timeoutId);
183
+ }
184
+ }
185
+ }
186
+ /**
187
+ * Close the connection
188
+ *
189
+ * Cleans up resources and cancels pending requests.
190
+ *
191
+ * @example
192
+ * ```typescript
193
+ * await client.close()
194
+ * ```
195
+ */
196
+ async close() {
197
+ this.intentionalClose = true;
198
+ if (this.reconnectTimer) {
199
+ clearTimeout(this.reconnectTimer);
200
+ this.reconnectTimer = null;
201
+ }
202
+ // Reject all pending requests
203
+ for (const [, pending] of this.pendingRequests) {
204
+ clearTimeout(pending.timeout);
205
+ pending.reject(new Error('Connection closed'));
206
+ }
207
+ this.pendingRequests.clear();
208
+ if (this.ws) {
209
+ this.ws.close();
210
+ this.ws = null;
211
+ }
212
+ this.setState('disconnected');
213
+ }
214
+ /**
215
+ * Get current connection state
216
+ *
217
+ * @returns Current connection state
218
+ */
219
+ getState() {
220
+ return this.state;
221
+ }
222
+ /**
223
+ * Get current connection state (alias for getState)
224
+ *
225
+ * @returns Current connection state
226
+ */
227
+ getConnectionState() {
228
+ return this.state;
229
+ }
230
+ /**
231
+ * Get the current transport type
232
+ *
233
+ * @returns Current transport ('websocket' or 'http')
234
+ */
235
+ getTransport() {
236
+ return this.transport;
237
+ }
238
+ /**
239
+ * Check if client is connected
240
+ *
241
+ * @returns Whether the client is connected
242
+ */
243
+ isConnected() {
244
+ return this.state === 'connected';
245
+ }
246
+ /**
247
+ * Register a callback for connection state changes
248
+ *
249
+ * @param callback - Callback function
250
+ */
251
+ onStateChange(callback) {
252
+ this.stateChangeCallbacks.push(callback);
253
+ }
254
+ /**
255
+ * Register an event listener
256
+ *
257
+ * @param event - Event name
258
+ * @param callback - Callback function
259
+ */
260
+ on(event, callback) {
261
+ if (!this.eventListeners.has(event)) {
262
+ this.eventListeners.set(event, new Set());
263
+ }
264
+ this.eventListeners.get(event).add(callback);
265
+ }
266
+ // ===========================================================================
267
+ // RPC Methods
268
+ // ===========================================================================
269
+ /**
270
+ * Call an RPC method
271
+ *
272
+ * Sends a request and waits for the response.
273
+ * Type inference provides autocomplete and type checking.
274
+ *
275
+ * @typeParam M - Method name from DORPCMethods
276
+ * @param method - Method name (e.g., 'do.things.list')
277
+ * @param params - Method parameters
278
+ * @returns Method result
279
+ * @throws RPCError if the method returns an error
280
+ *
281
+ * @example
282
+ * ```typescript
283
+ * // Params and return types are inferred
284
+ * const things = await client.call('do.things.list', { limit: 10 })
285
+ * // ^? Thing[]
286
+ *
287
+ * const identity = await client.call('do.identity.get')
288
+ * // ^? DigitalObjectIdentity
289
+ * ```
290
+ */
291
+ call(method, ...params) {
292
+ const request = {
293
+ id: this.generateId(),
294
+ method: method,
295
+ params: params[0],
296
+ meta: {
297
+ timestamp: Date.now(),
298
+ auth: this.options.auth,
299
+ },
300
+ };
301
+ if (this.transport === 'http') {
302
+ return this.sendHttp(request);
303
+ }
304
+ return this.sendWebSocket(request);
305
+ }
306
+ /**
307
+ * Call multiple methods in a batch
308
+ *
309
+ * Reduces round-trips by sending multiple requests in one message.
310
+ * Responses are returned in the same order as requests.
311
+ *
312
+ * @param requests - Array of RPC requests
313
+ * @param options - Batch options
314
+ * @returns Batch response with all results
315
+ *
316
+ * @example
317
+ * ```typescript
318
+ * const batch = await client.batch([
319
+ * { id: '1', method: 'do.nouns.list' },
320
+ * { id: '2', method: 'do.verbs.list' },
321
+ * { id: '3', method: 'do.things.create', params: { name: 'Widget' } },
322
+ * ])
323
+ *
324
+ * console.log(batch.responses[0].result) // nouns
325
+ * console.log(batch.responses[1].result) // verbs
326
+ * console.log(batch.responses[2].result) // created thing
327
+ * ```
328
+ */
329
+ async batch(requests, options) {
330
+ const batchId = this.generateId();
331
+ const batchRequests = requests.map((req) => ({
332
+ id: this.generateId(),
333
+ method: req.method,
334
+ params: req.params,
335
+ }));
336
+ const batchRequest = {
337
+ id: batchId,
338
+ requests: batchRequests,
339
+ abortOnError: options?.abortOnError,
340
+ };
341
+ if (this.transport === 'http') {
342
+ return this.sendHttpBatch(batchRequest);
343
+ }
344
+ return this.sendWebSocketBatch(batchRequest);
345
+ }
346
+ /**
347
+ * Create a pipeline for chaining calls
348
+ *
349
+ * @returns Pipeline builder
350
+ *
351
+ * @example
352
+ * ```typescript
353
+ * const results = await client
354
+ * .pipeline()
355
+ * .call('do.nouns.create', { name: 'User' })
356
+ * .call('do.things.create', { $type: 'User' })
357
+ * .execute()
358
+ * ```
359
+ */
360
+ pipeline() {
361
+ const calls = [];
362
+ const builder = {
363
+ call: (method, ...params) => {
364
+ const param = params[0];
365
+ calls.push({ method, params: param });
366
+ return builder;
367
+ },
368
+ execute: async () => {
369
+ const batchId = this.generateId();
370
+ const batchRequests = calls.map((call, index) => {
371
+ const id = this.generateId();
372
+ // Check if params is a function (reference to previous result)
373
+ if (typeof call.params === 'function') {
374
+ return {
375
+ id,
376
+ method: call.method,
377
+ params: { $ref: index },
378
+ };
379
+ }
380
+ return {
381
+ id,
382
+ method: call.method,
383
+ params: call.params,
384
+ };
385
+ });
386
+ const batchRequest = {
387
+ id: batchId,
388
+ requests: batchRequests,
389
+ };
390
+ if (this.transport === 'http') {
391
+ const response = await this.sendHttpBatch(batchRequest);
392
+ return response.responses.map((r) => r.result);
393
+ }
394
+ const response = await this.sendWebSocketBatch(batchRequest);
395
+ return response.responses.map((r) => r.result);
396
+ },
397
+ };
398
+ return builder;
399
+ }
400
+ // ===========================================================================
401
+ // Subscriptions
402
+ // ===========================================================================
403
+ /**
404
+ * Subscribe to events on a channel
405
+ *
406
+ * Returns an unsubscribe function.
407
+ *
408
+ * @param channel - Channel name (e.g., 'cdc', 'events')
409
+ * @param handler - Handler function called for each event
410
+ * @returns Unsubscribe function
411
+ *
412
+ * @example
413
+ * ```typescript
414
+ * const unsubscribe = client.subscribe('cdc', (event) => {
415
+ * console.log('Change:', event)
416
+ * })
417
+ *
418
+ * // Later...
419
+ * unsubscribe()
420
+ * ```
421
+ */
422
+ subscribe(channel, handler) {
423
+ if (!this.subscriptions.has(channel)) {
424
+ this.subscriptions.set(channel, new Set());
425
+ }
426
+ this.subscriptions.get(channel).add(handler);
427
+ return () => {
428
+ const handlers = this.subscriptions.get(channel);
429
+ if (handlers) {
430
+ handlers.delete(handler);
431
+ if (handlers.size === 0) {
432
+ this.subscriptions.delete(channel);
433
+ }
434
+ }
435
+ };
436
+ }
437
+ /**
438
+ * Unsubscribe from a channel
439
+ *
440
+ * @param channel - Channel to unsubscribe from
441
+ */
442
+ unsubscribe(channel) {
443
+ this.subscriptions.delete(channel);
444
+ }
445
+ // ===========================================================================
446
+ // Internal Methods
447
+ // ===========================================================================
448
+ /**
449
+ * Send a request via WebSocket
450
+ *
451
+ * @param request - Request to send
452
+ * @returns Promise resolving to response
453
+ */
454
+ sendWebSocket(request) {
455
+ return new Promise((resolve, reject) => {
456
+ const timeout = this.options.timeout || 30000;
457
+ const timeoutId = setTimeout(() => {
458
+ this.pendingRequests.delete(request.id);
459
+ reject(new Error('Request timeout'));
460
+ }, timeout);
461
+ this.pendingRequests.set(request.id, {
462
+ resolve,
463
+ reject,
464
+ timeout: timeoutId,
465
+ });
466
+ if (this.state === 'reconnecting') {
467
+ // Queue the request
468
+ this.messageQueue.push(request);
469
+ }
470
+ else if (this.ws && this.ws.readyState === 1) {
471
+ this.ws.send(JSON.stringify(request));
472
+ }
473
+ else {
474
+ this.messageQueue.push(request);
475
+ }
476
+ });
477
+ }
478
+ /**
479
+ * Send a batch request via WebSocket
480
+ *
481
+ * @param batchRequest - Batch request to send
482
+ * @returns Promise resolving to batch response
483
+ */
484
+ sendWebSocketBatch(batchRequest) {
485
+ return new Promise((resolve, reject) => {
486
+ const timeout = this.options.timeout || 30000;
487
+ const timeoutId = setTimeout(() => {
488
+ this.pendingRequests.delete(batchRequest.id);
489
+ reject(new Error('Request timeout'));
490
+ }, timeout);
491
+ this.pendingRequests.set(batchRequest.id, {
492
+ resolve: resolve,
493
+ reject,
494
+ timeout: timeoutId,
495
+ });
496
+ if (this.ws && this.ws.readyState === 1) {
497
+ this.ws.send(JSON.stringify(batchRequest));
498
+ }
499
+ else {
500
+ this.messageQueue.push(batchRequest);
501
+ }
502
+ });
503
+ }
504
+ /**
505
+ * Send a request via HTTP
506
+ *
507
+ * @param request - Request to send
508
+ * @returns Promise resolving to response
509
+ */
510
+ async sendHttp(request) {
511
+ const httpUrl = this.buildHttpUrl();
512
+ const retries = this.options.retries || 0;
513
+ const timeout = this.options.timeout || 30000;
514
+ let lastError = null;
515
+ for (let attempt = 0; attempt <= retries; attempt++) {
516
+ try {
517
+ const controller = new AbortController();
518
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
519
+ const response = await fetch(httpUrl, {
520
+ method: 'POST',
521
+ headers: {
522
+ 'Content-Type': 'application/json',
523
+ ...(this.options.auth ? { Authorization: this.options.auth } : {}),
524
+ ...(this.options.headers || {}),
525
+ },
526
+ body: JSON.stringify(request),
527
+ signal: controller.signal,
528
+ });
529
+ clearTimeout(timeoutId);
530
+ const data = (await response.json());
531
+ if (data.error) {
532
+ throw new RPCCallError(data.error);
533
+ }
534
+ return data.result;
535
+ }
536
+ catch (error) {
537
+ if (error instanceof Error && error.name === 'AbortError') {
538
+ throw new Error('Request timeout');
539
+ }
540
+ lastError = error instanceof Error ? error : new Error(String(error));
541
+ if (attempt === retries) {
542
+ throw lastError;
543
+ }
544
+ // Continue to next retry
545
+ }
546
+ }
547
+ throw lastError || new Error('Request failed');
548
+ }
549
+ /**
550
+ * Send a batch request via HTTP
551
+ *
552
+ * @param batchRequest - Batch request to send
553
+ * @returns Promise resolving to batch response
554
+ */
555
+ async sendHttpBatch(batchRequest) {
556
+ const httpUrl = this.buildHttpUrl();
557
+ const response = await fetch(httpUrl, {
558
+ method: 'POST',
559
+ headers: {
560
+ 'Content-Type': 'application/json',
561
+ ...(this.options.auth ? { Authorization: this.options.auth } : {}),
562
+ ...(this.options.headers || {}),
563
+ },
564
+ body: JSON.stringify(batchRequest),
565
+ });
566
+ return (await response.json());
567
+ }
568
+ /**
569
+ * Handle incoming WebSocket message
570
+ *
571
+ * @param message - Raw message data
572
+ */
573
+ handleMessage(message) {
574
+ // Ignore binary messages
575
+ if (typeof message !== 'string') {
576
+ return;
577
+ }
578
+ let data;
579
+ try {
580
+ data = JSON.parse(message);
581
+ }
582
+ catch {
583
+ // Ignore malformed messages
584
+ return;
585
+ }
586
+ const pending = this.pendingRequests.get(data.id);
587
+ if (pending) {
588
+ clearTimeout(pending.timeout);
589
+ this.pendingRequests.delete(data.id);
590
+ // Check if this is a batch response
591
+ if ('responses' in data) {
592
+ pending.resolve(data);
593
+ }
594
+ else if (data.error) {
595
+ pending.reject(new RPCCallError(data.error));
596
+ }
597
+ else {
598
+ pending.resolve(data.result);
599
+ }
600
+ }
601
+ }
602
+ /**
603
+ * Handle WebSocket close event
604
+ *
605
+ * @param event - Close event
606
+ */
607
+ handleClose(event) {
608
+ // Reject all pending requests when connection closes unexpectedly
609
+ if (!this.intentionalClose && this.options.autoReconnect !== false) {
610
+ for (const [, pending] of this.pendingRequests) {
611
+ // Don't reject during reconnection - queue will be flushed
612
+ if (this.state === 'reconnecting') {
613
+ continue;
614
+ }
615
+ }
616
+ }
617
+ else {
618
+ // Connection closed intentionally or without auto-reconnect
619
+ for (const [id, pending] of this.pendingRequests) {
620
+ clearTimeout(pending.timeout);
621
+ pending.reject(new Error('Connection closed'));
622
+ this.pendingRequests.delete(id);
623
+ }
624
+ }
625
+ if (this.intentionalClose) {
626
+ this.setState('disconnected');
627
+ return;
628
+ }
629
+ // Auto-reconnect on unexpected close
630
+ if (this.options.autoReconnect !== false) {
631
+ this.reconnect();
632
+ }
633
+ else {
634
+ // Reject pending requests when not auto-reconnecting
635
+ for (const [id, pending] of this.pendingRequests) {
636
+ clearTimeout(pending.timeout);
637
+ pending.reject(new Error('Connection closed'));
638
+ this.pendingRequests.delete(id);
639
+ }
640
+ this.setState('disconnected');
641
+ }
642
+ }
643
+ /**
644
+ * Attempt to reconnect
645
+ */
646
+ async reconnect() {
647
+ const maxAttempts = this.options.maxReconnectAttempts || 5;
648
+ if (this.reconnectAttempts >= maxAttempts) {
649
+ // Max attempts reached - reject pending and give up
650
+ for (const [id, pending] of this.pendingRequests) {
651
+ clearTimeout(pending.timeout);
652
+ pending.reject(new Error('Connection closed'));
653
+ this.pendingRequests.delete(id);
654
+ }
655
+ this.setState('disconnected');
656
+ return;
657
+ }
658
+ this.setState('reconnecting');
659
+ this.emitEvent('reconnecting');
660
+ this.reconnectAttempts++;
661
+ const baseDelay = this.options.reconnectDelay || 1000;
662
+ const backoff = this.options.reconnectBackoff || 2;
663
+ const maxDelay = this.options.maxReconnectDelay || 30000;
664
+ const delay = Math.min(baseDelay * Math.pow(backoff, this.reconnectAttempts - 1), maxDelay);
665
+ this.reconnectTimer = setTimeout(async () => {
666
+ this.intentionalClose = false;
667
+ const wsUrl = this.buildWebSocketUrl();
668
+ const ws = new WebSocket(wsUrl);
669
+ this.ws = ws;
670
+ ws.addEventListener('open', () => {
671
+ this.reconnectAttempts = 0;
672
+ this.setState('connected');
673
+ this.emitEvent('reconnected');
674
+ this.flushMessageQueue();
675
+ });
676
+ ws.addEventListener('error', () => {
677
+ // Retry
678
+ this.reconnect();
679
+ });
680
+ ws.addEventListener('close', (event) => {
681
+ this.handleClose(event);
682
+ });
683
+ ws.addEventListener('message', (event) => {
684
+ this.handleMessage(event.data);
685
+ });
686
+ }, delay);
687
+ }
688
+ /**
689
+ * Set connection state and notify listeners
690
+ *
691
+ * @param state - New state
692
+ */
693
+ setState(state) {
694
+ this.state = state;
695
+ for (const callback of this.stateChangeCallbacks) {
696
+ callback(state);
697
+ }
698
+ this.options.onConnectionChange?.(state);
699
+ }
700
+ /**
701
+ * Emit an event to listeners
702
+ *
703
+ * @param event - Event name
704
+ */
705
+ emitEvent(event) {
706
+ const listeners = this.eventListeners.get(event);
707
+ if (listeners) {
708
+ for (const listener of listeners) {
709
+ listener();
710
+ }
711
+ }
712
+ }
713
+ /**
714
+ * Flush queued messages after reconnection
715
+ */
716
+ flushMessageQueue() {
717
+ if (!this.ws || this.ws.readyState !== 1)
718
+ return;
719
+ for (const message of this.messageQueue) {
720
+ this.ws.send(JSON.stringify(message));
721
+ }
722
+ this.messageQueue = [];
723
+ }
724
+ /**
725
+ * Build WebSocket URL from base URL
726
+ *
727
+ * @returns WebSocket URL
728
+ */
729
+ buildWebSocketUrl() {
730
+ let url = this.url;
731
+ // Convert http(s) to ws(s)
732
+ if (url.startsWith('https://')) {
733
+ url = 'wss://' + url.slice(8);
734
+ }
735
+ else if (url.startsWith('http://')) {
736
+ url = 'ws://' + url.slice(7);
737
+ }
738
+ // Append /rpc if not present
739
+ if (!url.endsWith('/rpc')) {
740
+ url += '/rpc';
741
+ }
742
+ return url;
743
+ }
744
+ /**
745
+ * Build HTTP URL from base URL
746
+ *
747
+ * @returns HTTP URL
748
+ */
749
+ buildHttpUrl() {
750
+ let url = this.url;
751
+ // Append /rpc if not present
752
+ if (!url.endsWith('/rpc')) {
753
+ url += '/rpc';
754
+ }
755
+ return url;
756
+ }
757
+ /**
758
+ * Generate a unique request ID
759
+ *
760
+ * @returns Unique ID string
761
+ */
762
+ generateId() {
763
+ return `${Date.now()}-${++this.requestIdCounter}`;
764
+ }
765
+ }
766
+ // =============================================================================
767
+ // Factory Functions
768
+ // =============================================================================
769
+ /**
770
+ * Create an RPC client (synchronous)
771
+ *
772
+ * Creates a client without connecting. Call connect() to establish connection.
773
+ *
774
+ * @param options - Client options including URL
775
+ * @returns Client instance
776
+ *
777
+ * @example
778
+ * ```typescript
779
+ * const client = createRPCClient({ url: 'https://my-do.example.com', transport: 'websocket' })
780
+ * await client.connect()
781
+ * const things = await client.call('do.things.list')
782
+ * ```
783
+ */
784
+ export function createRPCClient(options) {
785
+ return new DOClient(options.url, options);
786
+ }
787
+ /**
788
+ * Create an HTTP-only RPC client
789
+ *
790
+ * For environments where WebSocket is not available.
791
+ *
792
+ * @param url - HTTP URL
793
+ * @param options - Client options
794
+ * @returns Connected client (HTTP transport)
795
+ */
796
+ export async function createHttpClient(url, options) {
797
+ const client = new DOClient(url, { ...options, transport: 'http' });
798
+ await client.connect();
799
+ return client;
800
+ }
801
+ /**
802
+ * Type-safe request builder
803
+ *
804
+ * @example
805
+ * ```typescript
806
+ * const request = buildRequest('do.things.list', { limit: 10 })
807
+ * // ^? RPCRequest<{ limit: number }>
808
+ * ```
809
+ */
810
+ export function buildRequest(method, ...params) {
811
+ return {
812
+ id: `${Date.now()}-${Math.random().toString(36).slice(2)}`,
813
+ method: method,
814
+ params: params[0],
815
+ meta: {
816
+ timestamp: Date.now(),
817
+ },
818
+ };
819
+ }
820
+ /**
821
+ * RPCClientImpl class (alias for DOClient)
822
+ *
823
+ * Exported for compatibility with tests
824
+ */
825
+ export const RPCClientImpl = DOClient;
826
+ //# sourceMappingURL=client.js.map