dotdo 0.0.1 → 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 (667) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +446 -315
  3. package/cli/README.md +238 -0
  4. package/cli/agent.ts +72 -0
  5. package/cli/bin.js +44 -0
  6. package/cli/bin.ts +38 -0
  7. package/cli/build.ts +157 -0
  8. package/cli/commands/auth/login.ts +14 -0
  9. package/cli/commands/auth/logout.ts +6 -0
  10. package/cli/commands/auth/whoami.ts +16 -0
  11. package/cli/commands/deploy-multi.ts +245 -0
  12. package/cli/commands/dev/deploy.ts +100 -0
  13. package/cli/commands/dev/dev.ts +95 -0
  14. package/cli/commands/dev/logs.ts +91 -0
  15. package/cli/commands/dev-local.ts +88 -0
  16. package/cli/commands/do-ops.ts +314 -0
  17. package/cli/commands/index.ts +100 -0
  18. package/cli/commands/init.ts +247 -0
  19. package/cli/commands/introspect/emitter.ts +315 -0
  20. package/cli/commands/introspect/index.ts +193 -0
  21. package/cli/commands/link.ts +598 -0
  22. package/cli/commands/snippets.ts +415 -0
  23. package/cli/commands/tunnel.ts +239 -0
  24. package/cli/device-auth.ts +289 -0
  25. package/cli/fallback.ts +12 -0
  26. package/cli/index.ts +121 -0
  27. package/cli/main.ts +246 -0
  28. package/cli/mcp-stdio.ts +790 -0
  29. package/cli/package.json +62 -0
  30. package/cli/runtime/do-registry.ts +193 -0
  31. package/cli/runtime/embedded-db.ts +344 -0
  32. package/cli/runtime/index.ts +9 -0
  33. package/cli/runtime/miniflare-adapter.ts +162 -0
  34. package/cli/sandbox.ts +82 -0
  35. package/cli/src/args.ts +174 -0
  36. package/cli/src/auth.ts +55 -0
  37. package/cli/src/commands/call.ts +84 -0
  38. package/cli/src/commands/charge.ts +96 -0
  39. package/cli/src/commands/config.ts +115 -0
  40. package/cli/src/commands/email.ts +112 -0
  41. package/cli/src/commands/llm.ts +115 -0
  42. package/cli/src/commands/queue.ts +134 -0
  43. package/cli/src/commands/text.ts +86 -0
  44. package/cli/src/config.ts +185 -0
  45. package/cli/src/output.ts +246 -0
  46. package/cli/src/rpc.ts +192 -0
  47. package/cli/utils/config.ts +282 -0
  48. package/cli/utils/detect.ts +73 -0
  49. package/cli/utils/index.ts +15 -0
  50. package/cli/utils/logger.ts +232 -0
  51. package/dist/ai/index.js +19 -0
  52. package/dist/ai/index.js.map +1 -0
  53. package/dist/ai/template-literals.js +852 -0
  54. package/dist/ai/template-literals.js.map +1 -0
  55. package/dist/api/middleware/auth-federation.js +573 -0
  56. package/dist/api/middleware/auth-federation.js.map +1 -0
  57. package/dist/api/middleware/auth.js +545 -0
  58. package/dist/api/middleware/auth.js.map +1 -0
  59. package/dist/db/actions.js +212 -0
  60. package/dist/db/actions.js.map +1 -0
  61. package/dist/db/auth.js +506 -0
  62. package/dist/db/auth.js.map +1 -0
  63. package/dist/db/branches.js +65 -0
  64. package/dist/db/branches.js.map +1 -0
  65. package/dist/db/clickhouse.js +1074 -0
  66. package/dist/db/clickhouse.js.map +1 -0
  67. package/dist/db/dlq.js +39 -0
  68. package/dist/db/dlq.js.map +1 -0
  69. package/dist/db/events.js +28 -0
  70. package/dist/db/events.js.map +1 -0
  71. package/dist/db/exec.js +64 -0
  72. package/dist/db/exec.js.map +1 -0
  73. package/dist/db/files.js +85 -0
  74. package/dist/db/files.js.map +1 -0
  75. package/dist/db/flags.js +24 -0
  76. package/dist/db/flags.js.map +1 -0
  77. package/dist/db/git.js +116 -0
  78. package/dist/db/git.js.map +1 -0
  79. package/dist/db/iceberg/inverted-index.js +862 -0
  80. package/dist/db/iceberg/inverted-index.js.map +1 -0
  81. package/dist/db/iceberg/puffin.js +878 -0
  82. package/dist/db/iceberg/puffin.js.map +1 -0
  83. package/dist/db/iceberg/search-manifest.js +422 -0
  84. package/dist/db/iceberg/search-manifest.js.map +1 -0
  85. package/dist/db/iceberg/types.js +8 -0
  86. package/dist/db/iceberg/types.js.map +1 -0
  87. package/dist/db/index.js +121 -0
  88. package/dist/db/index.js.map +1 -0
  89. package/dist/db/integrations.js +368 -0
  90. package/dist/db/integrations.js.map +1 -0
  91. package/dist/db/json-indexes.js +332 -0
  92. package/dist/db/json-indexes.js.map +1 -0
  93. package/dist/db/linked-accounts.js +287 -0
  94. package/dist/db/linked-accounts.js.map +1 -0
  95. package/dist/db/nouns.js +183 -0
  96. package/dist/db/nouns.js.map +1 -0
  97. package/dist/db/objects.js +170 -0
  98. package/dist/db/objects.js.map +1 -0
  99. package/dist/db/primitives/dag-scheduler/index.js +869 -0
  100. package/dist/db/primitives/dag-scheduler/index.js.map +1 -0
  101. package/dist/db/primitives/exactly-once-context.js +237 -0
  102. package/dist/db/primitives/exactly-once-context.js.map +1 -0
  103. package/dist/db/primitives/index.js +62 -0
  104. package/dist/db/primitives/index.js.map +1 -0
  105. package/dist/db/primitives/keyed-router.js +145 -0
  106. package/dist/db/primitives/keyed-router.js.map +1 -0
  107. package/dist/db/primitives/observability.js +162 -0
  108. package/dist/db/primitives/observability.js.map +1 -0
  109. package/dist/db/primitives/schema-evolution.js +643 -0
  110. package/dist/db/primitives/schema-evolution.js.map +1 -0
  111. package/dist/db/primitives/stateful-operator/index.js +770 -0
  112. package/dist/db/primitives/stateful-operator/index.js.map +1 -0
  113. package/dist/db/primitives/temporal-store.js +306 -0
  114. package/dist/db/primitives/temporal-store.js.map +1 -0
  115. package/dist/db/primitives/typed-column-store.js +1229 -0
  116. package/dist/db/primitives/typed-column-store.js.map +1 -0
  117. package/dist/db/primitives/utils/duration.js +162 -0
  118. package/dist/db/primitives/utils/duration.js.map +1 -0
  119. package/dist/db/primitives/utils/murmur3.js +116 -0
  120. package/dist/db/primitives/utils/murmur3.js.map +1 -0
  121. package/dist/db/primitives/watermark-service.js +136 -0
  122. package/dist/db/primitives/watermark-service.js.map +1 -0
  123. package/dist/db/primitives/window-manager.js +764 -0
  124. package/dist/db/primitives/window-manager.js.map +1 -0
  125. package/dist/db/relationships.js +66 -0
  126. package/dist/db/relationships.js.map +1 -0
  127. package/dist/db/schema-minimal.js +61 -0
  128. package/dist/db/schema-minimal.js.map +1 -0
  129. package/dist/db/search.js +28 -0
  130. package/dist/db/search.js.map +1 -0
  131. package/dist/db/stores.js +1665 -0
  132. package/dist/db/stores.js.map +1 -0
  133. package/dist/db/things.js +297 -0
  134. package/dist/db/things.js.map +1 -0
  135. package/dist/db/vault.js +171 -0
  136. package/dist/db/vault.js.map +1 -0
  137. package/dist/db/verbs.js +102 -0
  138. package/dist/db/verbs.js.map +1 -0
  139. package/dist/do/base.js +48 -0
  140. package/dist/do/base.js.map +1 -0
  141. package/dist/do/tiny.js +31 -0
  142. package/dist/do/tiny.js.map +1 -0
  143. package/dist/lib/DOAuth.js +261 -0
  144. package/dist/lib/DOAuth.js.map +1 -0
  145. package/dist/lib/DODispatcher.js +72 -0
  146. package/dist/lib/DODispatcher.js.map +1 -0
  147. package/dist/lib/Modifier.js +189 -0
  148. package/dist/lib/Modifier.js.map +1 -0
  149. package/dist/lib/StateStorage.js +403 -0
  150. package/dist/lib/StateStorage.js.map +1 -0
  151. package/dist/lib/TypeRegistry.js +122 -0
  152. package/dist/lib/TypeRegistry.js.map +1 -0
  153. package/dist/lib/ai/gateway.js +247 -0
  154. package/dist/lib/ai/gateway.js.map +1 -0
  155. package/dist/lib/ai/tool-loop-agent.js +591 -0
  156. package/dist/lib/ai/tool-loop-agent.js.map +1 -0
  157. package/dist/lib/auto-wiring.js +439 -0
  158. package/dist/lib/auto-wiring.js.map +1 -0
  159. package/dist/lib/browse/browserbase.js +163 -0
  160. package/dist/lib/browse/browserbase.js.map +1 -0
  161. package/dist/lib/browse/cloudflare.js +144 -0
  162. package/dist/lib/browse/cloudflare.js.map +1 -0
  163. package/dist/lib/browse/index.js +62 -0
  164. package/dist/lib/browse/index.js.map +1 -0
  165. package/dist/lib/browse/types.js +13 -0
  166. package/dist/lib/browse/types.js.map +1 -0
  167. package/dist/lib/cache/index.js +37 -0
  168. package/dist/lib/cache/index.js.map +1 -0
  169. package/dist/lib/cache/visibility.js +638 -0
  170. package/dist/lib/cache/visibility.js.map +1 -0
  171. package/dist/lib/capabilities.js +268 -0
  172. package/dist/lib/capabilities.js.map +1 -0
  173. package/dist/lib/channels/base.js +106 -0
  174. package/dist/lib/channels/base.js.map +1 -0
  175. package/dist/lib/channels/discord.js +94 -0
  176. package/dist/lib/channels/discord.js.map +1 -0
  177. package/dist/lib/channels/email.js +204 -0
  178. package/dist/lib/channels/email.js.map +1 -0
  179. package/dist/lib/channels/index.js +90 -0
  180. package/dist/lib/channels/index.js.map +1 -0
  181. package/dist/lib/channels/mdxui-chat.js +95 -0
  182. package/dist/lib/channels/mdxui-chat.js.map +1 -0
  183. package/dist/lib/channels/slack-blockkit.js +121 -0
  184. package/dist/lib/channels/slack-blockkit.js.map +1 -0
  185. package/dist/lib/channels/types.js +7 -0
  186. package/dist/lib/channels/types.js.map +1 -0
  187. package/dist/lib/cloudflare/ai.js +654 -0
  188. package/dist/lib/cloudflare/ai.js.map +1 -0
  189. package/dist/lib/cloudflare/index.js +88 -0
  190. package/dist/lib/cloudflare/index.js.map +1 -0
  191. package/dist/lib/cloudflare/kv.js +342 -0
  192. package/dist/lib/cloudflare/kv.js.map +1 -0
  193. package/dist/lib/cloudflare/queues.js +434 -0
  194. package/dist/lib/cloudflare/queues.js.map +1 -0
  195. package/dist/lib/cloudflare/r2.js +604 -0
  196. package/dist/lib/cloudflare/r2.js.map +1 -0
  197. package/dist/lib/cloudflare/vectorize.js +494 -0
  198. package/dist/lib/cloudflare/vectorize.js.map +1 -0
  199. package/dist/lib/cloudflare/workflows.js +569 -0
  200. package/dist/lib/cloudflare/workflows.js.map +1 -0
  201. package/dist/lib/colo/caching.js +196 -0
  202. package/dist/lib/colo/caching.js.map +1 -0
  203. package/dist/lib/colo/detection.js +194 -0
  204. package/dist/lib/colo/detection.js.map +1 -0
  205. package/dist/lib/colo/external-data.js +219 -0
  206. package/dist/lib/colo/external-data.js.map +1 -0
  207. package/dist/lib/colo/globe-data.js +179 -0
  208. package/dist/lib/colo/globe-data.js.map +1 -0
  209. package/dist/lib/colo/index.js +16 -0
  210. package/dist/lib/colo/index.js.map +1 -0
  211. package/dist/lib/decorators.js +37 -0
  212. package/dist/lib/decorators.js.map +1 -0
  213. package/dist/lib/discovery.js +81 -0
  214. package/dist/lib/discovery.js.map +1 -0
  215. package/dist/lib/executors/AgenticFunctionExecutor.js +619 -0
  216. package/dist/lib/executors/AgenticFunctionExecutor.js.map +1 -0
  217. package/dist/lib/executors/BaseFunctionExecutor.js +328 -0
  218. package/dist/lib/executors/BaseFunctionExecutor.js.map +1 -0
  219. package/dist/lib/executors/CascadeExecutor.js +418 -0
  220. package/dist/lib/executors/CascadeExecutor.js.map +1 -0
  221. package/dist/lib/executors/CodeFunctionExecutor.js +904 -0
  222. package/dist/lib/executors/CodeFunctionExecutor.js.map +1 -0
  223. package/dist/lib/executors/GenerativeFunctionExecutor.js +904 -0
  224. package/dist/lib/executors/GenerativeFunctionExecutor.js.map +1 -0
  225. package/dist/lib/executors/HumanFunctionExecutor.js +884 -0
  226. package/dist/lib/executors/HumanFunctionExecutor.js.map +1 -0
  227. package/dist/lib/executors/ParallelStepExecutor.js +308 -0
  228. package/dist/lib/executors/ParallelStepExecutor.js.map +1 -0
  229. package/dist/lib/executors/types.js +12 -0
  230. package/dist/lib/executors/types.js.map +1 -0
  231. package/dist/lib/experiments.js +89 -0
  232. package/dist/lib/experiments.js.map +1 -0
  233. package/dist/lib/flags/store.js +262 -0
  234. package/dist/lib/flags/store.js.map +1 -0
  235. package/dist/lib/functions/FunctionComposition.js +467 -0
  236. package/dist/lib/functions/FunctionComposition.js.map +1 -0
  237. package/dist/lib/functions/FunctionMiddleware.js +457 -0
  238. package/dist/lib/functions/FunctionMiddleware.js.map +1 -0
  239. package/dist/lib/functions/FunctionRegistry.js +426 -0
  240. package/dist/lib/functions/FunctionRegistry.js.map +1 -0
  241. package/dist/lib/functions/createFunction.js +1048 -0
  242. package/dist/lib/functions/createFunction.js.map +1 -0
  243. package/dist/lib/humans/index.js +68 -0
  244. package/dist/lib/humans/index.js.map +1 -0
  245. package/dist/lib/humans/templates.js +117 -0
  246. package/dist/lib/humans/templates.js.map +1 -0
  247. package/dist/lib/identity.js +98 -0
  248. package/dist/lib/identity.js.map +1 -0
  249. package/dist/lib/index.js +9 -0
  250. package/dist/lib/index.js.map +1 -0
  251. package/dist/lib/logging/error-logger.js +163 -0
  252. package/dist/lib/logging/error-logger.js.map +1 -0
  253. package/dist/lib/logging/index.js +160 -0
  254. package/dist/lib/logging/index.js.map +1 -0
  255. package/dist/lib/mixins/bash.js +753 -0
  256. package/dist/lib/mixins/bash.js.map +1 -0
  257. package/dist/lib/mixins/fs.js +648 -0
  258. package/dist/lib/mixins/fs.js.map +1 -0
  259. package/dist/lib/mixins/git.js +1006 -0
  260. package/dist/lib/mixins/git.js.map +1 -0
  261. package/dist/lib/mixins/npm.js +662 -0
  262. package/dist/lib/mixins/npm.js.map +1 -0
  263. package/dist/lib/noun-id.js +278 -0
  264. package/dist/lib/noun-id.js.map +1 -0
  265. package/dist/lib/rate-limit/sliding-window.js +148 -0
  266. package/dist/lib/rate-limit/sliding-window.js.map +1 -0
  267. package/dist/lib/rate-limit.js +110 -0
  268. package/dist/lib/rate-limit.js.map +1 -0
  269. package/dist/lib/rpc/bindings.js +548 -0
  270. package/dist/lib/rpc/bindings.js.map +1 -0
  271. package/dist/lib/rpc/index.js +64 -0
  272. package/dist/lib/rpc/index.js.map +1 -0
  273. package/dist/lib/safe-stringify.js +223 -0
  274. package/dist/lib/safe-stringify.js.map +1 -0
  275. package/dist/lib/sandbox/miniflare-sandbox.js +1007 -0
  276. package/dist/lib/sandbox/miniflare-sandbox.js.map +1 -0
  277. package/dist/lib/sqids.js +110 -0
  278. package/dist/lib/sqids.js.map +1 -0
  279. package/dist/lib/sql/adapters/index.js +10 -0
  280. package/dist/lib/sql/adapters/index.js.map +1 -0
  281. package/dist/lib/sql/adapters/node-sql-parser.js +552 -0
  282. package/dist/lib/sql/adapters/node-sql-parser.js.map +1 -0
  283. package/dist/lib/sql/adapters/pgsql-parser.js +1190 -0
  284. package/dist/lib/sql/adapters/pgsql-parser.js.map +1 -0
  285. package/dist/lib/sql/index.js +277 -0
  286. package/dist/lib/sql/index.js.map +1 -0
  287. package/dist/lib/sql/types.js +56 -0
  288. package/dist/lib/sql/types.js.map +1 -0
  289. package/dist/lib/type-classifier.js +126 -0
  290. package/dist/lib/type-classifier.js.map +1 -0
  291. package/dist/lib/utils/html.js +47 -0
  292. package/dist/lib/utils/html.js.map +1 -0
  293. package/dist/lib/validation.js +48 -0
  294. package/dist/lib/validation.js.map +1 -0
  295. package/dist/lib/vault/store.js +411 -0
  296. package/dist/lib/vault/store.js.map +1 -0
  297. package/dist/metrics/hunch.js +739 -0
  298. package/dist/metrics/hunch.js.map +1 -0
  299. package/dist/objects/API.js +302 -0
  300. package/dist/objects/API.js.map +1 -0
  301. package/dist/objects/Agent.js +179 -0
  302. package/dist/objects/Agent.js.map +1 -0
  303. package/dist/objects/AgenticFunctionExecutor.js +8 -0
  304. package/dist/objects/AgenticFunctionExecutor.js.map +1 -0
  305. package/dist/objects/App.js +83 -0
  306. package/dist/objects/App.js.map +1 -0
  307. package/dist/objects/Browser.js +884 -0
  308. package/dist/objects/Browser.js.map +1 -0
  309. package/dist/objects/Business.js +107 -0
  310. package/dist/objects/Business.js.map +1 -0
  311. package/dist/objects/CLI.js +221 -0
  312. package/dist/objects/CLI.js.map +1 -0
  313. package/dist/objects/CodeFunctionExecutor.js +8 -0
  314. package/dist/objects/CodeFunctionExecutor.js.map +1 -0
  315. package/dist/objects/Collection.js +161 -0
  316. package/dist/objects/Collection.js.map +1 -0
  317. package/dist/objects/DO.js +41 -0
  318. package/dist/objects/DO.js.map +1 -0
  319. package/dist/objects/DOBase.js +2309 -0
  320. package/dist/objects/DOBase.js.map +1 -0
  321. package/dist/objects/DOCache.js +153 -0
  322. package/dist/objects/DOCache.js.map +1 -0
  323. package/dist/objects/DOFull.js +1676 -0
  324. package/dist/objects/DOFull.js.map +1 -0
  325. package/dist/objects/DOTiny.js +207 -0
  326. package/dist/objects/DOTiny.js.map +1 -0
  327. package/dist/objects/Directory.js +199 -0
  328. package/dist/objects/Directory.js.map +1 -0
  329. package/dist/objects/Entity.js +413 -0
  330. package/dist/objects/Entity.js.map +1 -0
  331. package/dist/objects/Function.js +116 -0
  332. package/dist/objects/Function.js.map +1 -0
  333. package/dist/objects/Human.js +231 -0
  334. package/dist/objects/Human.js.map +1 -0
  335. package/dist/objects/HumanFunctionExecutor.js +8 -0
  336. package/dist/objects/HumanFunctionExecutor.js.map +1 -0
  337. package/dist/objects/IcebergMetadataDO.js +938 -0
  338. package/dist/objects/IcebergMetadataDO.js.map +1 -0
  339. package/dist/objects/IntegrationsDO.js +1174 -0
  340. package/dist/objects/IntegrationsDO.js.map +1 -0
  341. package/dist/objects/ObservabilityBroadcaster.js +149 -0
  342. package/dist/objects/ObservabilityBroadcaster.js.map +1 -0
  343. package/dist/objects/Package.js +154 -0
  344. package/dist/objects/Package.js.map +1 -0
  345. package/dist/objects/Product.js +193 -0
  346. package/dist/objects/Product.js.map +1 -0
  347. package/dist/objects/SDK.js +152 -0
  348. package/dist/objects/SDK.js.map +1 -0
  349. package/dist/objects/SaaS.js +235 -0
  350. package/dist/objects/SaaS.js.map +1 -0
  351. package/dist/objects/SandboxDO.js +759 -0
  352. package/dist/objects/SandboxDO.js.map +1 -0
  353. package/dist/objects/Service.js +337 -0
  354. package/dist/objects/Service.js.map +1 -0
  355. package/dist/objects/Site.js +80 -0
  356. package/dist/objects/Site.js.map +1 -0
  357. package/dist/objects/Startup.js +479 -0
  358. package/dist/objects/Startup.js.map +1 -0
  359. package/dist/objects/ThingsDO.js +170 -0
  360. package/dist/objects/ThingsDO.js.map +1 -0
  361. package/dist/objects/VectorShardDO.js +650 -0
  362. package/dist/objects/VectorShardDO.js.map +1 -0
  363. package/dist/objects/Worker.js +144 -0
  364. package/dist/objects/Worker.js.map +1 -0
  365. package/dist/objects/Workflow.js +196 -0
  366. package/dist/objects/Workflow.js.map +1 -0
  367. package/dist/objects/WorkflowFactory.js +313 -0
  368. package/dist/objects/WorkflowFactory.js.map +1 -0
  369. package/dist/objects/WorkflowRuntime.js +863 -0
  370. package/dist/objects/WorkflowRuntime.js.map +1 -0
  371. package/dist/objects/circuit-breaker-bulkhead.js +178 -0
  372. package/dist/objects/circuit-breaker-bulkhead.js.map +1 -0
  373. package/dist/objects/createFunction.js +934 -0
  374. package/dist/objects/createFunction.js.map +1 -0
  375. package/dist/objects/index.js +80 -0
  376. package/dist/objects/index.js.map +1 -0
  377. package/dist/objects/lifecycle/Branch.js +275 -0
  378. package/dist/objects/lifecycle/Branch.js.map +1 -0
  379. package/dist/objects/lifecycle/Clone.js +1499 -0
  380. package/dist/objects/lifecycle/Clone.js.map +1 -0
  381. package/dist/objects/lifecycle/Compact.js +237 -0
  382. package/dist/objects/lifecycle/Compact.js.map +1 -0
  383. package/dist/objects/lifecycle/Promote.js +476 -0
  384. package/dist/objects/lifecycle/Promote.js.map +1 -0
  385. package/dist/objects/lifecycle/Shard.js +560 -0
  386. package/dist/objects/lifecycle/Shard.js.map +1 -0
  387. package/dist/objects/lifecycle/index.js +15 -0
  388. package/dist/objects/lifecycle/index.js.map +1 -0
  389. package/dist/objects/lifecycle/types.js +33 -0
  390. package/dist/objects/lifecycle/types.js.map +1 -0
  391. package/dist/objects/mixins/infrastructure.js +171 -0
  392. package/dist/objects/mixins/infrastructure.js.map +1 -0
  393. package/dist/objects/modules/StoresModule.js +153 -0
  394. package/dist/objects/modules/StoresModule.js.map +1 -0
  395. package/dist/objects/persistence/checkpoint-manager.js +606 -0
  396. package/dist/objects/persistence/checkpoint-manager.js.map +1 -0
  397. package/dist/objects/persistence/index.js +72 -0
  398. package/dist/objects/persistence/index.js.map +1 -0
  399. package/dist/objects/persistence/migration-runner.js +562 -0
  400. package/dist/objects/persistence/migration-runner.js.map +1 -0
  401. package/dist/objects/persistence/replication-manager.js +501 -0
  402. package/dist/objects/persistence/replication-manager.js.map +1 -0
  403. package/dist/objects/persistence/tiered-storage-manager.js +595 -0
  404. package/dist/objects/persistence/tiered-storage-manager.js.map +1 -0
  405. package/dist/objects/persistence/types.js +14 -0
  406. package/dist/objects/persistence/types.js.map +1 -0
  407. package/dist/objects/persistence/wal-manager.js +653 -0
  408. package/dist/objects/persistence/wal-manager.js.map +1 -0
  409. package/dist/objects/presets/index.js +20 -0
  410. package/dist/objects/presets/index.js.map +1 -0
  411. package/dist/objects/presets/primitives.js +188 -0
  412. package/dist/objects/presets/primitives.js.map +1 -0
  413. package/dist/objects/primitives/alarm-adapter.js +141 -0
  414. package/dist/objects/primitives/alarm-adapter.js.map +1 -0
  415. package/dist/objects/primitives/index.js +337 -0
  416. package/dist/objects/primitives/index.js.map +1 -0
  417. package/dist/objects/primitives/storage-adapter.js +182 -0
  418. package/dist/objects/primitives/storage-adapter.js.map +1 -0
  419. package/dist/objects/primitives/with-primitives.js +102 -0
  420. package/dist/objects/primitives/with-primitives.js.map +1 -0
  421. package/dist/objects/services/StoreManager.js +227 -0
  422. package/dist/objects/services/StoreManager.js.map +1 -0
  423. package/dist/objects/services/index.js +13 -0
  424. package/dist/objects/services/index.js.map +1 -0
  425. package/dist/objects/transport/auth-layer.js +1451 -0
  426. package/dist/objects/transport/auth-layer.js.map +1 -0
  427. package/dist/objects/transport/capnweb-target.js +355 -0
  428. package/dist/objects/transport/capnweb-target.js.map +1 -0
  429. package/dist/objects/transport/chain.js +441 -0
  430. package/dist/objects/transport/chain.js.map +1 -0
  431. package/dist/objects/transport/handler.js +58 -0
  432. package/dist/objects/transport/handler.js.map +1 -0
  433. package/dist/objects/transport/index.js +53 -0
  434. package/dist/objects/transport/index.js.map +1 -0
  435. package/dist/objects/transport/mcp-server.js +691 -0
  436. package/dist/objects/transport/mcp-server.js.map +1 -0
  437. package/dist/objects/transport/rest-autowire.js +1508 -0
  438. package/dist/objects/transport/rest-autowire.js.map +1 -0
  439. package/dist/objects/transport/rest-router.js +440 -0
  440. package/dist/objects/transport/rest-router.js.map +1 -0
  441. package/dist/objects/transport/rpc-server.js +1539 -0
  442. package/dist/objects/transport/rpc-server.js.map +1 -0
  443. package/dist/objects/transport/shared.js +576 -0
  444. package/dist/objects/transport/shared.js.map +1 -0
  445. package/dist/objects/transport/sync-engine.js +291 -0
  446. package/dist/objects/transport/sync-engine.js.map +1 -0
  447. package/dist/objects/transport/types.js +8 -0
  448. package/dist/objects/transport/types.js.map +1 -0
  449. package/dist/sandbox/index.js +258 -0
  450. package/dist/sandbox/index.js.map +1 -0
  451. package/dist/snippets/artifacts-config.js +241 -0
  452. package/dist/snippets/artifacts-config.js.map +1 -0
  453. package/dist/snippets/artifacts-ingest.js +832 -0
  454. package/dist/snippets/artifacts-ingest.js.map +1 -0
  455. package/dist/snippets/artifacts-serve.js +1035 -0
  456. package/dist/snippets/artifacts-serve.js.map +1 -0
  457. package/dist/snippets/artifacts-types.js +161 -0
  458. package/dist/snippets/artifacts-types.js.map +1 -0
  459. package/dist/snippets/cache-probe.js +376 -0
  460. package/dist/snippets/cache-probe.js.map +1 -0
  461. package/dist/snippets/cache.js +10 -0
  462. package/dist/snippets/cache.js.map +1 -0
  463. package/dist/snippets/events.js +469 -0
  464. package/dist/snippets/events.js.map +1 -0
  465. package/dist/snippets/index.js +7 -0
  466. package/dist/snippets/index.js.map +1 -0
  467. package/dist/snippets/proxy.js +495 -0
  468. package/dist/snippets/proxy.js.map +1 -0
  469. package/dist/snippets/search.js +1759 -0
  470. package/dist/snippets/search.js.map +1 -0
  471. package/dist/streams/index.js +30 -0
  472. package/dist/streams/index.js.map +1 -0
  473. package/dist/streams/observability.js +68 -0
  474. package/dist/streams/observability.js.map +1 -0
  475. package/dist/types/AI.js +92 -0
  476. package/dist/types/AI.js.map +1 -0
  477. package/dist/types/AIFunction.js +171 -0
  478. package/dist/types/AIFunction.js.map +1 -0
  479. package/dist/types/BrowseVerb.js +89 -0
  480. package/dist/types/BrowseVerb.js.map +1 -0
  481. package/dist/types/Browser.js +31 -0
  482. package/dist/types/Browser.js.map +1 -0
  483. package/dist/types/Chaos.js +15 -0
  484. package/dist/types/Chaos.js.map +1 -0
  485. package/dist/types/CloudflareBindings.js +109 -0
  486. package/dist/types/CloudflareBindings.js.map +1 -0
  487. package/dist/types/Collection.js +50 -0
  488. package/dist/types/Collection.js.map +1 -0
  489. package/dist/types/DO.js +2 -0
  490. package/dist/types/DO.js.map +1 -0
  491. package/dist/types/DOLocation.js +63 -0
  492. package/dist/types/DOLocation.js.map +1 -0
  493. package/dist/types/EventHandler.js +57 -0
  494. package/dist/types/EventHandler.js.map +1 -0
  495. package/dist/types/Experiment.js +33 -0
  496. package/dist/types/Experiment.js.map +1 -0
  497. package/dist/types/Flag.js +57 -0
  498. package/dist/types/Flag.js.map +1 -0
  499. package/dist/types/Lifecycle.js +13 -0
  500. package/dist/types/Lifecycle.js.map +1 -0
  501. package/dist/types/Location.js +169 -0
  502. package/dist/types/Location.js.map +1 -0
  503. package/dist/types/Noun.js +66 -0
  504. package/dist/types/Noun.js.map +1 -0
  505. package/dist/types/SessionEvent.js +194 -0
  506. package/dist/types/SessionEvent.js.map +1 -0
  507. package/dist/types/Thing.js +55 -0
  508. package/dist/types/Thing.js.map +1 -0
  509. package/dist/types/ThingDO.js +153 -0
  510. package/dist/types/ThingDO.js.map +1 -0
  511. package/dist/types/Things.js +2 -0
  512. package/dist/types/Things.js.map +1 -0
  513. package/dist/types/Verb.js +119 -0
  514. package/dist/types/Verb.js.map +1 -0
  515. package/dist/types/WorkflowContext.js +70 -0
  516. package/dist/types/WorkflowContext.js.map +1 -0
  517. package/dist/types/analytics-api.js +13 -0
  518. package/dist/types/analytics-api.js.map +1 -0
  519. package/dist/types/capabilities.js +135 -0
  520. package/dist/types/capabilities.js.map +1 -0
  521. package/dist/types/drizzle.js +12 -0
  522. package/dist/types/drizzle.js.map +1 -0
  523. package/dist/types/event.js +201 -0
  524. package/dist/types/event.js.map +1 -0
  525. package/dist/types/fn.js +12 -0
  526. package/dist/types/fn.js.map +1 -0
  527. package/dist/types/iceberg.js +48 -0
  528. package/dist/types/iceberg.js.map +1 -0
  529. package/dist/types/ids.js +170 -0
  530. package/dist/types/ids.js.map +1 -0
  531. package/dist/types/index.js +41 -0
  532. package/dist/types/index.js.map +1 -0
  533. package/dist/types/introspect.js +54 -0
  534. package/dist/types/introspect.js.map +1 -0
  535. package/dist/types/observability.js +124 -0
  536. package/dist/types/observability.js.map +1 -0
  537. package/dist/types/sync-protocol.js +175 -0
  538. package/dist/types/sync-protocol.js.map +1 -0
  539. package/dist/types/vector.js +13 -0
  540. package/dist/types/vector.js.map +1 -0
  541. package/dist/workflows/ScheduleManager.js +473 -0
  542. package/dist/workflows/ScheduleManager.js.map +1 -0
  543. package/dist/workflows/StepDOBridge.js +149 -0
  544. package/dist/workflows/StepDOBridge.js.map +1 -0
  545. package/dist/workflows/StepResultStorage.js +232 -0
  546. package/dist/workflows/StepResultStorage.js.map +1 -0
  547. package/dist/workflows/WaitForEventManager.js +461 -0
  548. package/dist/workflows/WaitForEventManager.js.map +1 -0
  549. package/dist/workflows/analyzer.js +332 -0
  550. package/dist/workflows/analyzer.js.map +1 -0
  551. package/dist/workflows/compat/activity-router.js +484 -0
  552. package/dist/workflows/compat/activity-router.js.map +1 -0
  553. package/dist/workflows/compat/backends/cloudflare-workflows.js +431 -0
  554. package/dist/workflows/compat/backends/cloudflare-workflows.js.map +1 -0
  555. package/dist/workflows/compat/backends/index.js +14 -0
  556. package/dist/workflows/compat/backends/index.js.map +1 -0
  557. package/dist/workflows/compat/errors/index.js +375 -0
  558. package/dist/workflows/compat/errors/index.js.map +1 -0
  559. package/dist/workflows/compat/index.js +79 -0
  560. package/dist/workflows/compat/index.js.map +1 -0
  561. package/dist/workflows/compat/inngest/index.js +989 -0
  562. package/dist/workflows/compat/inngest/index.js.map +1 -0
  563. package/dist/workflows/compat/qstash/index.js +1263 -0
  564. package/dist/workflows/compat/qstash/index.js.map +1 -0
  565. package/dist/workflows/compat/temporal/activities.js +739 -0
  566. package/dist/workflows/compat/temporal/activities.js.map +1 -0
  567. package/dist/workflows/compat/temporal/child-workflows.js +154 -0
  568. package/dist/workflows/compat/temporal/child-workflows.js.map +1 -0
  569. package/dist/workflows/compat/temporal/client.js +381 -0
  570. package/dist/workflows/compat/temporal/client.js.map +1 -0
  571. package/dist/workflows/compat/temporal/context.js +309 -0
  572. package/dist/workflows/compat/temporal/context.js.map +1 -0
  573. package/dist/workflows/compat/temporal/determinism.js +216 -0
  574. package/dist/workflows/compat/temporal/determinism.js.map +1 -0
  575. package/dist/workflows/compat/temporal/errors.js +128 -0
  576. package/dist/workflows/compat/temporal/errors.js.map +1 -0
  577. package/dist/workflows/compat/temporal/index.js +2464 -0
  578. package/dist/workflows/compat/temporal/index.js.map +1 -0
  579. package/dist/workflows/compat/temporal/saga.js +504 -0
  580. package/dist/workflows/compat/temporal/saga.js.map +1 -0
  581. package/dist/workflows/compat/temporal/signals.js +364 -0
  582. package/dist/workflows/compat/temporal/signals.js.map +1 -0
  583. package/dist/workflows/compat/temporal/storage.js +271 -0
  584. package/dist/workflows/compat/temporal/storage.js.map +1 -0
  585. package/dist/workflows/compat/temporal/timers.js +347 -0
  586. package/dist/workflows/compat/temporal/timers.js.map +1 -0
  587. package/dist/workflows/compat/temporal/types.js +7 -0
  588. package/dist/workflows/compat/temporal/types.js.map +1 -0
  589. package/dist/workflows/compat/temporal/unified-primitives.js +339 -0
  590. package/dist/workflows/compat/temporal/unified-primitives.js.map +1 -0
  591. package/dist/workflows/compat/trigger/index.js +468 -0
  592. package/dist/workflows/compat/trigger/index.js.map +1 -0
  593. package/dist/workflows/compat/utils/index.js +69 -0
  594. package/dist/workflows/compat/utils/index.js.map +1 -0
  595. package/dist/workflows/context/correlation-capability.js +266 -0
  596. package/dist/workflows/context/correlation-capability.js.map +1 -0
  597. package/dist/workflows/context/correlation.js +484 -0
  598. package/dist/workflows/context/correlation.js.map +1 -0
  599. package/dist/workflows/context/experiment.js +289 -0
  600. package/dist/workflows/context/experiment.js.map +1 -0
  601. package/dist/workflows/context/flag.js +244 -0
  602. package/dist/workflows/context/flag.js.map +1 -0
  603. package/dist/workflows/context/foundation.js +648 -0
  604. package/dist/workflows/context/foundation.js.map +1 -0
  605. package/dist/workflows/context/human-base.js +106 -0
  606. package/dist/workflows/context/human-base.js.map +1 -0
  607. package/dist/workflows/context/human.js +368 -0
  608. package/dist/workflows/context/human.js.map +1 -0
  609. package/dist/workflows/context/measure.js +354 -0
  610. package/dist/workflows/context/measure.js.map +1 -0
  611. package/dist/workflows/context/rate-limit.js +358 -0
  612. package/dist/workflows/context/rate-limit.js.map +1 -0
  613. package/dist/workflows/context/user.js +117 -0
  614. package/dist/workflows/context/user.js.map +1 -0
  615. package/dist/workflows/context/vault.js +360 -0
  616. package/dist/workflows/context/vault.js.map +1 -0
  617. package/dist/workflows/data/entity-events/entity-events.js +489 -0
  618. package/dist/workflows/data/entity-events/entity-events.js.map +1 -0
  619. package/dist/workflows/data/experiment/index.js +599 -0
  620. package/dist/workflows/data/experiment/index.js.map +1 -0
  621. package/dist/workflows/data/goal/context.js +558 -0
  622. package/dist/workflows/data/goal/context.js.map +1 -0
  623. package/dist/workflows/data/goal/index.js +32 -0
  624. package/dist/workflows/data/goal/index.js.map +1 -0
  625. package/dist/workflows/data/measure/index.js +840 -0
  626. package/dist/workflows/data/measure/index.js.map +1 -0
  627. package/dist/workflows/data/stream/index.js +1149 -0
  628. package/dist/workflows/data/stream/index.js.map +1 -0
  629. package/dist/workflows/data/track/context.js +883 -0
  630. package/dist/workflows/data/track/context.js.map +1 -0
  631. package/dist/workflows/data/track/index.js +15 -0
  632. package/dist/workflows/data/track/index.js.map +1 -0
  633. package/dist/workflows/data/view/context.js +864 -0
  634. package/dist/workflows/data/view/context.js.map +1 -0
  635. package/dist/workflows/domain.js +93 -0
  636. package/dist/workflows/domain.js.map +1 -0
  637. package/dist/workflows/flag.js +176 -0
  638. package/dist/workflows/flag.js.map +1 -0
  639. package/dist/workflows/flags.js +217 -0
  640. package/dist/workflows/flags.js.map +1 -0
  641. package/dist/workflows/hash.js +209 -0
  642. package/dist/workflows/hash.js.map +1 -0
  643. package/dist/workflows/index.js +50 -0
  644. package/dist/workflows/index.js.map +1 -0
  645. package/dist/workflows/on.js +378 -0
  646. package/dist/workflows/on.js.map +1 -0
  647. package/dist/workflows/pipeline-promise.js +481 -0
  648. package/dist/workflows/pipeline-promise.js.map +1 -0
  649. package/dist/workflows/pipeline-types.js +20 -0
  650. package/dist/workflows/pipeline-types.js.map +1 -0
  651. package/dist/workflows/proxy.js +76 -0
  652. package/dist/workflows/proxy.js.map +1 -0
  653. package/dist/workflows/runtime.js +310 -0
  654. package/dist/workflows/runtime.js.map +1 -0
  655. package/dist/workflows/schedule-builder.js +327 -0
  656. package/dist/workflows/schedule-builder.js.map +1 -0
  657. package/dist/workflows/visibility/index.js +146 -0
  658. package/dist/workflows/visibility/index.js.map +1 -0
  659. package/dist/workflows/visibility/query-parser.js +150 -0
  660. package/dist/workflows/visibility/query-parser.js.map +1 -0
  661. package/dist/workflows/visibility/store.js +223 -0
  662. package/dist/workflows/visibility/store.js.map +1 -0
  663. package/dist/workflows/visibility/types.js +30 -0
  664. package/dist/workflows/visibility/types.js.map +1 -0
  665. package/dist/workflows/workflow.js +53 -0
  666. package/dist/workflows/workflow.js.map +1 -0
  667. package/package.json +294 -46
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm.js","sourceRoot":"","sources":["../../../lib/mixins/npm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,278 @@
1
+ /**
2
+ * Noun/id Format Parser
3
+ *
4
+ * Parses and formats Thing references in the Noun/id format used throughout dotdo.
5
+ *
6
+ * Examples:
7
+ * - 'Customer/acme' - Simple thing reference
8
+ * - 'Startup/headless.ly' - With special characters in id
9
+ * - 'Startup/acme/Product/widget' - Nested paths
10
+ * - 'Startup/acme@experiment' - With branch
11
+ * - 'Startup/acme@v1234' - With specific version
12
+ * - 'Startup/acme@~1' - Relative version (one back)
13
+ * - 'Startup/acme@2024-01-08' - Version at timestamp
14
+ */
15
+ /**
16
+ * Check if a string is valid PascalCase
17
+ *
18
+ * @param str - The string to check
19
+ * @returns True if the string is PascalCase
20
+ */
21
+ export function isPascalCase(str) {
22
+ if (!str || str.length === 0)
23
+ return false;
24
+ // Must start with uppercase letter
25
+ if (!/^[A-Z]/.test(str))
26
+ return false;
27
+ // Must only contain letters and numbers (no spaces, hyphens, underscores), numbers allowed after first char
28
+ if (!/^[A-Za-z][A-Za-z0-9]*$/.test(str))
29
+ return false;
30
+ // Must not be all uppercase (unless single letter)
31
+ // Check if all letters are uppercase
32
+ const letters = str.replace(/[0-9]/g, '');
33
+ if (letters.length > 1 && letters === letters.toUpperCase())
34
+ return false;
35
+ return true;
36
+ }
37
+ /**
38
+ * Parse a modifier string (after @) into the appropriate field
39
+ */
40
+ function parseModifier(modifier) {
41
+ if (!modifier) {
42
+ throw new Error('Empty modifier after @');
43
+ }
44
+ // Check for version: @v followed by digits
45
+ const versionMatch = modifier.match(/^v(\d+)$/);
46
+ if (versionMatch) {
47
+ return { version: parseInt(versionMatch[1], 10) };
48
+ }
49
+ // Check for relative version: @~N
50
+ const relativeMatch = modifier.match(/^~(\d+)$/);
51
+ if (relativeMatch) {
52
+ return { relativeVersion: parseInt(relativeMatch[1], 10) };
53
+ }
54
+ // Check for ISO 8601 timestamp with time: YYYY-MM-DDTHH:MM:SS...
55
+ const isoTimestampMatch = modifier.match(/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|[+-]\d{2}:\d{2}))$/);
56
+ if (isoTimestampMatch) {
57
+ return { timestamp: new Date(isoTimestampMatch[1]) };
58
+ }
59
+ // Check for date-only timestamp: YYYY-MM-DD
60
+ const dateMatch = modifier.match(/^(\d{4}-\d{2}-\d{2})$/);
61
+ if (dateMatch) {
62
+ // Parse as local date at midnight for correct getDate()/getMonth()/getFullYear() behavior
63
+ const [year, month, day] = dateMatch[1].split('-').map(Number);
64
+ return { timestamp: new Date(year, month - 1, day) };
65
+ }
66
+ // Otherwise it's a branch name - validate it
67
+ // Branch cannot start with hyphen or dot
68
+ if (modifier.startsWith('-') || modifier.startsWith('.')) {
69
+ throw new Error(`Invalid branch name: cannot start with '${modifier[0]}'`);
70
+ }
71
+ // Branch cannot contain spaces or slashes
72
+ if (/[\s/]/.test(modifier)) {
73
+ throw new Error('Invalid branch name: cannot contain spaces or slashes');
74
+ }
75
+ return { branch: modifier };
76
+ }
77
+ /**
78
+ * Validate an ID string
79
+ */
80
+ function validateId(id) {
81
+ if (!id) {
82
+ throw new Error('ID cannot be empty');
83
+ }
84
+ // ID cannot start with hyphen or dot
85
+ if (id.startsWith('-') || id.startsWith('.')) {
86
+ throw new Error(`Invalid ID: cannot start with '${id[0]}'`);
87
+ }
88
+ // ID cannot contain spaces
89
+ if (/\s/.test(id)) {
90
+ throw new Error('Invalid ID: cannot contain whitespace');
91
+ }
92
+ }
93
+ /**
94
+ * Parse a Noun/id string into a NounIdRef
95
+ *
96
+ * @param input - The Noun/id string to parse
97
+ * @returns Parsed NounIdRef object
98
+ * @throws Error if input is invalid
99
+ *
100
+ * @example
101
+ * parseNounId('Customer/acme')
102
+ * // => { noun: 'Customer', id: 'acme' }
103
+ *
104
+ * parseNounId('Startup/acme/Product/widget')
105
+ * // => { noun: 'Startup', id: 'acme', path: { noun: 'Product', id: 'widget' } }
106
+ *
107
+ * parseNounId('Startup/acme@experiment')
108
+ * // => { noun: 'Startup', id: 'acme', branch: 'experiment' }
109
+ */
110
+ export function parseNounId(input) {
111
+ if (!input) {
112
+ throw new Error('Input cannot be empty');
113
+ }
114
+ // Check for whitespace at start or end
115
+ if (input !== input.trim()) {
116
+ throw new Error('Input cannot have leading or trailing whitespace');
117
+ }
118
+ // Check for double slashes
119
+ if (input.includes('//')) {
120
+ throw new Error('Input cannot contain double slashes');
121
+ }
122
+ // Check for trailing slash
123
+ if (input.endsWith('/')) {
124
+ throw new Error('Input cannot end with a slash');
125
+ }
126
+ // Check for multiple @ symbols in original input (before decoding)
127
+ const atCount = (input.match(/@/g) || []).length;
128
+ if (atCount > 1) {
129
+ throw new Error('Input cannot contain multiple @ symbols');
130
+ }
131
+ // Extract modifier BEFORE URL decoding (only literal @ in input counts as separator)
132
+ let mainPartRaw = input;
133
+ let modifierRaw;
134
+ const atIndex = input.lastIndexOf('@');
135
+ if (atIndex !== -1) {
136
+ mainPartRaw = input.substring(0, atIndex);
137
+ modifierRaw = input.substring(atIndex + 1);
138
+ // Validate modifier is not empty
139
+ if (!modifierRaw) {
140
+ throw new Error('Modifier after @ cannot be empty');
141
+ }
142
+ // Check if modifier contains a slash (would be invalid branch name)
143
+ if (modifierRaw.includes('/')) {
144
+ throw new Error('Invalid branch name: cannot contain slashes');
145
+ }
146
+ // Validate modifier doesn't have whitespace
147
+ if (/\s/.test(modifierRaw)) {
148
+ throw new Error('Modifier cannot contain whitespace');
149
+ }
150
+ }
151
+ // URL decode the main part: decode %40 to @, but preserve %2F
152
+ const mainPartWithPreservedSlashes = mainPartRaw.replace(/%2F/gi, '\x00SLASH\x00');
153
+ const mainPart = decodeURIComponent(mainPartWithPreservedSlashes)
154
+ .replace(/\x00SLASH\x00/g, '%2F');
155
+ // URL decode the modifier (if present)
156
+ const modifier = modifierRaw ? decodeURIComponent(modifierRaw) : undefined;
157
+ // Split by / to get segments
158
+ const segments = mainPart.split('/');
159
+ // Must have at least 2 segments (Noun/id)
160
+ if (segments.length < 2) {
161
+ throw new Error('Input must have at least Noun/id format');
162
+ }
163
+ // Must have even number of segments (pairs of Noun/id)
164
+ if (segments.length % 2 !== 0) {
165
+ throw new Error('Incomplete Noun/id path - each Noun must have an id');
166
+ }
167
+ // Check for empty segments
168
+ for (const segment of segments) {
169
+ if (!segment) {
170
+ throw new Error('Empty segment in path');
171
+ }
172
+ // Check for whitespace in segments
173
+ if (/\s/.test(segment)) {
174
+ throw new Error('Segments cannot contain whitespace');
175
+ }
176
+ }
177
+ // Parse segments into nested NounIdRef
178
+ function parseSegments(segs, mod) {
179
+ const noun = segs[0];
180
+ const id = segs[1];
181
+ // Validate noun is PascalCase
182
+ if (!isPascalCase(noun)) {
183
+ throw new Error(`Invalid noun '${noun}': must be PascalCase`);
184
+ }
185
+ // Validate id
186
+ validateId(id);
187
+ const result = { noun, id };
188
+ if (segs.length > 2) {
189
+ // More segments - recurse for nested path
190
+ result.path = parseSegments(segs.slice(2), mod);
191
+ }
192
+ else if (mod) {
193
+ // This is the leaf - apply modifier
194
+ Object.assign(result, parseModifier(mod));
195
+ }
196
+ return result;
197
+ }
198
+ return parseSegments(segments, modifier);
199
+ }
200
+ /**
201
+ * Format a NounIdRef back into a Noun/id string
202
+ *
203
+ * @param ref - The NounIdRef to format
204
+ * @returns Formatted Noun/id string
205
+ *
206
+ * @example
207
+ * formatNounId({ noun: 'Customer', id: 'acme' })
208
+ * // => 'Customer/acme'
209
+ *
210
+ * formatNounId({ noun: 'Startup', id: 'acme', branch: 'experiment' })
211
+ * // => 'Startup/acme@experiment'
212
+ */
213
+ export function formatNounId(ref) {
214
+ let result = `${ref.noun}/${ref.id}`;
215
+ if (ref.path) {
216
+ result += '/' + formatNounId(ref.path);
217
+ }
218
+ else {
219
+ // Only add modifiers to the leaf node
220
+ if (ref.branch !== undefined) {
221
+ result += `@${ref.branch}`;
222
+ }
223
+ else if (ref.version !== undefined) {
224
+ result += `@v${ref.version}`;
225
+ }
226
+ else if (ref.relativeVersion !== undefined) {
227
+ result += `@~${ref.relativeVersion}`;
228
+ }
229
+ else if (ref.timestamp !== undefined) {
230
+ const d = ref.timestamp;
231
+ // Check if time component is midnight in local time
232
+ const isLocalMidnight = d.getHours() === 0 &&
233
+ d.getMinutes() === 0 &&
234
+ d.getSeconds() === 0 &&
235
+ d.getMilliseconds() === 0;
236
+ // Check if time component is midnight in UTC
237
+ const isUtcMidnight = d.getUTCHours() === 0 &&
238
+ d.getUTCMinutes() === 0 &&
239
+ d.getUTCSeconds() === 0 &&
240
+ d.getUTCMilliseconds() === 0;
241
+ if (isLocalMidnight) {
242
+ // Format as date only using local components: YYYY-MM-DD
243
+ const year = d.getFullYear();
244
+ const month = String(d.getMonth() + 1).padStart(2, '0');
245
+ const day = String(d.getDate()).padStart(2, '0');
246
+ result += `@${year}-${month}-${day}`;
247
+ }
248
+ else if (isUtcMidnight) {
249
+ // Format as date only using UTC components: YYYY-MM-DD
250
+ const year = d.getUTCFullYear();
251
+ const month = String(d.getUTCMonth() + 1).padStart(2, '0');
252
+ const day = String(d.getUTCDate()).padStart(2, '0');
253
+ result += `@${year}-${month}-${day}`;
254
+ }
255
+ else {
256
+ // Format as full ISO string
257
+ result += `@${d.toISOString()}`;
258
+ }
259
+ }
260
+ }
261
+ return result;
262
+ }
263
+ /**
264
+ * Validate a Noun/id string without parsing
265
+ *
266
+ * @param input - The Noun/id string to validate
267
+ * @returns True if the input is a valid Noun/id format
268
+ */
269
+ export function isValidNounId(input) {
270
+ try {
271
+ parseNounId(input);
272
+ return true;
273
+ }
274
+ catch {
275
+ return false;
276
+ }
277
+ }
278
+ //# sourceMappingURL=noun-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noun-id.js","sourceRoot":"","sources":["../../lib/noun-id.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Sliding Window Rate Limiter
3
+ *
4
+ * A sliding window rate limiter that stores request entries in SQLite via Drizzle ORM.
5
+ * Each request is recorded with a timestamp, and the limiter counts requests within
6
+ * a sliding time window to determine if new requests should be allowed.
7
+ *
8
+ * Key features:
9
+ * - Precise sliding window semantics (entries expire individually based on timestamp)
10
+ * - Concurrent request safety via atomic counting
11
+ * - Configurable window sizes (minutes, hours, days)
12
+ * - Cleanup for expired entries
13
+ *
14
+ * Usage:
15
+ * ```typescript
16
+ * const limiter = new SlidingWindowLimiter(db)
17
+ * const result = await limiter.check('user:123', { limit: 100, window: '1h' })
18
+ * if (!result.success) {
19
+ * // Rate limit exceeded
20
+ * }
21
+ * ```
22
+ */
23
+ import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
24
+ import { sql } from 'drizzle-orm';
25
+ // ============================================================================
26
+ // RATE LIMIT SCHEMA
27
+ // ============================================================================
28
+ /**
29
+ * Schema for rate limit entries.
30
+ * Each entry represents a single request within the sliding window.
31
+ */
32
+ export const rateLimitEntries = sqliteTable('rate_limit_entries', {
33
+ id: integer('id').primaryKey({ autoIncrement: true }),
34
+ key: text('key').notNull(),
35
+ timestamp: integer('timestamp').notNull(), // Unix timestamp in ms
36
+ });
37
+ // ============================================================================
38
+ // WINDOW PARSING
39
+ // ============================================================================
40
+ /**
41
+ * Parses a window string into milliseconds.
42
+ * Format: number + unit (m = minutes, h = hours, d = days)
43
+ *
44
+ * @param window - Window string like '1m', '1h', '1d'
45
+ * @returns Window duration in milliseconds
46
+ * @throws Error if format is invalid
47
+ */
48
+ export function parseWindow(window) {
49
+ const match = window.match(/^(\d+)([mhd])$/);
50
+ if (!match) {
51
+ throw new Error(`Invalid window format: ${window}. Expected format: '1m', '1h', '1d'`);
52
+ }
53
+ const value = parseInt(match[1], 10);
54
+ const unit = match[2];
55
+ if (value === 0) {
56
+ throw new Error(`Invalid window value: ${window}. Window must be greater than 0`);
57
+ }
58
+ switch (unit) {
59
+ case 'm':
60
+ return value * 60 * 1000; // minutes to ms
61
+ case 'h':
62
+ return value * 60 * 60 * 1000; // hours to ms
63
+ case 'd':
64
+ return value * 24 * 60 * 60 * 1000; // days to ms
65
+ default:
66
+ throw new Error(`Unknown unit: ${unit}`);
67
+ }
68
+ }
69
+ // ============================================================================
70
+ // SLIDING WINDOW LIMITER
71
+ // ============================================================================
72
+ /**
73
+ * Sliding Window Rate Limiter
74
+ *
75
+ * Uses SQLite to store request entries and count them within a sliding window.
76
+ * Provides precise rate limiting with per-request expiration.
77
+ */
78
+ export class SlidingWindowLimiter {
79
+ db;
80
+ constructor(db) {
81
+ this.db = db;
82
+ }
83
+ /**
84
+ * Check if a request is allowed for the given key.
85
+ * If allowed, records the request in the database.
86
+ *
87
+ * @param key - The rate limit key (e.g., 'user:123', 'ip:192.168.1.1')
88
+ * @param opts - Rate limit options (limit and window)
89
+ * @returns Result with success boolean and remaining count
90
+ * @throws Error if limit is negative or window format is invalid
91
+ */
92
+ async check(key, opts) {
93
+ const { limit, window } = opts;
94
+ // Validate limit
95
+ if (limit < 0) {
96
+ throw new Error(`Invalid limit: ${limit}. Limit must be non-negative`);
97
+ }
98
+ // Handle limit of 0 - all requests blocked
99
+ if (limit === 0) {
100
+ return { success: false, remaining: 0 };
101
+ }
102
+ // Parse window to get duration in ms
103
+ const windowMs = parseWindow(window);
104
+ // Get current timestamp
105
+ const now = Date.now();
106
+ // Calculate cutoff time (entries older than this are expired)
107
+ const cutoff = now - windowMs;
108
+ // Use raw SQL for atomic counting and insertion
109
+ // This prevents race conditions by counting and inserting in a single transaction
110
+ const db = this.db;
111
+ // Count current entries within the window
112
+ const countResult = db.all(sql `SELECT COUNT(*) as count FROM rate_limit_entries WHERE key = ${key} AND timestamp > ${cutoff}`);
113
+ const currentCount = countResult[0]?.count ?? 0;
114
+ // Check if we're at or over the limit
115
+ if (currentCount >= limit) {
116
+ return { success: false, remaining: 0 };
117
+ }
118
+ // Insert new entry
119
+ db.run(sql `INSERT INTO rate_limit_entries (key, timestamp) VALUES (${key}, ${now})`);
120
+ // Calculate remaining (after this request)
121
+ const remaining = limit - currentCount - 1;
122
+ return { success: true, remaining: Math.max(0, remaining) };
123
+ }
124
+ /**
125
+ * Clean up expired entries from the database.
126
+ *
127
+ * @param opts - Optional cleanup options (maxAge for custom threshold)
128
+ * @returns Number of entries removed, or void
129
+ */
130
+ async cleanup(opts) {
131
+ // Default to 1 minute if no maxAge specified
132
+ // This is aggressive but ensures cleanup removes entries that are
133
+ // definitely outside typical rate limit windows
134
+ const maxAge = opts?.maxAge ?? '1m';
135
+ const maxAgeMs = parseWindow(maxAge);
136
+ const now = Date.now();
137
+ const cutoff = now - maxAgeMs;
138
+ // For Drizzle/better-sqlite3, db.run() returns RunResult synchronously
139
+ // with a 'changes' property indicating number of rows affected
140
+ const db = this.db;
141
+ // Delete expired entries and return count from changes
142
+ // (strictly less than cutoff - boundary entries are kept)
143
+ const result = db.run(sql `DELETE FROM rate_limit_entries WHERE timestamp < ${cutoff}`);
144
+ return result.changes;
145
+ }
146
+ }
147
+ export default SlidingWindowLimiter;
148
+ //# sourceMappingURL=sliding-window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sliding-window.js","sourceRoot":"","sources":["../../../lib/rate-limit/sliding-window.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Cloudflare Rate Limit Binding Wrapper
3
+ *
4
+ * Wraps the CF Rate Limit binding to provide a cleaner API
5
+ * and additional utility methods.
6
+ *
7
+ * Usage:
8
+ * ```typescript
9
+ * const wrapper = new RateLimitWrapper(env.RATE_LIMIT_API)
10
+ * const result = await wrapper.checkLimit('user:123')
11
+ * if (!result.success) {
12
+ * // Handle rate limit exceeded
13
+ * }
14
+ * ```
15
+ */
16
+ /**
17
+ * Wrapper class for Cloudflare Rate Limit bindings.
18
+ *
19
+ * Provides a cleaner API with additional utility methods for:
20
+ * - Checking rate limits
21
+ * - Building composite keys
22
+ * - Getting remaining counts
23
+ */
24
+ export class RateLimitWrapper {
25
+ binding;
26
+ lastResults = new Map();
27
+ constructor(binding) {
28
+ this.binding = binding;
29
+ }
30
+ /**
31
+ * Check the rate limit for a given key.
32
+ * This consumes one request from the limit.
33
+ *
34
+ * @param key - The rate limit key (e.g., 'user:123' or 'api:/users/create')
35
+ * @returns The rate limit result with success and remaining count
36
+ * @throws Error if key is empty
37
+ */
38
+ async checkLimit(key) {
39
+ if (!key) {
40
+ throw new Error('Rate limit key cannot be empty');
41
+ }
42
+ const result = await this.binding.limit({ key });
43
+ this.lastResults.set(key, result);
44
+ return result;
45
+ }
46
+ /**
47
+ * Check if a request is allowed for the given key.
48
+ * This consumes one request from the limit.
49
+ *
50
+ * @param key - The rate limit key
51
+ * @returns true if the request is allowed, false if rate limited
52
+ */
53
+ async isAllowed(key) {
54
+ const result = await this.checkLimit(key);
55
+ return result.success;
56
+ }
57
+ /**
58
+ * Get the remaining count for a key.
59
+ * Returns the cached remaining count from the last check.
60
+ * If no previous check exists, makes a new request (which consumes one from the limit).
61
+ *
62
+ * @param key - The rate limit key
63
+ * @returns The number of remaining requests allowed
64
+ */
65
+ async getRemainingCount(key) {
66
+ // Return cached result if available
67
+ const cached = this.lastResults.get(key);
68
+ if (cached !== undefined) {
69
+ return cached.remaining;
70
+ }
71
+ // Otherwise, make a new request
72
+ const result = await this.checkLimit(key);
73
+ return result.remaining;
74
+ }
75
+ /**
76
+ * Build a composite rate limit key from options.
77
+ *
78
+ * @param options - Key components (userId, endpoint, action, etc.)
79
+ * @returns A formatted key string
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * wrapper.buildKey({ userId: '123' }) // 'user:123'
84
+ * wrapper.buildKey({ endpoint: '/api/users' }) // 'endpoint:/api/users'
85
+ * wrapper.buildKey({ userId: '123', endpoint: '/api/users', action: 'create' })
86
+ * // 'user:123:endpoint:/api/users:action:create'
87
+ * ```
88
+ */
89
+ buildKey(options) {
90
+ const parts = [];
91
+ if (options.userId) {
92
+ parts.push(`user:${options.userId}`);
93
+ }
94
+ if (options.endpoint) {
95
+ parts.push(`endpoint:${options.endpoint}`);
96
+ }
97
+ if (options.action) {
98
+ parts.push(`action:${options.action}`);
99
+ }
100
+ // Handle any additional custom keys
101
+ for (const [key, value] of Object.entries(options)) {
102
+ if (value && !['userId', 'endpoint', 'action'].includes(key)) {
103
+ parts.push(`${key}:${value}`);
104
+ }
105
+ }
106
+ return parts.join(':');
107
+ }
108
+ }
109
+ export default RateLimitWrapper;
110
+ //# sourceMappingURL=rate-limit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../lib/rate-limit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA2BH;;;;;;;GAOG;AACH,MAAM,OAAO,gBAAgB;IACnB,OAAO,CAAkB;IACzB,WAAW,GAAiC,IAAI,GAAG,EAAE,CAAA;IAE7D,YAAY,OAAyB;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,UAAU,CAAC,GAAW;QAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACnD,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;QAChD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACjC,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACzC,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,iBAAiB,CAAC,GAAW;QACjC,oCAAoC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACxC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC,SAAS,CAAA;QACzB,CAAC;QACD,gCAAgC;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACzC,OAAO,MAAM,CAAC,SAAS,CAAA;IACzB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,OAAwB;QAC/B,MAAM,KAAK,GAAa,EAAE,CAAA;QAE1B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QACtC,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5C,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QACxC,CAAC;QAED,oCAAoC;QACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,KAAK,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7D,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;CACF;AAED,eAAe,gBAAgB,CAAA"}