@shware/workflow 0.0.0-stage → 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 (442) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -2
  3. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  4. package/dist/apns-relay.cjs +105 -0
  5. package/dist/apns-relay.cjs.map +1 -0
  6. package/dist/apns-relay.d.cts +28 -0
  7. package/dist/apns-relay.d.cts.map +1 -0
  8. package/dist/apns-relay.d.mts +28 -0
  9. package/dist/apns-relay.d.mts.map +1 -0
  10. package/dist/apns-relay.mjs +104 -0
  11. package/dist/apns-relay.mjs.map +1 -0
  12. package/dist/apns.cjs +121 -0
  13. package/dist/apns.cjs.map +1 -0
  14. package/dist/apns.d.cts +63 -0
  15. package/dist/apns.d.cts.map +1 -0
  16. package/dist/apns.d.mts +63 -0
  17. package/dist/apns.d.mts.map +1 -0
  18. package/dist/apns.mjs +116 -0
  19. package/dist/apns.mjs.map +1 -0
  20. package/dist/client.cjs +125 -0
  21. package/dist/client.cjs.map +1 -0
  22. package/dist/client.d.cts +108 -0
  23. package/dist/client.d.cts.map +1 -0
  24. package/dist/client.d.mts +108 -0
  25. package/dist/client.d.mts.map +1 -0
  26. package/dist/client.mjs +122 -0
  27. package/dist/client.mjs.map +1 -0
  28. package/dist/cloudflare/bindings.cjs +28 -0
  29. package/dist/cloudflare/bindings.cjs.map +1 -0
  30. package/dist/cloudflare/bindings.d.cts +144 -0
  31. package/dist/cloudflare/bindings.d.cts.map +1 -0
  32. package/dist/cloudflare/bindings.d.mts +144 -0
  33. package/dist/cloudflare/bindings.d.mts.map +1 -0
  34. package/dist/cloudflare/bindings.mjs +25 -0
  35. package/dist/cloudflare/bindings.mjs.map +1 -0
  36. package/dist/cloudflare/channels.cjs +164 -0
  37. package/dist/cloudflare/channels.cjs.map +1 -0
  38. package/dist/cloudflare/channels.d.cts +29 -0
  39. package/dist/cloudflare/channels.d.cts.map +1 -0
  40. package/dist/cloudflare/channels.d.mts +29 -0
  41. package/dist/cloudflare/channels.d.mts.map +1 -0
  42. package/dist/cloudflare/channels.mjs +161 -0
  43. package/dist/cloudflare/channels.mjs.map +1 -0
  44. package/dist/cloudflare/d1-env.cjs +17 -0
  45. package/dist/cloudflare/d1-env.cjs.map +1 -0
  46. package/dist/cloudflare/d1-env.d.cts +12 -0
  47. package/dist/cloudflare/d1-env.d.cts.map +1 -0
  48. package/dist/cloudflare/d1-env.d.mts +12 -0
  49. package/dist/cloudflare/d1-env.d.mts.map +1 -0
  50. package/dist/cloudflare/d1-env.mjs +16 -0
  51. package/dist/cloudflare/d1-env.mjs.map +1 -0
  52. package/dist/cloudflare/index.cjs +54 -0
  53. package/dist/cloudflare/index.d.cts +19 -0
  54. package/dist/cloudflare/index.d.mts +19 -0
  55. package/dist/cloudflare/index.mjs +16 -0
  56. package/dist/cloudflare/router.cjs +516 -0
  57. package/dist/cloudflare/router.cjs.map +1 -0
  58. package/dist/cloudflare/router.d.cts +157 -0
  59. package/dist/cloudflare/router.d.cts.map +1 -0
  60. package/dist/cloudflare/router.d.mts +157 -0
  61. package/dist/cloudflare/router.d.mts.map +1 -0
  62. package/dist/cloudflare/router.mjs +503 -0
  63. package/dist/cloudflare/router.mjs.map +1 -0
  64. package/dist/cloudflare/runner.cjs +225 -0
  65. package/dist/cloudflare/runner.cjs.map +1 -0
  66. package/dist/cloudflare/runner.d.cts +73 -0
  67. package/dist/cloudflare/runner.d.cts.map +1 -0
  68. package/dist/cloudflare/runner.d.mts +73 -0
  69. package/dist/cloudflare/runner.d.mts.map +1 -0
  70. package/dist/cloudflare/runner.mjs +224 -0
  71. package/dist/cloudflare/runner.mjs.map +1 -0
  72. package/dist/cloudflare/schema.sql +127 -0
  73. package/dist/cloudflare/senders.cjs +114 -0
  74. package/dist/cloudflare/senders.cjs.map +1 -0
  75. package/dist/cloudflare/senders.d.cts +68 -0
  76. package/dist/cloudflare/senders.d.cts.map +1 -0
  77. package/dist/cloudflare/senders.d.mts +68 -0
  78. package/dist/cloudflare/senders.d.mts.map +1 -0
  79. package/dist/cloudflare/senders.mjs +108 -0
  80. package/dist/cloudflare/senders.mjs.map +1 -0
  81. package/dist/cloudflare/worker.cjs +228 -0
  82. package/dist/cloudflare/worker.cjs.map +1 -0
  83. package/dist/cloudflare/worker.d.cts +92 -0
  84. package/dist/cloudflare/worker.d.cts.map +1 -0
  85. package/dist/cloudflare/worker.d.mts +92 -0
  86. package/dist/cloudflare/worker.d.mts.map +1 -0
  87. package/dist/cloudflare/worker.mjs +224 -0
  88. package/dist/cloudflare/worker.mjs.map +1 -0
  89. package/dist/cloudflare/workers.d.cjs +0 -0
  90. package/dist/cloudflare/workers.d.cts +44 -0
  91. package/dist/cloudflare/workers.d.cts.map +1 -0
  92. package/dist/cloudflare/workers.d.mts +44 -0
  93. package/dist/cloudflare/workers.d.mts.map +1 -0
  94. package/dist/config.cjs +151 -0
  95. package/dist/config.cjs.map +1 -0
  96. package/dist/config.d.cts +149 -0
  97. package/dist/config.d.cts.map +1 -0
  98. package/dist/config.d.mts +149 -0
  99. package/dist/config.d.mts.map +1 -0
  100. package/dist/config.mjs +143 -0
  101. package/dist/config.mjs.map +1 -0
  102. package/dist/contract.cjs +212 -0
  103. package/dist/contract.cjs.map +1 -0
  104. package/dist/contract.d.cts +90 -0
  105. package/dist/contract.d.cts.map +1 -0
  106. package/dist/contract.d.mts +90 -0
  107. package/dist/contract.d.mts.map +1 -0
  108. package/dist/contract.mjs +206 -0
  109. package/dist/contract.mjs.map +1 -0
  110. package/dist/dsl/action.cjs +29 -0
  111. package/dist/dsl/action.cjs.map +1 -0
  112. package/dist/dsl/action.d.cts +64 -0
  113. package/dist/dsl/action.d.cts.map +1 -0
  114. package/dist/dsl/action.d.mts +64 -0
  115. package/dist/dsl/action.d.mts.map +1 -0
  116. package/dist/dsl/action.mjs +28 -0
  117. package/dist/dsl/action.mjs.map +1 -0
  118. package/dist/dsl/base.cjs +34 -0
  119. package/dist/dsl/base.cjs.map +1 -0
  120. package/dist/dsl/base.d.cts +45 -0
  121. package/dist/dsl/base.d.cts.map +1 -0
  122. package/dist/dsl/base.d.mts +45 -0
  123. package/dist/dsl/base.d.mts.map +1 -0
  124. package/dist/dsl/base.mjs +30 -0
  125. package/dist/dsl/base.mjs.map +1 -0
  126. package/dist/dsl/bundle.cjs +207 -0
  127. package/dist/dsl/bundle.cjs.map +1 -0
  128. package/dist/dsl/bundle.d.cts +19 -0
  129. package/dist/dsl/bundle.d.cts.map +1 -0
  130. package/dist/dsl/bundle.d.mts +19 -0
  131. package/dist/dsl/bundle.d.mts.map +1 -0
  132. package/dist/dsl/bundle.mjs +206 -0
  133. package/dist/dsl/bundle.mjs.map +1 -0
  134. package/dist/dsl/condition.cjs +177 -0
  135. package/dist/dsl/condition.cjs.map +1 -0
  136. package/dist/dsl/condition.d.cts +140 -0
  137. package/dist/dsl/condition.d.cts.map +1 -0
  138. package/dist/dsl/condition.d.mts +140 -0
  139. package/dist/dsl/condition.d.mts.map +1 -0
  140. package/dist/dsl/condition.mjs +156 -0
  141. package/dist/dsl/condition.mjs.map +1 -0
  142. package/dist/dsl/flow.cjs +228 -0
  143. package/dist/dsl/flow.cjs.map +1 -0
  144. package/dist/dsl/flow.d.cts +223 -0
  145. package/dist/dsl/flow.d.cts.map +1 -0
  146. package/dist/dsl/flow.d.mts +223 -0
  147. package/dist/dsl/flow.d.mts.map +1 -0
  148. package/dist/dsl/flow.mjs +226 -0
  149. package/dist/dsl/flow.mjs.map +1 -0
  150. package/dist/dsl/index.cjs +38 -0
  151. package/dist/dsl/index.d.cts +10 -0
  152. package/dist/dsl/index.d.mts +10 -0
  153. package/dist/dsl/index.mjs +9 -0
  154. package/dist/dsl/refs.cjs +59 -0
  155. package/dist/dsl/refs.cjs.map +1 -0
  156. package/dist/dsl/refs.d.cts +88 -0
  157. package/dist/dsl/refs.d.cts.map +1 -0
  158. package/dist/dsl/refs.d.mts +88 -0
  159. package/dist/dsl/refs.d.mts.map +1 -0
  160. package/dist/dsl/refs.mjs +55 -0
  161. package/dist/dsl/refs.mjs.map +1 -0
  162. package/dist/dsl/template.cjs +65 -0
  163. package/dist/dsl/template.cjs.map +1 -0
  164. package/dist/dsl/template.d.cts +75 -0
  165. package/dist/dsl/template.d.cts.map +1 -0
  166. package/dist/dsl/template.d.mts +75 -0
  167. package/dist/dsl/template.d.mts.map +1 -0
  168. package/dist/dsl/template.mjs +63 -0
  169. package/dist/dsl/template.mjs.map +1 -0
  170. package/dist/dsl/trigger.cjs +40 -0
  171. package/dist/dsl/trigger.cjs.map +1 -0
  172. package/dist/dsl/trigger.d.cts +65 -0
  173. package/dist/dsl/trigger.d.cts.map +1 -0
  174. package/dist/dsl/trigger.d.mts +65 -0
  175. package/dist/dsl/trigger.d.mts.map +1 -0
  176. package/dist/dsl/trigger.mjs +39 -0
  177. package/dist/dsl/trigger.mjs.map +1 -0
  178. package/dist/dsl/workflow.cjs +121 -0
  179. package/dist/dsl/workflow.cjs.map +1 -0
  180. package/dist/dsl/workflow.d.cts +59 -0
  181. package/dist/dsl/workflow.d.cts.map +1 -0
  182. package/dist/dsl/workflow.d.mts +59 -0
  183. package/dist/dsl/workflow.d.mts.map +1 -0
  184. package/dist/dsl/workflow.mjs +120 -0
  185. package/dist/dsl/workflow.mjs.map +1 -0
  186. package/dist/engine/actions.cjs +27 -0
  187. package/dist/engine/actions.cjs.map +1 -0
  188. package/dist/engine/actions.d.cts +40 -0
  189. package/dist/engine/actions.d.cts.map +1 -0
  190. package/dist/engine/actions.d.mts +40 -0
  191. package/dist/engine/actions.d.mts.map +1 -0
  192. package/dist/engine/actions.mjs +26 -0
  193. package/dist/engine/actions.mjs.map +1 -0
  194. package/dist/engine/bucket.cjs +72 -0
  195. package/dist/engine/bucket.cjs.map +1 -0
  196. package/dist/engine/bucket.d.cts +32 -0
  197. package/dist/engine/bucket.d.cts.map +1 -0
  198. package/dist/engine/bucket.d.mts +32 -0
  199. package/dist/engine/bucket.d.mts.map +1 -0
  200. package/dist/engine/bucket.mjs +69 -0
  201. package/dist/engine/bucket.mjs.map +1 -0
  202. package/dist/engine/condition.cjs +166 -0
  203. package/dist/engine/condition.cjs.map +1 -0
  204. package/dist/engine/condition.d.cts +52 -0
  205. package/dist/engine/condition.d.cts.map +1 -0
  206. package/dist/engine/condition.d.mts +52 -0
  207. package/dist/engine/condition.d.mts.map +1 -0
  208. package/dist/engine/condition.mjs +161 -0
  209. package/dist/engine/condition.mjs.map +1 -0
  210. package/dist/engine/index.cjs +20 -0
  211. package/dist/engine/index.d.cts +8 -0
  212. package/dist/engine/index.d.mts +8 -0
  213. package/dist/engine/index.mjs +7 -0
  214. package/dist/engine/interpreter.cjs +428 -0
  215. package/dist/engine/interpreter.cjs.map +1 -0
  216. package/dist/engine/interpreter.d.cts +6 -0
  217. package/dist/engine/interpreter.d.cts.map +1 -0
  218. package/dist/engine/interpreter.d.mts +6 -0
  219. package/dist/engine/interpreter.d.mts.map +1 -0
  220. package/dist/engine/interpreter.mjs +427 -0
  221. package/dist/engine/interpreter.mjs.map +1 -0
  222. package/dist/engine/ports.cjs +0 -0
  223. package/dist/engine/ports.d.cts +252 -0
  224. package/dist/engine/ports.d.cts.map +1 -0
  225. package/dist/engine/ports.d.mts +252 -0
  226. package/dist/engine/ports.d.mts.map +1 -0
  227. package/dist/engine/ports.mjs +1 -0
  228. package/dist/engine/recipient.cjs +23 -0
  229. package/dist/engine/recipient.cjs.map +1 -0
  230. package/dist/engine/recipient.d.cts +13 -0
  231. package/dist/engine/recipient.d.cts.map +1 -0
  232. package/dist/engine/recipient.d.mts +13 -0
  233. package/dist/engine/recipient.d.mts.map +1 -0
  234. package/dist/engine/recipient.mjs +22 -0
  235. package/dist/engine/recipient.mjs.map +1 -0
  236. package/dist/engine/time-scale.cjs +54 -0
  237. package/dist/engine/time-scale.cjs.map +1 -0
  238. package/dist/engine/time-scale.d.cts +31 -0
  239. package/dist/engine/time-scale.d.cts.map +1 -0
  240. package/dist/engine/time-scale.d.mts +31 -0
  241. package/dist/engine/time-scale.d.mts.map +1 -0
  242. package/dist/engine/time-scale.mjs +52 -0
  243. package/dist/engine/time-scale.mjs.map +1 -0
  244. package/dist/engine/time-window.cjs +149 -0
  245. package/dist/engine/time-window.cjs.map +1 -0
  246. package/dist/engine/time-window.d.cts +22 -0
  247. package/dist/engine/time-window.d.cts.map +1 -0
  248. package/dist/engine/time-window.d.mts +22 -0
  249. package/dist/engine/time-window.d.mts.map +1 -0
  250. package/dist/engine/time-window.mjs +147 -0
  251. package/dist/engine/time-window.mjs.map +1 -0
  252. package/dist/fcm.cjs +125 -0
  253. package/dist/fcm.cjs.map +1 -0
  254. package/dist/fcm.d.cts +48 -0
  255. package/dist/fcm.d.cts.map +1 -0
  256. package/dist/fcm.d.mts +48 -0
  257. package/dist/fcm.d.mts.map +1 -0
  258. package/dist/fcm.mjs +121 -0
  259. package/dist/fcm.mjs.map +1 -0
  260. package/dist/hash.cjs +245 -0
  261. package/dist/hash.cjs.map +1 -0
  262. package/dist/hash.d.cts +30 -0
  263. package/dist/hash.d.cts.map +1 -0
  264. package/dist/hash.d.mts +30 -0
  265. package/dist/hash.d.mts.map +1 -0
  266. package/dist/hash.mjs +239 -0
  267. package/dist/hash.mjs.map +1 -0
  268. package/dist/index.cjs +100 -0
  269. package/dist/index.d.cts +18 -0
  270. package/dist/index.d.mts +18 -0
  271. package/dist/index.mjs +17 -0
  272. package/dist/ir.cjs +366 -0
  273. package/dist/ir.cjs.map +1 -0
  274. package/dist/ir.d.cts +486 -0
  275. package/dist/ir.d.cts.map +1 -0
  276. package/dist/ir.d.mts +486 -0
  277. package/dist/ir.d.mts.map +1 -0
  278. package/dist/ir.mjs +344 -0
  279. package/dist/ir.mjs.map +1 -0
  280. package/dist/jwt.cjs +22 -0
  281. package/dist/jwt.cjs.map +1 -0
  282. package/dist/jwt.d.cts +9 -0
  283. package/dist/jwt.d.cts.map +1 -0
  284. package/dist/jwt.d.mts +9 -0
  285. package/dist/jwt.d.mts.map +1 -0
  286. package/dist/jwt.mjs +20 -0
  287. package/dist/jwt.mjs.map +1 -0
  288. package/dist/plan.cjs +223 -0
  289. package/dist/plan.cjs.map +1 -0
  290. package/dist/plan.d.cts +68 -0
  291. package/dist/plan.d.cts.map +1 -0
  292. package/dist/plan.d.mts +68 -0
  293. package/dist/plan.d.mts.map +1 -0
  294. package/dist/plan.mjs +221 -0
  295. package/dist/plan.mjs.map +1 -0
  296. package/dist/postgres-js.cjs +42 -0
  297. package/dist/postgres-js.cjs.map +1 -0
  298. package/dist/postgres-js.d.cts +28 -0
  299. package/dist/postgres-js.d.cts.map +1 -0
  300. package/dist/postgres-js.d.mts +28 -0
  301. package/dist/postgres-js.d.mts.map +1 -0
  302. package/dist/postgres-js.mjs +38 -0
  303. package/dist/postgres-js.mjs.map +1 -0
  304. package/dist/provenance.cjs +67 -0
  305. package/dist/provenance.cjs.map +1 -0
  306. package/dist/provenance.d.cts +41 -0
  307. package/dist/provenance.d.cts.map +1 -0
  308. package/dist/provenance.d.mts +41 -0
  309. package/dist/provenance.d.mts.map +1 -0
  310. package/dist/provenance.mjs +65 -0
  311. package/dist/provenance.mjs.map +1 -0
  312. package/dist/push.cjs +14 -0
  313. package/dist/push.cjs.map +1 -0
  314. package/dist/push.d.cts +16 -0
  315. package/dist/push.d.cts.map +1 -0
  316. package/dist/push.d.mts +16 -0
  317. package/dist/push.d.mts.map +1 -0
  318. package/dist/push.mjs +13 -0
  319. package/dist/push.mjs.map +1 -0
  320. package/dist/react-email.cjs +48 -0
  321. package/dist/react-email.cjs.map +1 -0
  322. package/dist/react-email.d.cts +7 -0
  323. package/dist/react-email.d.cts.map +1 -0
  324. package/dist/react-email.d.mts +7 -0
  325. package/dist/react-email.d.mts.map +1 -0
  326. package/dist/react-email.mjs +47 -0
  327. package/dist/react-email.mjs.map +1 -0
  328. package/dist/reporting/classify.cjs +42 -0
  329. package/dist/reporting/classify.cjs.map +1 -0
  330. package/dist/reporting/classify.d.cts +60 -0
  331. package/dist/reporting/classify.d.cts.map +1 -0
  332. package/dist/reporting/classify.d.mts +60 -0
  333. package/dist/reporting/classify.d.mts.map +1 -0
  334. package/dist/reporting/classify.mjs +38 -0
  335. package/dist/reporting/classify.mjs.map +1 -0
  336. package/dist/reporting/observer.cjs +63 -0
  337. package/dist/reporting/observer.cjs.map +1 -0
  338. package/dist/reporting/observer.d.cts +18 -0
  339. package/dist/reporting/observer.d.cts.map +1 -0
  340. package/dist/reporting/observer.d.mts +18 -0
  341. package/dist/reporting/observer.d.mts.map +1 -0
  342. package/dist/reporting/observer.mjs +62 -0
  343. package/dist/reporting/observer.mjs.map +1 -0
  344. package/dist/reporting/tracking.cjs +153 -0
  345. package/dist/reporting/tracking.cjs.map +1 -0
  346. package/dist/reporting/tracking.d.cts +43 -0
  347. package/dist/reporting/tracking.d.cts.map +1 -0
  348. package/dist/reporting/tracking.d.mts +43 -0
  349. package/dist/reporting/tracking.d.mts.map +1 -0
  350. package/dist/reporting/tracking.mjs +151 -0
  351. package/dist/reporting/tracking.mjs.map +1 -0
  352. package/dist/runtime.cjs +19 -0
  353. package/dist/runtime.cjs.map +1 -0
  354. package/dist/runtime.d.cts +30 -0
  355. package/dist/runtime.d.cts.map +1 -0
  356. package/dist/runtime.d.mts +30 -0
  357. package/dist/runtime.d.mts.map +1 -0
  358. package/dist/runtime.mjs +18 -0
  359. package/dist/runtime.mjs.map +1 -0
  360. package/dist/store/d1.cjs +185 -0
  361. package/dist/store/d1.cjs.map +1 -0
  362. package/dist/store/d1.d.cts +55 -0
  363. package/dist/store/d1.d.cts.map +1 -0
  364. package/dist/store/d1.d.mts +55 -0
  365. package/dist/store/d1.d.mts.map +1 -0
  366. package/dist/store/d1.mjs +184 -0
  367. package/dist/store/d1.mjs.map +1 -0
  368. package/dist/store/facts.cjs +60 -0
  369. package/dist/store/facts.cjs.map +1 -0
  370. package/dist/store/facts.d.cts +38 -0
  371. package/dist/store/facts.d.cts.map +1 -0
  372. package/dist/store/facts.d.mts +38 -0
  373. package/dist/store/facts.d.mts.map +1 -0
  374. package/dist/store/facts.mjs +58 -0
  375. package/dist/store/facts.mjs.map +1 -0
  376. package/dist/store/index.cjs +31 -0
  377. package/dist/store/index.cjs.map +1 -0
  378. package/dist/store/index.d.cts +291 -0
  379. package/dist/store/index.d.cts.map +1 -0
  380. package/dist/store/index.d.mts +291 -0
  381. package/dist/store/index.d.mts.map +1 -0
  382. package/dist/store/index.mjs +22 -0
  383. package/dist/store/index.mjs.map +1 -0
  384. package/dist/store/postgres-reporting.cjs +213 -0
  385. package/dist/store/postgres-reporting.cjs.map +1 -0
  386. package/dist/store/postgres-reporting.d.cts +63 -0
  387. package/dist/store/postgres-reporting.d.cts.map +1 -0
  388. package/dist/store/postgres-reporting.d.mts +63 -0
  389. package/dist/store/postgres-reporting.d.mts.map +1 -0
  390. package/dist/store/postgres-reporting.mjs +212 -0
  391. package/dist/store/postgres-reporting.mjs.map +1 -0
  392. package/dist/store/postgres.cjs +309 -0
  393. package/dist/store/postgres.cjs.map +1 -0
  394. package/dist/store/postgres.d.cts +77 -0
  395. package/dist/store/postgres.d.cts.map +1 -0
  396. package/dist/store/postgres.d.mts +77 -0
  397. package/dist/store/postgres.d.mts.map +1 -0
  398. package/dist/store/postgres.mjs +306 -0
  399. package/dist/store/postgres.mjs.map +1 -0
  400. package/dist/store/sql.cjs +24 -0
  401. package/dist/store/sql.cjs.map +1 -0
  402. package/dist/store/sql.d.cts +25 -0
  403. package/dist/store/sql.d.cts.map +1 -0
  404. package/dist/store/sql.d.mts +25 -0
  405. package/dist/store/sql.d.mts.map +1 -0
  406. package/dist/store/sql.mjs +23 -0
  407. package/dist/store/sql.mjs.map +1 -0
  408. package/dist/store/tables.cjs +404 -0
  409. package/dist/store/tables.cjs.map +1 -0
  410. package/dist/store/tables.d.cts +81 -0
  411. package/dist/store/tables.d.cts.map +1 -0
  412. package/dist/store/tables.d.mts +81 -0
  413. package/dist/store/tables.d.mts.map +1 -0
  414. package/dist/store/tables.mjs +399 -0
  415. package/dist/store/tables.mjs.map +1 -0
  416. package/dist/templates.cjs +247 -0
  417. package/dist/templates.cjs.map +1 -0
  418. package/dist/templates.d.cts +187 -0
  419. package/dist/templates.d.cts.map +1 -0
  420. package/dist/templates.d.mts +187 -0
  421. package/dist/templates.d.mts.map +1 -0
  422. package/dist/templates.mjs +230 -0
  423. package/dist/templates.mjs.map +1 -0
  424. package/dist/webhooks.cjs +96 -0
  425. package/dist/webhooks.cjs.map +1 -0
  426. package/dist/webhooks.d.cts +25 -0
  427. package/dist/webhooks.d.cts.map +1 -0
  428. package/dist/webhooks.d.mts +25 -0
  429. package/dist/webhooks.d.mts.map +1 -0
  430. package/dist/webhooks.mjs +94 -0
  431. package/dist/webhooks.mjs.map +1 -0
  432. package/dist/webpush.cjs +180 -0
  433. package/dist/webpush.cjs.map +1 -0
  434. package/dist/webpush.d.cts +53 -0
  435. package/dist/webpush.d.cts.map +1 -0
  436. package/dist/webpush.d.mts +53 -0
  437. package/dist/webpush.d.mts.map +1 -0
  438. package/dist/webpush.mjs +175 -0
  439. package/dist/webpush.mjs.map +1 -0
  440. package/package.json +189 -3
  441. package/src/cloudflare/schema.sql +127 -0
  442. package/src/cloudflare/workers.d.ts +44 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.cjs","names":[],"sources":["../src/hash.ts"],"sourcesContent":["/**\n * Content hashing — contentHash covers execution semantics only.\n *\n * Human-facing metadata (name / description, node labels) is excluded,\n * because it cannot change which path a user takes:\n * - rewording a description must not invalidate the version an in-flight\n * journey is pinned to;\n * - nor should it surface as a change in `plan`.\n *\n * Storage, by contrast, always keeps the full IR (including the latest\n * description). contentHash carries exactly two responsibilities: deciding\n * whether semantics moved (plan / migration), and pinning a version for\n * in-flight instances. So after a description edit: the UI shows the new text,\n * plan reports no change, and in-flight users are untouched.\n */\n\n/**\n * Keys excluded from hashing.\n * - meta: metadata at any level — workflow (name / description) and\n * node/segment provenance (`loc`, the callsite source map)\n * - label: node and branch-arm names (UI titles / observability, never routing)\n * - reason: the exit / filter audit string. It is written into the audit log\n * and shown in the studio, but no user takes a different path because of it —\n * the same test as a description, so rewording one must not repin in-flight\n * journeys or report as a semantic change in plan.\n * - contentHash: the hash itself\n *\n * Note that a cohort arm's `name` IS hashed: it becomes part of the node id\n * (`{id}.{armName}.{j}`), and node ids are durable step names — renaming an arm\n * changes execution identity.\n */\nconst UNHASHED_KEYS = new Set(['meta', 'label', 'reason', 'contentHash']);\n\n/**\n * Provenance only. `loc` is a source map, not content: it moves with the\n * machine and with the directory the compile ran from, so plan compares full\n * content with it removed (see plan.ts) — otherwise CI, compiling from the\n * workspace root, reports every definition as metadata_only against a deploy\n * compiled from a package directory.\n */\nconst PROVENANCE_KEYS = new Set(['loc']);\n\n/**\n * Fields whose values are maps the *author* keys, not the IR: message props,\n * send_event payloads and action args. Everything inside them is execution\n * data and is hashed whole.\n *\n * This is what keeps the exclusion above positional. Stripping by name at every\n * depth used to reach inside these maps, so a prop or payload field that\n * happened to be called `label` (or `meta`) vanished from the hash: two sends\n * carrying different values hashed identically, `plan` reported a real change\n * as metadata-only, and the deploy wrote different content under the same KV\n * key that in-flight journeys are pinned to.\n *\n * These three are the only `z.record` fields in the IR (see ir.ts). A new one\n * has to be added here, or its contents become strippable by name again.\n *\n * It matters for every key above: a send_event payload may well carry a field\n * called `reason` (subscription_cancelled does), and dropping it would hash two\n * different sends the same.\n */\nconst AUTHOR_KEYED_FIELDS = new Set(['props', 'payload', 'args']);\n\n/** Drop `keys` at the positions the IR defines them, never inside an author-keyed map. */\nfunction stripKeys(value: unknown, keys: ReadonlySet<string>): unknown {\n if (Array.isArray(value)) return value.map((item) => stripKeys(item, keys));\n if (value !== null && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n if (keys.has(key)) continue;\n // Author-keyed: hashed verbatim, never walked into\n out[key] = AUTHOR_KEYED_FIELDS.has(key) ? item : stripKeys(item, keys);\n }\n return out;\n }\n return value;\n}\n\n/** Drop metadata at the positions the IR defines it, leaving execution semantics. */\nexport function stripMeta(value: unknown): unknown {\n return stripKeys(value, UNHASHED_KEYS);\n}\n\n/** Drop provenance, keeping the rest of the metadata — what plan compares. */\nexport function stripProvenance(value: unknown): unknown {\n return stripKeys(value, PROVENANCE_KEYS);\n}\n\n/** Canonical JSON: sorted keys, no whitespace — a stable hash input. */\nexport function canonicalJSON(value: unknown): string {\n // JSON.stringify(undefined) returns undefined, not a string; absent fields become null\n if (value === undefined) return 'null';\n if (Array.isArray(value)) return `[${value.map(canonicalJSON).join(',')}]`;\n if (value !== null && typeof value === 'object') {\n const entries = Object.keys(value as Record<string, unknown>)\n .sort()\n .map(\n (key) => `${JSON.stringify(key)}:${canonicalJSON((value as Record<string, unknown>)[key])}`\n );\n return `{${entries.join(',')}}`;\n }\n return JSON.stringify(value);\n}\n\n/*\n * SHA-256, hand-written and synchronous: crypto.subtle is async (and absent in\n * some embedders), node:crypto is Node-only — the compiler must stay sync and\n * portable. Like the Murmur3 bucketing hash, the known-answer tests pin this\n * implementation to the reference vectors. contentHash is a permanent contract\n * (it addresses stored versions and pins in-flight journeys), so the algorithm\n * must never change once production data exists.\n */\n\n// prettier-ignore\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\n\nconst rotr = (x: number, n: number): number => (x >>> n) | (x << (32 - n));\n\nconst utf8 = new TextEncoder();\n\n/** SHA-256 over the UTF-8 bytes of `input`, as 64 hex chars. */\nexport function sha256Hex(input: string): string {\n const data = utf8.encode(input);\n const bitLenLo = (data.length << 3) >>> 0;\n const bitLenHi = Math.floor(data.length / 0x20000000);\n\n // Pad to a multiple of 64 bytes: 0x80, zeros, then the 64-bit big-endian bit length\n const padded = new Uint8Array((((data.length + 8) >> 6) + 1) << 6);\n padded.set(data);\n padded[data.length] = 0x80;\n const view = new DataView(padded.buffer);\n view.setUint32(padded.length - 8, bitLenHi);\n view.setUint32(padded.length - 4, bitLenLo);\n\n // prettier-ignore\n const state = new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n ]);\n const w = new Uint32Array(64);\n\n for (let offset = 0; offset < padded.length; offset += 64) {\n for (let i = 0; i < 16; i++) w[i] = view.getUint32(offset + i * 4);\n for (let i = 16; i < 64; i++) {\n const w15 = w[i - 15];\n const w2 = w[i - 2];\n const s0 = rotr(w15, 7) ^ rotr(w15, 18) ^ (w15 >>> 3);\n const s1 = rotr(w2, 17) ^ rotr(w2, 19) ^ (w2 >>> 10);\n w[i] = (w[i - 16] + s0 + w[i - 7] + s1) >>> 0;\n }\n\n let [a, b, c, d, e, f, g, h] = state as unknown as [\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n ];\n for (let i = 0; i < 64; i++) {\n const s1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);\n const ch = (e & f) ^ (~e & g);\n const t1 = (h + s1 + ch + K[i] + w[i]) >>> 0;\n const s0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);\n const maj = (a & b) ^ (a & c) ^ (b & c);\n const t2 = (s0 + maj) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) >>> 0;\n }\n state[0] = (state[0] + a) >>> 0;\n state[1] = (state[1] + b) >>> 0;\n state[2] = (state[2] + c) >>> 0;\n state[3] = (state[3] + d) >>> 0;\n state[4] = (state[4] + e) >>> 0;\n state[5] = (state[5] + f) >>> 0;\n state[6] = (state[6] + g) >>> 0;\n state[7] = (state[7] + h) >>> 0;\n }\n\n return [...state].map((word) => word.toString(16).padStart(8, '0')).join('');\n}\n\n/**\n * Truncate to 128 bits (32 hex chars): collision-safe for content addressing at\n * any realistic definition count, and short enough for KV keys and instance ids.\n */\nconst contentHashOf = (input: string): string => sha256Hex(input).slice(0, 32);\n\n/** Content hash of execution semantics (strip metadata → canonical JSON → truncated SHA-256). */\nexport function semanticHash(value: unknown): string {\n return contentHashOf(canonicalJSON(stripMeta(value)));\n}\n\n/** Canonical hash of the full content — used to tell \"semantics unchanged, metadata edited\" apart. */\nexport function fullHash(value: unknown): string {\n return contentHashOf(canonicalJSON(value));\n}\n"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ //#region src/hash.d.ts
2
+ /**
3
+ * Content hashing — contentHash covers execution semantics only.
4
+ *
5
+ * Human-facing metadata (name / description, node labels) is excluded,
6
+ * because it cannot change which path a user takes:
7
+ * - rewording a description must not invalidate the version an in-flight
8
+ * journey is pinned to;
9
+ * - nor should it surface as a change in `plan`.
10
+ *
11
+ * Storage, by contrast, always keeps the full IR (including the latest
12
+ * description). contentHash carries exactly two responsibilities: deciding
13
+ * whether semantics moved (plan / migration), and pinning a version for
14
+ * in-flight instances. So after a description edit: the UI shows the new text,
15
+ * plan reports no change, and in-flight users are untouched.
16
+ */
17
+ /** Drop metadata at the positions the IR defines it, leaving execution semantics. */
18
+ export declare function stripMeta(value: unknown): unknown;
19
+ /** Drop provenance, keeping the rest of the metadata — what plan compares. */
20
+ export declare function stripProvenance(value: unknown): unknown;
21
+ /** Canonical JSON: sorted keys, no whitespace — a stable hash input. */
22
+ export declare function canonicalJSON(value: unknown): string;
23
+ /** SHA-256 over the UTF-8 bytes of `input`, as 64 hex chars. */
24
+ export declare function sha256Hex(input: string): string;
25
+ /** Content hash of execution semantics (strip metadata → canonical JSON → truncated SHA-256). */
26
+ export declare function semanticHash(value: unknown): string;
27
+ /** Canonical hash of the full content — used to tell "semantics unchanged, metadata edited" apart. */
28
+ export declare function fullHash(value: unknown): string;
29
+ //#endregion
30
+ //# sourceMappingURL=hash.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.cts","names":[],"sources":["../src/hash.ts"],"mappings":";;;;;;;;;;;;;;;;;wBA+EgB,UAAU;;wBAKV,gBAAgB;;wBAKhB,cAAc;;wBAyCd,UAAU;;wBA2EV,aAAa;;wBAKb,SAAS"}
@@ -0,0 +1,30 @@
1
+ //#region src/hash.d.ts
2
+ /**
3
+ * Content hashing — contentHash covers execution semantics only.
4
+ *
5
+ * Human-facing metadata (name / description, node labels) is excluded,
6
+ * because it cannot change which path a user takes:
7
+ * - rewording a description must not invalidate the version an in-flight
8
+ * journey is pinned to;
9
+ * - nor should it surface as a change in `plan`.
10
+ *
11
+ * Storage, by contrast, always keeps the full IR (including the latest
12
+ * description). contentHash carries exactly two responsibilities: deciding
13
+ * whether semantics moved (plan / migration), and pinning a version for
14
+ * in-flight instances. So after a description edit: the UI shows the new text,
15
+ * plan reports no change, and in-flight users are untouched.
16
+ */
17
+ /** Drop metadata at the positions the IR defines it, leaving execution semantics. */
18
+ export declare function stripMeta(value: unknown): unknown;
19
+ /** Drop provenance, keeping the rest of the metadata — what plan compares. */
20
+ export declare function stripProvenance(value: unknown): unknown;
21
+ /** Canonical JSON: sorted keys, no whitespace — a stable hash input. */
22
+ export declare function canonicalJSON(value: unknown): string;
23
+ /** SHA-256 over the UTF-8 bytes of `input`, as 64 hex chars. */
24
+ export declare function sha256Hex(input: string): string;
25
+ /** Content hash of execution semantics (strip metadata → canonical JSON → truncated SHA-256). */
26
+ export declare function semanticHash(value: unknown): string;
27
+ /** Canonical hash of the full content — used to tell "semantics unchanged, metadata edited" apart. */
28
+ export declare function fullHash(value: unknown): string;
29
+ //#endregion
30
+ //# sourceMappingURL=hash.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.mts","names":[],"sources":["../src/hash.ts"],"mappings":";;;;;;;;;;;;;;;;;wBA+EgB,UAAU;;wBAKV,gBAAgB;;wBAKhB,cAAc;;wBAyCd,UAAU;;wBA2EV,aAAa;;wBAKb,SAAS"}
package/dist/hash.mjs ADDED
@@ -0,0 +1,239 @@
1
+ //#region src/hash.ts
2
+ /**
3
+ * Content hashing — contentHash covers execution semantics only.
4
+ *
5
+ * Human-facing metadata (name / description, node labels) is excluded,
6
+ * because it cannot change which path a user takes:
7
+ * - rewording a description must not invalidate the version an in-flight
8
+ * journey is pinned to;
9
+ * - nor should it surface as a change in `plan`.
10
+ *
11
+ * Storage, by contrast, always keeps the full IR (including the latest
12
+ * description). contentHash carries exactly two responsibilities: deciding
13
+ * whether semantics moved (plan / migration), and pinning a version for
14
+ * in-flight instances. So after a description edit: the UI shows the new text,
15
+ * plan reports no change, and in-flight users are untouched.
16
+ */
17
+ /**
18
+ * Keys excluded from hashing.
19
+ * - meta: metadata at any level — workflow (name / description) and
20
+ * node/segment provenance (`loc`, the callsite source map)
21
+ * - label: node and branch-arm names (UI titles / observability, never routing)
22
+ * - reason: the exit / filter audit string. It is written into the audit log
23
+ * and shown in the studio, but no user takes a different path because of it —
24
+ * the same test as a description, so rewording one must not repin in-flight
25
+ * journeys or report as a semantic change in plan.
26
+ * - contentHash: the hash itself
27
+ *
28
+ * Note that a cohort arm's `name` IS hashed: it becomes part of the node id
29
+ * (`{id}.{armName}.{j}`), and node ids are durable step names — renaming an arm
30
+ * changes execution identity.
31
+ */
32
+ const UNHASHED_KEYS = /* @__PURE__ */ new Set([
33
+ "meta",
34
+ "label",
35
+ "reason",
36
+ "contentHash"
37
+ ]);
38
+ /**
39
+ * Provenance only. `loc` is a source map, not content: it moves with the
40
+ * machine and with the directory the compile ran from, so plan compares full
41
+ * content with it removed (see plan.ts) — otherwise CI, compiling from the
42
+ * workspace root, reports every definition as metadata_only against a deploy
43
+ * compiled from a package directory.
44
+ */
45
+ const PROVENANCE_KEYS = /* @__PURE__ */ new Set(["loc"]);
46
+ /**
47
+ * Fields whose values are maps the *author* keys, not the IR: message props,
48
+ * send_event payloads and action args. Everything inside them is execution
49
+ * data and is hashed whole.
50
+ *
51
+ * This is what keeps the exclusion above positional. Stripping by name at every
52
+ * depth used to reach inside these maps, so a prop or payload field that
53
+ * happened to be called `label` (or `meta`) vanished from the hash: two sends
54
+ * carrying different values hashed identically, `plan` reported a real change
55
+ * as metadata-only, and the deploy wrote different content under the same KV
56
+ * key that in-flight journeys are pinned to.
57
+ *
58
+ * These three are the only `z.record` fields in the IR (see ir.ts). A new one
59
+ * has to be added here, or its contents become strippable by name again.
60
+ *
61
+ * It matters for every key above: a send_event payload may well carry a field
62
+ * called `reason` (subscription_cancelled does), and dropping it would hash two
63
+ * different sends the same.
64
+ */
65
+ const AUTHOR_KEYED_FIELDS = /* @__PURE__ */ new Set([
66
+ "props",
67
+ "payload",
68
+ "args"
69
+ ]);
70
+ /** Drop `keys` at the positions the IR defines them, never inside an author-keyed map. */
71
+ function stripKeys(value, keys) {
72
+ if (Array.isArray(value)) return value.map((item) => stripKeys(item, keys));
73
+ if (value !== null && typeof value === "object") {
74
+ const out = {};
75
+ for (const [key, item] of Object.entries(value)) {
76
+ if (keys.has(key)) continue;
77
+ out[key] = AUTHOR_KEYED_FIELDS.has(key) ? item : stripKeys(item, keys);
78
+ }
79
+ return out;
80
+ }
81
+ return value;
82
+ }
83
+ /** Drop metadata at the positions the IR defines it, leaving execution semantics. */
84
+ function stripMeta(value) {
85
+ return stripKeys(value, UNHASHED_KEYS);
86
+ }
87
+ /** Drop provenance, keeping the rest of the metadata — what plan compares. */
88
+ function stripProvenance(value) {
89
+ return stripKeys(value, PROVENANCE_KEYS);
90
+ }
91
+ /** Canonical JSON: sorted keys, no whitespace — a stable hash input. */
92
+ function canonicalJSON(value) {
93
+ if (value === void 0) return "null";
94
+ if (Array.isArray(value)) return `[${value.map(canonicalJSON).join(",")}]`;
95
+ if (value !== null && typeof value === "object") return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${canonicalJSON(value[key])}`).join(",")}}`;
96
+ return JSON.stringify(value);
97
+ }
98
+ const K = new Uint32Array([
99
+ 1116352408,
100
+ 1899447441,
101
+ 3049323471,
102
+ 3921009573,
103
+ 961987163,
104
+ 1508970993,
105
+ 2453635748,
106
+ 2870763221,
107
+ 3624381080,
108
+ 310598401,
109
+ 607225278,
110
+ 1426881987,
111
+ 1925078388,
112
+ 2162078206,
113
+ 2614888103,
114
+ 3248222580,
115
+ 3835390401,
116
+ 4022224774,
117
+ 264347078,
118
+ 604807628,
119
+ 770255983,
120
+ 1249150122,
121
+ 1555081692,
122
+ 1996064986,
123
+ 2554220882,
124
+ 2821834349,
125
+ 2952996808,
126
+ 3210313671,
127
+ 3336571891,
128
+ 3584528711,
129
+ 113926993,
130
+ 338241895,
131
+ 666307205,
132
+ 773529912,
133
+ 1294757372,
134
+ 1396182291,
135
+ 1695183700,
136
+ 1986661051,
137
+ 2177026350,
138
+ 2456956037,
139
+ 2730485921,
140
+ 2820302411,
141
+ 3259730800,
142
+ 3345764771,
143
+ 3516065817,
144
+ 3600352804,
145
+ 4094571909,
146
+ 275423344,
147
+ 430227734,
148
+ 506948616,
149
+ 659060556,
150
+ 883997877,
151
+ 958139571,
152
+ 1322822218,
153
+ 1537002063,
154
+ 1747873779,
155
+ 1955562222,
156
+ 2024104815,
157
+ 2227730452,
158
+ 2361852424,
159
+ 2428436474,
160
+ 2756734187,
161
+ 3204031479,
162
+ 3329325298
163
+ ]);
164
+ const rotr = (x, n) => x >>> n | x << 32 - n;
165
+ const utf8 = new TextEncoder();
166
+ /** SHA-256 over the UTF-8 bytes of `input`, as 64 hex chars. */
167
+ function sha256Hex(input) {
168
+ const data = utf8.encode(input);
169
+ const bitLenLo = data.length << 3 >>> 0;
170
+ const bitLenHi = Math.floor(data.length / 536870912);
171
+ const padded = new Uint8Array((data.length + 8 >> 6) + 1 << 6);
172
+ padded.set(data);
173
+ padded[data.length] = 128;
174
+ const view = new DataView(padded.buffer);
175
+ view.setUint32(padded.length - 8, bitLenHi);
176
+ view.setUint32(padded.length - 4, bitLenLo);
177
+ const state = new Uint32Array([
178
+ 1779033703,
179
+ 3144134277,
180
+ 1013904242,
181
+ 2773480762,
182
+ 1359893119,
183
+ 2600822924,
184
+ 528734635,
185
+ 1541459225
186
+ ]);
187
+ const w = /* @__PURE__ */ new Uint32Array(64);
188
+ for (let offset = 0; offset < padded.length; offset += 64) {
189
+ for (let i = 0; i < 16; i++) w[i] = view.getUint32(offset + i * 4);
190
+ for (let i = 16; i < 64; i++) {
191
+ const w15 = w[i - 15];
192
+ const w2 = w[i - 2];
193
+ const s0 = rotr(w15, 7) ^ rotr(w15, 18) ^ w15 >>> 3;
194
+ const s1 = rotr(w2, 17) ^ rotr(w2, 19) ^ w2 >>> 10;
195
+ w[i] = w[i - 16] + s0 + w[i - 7] + s1 >>> 0;
196
+ }
197
+ let [a, b, c, d, e, f, g, h] = state;
198
+ for (let i = 0; i < 64; i++) {
199
+ const s1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);
200
+ const ch = e & f ^ ~e & g;
201
+ const t1 = h + s1 + ch + K[i] + w[i] >>> 0;
202
+ const t2 = (rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)) + (a & b ^ a & c ^ b & c) >>> 0;
203
+ h = g;
204
+ g = f;
205
+ f = e;
206
+ e = d + t1 >>> 0;
207
+ d = c;
208
+ c = b;
209
+ b = a;
210
+ a = t1 + t2 >>> 0;
211
+ }
212
+ state[0] = state[0] + a >>> 0;
213
+ state[1] = state[1] + b >>> 0;
214
+ state[2] = state[2] + c >>> 0;
215
+ state[3] = state[3] + d >>> 0;
216
+ state[4] = state[4] + e >>> 0;
217
+ state[5] = state[5] + f >>> 0;
218
+ state[6] = state[6] + g >>> 0;
219
+ state[7] = state[7] + h >>> 0;
220
+ }
221
+ return [...state].map((word) => word.toString(16).padStart(8, "0")).join("");
222
+ }
223
+ /**
224
+ * Truncate to 128 bits (32 hex chars): collision-safe for content addressing at
225
+ * any realistic definition count, and short enough for KV keys and instance ids.
226
+ */
227
+ const contentHashOf = (input) => sha256Hex(input).slice(0, 32);
228
+ /** Content hash of execution semantics (strip metadata → canonical JSON → truncated SHA-256). */
229
+ function semanticHash(value) {
230
+ return contentHashOf(canonicalJSON(stripMeta(value)));
231
+ }
232
+ /** Canonical hash of the full content — used to tell "semantics unchanged, metadata edited" apart. */
233
+ function fullHash(value) {
234
+ return contentHashOf(canonicalJSON(value));
235
+ }
236
+ //#endregion
237
+ export { canonicalJSON, fullHash, semanticHash, sha256Hex, stripMeta, stripProvenance };
238
+
239
+ //# sourceMappingURL=hash.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.mjs","names":[],"sources":["../src/hash.ts"],"sourcesContent":["/**\n * Content hashing — contentHash covers execution semantics only.\n *\n * Human-facing metadata (name / description, node labels) is excluded,\n * because it cannot change which path a user takes:\n * - rewording a description must not invalidate the version an in-flight\n * journey is pinned to;\n * - nor should it surface as a change in `plan`.\n *\n * Storage, by contrast, always keeps the full IR (including the latest\n * description). contentHash carries exactly two responsibilities: deciding\n * whether semantics moved (plan / migration), and pinning a version for\n * in-flight instances. So after a description edit: the UI shows the new text,\n * plan reports no change, and in-flight users are untouched.\n */\n\n/**\n * Keys excluded from hashing.\n * - meta: metadata at any level — workflow (name / description) and\n * node/segment provenance (`loc`, the callsite source map)\n * - label: node and branch-arm names (UI titles / observability, never routing)\n * - reason: the exit / filter audit string. It is written into the audit log\n * and shown in the studio, but no user takes a different path because of it —\n * the same test as a description, so rewording one must not repin in-flight\n * journeys or report as a semantic change in plan.\n * - contentHash: the hash itself\n *\n * Note that a cohort arm's `name` IS hashed: it becomes part of the node id\n * (`{id}.{armName}.{j}`), and node ids are durable step names — renaming an arm\n * changes execution identity.\n */\nconst UNHASHED_KEYS = new Set(['meta', 'label', 'reason', 'contentHash']);\n\n/**\n * Provenance only. `loc` is a source map, not content: it moves with the\n * machine and with the directory the compile ran from, so plan compares full\n * content with it removed (see plan.ts) — otherwise CI, compiling from the\n * workspace root, reports every definition as metadata_only against a deploy\n * compiled from a package directory.\n */\nconst PROVENANCE_KEYS = new Set(['loc']);\n\n/**\n * Fields whose values are maps the *author* keys, not the IR: message props,\n * send_event payloads and action args. Everything inside them is execution\n * data and is hashed whole.\n *\n * This is what keeps the exclusion above positional. Stripping by name at every\n * depth used to reach inside these maps, so a prop or payload field that\n * happened to be called `label` (or `meta`) vanished from the hash: two sends\n * carrying different values hashed identically, `plan` reported a real change\n * as metadata-only, and the deploy wrote different content under the same KV\n * key that in-flight journeys are pinned to.\n *\n * These three are the only `z.record` fields in the IR (see ir.ts). A new one\n * has to be added here, or its contents become strippable by name again.\n *\n * It matters for every key above: a send_event payload may well carry a field\n * called `reason` (subscription_cancelled does), and dropping it would hash two\n * different sends the same.\n */\nconst AUTHOR_KEYED_FIELDS = new Set(['props', 'payload', 'args']);\n\n/** Drop `keys` at the positions the IR defines them, never inside an author-keyed map. */\nfunction stripKeys(value: unknown, keys: ReadonlySet<string>): unknown {\n if (Array.isArray(value)) return value.map((item) => stripKeys(item, keys));\n if (value !== null && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n if (keys.has(key)) continue;\n // Author-keyed: hashed verbatim, never walked into\n out[key] = AUTHOR_KEYED_FIELDS.has(key) ? item : stripKeys(item, keys);\n }\n return out;\n }\n return value;\n}\n\n/** Drop metadata at the positions the IR defines it, leaving execution semantics. */\nexport function stripMeta(value: unknown): unknown {\n return stripKeys(value, UNHASHED_KEYS);\n}\n\n/** Drop provenance, keeping the rest of the metadata — what plan compares. */\nexport function stripProvenance(value: unknown): unknown {\n return stripKeys(value, PROVENANCE_KEYS);\n}\n\n/** Canonical JSON: sorted keys, no whitespace — a stable hash input. */\nexport function canonicalJSON(value: unknown): string {\n // JSON.stringify(undefined) returns undefined, not a string; absent fields become null\n if (value === undefined) return 'null';\n if (Array.isArray(value)) return `[${value.map(canonicalJSON).join(',')}]`;\n if (value !== null && typeof value === 'object') {\n const entries = Object.keys(value as Record<string, unknown>)\n .sort()\n .map(\n (key) => `${JSON.stringify(key)}:${canonicalJSON((value as Record<string, unknown>)[key])}`\n );\n return `{${entries.join(',')}}`;\n }\n return JSON.stringify(value);\n}\n\n/*\n * SHA-256, hand-written and synchronous: crypto.subtle is async (and absent in\n * some embedders), node:crypto is Node-only — the compiler must stay sync and\n * portable. Like the Murmur3 bucketing hash, the known-answer tests pin this\n * implementation to the reference vectors. contentHash is a permanent contract\n * (it addresses stored versions and pins in-flight journeys), so the algorithm\n * must never change once production data exists.\n */\n\n// prettier-ignore\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\n\nconst rotr = (x: number, n: number): number => (x >>> n) | (x << (32 - n));\n\nconst utf8 = new TextEncoder();\n\n/** SHA-256 over the UTF-8 bytes of `input`, as 64 hex chars. */\nexport function sha256Hex(input: string): string {\n const data = utf8.encode(input);\n const bitLenLo = (data.length << 3) >>> 0;\n const bitLenHi = Math.floor(data.length / 0x20000000);\n\n // Pad to a multiple of 64 bytes: 0x80, zeros, then the 64-bit big-endian bit length\n const padded = new Uint8Array((((data.length + 8) >> 6) + 1) << 6);\n padded.set(data);\n padded[data.length] = 0x80;\n const view = new DataView(padded.buffer);\n view.setUint32(padded.length - 8, bitLenHi);\n view.setUint32(padded.length - 4, bitLenLo);\n\n // prettier-ignore\n const state = new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n ]);\n const w = new Uint32Array(64);\n\n for (let offset = 0; offset < padded.length; offset += 64) {\n for (let i = 0; i < 16; i++) w[i] = view.getUint32(offset + i * 4);\n for (let i = 16; i < 64; i++) {\n const w15 = w[i - 15];\n const w2 = w[i - 2];\n const s0 = rotr(w15, 7) ^ rotr(w15, 18) ^ (w15 >>> 3);\n const s1 = rotr(w2, 17) ^ rotr(w2, 19) ^ (w2 >>> 10);\n w[i] = (w[i - 16] + s0 + w[i - 7] + s1) >>> 0;\n }\n\n let [a, b, c, d, e, f, g, h] = state as unknown as [\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n ];\n for (let i = 0; i < 64; i++) {\n const s1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);\n const ch = (e & f) ^ (~e & g);\n const t1 = (h + s1 + ch + K[i] + w[i]) >>> 0;\n const s0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);\n const maj = (a & b) ^ (a & c) ^ (b & c);\n const t2 = (s0 + maj) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) >>> 0;\n }\n state[0] = (state[0] + a) >>> 0;\n state[1] = (state[1] + b) >>> 0;\n state[2] = (state[2] + c) >>> 0;\n state[3] = (state[3] + d) >>> 0;\n state[4] = (state[4] + e) >>> 0;\n state[5] = (state[5] + f) >>> 0;\n state[6] = (state[6] + g) >>> 0;\n state[7] = (state[7] + h) >>> 0;\n }\n\n return [...state].map((word) => word.toString(16).padStart(8, '0')).join('');\n}\n\n/**\n * Truncate to 128 bits (32 hex chars): collision-safe for content addressing at\n * any realistic definition count, and short enough for KV keys and instance ids.\n */\nconst contentHashOf = (input: string): string => sha256Hex(input).slice(0, 32);\n\n/** Content hash of execution semantics (strip metadata → canonical JSON → truncated SHA-256). */\nexport function semanticHash(value: unknown): string {\n return contentHashOf(canonicalJSON(stripMeta(value)));\n}\n\n/** Canonical hash of the full content — used to tell \"semantics unchanged, metadata edited\" apart. */\nexport function fullHash(value: unknown): string {\n return contentHashOf(canonicalJSON(value));\n}\n"],"mappings":"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"}
package/dist/index.cjs ADDED
@@ -0,0 +1,100 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_hash = require("./hash.cjs");
3
+ const require_dsl_action = require("./dsl/action.cjs");
4
+ const require_dsl_refs = require("./dsl/refs.cjs");
5
+ const require_templates = require("./templates.cjs");
6
+ const require_dsl_template = require("./dsl/template.cjs");
7
+ const require_dsl_condition = require("./dsl/condition.cjs");
8
+ const require_dsl_flow = require("./dsl/flow.cjs");
9
+ const require_dsl_trigger = require("./dsl/trigger.cjs");
10
+ const require_ir = require("./ir.cjs");
11
+ const require_dsl_workflow = require("./dsl/workflow.cjs");
12
+ const require_dsl_bundle = require("./dsl/bundle.cjs");
13
+ require("./dsl/index.cjs");
14
+ const require_config = require("./config.cjs");
15
+ const require_contract = require("./contract.cjs");
16
+ const require_plan = require("./plan.cjs");
17
+ const require_runtime = require("./runtime.cjs");
18
+ exports.ActionIR = require_ir.ActionIR;
19
+ exports.BundleIR = require_ir.BundleIR;
20
+ exports.ChannelIR = require_ir.ChannelIR;
21
+ exports.ConditionIR = require_ir.ConditionIR;
22
+ exports.ConfigCompileError = require_config.ConfigCompileError;
23
+ exports.ContractValidationError = require_contract.ContractValidationError;
24
+ exports.DurationIR = require_ir.DurationIR;
25
+ exports.GoalIR = require_ir.GoalIR;
26
+ exports.IR_VERSION = require_ir.IR_VERSION;
27
+ exports.MetaIR = require_ir.MetaIR;
28
+ exports.NodeIR = require_ir.NodeIR;
29
+ exports.NodeMetaIR = require_ir.NodeMetaIR;
30
+ exports.PropValueIR = require_ir.PropValueIR;
31
+ exports.PropertyOperatorIR = require_ir.PropertyOperatorIR;
32
+ exports.ScalarIR = require_ir.ScalarIR;
33
+ exports.SegmentIR = require_ir.SegmentIR;
34
+ exports.SourceLocIR = require_ir.SourceLocIR;
35
+ exports.TemplateIR = require_ir.TemplateIR;
36
+ exports.TemplateValidationError = require_templates.TemplateValidationError;
37
+ exports.TriggerIR = require_ir.TriggerIR;
38
+ exports.UserPropertyRefIR = require_ir.UserPropertyRefIR;
39
+ exports.WeekdayIR = require_ir.WeekdayIR;
40
+ exports.WorkflowIR = require_ir.WorkflowIR;
41
+ exports.action = require_dsl_action.action;
42
+ exports.and = require_dsl_condition.and;
43
+ exports.apnsEnvironment = require_config.apnsEnvironment;
44
+ exports.assertSupportedSchema = require_templates.assertSupportedSchema;
45
+ exports.between = require_dsl_condition.between;
46
+ exports.canonicalJSON = require_hash.canonicalJSON;
47
+ exports.checkEvent = require_contract.checkEvent;
48
+ exports.compileBundle = require_dsl_bundle.compileBundle;
49
+ exports.compileConfig = require_config.compileConfig;
50
+ exports.contains = require_dsl_condition.contains;
51
+ exports.defineConfig = require_config.defineConfig;
52
+ exports.defineContract = require_contract.defineContract;
53
+ exports.discordTemplate = require_templates.discordTemplate;
54
+ exports.emailTemplate = require_templates.emailTemplate;
55
+ exports.eq = require_dsl_condition.eq;
56
+ exports.event = require_dsl_refs.event;
57
+ exports.exists = require_dsl_condition.exists;
58
+ exports.flow = require_dsl_flow.flow;
59
+ exports.formatEmailAddress = require_config.formatEmailAddress;
60
+ exports.fullHash = require_hash.fullHash;
61
+ exports.gt = require_dsl_condition.gt;
62
+ exports.gte = require_dsl_condition.gte;
63
+ exports.inArray = require_dsl_condition.inArray;
64
+ exports.isConfig = require_config.isConfig;
65
+ exports.isContract = require_contract.isContract;
66
+ exports.isDiscordTemplate = require_templates.isDiscordTemplate;
67
+ exports.isEmailTemplate = require_templates.isEmailTemplate;
68
+ exports.isPushTemplate = require_templates.isPushTemplate;
69
+ exports.isSemanticChange = require_plan.isSemanticChange;
70
+ exports.isSlackTemplate = require_templates.isSlackTemplate;
71
+ exports.lt = require_dsl_condition.lt;
72
+ exports.lte = require_dsl_condition.lte;
73
+ exports.ne = require_dsl_condition.ne;
74
+ exports.not = require_dsl_condition.not;
75
+ exports.notBetween = require_dsl_condition.notBetween;
76
+ exports.notContains = require_dsl_condition.notContains;
77
+ exports.notExists = require_dsl_condition.notExists;
78
+ exports.notInArray = require_dsl_condition.notInArray;
79
+ exports.or = require_dsl_condition.or;
80
+ exports.parseTemplateProps = require_templates.parseTemplateProps;
81
+ exports.performed = require_dsl_condition.performed;
82
+ exports.plan = require_plan.plan;
83
+ exports.pushTemplate = require_templates.pushTemplate;
84
+ exports.reachable = require_dsl_condition.reachable;
85
+ exports.registryValidator = require_templates.registryValidator;
86
+ exports.renderDiscordContent = require_templates.renderDiscordContent;
87
+ exports.renderPushContent = require_templates.renderPushContent;
88
+ exports.renderSlackContent = require_templates.renderSlackContent;
89
+ exports.resolveRuntime = require_runtime.resolveRuntime;
90
+ exports.segment = require_dsl_condition.segment;
91
+ exports.semanticHash = require_hash.semanticHash;
92
+ exports.sha256Hex = require_hash.sha256Hex;
93
+ exports.slackTemplate = require_templates.slackTemplate;
94
+ exports.stripMeta = require_hash.stripMeta;
95
+ exports.stripProvenance = require_hash.stripProvenance;
96
+ exports.template = require_dsl_template.template;
97
+ exports.templates = require_dsl_template.templates;
98
+ exports.trigger = require_dsl_trigger.trigger;
99
+ exports.user = require_dsl_refs.user;
100
+ exports.workflow = require_dsl_workflow.workflow;
@@ -0,0 +1,18 @@
1
+ import { ActionIR, BundleIR, ChannelIR, ConditionIR, DurationIR, GoalIR, IR_VERSION, MetaIR, NodeIR, NodeMetaIR, PropValueIR, PropertyOperatorIR, ScalarIR, SegmentIR, SourceLocIR, TemplateIR, TriggerIR, UserPropertyRefIR, WeekdayIR, WorkflowIR } from "./ir.cjs";
2
+ import { AnyTemplate, DiscordContent, DiscordTemplate, EmailTemplate, EmailTemplateDefinition, PropsSchema, PushContent, PushTemplate, PushTemplateDefinition, ResolvedProps, SlackContent, SlackTemplate, TemplateChannel, TemplateIssue, TemplateValidationError, WebhookTemplateDefinition, assertSupportedSchema, discordTemplate, emailTemplate, isDiscordTemplate, isEmailTemplate, isPushTemplate, isSlackTemplate, parseTemplateProps, pushTemplate, registryValidator, renderDiscordContent, renderPushContent, renderSlackContent, slackTemplate } from "./templates.cjs";
3
+ import { ActionContext, ActionHandler, ActionRef, action } from "./dsl/action.cjs";
4
+ import { Duration, EventMap, TimeOfDay, UserPropertyBase, Weekday } from "./dsl/base.cjs";
5
+ import { EventRef, EventRefs, MessageArgs, PayloadRef, PayloadRefNode, PayloadRefs, PropInput, PropsInput, UserPropertyRef, UserRefs, event, user } from "./dsl/refs.cjs";
6
+ import { Channel, EmptyProps, PropsOf, TemplateFactory, TemplateRef, TemplateRefTable, TemplateRefs, TemplateRegistry, template, templates } from "./dsl/template.cjs";
7
+ import { Condition, PayloadWhere, PerformedOptions, SegmentDefinition, SegmentRef, and, between, contains, eq, exists, gt, gte, inArray, lt, lte, ne, not, notBetween, notContains, notExists, notInArray, or, performed, reachable, segment } from "./dsl/condition.cjs";
8
+ import { BranchArm, BranchCase, EmitArgs, EmitPayload, Flow, FlowBuilder, PushOptions, SubFlow, flow } from "./dsl/flow.cjs";
9
+ import { DateTime, EventTriggerOptions, TriggerFactory, TriggerRef, trigger } from "./dsl/trigger.cjs";
10
+ import { GoalOptions, WorkflowBuilder, WorkflowDefinition, workflow } from "./dsl/workflow.cjs";
11
+ import { compileBundle } from "./dsl/bundle.cjs";
12
+ import "./dsl/index.cjs";
13
+ import { Contract, ContractDefinition, ContractIssue, ContractResult, ContractValidationError, DeclaredOutput, EventPayload, ProfilePatch, checkEvent, defineContract, isContract } from "./contract.cjs";
14
+ import { JourneyMode, JourneyRuntimeConfig, JourneyRuntimeOptions, resolveRuntime } from "./runtime.cjs";
15
+ import { ApnsConfig, ConfigCompileError, DatabaseConfig, EmailAddress, EmailConfig, FcmConfig, JourneyConfig, JourneyConfigDefinition, WebPushConfig, apnsEnvironment, compileConfig, defineConfig, formatEmailAddress, isConfig } from "./config.cjs";
16
+ import { canonicalJSON, fullHash, semanticHash, sha256Hex, stripMeta, stripProvenance } from "./hash.cjs";
17
+ import { BundlePlan, ChangeStatus, NodeChange, ResourceChange, WorkflowChange, isSemanticChange, plan } from "./plan.cjs";
18
+ export { type ActionContext, type ActionHandler, ActionIR, type ActionRef, AnyTemplate, ApnsConfig, type BranchArm, type BranchCase, BundleIR, BundlePlan, ChangeStatus, type Channel, ChannelIR, type Condition, ConditionIR, ConfigCompileError, Contract, ContractDefinition, ContractIssue, ContractResult, ContractValidationError, DatabaseConfig, type DateTime, DeclaredOutput, DiscordContent, DiscordTemplate, type Duration, DurationIR, EmailAddress, EmailConfig, EmailTemplate, EmailTemplateDefinition, type EmitArgs, type EmitPayload, type EmptyProps, type EventMap, EventPayload, type EventRef, type EventRefs, type EventTriggerOptions, FcmConfig, type Flow, type FlowBuilder, GoalIR, type GoalOptions, IR_VERSION, JourneyConfig, JourneyConfigDefinition, JourneyMode, JourneyRuntimeConfig, JourneyRuntimeOptions, type MessageArgs, MetaIR, NodeChange, NodeIR, NodeMetaIR, type PayloadRef, type PayloadRefNode, type PayloadRefs, type PayloadWhere, type PerformedOptions, ProfilePatch, type PropInput, PropValueIR, PropertyOperatorIR, type PropsInput, type PropsOf, PropsSchema, PushContent, type PushOptions, PushTemplate, PushTemplateDefinition, ResolvedProps, ResourceChange, ScalarIR, type SegmentDefinition, SegmentIR, type SegmentRef, SlackContent, SlackTemplate, SourceLocIR, type SubFlow, TemplateChannel, type TemplateFactory, TemplateIR, TemplateIssue, type TemplateRef, type TemplateRefTable, type TemplateRefs, type TemplateRegistry, TemplateValidationError, type TimeOfDay, type TriggerFactory, TriggerIR, type TriggerRef, type UserPropertyBase, type UserPropertyRef, UserPropertyRefIR, type UserRefs, WebPushConfig, WebhookTemplateDefinition, type Weekday, WeekdayIR, type WorkflowBuilder, WorkflowChange, type WorkflowDefinition, WorkflowIR, action, and, apnsEnvironment, assertSupportedSchema, between, canonicalJSON, checkEvent, compileBundle, compileConfig, contains, defineConfig, defineContract, discordTemplate, emailTemplate, eq, event, exists, flow, formatEmailAddress, fullHash, gt, gte, inArray, isConfig, isContract, isDiscordTemplate, isEmailTemplate, isPushTemplate, isSemanticChange, isSlackTemplate, lt, lte, ne, not, notBetween, notContains, notExists, notInArray, or, parseTemplateProps, performed, plan, pushTemplate, reachable, registryValidator, renderDiscordContent, renderPushContent, renderSlackContent, resolveRuntime, segment, semanticHash, sha256Hex, slackTemplate, stripMeta, stripProvenance, template, templates, trigger, user, workflow };
@@ -0,0 +1,18 @@
1
+ import { ActionIR, BundleIR, ChannelIR, ConditionIR, DurationIR, GoalIR, IR_VERSION, MetaIR, NodeIR, NodeMetaIR, PropValueIR, PropertyOperatorIR, ScalarIR, SegmentIR, SourceLocIR, TemplateIR, TriggerIR, UserPropertyRefIR, WeekdayIR, WorkflowIR } from "./ir.mjs";
2
+ import { AnyTemplate, DiscordContent, DiscordTemplate, EmailTemplate, EmailTemplateDefinition, PropsSchema, PushContent, PushTemplate, PushTemplateDefinition, ResolvedProps, SlackContent, SlackTemplate, TemplateChannel, TemplateIssue, TemplateValidationError, WebhookTemplateDefinition, assertSupportedSchema, discordTemplate, emailTemplate, isDiscordTemplate, isEmailTemplate, isPushTemplate, isSlackTemplate, parseTemplateProps, pushTemplate, registryValidator, renderDiscordContent, renderPushContent, renderSlackContent, slackTemplate } from "./templates.mjs";
3
+ import { ActionContext, ActionHandler, ActionRef, action } from "./dsl/action.mjs";
4
+ import { Duration, EventMap, TimeOfDay, UserPropertyBase, Weekday } from "./dsl/base.mjs";
5
+ import { EventRef, EventRefs, MessageArgs, PayloadRef, PayloadRefNode, PayloadRefs, PropInput, PropsInput, UserPropertyRef, UserRefs, event, user } from "./dsl/refs.mjs";
6
+ import { Channel, EmptyProps, PropsOf, TemplateFactory, TemplateRef, TemplateRefTable, TemplateRefs, TemplateRegistry, template, templates } from "./dsl/template.mjs";
7
+ import { Condition, PayloadWhere, PerformedOptions, SegmentDefinition, SegmentRef, and, between, contains, eq, exists, gt, gte, inArray, lt, lte, ne, not, notBetween, notContains, notExists, notInArray, or, performed, reachable, segment } from "./dsl/condition.mjs";
8
+ import { BranchArm, BranchCase, EmitArgs, EmitPayload, Flow, FlowBuilder, PushOptions, SubFlow, flow } from "./dsl/flow.mjs";
9
+ import { DateTime, EventTriggerOptions, TriggerFactory, TriggerRef, trigger } from "./dsl/trigger.mjs";
10
+ import { GoalOptions, WorkflowBuilder, WorkflowDefinition, workflow } from "./dsl/workflow.mjs";
11
+ import { compileBundle } from "./dsl/bundle.mjs";
12
+ import "./dsl/index.mjs";
13
+ import { Contract, ContractDefinition, ContractIssue, ContractResult, ContractValidationError, DeclaredOutput, EventPayload, ProfilePatch, checkEvent, defineContract, isContract } from "./contract.mjs";
14
+ import { JourneyMode, JourneyRuntimeConfig, JourneyRuntimeOptions, resolveRuntime } from "./runtime.mjs";
15
+ import { ApnsConfig, ConfigCompileError, DatabaseConfig, EmailAddress, EmailConfig, FcmConfig, JourneyConfig, JourneyConfigDefinition, WebPushConfig, apnsEnvironment, compileConfig, defineConfig, formatEmailAddress, isConfig } from "./config.mjs";
16
+ import { canonicalJSON, fullHash, semanticHash, sha256Hex, stripMeta, stripProvenance } from "./hash.mjs";
17
+ import { BundlePlan, ChangeStatus, NodeChange, ResourceChange, WorkflowChange, isSemanticChange, plan } from "./plan.mjs";
18
+ export { type ActionContext, type ActionHandler, ActionIR, type ActionRef, AnyTemplate, ApnsConfig, type BranchArm, type BranchCase, BundleIR, BundlePlan, ChangeStatus, type Channel, ChannelIR, type Condition, ConditionIR, ConfigCompileError, Contract, ContractDefinition, ContractIssue, ContractResult, ContractValidationError, DatabaseConfig, type DateTime, DeclaredOutput, DiscordContent, DiscordTemplate, type Duration, DurationIR, EmailAddress, EmailConfig, EmailTemplate, EmailTemplateDefinition, type EmitArgs, type EmitPayload, type EmptyProps, type EventMap, EventPayload, type EventRef, type EventRefs, type EventTriggerOptions, FcmConfig, type Flow, type FlowBuilder, GoalIR, type GoalOptions, IR_VERSION, JourneyConfig, JourneyConfigDefinition, JourneyMode, JourneyRuntimeConfig, JourneyRuntimeOptions, type MessageArgs, MetaIR, NodeChange, NodeIR, NodeMetaIR, type PayloadRef, type PayloadRefNode, type PayloadRefs, type PayloadWhere, type PerformedOptions, ProfilePatch, type PropInput, PropValueIR, PropertyOperatorIR, type PropsInput, type PropsOf, PropsSchema, PushContent, type PushOptions, PushTemplate, PushTemplateDefinition, ResolvedProps, ResourceChange, ScalarIR, type SegmentDefinition, SegmentIR, type SegmentRef, SlackContent, SlackTemplate, SourceLocIR, type SubFlow, TemplateChannel, type TemplateFactory, TemplateIR, TemplateIssue, type TemplateRef, type TemplateRefTable, type TemplateRefs, type TemplateRegistry, TemplateValidationError, type TimeOfDay, type TriggerFactory, TriggerIR, type TriggerRef, type UserPropertyBase, type UserPropertyRef, UserPropertyRefIR, type UserRefs, WebPushConfig, WebhookTemplateDefinition, type Weekday, WeekdayIR, type WorkflowBuilder, WorkflowChange, type WorkflowDefinition, WorkflowIR, action, and, apnsEnvironment, assertSupportedSchema, between, canonicalJSON, checkEvent, compileBundle, compileConfig, contains, defineConfig, defineContract, discordTemplate, emailTemplate, eq, event, exists, flow, formatEmailAddress, fullHash, gt, gte, inArray, isConfig, isContract, isDiscordTemplate, isEmailTemplate, isPushTemplate, isSemanticChange, isSlackTemplate, lt, lte, ne, not, notBetween, notContains, notExists, notInArray, or, parseTemplateProps, performed, plan, pushTemplate, reachable, registryValidator, renderDiscordContent, renderPushContent, renderSlackContent, resolveRuntime, segment, semanticHash, sha256Hex, slackTemplate, stripMeta, stripProvenance, template, templates, trigger, user, workflow };
package/dist/index.mjs ADDED
@@ -0,0 +1,17 @@
1
+ import { canonicalJSON, fullHash, semanticHash, sha256Hex, stripMeta, stripProvenance } from "./hash.mjs";
2
+ import { action } from "./dsl/action.mjs";
3
+ import { event, user } from "./dsl/refs.mjs";
4
+ import { TemplateValidationError, assertSupportedSchema, discordTemplate, emailTemplate, isDiscordTemplate, isEmailTemplate, isPushTemplate, isSlackTemplate, parseTemplateProps, pushTemplate, registryValidator, renderDiscordContent, renderPushContent, renderSlackContent, slackTemplate } from "./templates.mjs";
5
+ import { template, templates } from "./dsl/template.mjs";
6
+ import { and, between, contains, eq, exists, gt, gte, inArray, lt, lte, ne, not, notBetween, notContains, notExists, notInArray, or, performed, reachable, segment } from "./dsl/condition.mjs";
7
+ import { flow } from "./dsl/flow.mjs";
8
+ import { trigger } from "./dsl/trigger.mjs";
9
+ import { ActionIR, BundleIR, ChannelIR, ConditionIR, DurationIR, GoalIR, IR_VERSION, MetaIR, NodeIR, NodeMetaIR, PropValueIR, PropertyOperatorIR, ScalarIR, SegmentIR, SourceLocIR, TemplateIR, TriggerIR, UserPropertyRefIR, WeekdayIR, WorkflowIR } from "./ir.mjs";
10
+ import { workflow } from "./dsl/workflow.mjs";
11
+ import { compileBundle } from "./dsl/bundle.mjs";
12
+ import "./dsl/index.mjs";
13
+ import { ConfigCompileError, apnsEnvironment, compileConfig, defineConfig, formatEmailAddress, isConfig } from "./config.mjs";
14
+ import { ContractValidationError, checkEvent, defineContract, isContract } from "./contract.mjs";
15
+ import { isSemanticChange, plan } from "./plan.mjs";
16
+ import { resolveRuntime } from "./runtime.mjs";
17
+ export { ActionIR, BundleIR, ChannelIR, ConditionIR, ConfigCompileError, ContractValidationError, DurationIR, GoalIR, IR_VERSION, MetaIR, NodeIR, NodeMetaIR, PropValueIR, PropertyOperatorIR, ScalarIR, SegmentIR, SourceLocIR, TemplateIR, TemplateValidationError, TriggerIR, UserPropertyRefIR, WeekdayIR, WorkflowIR, action, and, apnsEnvironment, assertSupportedSchema, between, canonicalJSON, checkEvent, compileBundle, compileConfig, contains, defineConfig, defineContract, discordTemplate, emailTemplate, eq, event, exists, flow, formatEmailAddress, fullHash, gt, gte, inArray, isConfig, isContract, isDiscordTemplate, isEmailTemplate, isPushTemplate, isSemanticChange, isSlackTemplate, lt, lte, ne, not, notBetween, notContains, notExists, notInArray, or, parseTemplateProps, performed, plan, pushTemplate, reachable, registryValidator, renderDiscordContent, renderPushContent, renderSlackContent, resolveRuntime, segment, semanticHash, sha256Hex, slackTemplate, stripMeta, stripProvenance, template, templates, trigger, user, workflow };