@smthrs/control 0.0.0-stage → 1.0.0-rc.4

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 (418) hide show
  1. package/CHANGELOG.md +194 -0
  2. package/LICENSE +21 -0
  3. package/README.md +168 -2
  4. package/dist/cjs/ApprovalAuthority.d.ts +73 -0
  5. package/dist/cjs/ApprovalAuthority.d.ts.map +1 -0
  6. package/dist/cjs/ApprovalAuthority.js +62 -0
  7. package/dist/cjs/ApprovalAuthority.js.map +7 -0
  8. package/dist/cjs/Cancellation.d.ts +107 -0
  9. package/dist/cjs/Cancellation.d.ts.map +1 -0
  10. package/dist/cjs/Cancellation.js +72 -0
  11. package/dist/cjs/Cancellation.js.map +7 -0
  12. package/dist/cjs/Channels.d.ts +170 -0
  13. package/dist/cjs/Channels.d.ts.map +1 -0
  14. package/dist/cjs/Channels.js +278 -0
  15. package/dist/cjs/Channels.js.map +7 -0
  16. package/dist/cjs/Control.d.ts +202 -0
  17. package/dist/cjs/Control.d.ts.map +1 -0
  18. package/dist/cjs/Control.js +47 -0
  19. package/dist/cjs/Control.js.map +7 -0
  20. package/dist/cjs/ControlClient.d.ts +52 -0
  21. package/dist/cjs/ControlClient.d.ts.map +1 -0
  22. package/dist/cjs/ControlClient.js +191 -0
  23. package/dist/cjs/ControlClient.js.map +7 -0
  24. package/dist/cjs/ControlError.d.ts +318 -0
  25. package/dist/cjs/ControlError.d.ts.map +1 -0
  26. package/dist/cjs/ControlError.js +249 -0
  27. package/dist/cjs/ControlError.js.map +7 -0
  28. package/dist/cjs/ControlExecutor.d.ts +372 -0
  29. package/dist/cjs/ControlExecutor.d.ts.map +1 -0
  30. package/dist/cjs/ControlExecutor.js +123 -0
  31. package/dist/cjs/ControlExecutor.js.map +7 -0
  32. package/dist/cjs/ControlFacts.d.ts +454 -0
  33. package/dist/cjs/ControlFacts.d.ts.map +1 -0
  34. package/dist/cjs/ControlFacts.js +261 -0
  35. package/dist/cjs/ControlFacts.js.map +7 -0
  36. package/dist/cjs/ControlLive.d.ts +23 -0
  37. package/dist/cjs/ControlLive.d.ts.map +1 -0
  38. package/dist/cjs/ControlLive.js +1293 -0
  39. package/dist/cjs/ControlLive.js.map +7 -0
  40. package/dist/cjs/ControlRpcs.d.ts +1204 -0
  41. package/dist/cjs/ControlRpcs.d.ts.map +1 -0
  42. package/dist/cjs/ControlRpcs.js +247 -0
  43. package/dist/cjs/ControlRpcs.js.map +7 -0
  44. package/dist/cjs/ControlRuntime.d.ts +635 -0
  45. package/dist/cjs/ControlRuntime.d.ts.map +1 -0
  46. package/dist/cjs/ControlRuntime.js +744 -0
  47. package/dist/cjs/ControlRuntime.js.map +7 -0
  48. package/dist/cjs/ControlSchema.d.ts +2642 -0
  49. package/dist/cjs/ControlSchema.d.ts.map +1 -0
  50. package/dist/cjs/ControlSchema.js +634 -0
  51. package/dist/cjs/ControlSchema.js.map +7 -0
  52. package/dist/cjs/ControlServer.d.ts +51 -0
  53. package/dist/cjs/ControlServer.d.ts.map +1 -0
  54. package/dist/cjs/ControlServer.js +121 -0
  55. package/dist/cjs/ControlServer.js.map +7 -0
  56. package/dist/cjs/Credential.d.ts +136 -0
  57. package/dist/cjs/Credential.d.ts.map +1 -0
  58. package/dist/cjs/Credential.js +168 -0
  59. package/dist/cjs/Credential.js.map +7 -0
  60. package/dist/cjs/CredentialCipher.d.ts +90 -0
  61. package/dist/cjs/CredentialCipher.d.ts.map +1 -0
  62. package/dist/cjs/CredentialCipher.js +45 -0
  63. package/dist/cjs/CredentialCipher.js.map +7 -0
  64. package/dist/cjs/CredentialStore.d.ts +97 -0
  65. package/dist/cjs/CredentialStore.d.ts.map +1 -0
  66. package/dist/cjs/CredentialStore.js +81 -0
  67. package/dist/cjs/CredentialStore.js.map +7 -0
  68. package/dist/cjs/DispatchReader.d.ts +112 -0
  69. package/dist/cjs/DispatchReader.d.ts.map +1 -0
  70. package/dist/cjs/DispatchReader.js +45 -0
  71. package/dist/cjs/DispatchReader.js.map +7 -0
  72. package/dist/cjs/Health.d.ts +333 -0
  73. package/dist/cjs/Health.d.ts.map +1 -0
  74. package/dist/cjs/Health.js +311 -0
  75. package/dist/cjs/Health.js.map +7 -0
  76. package/dist/cjs/JevSessionChecker.d.ts +57 -0
  77. package/dist/cjs/JevSessionChecker.d.ts.map +1 -0
  78. package/dist/cjs/JevSessionChecker.js +113 -0
  79. package/dist/cjs/JevSessionChecker.js.map +7 -0
  80. package/dist/cjs/Lineage.d.ts +131 -0
  81. package/dist/cjs/Lineage.d.ts.map +1 -0
  82. package/dist/cjs/Lineage.js +81 -0
  83. package/dist/cjs/Lineage.js.map +7 -0
  84. package/dist/cjs/Migrations.d.ts +34 -0
  85. package/dist/cjs/Migrations.d.ts.map +1 -0
  86. package/dist/cjs/Migrations.js +60 -0
  87. package/dist/cjs/Migrations.js.map +7 -0
  88. package/dist/cjs/Monitor.d.ts +282 -0
  89. package/dist/cjs/Monitor.d.ts.map +1 -0
  90. package/dist/cjs/Monitor.js +283 -0
  91. package/dist/cjs/Monitor.js.map +7 -0
  92. package/dist/cjs/ScopedToken.d.ts +193 -0
  93. package/dist/cjs/ScopedToken.d.ts.map +1 -0
  94. package/dist/cjs/ScopedToken.js +135 -0
  95. package/dist/cjs/ScopedToken.js.map +7 -0
  96. package/dist/cjs/SqlControlRuntime.d.ts +161 -0
  97. package/dist/cjs/SqlControlRuntime.d.ts.map +1 -0
  98. package/dist/cjs/SqlControlRuntime.js +1522 -0
  99. package/dist/cjs/SqlControlRuntime.js.map +7 -0
  100. package/dist/cjs/SqlCredentialStore.d.ts +43 -0
  101. package/dist/cjs/SqlCredentialStore.d.ts.map +1 -0
  102. package/dist/cjs/SqlCredentialStore.js +113 -0
  103. package/dist/cjs/SqlCredentialStore.js.map +7 -0
  104. package/dist/cjs/Steering.d.ts +69 -0
  105. package/dist/cjs/Steering.d.ts.map +1 -0
  106. package/dist/cjs/Steering.js +49 -0
  107. package/dist/cjs/Steering.js.map +7 -0
  108. package/dist/cjs/SystemFlows.d.ts +223 -0
  109. package/dist/cjs/SystemFlows.d.ts.map +1 -0
  110. package/dist/cjs/SystemFlows.js +195 -0
  111. package/dist/cjs/SystemFlows.js.map +7 -0
  112. package/dist/cjs/WebCryptoCipher.d.ts +49 -0
  113. package/dist/cjs/WebCryptoCipher.d.ts.map +1 -0
  114. package/dist/cjs/WebCryptoCipher.js +129 -0
  115. package/dist/cjs/WebCryptoCipher.js.map +7 -0
  116. package/dist/cjs/WebhookChannel.d.ts +113 -0
  117. package/dist/cjs/WebhookChannel.d.ts.map +1 -0
  118. package/dist/cjs/WebhookChannel.js +98 -0
  119. package/dist/cjs/WebhookChannel.js.map +7 -0
  120. package/dist/cjs/index.d.ts +160 -0
  121. package/dist/cjs/index.d.ts.map +1 -0
  122. package/dist/cjs/index.js +91 -0
  123. package/dist/cjs/index.js.map +7 -0
  124. package/dist/cjs/internal/MutationBoundary.d.ts +27 -0
  125. package/dist/cjs/internal/MutationBoundary.d.ts.map +1 -0
  126. package/dist/cjs/internal/MutationBoundary.js +50 -0
  127. package/dist/cjs/internal/MutationBoundary.js.map +7 -0
  128. package/dist/cjs/internal/activeFibers.d.ts +12 -0
  129. package/dist/cjs/internal/activeFibers.d.ts.map +1 -0
  130. package/dist/cjs/internal/activeFibers.js +30 -0
  131. package/dist/cjs/internal/activeFibers.js.map +7 -0
  132. package/dist/cjs/internal/issues.d.ts +28 -0
  133. package/dist/cjs/internal/issues.d.ts.map +1 -0
  134. package/dist/cjs/internal/issues.js +34 -0
  135. package/dist/cjs/internal/issues.js.map +7 -0
  136. package/dist/cjs/internal/planning.d.ts +347 -0
  137. package/dist/cjs/internal/planning.d.ts.map +1 -0
  138. package/dist/cjs/internal/planning.js +137 -0
  139. package/dist/cjs/internal/planning.js.map +7 -0
  140. package/dist/cjs/internal/sqlSchemaErrors.d.ts +18 -0
  141. package/dist/cjs/internal/sqlSchemaErrors.d.ts.map +1 -0
  142. package/dist/cjs/internal/sqlSchemaErrors.js +40 -0
  143. package/dist/cjs/internal/sqlSchemaErrors.js.map +7 -0
  144. package/dist/cjs/migrations/0001_control_tables.d.ts +18 -0
  145. package/dist/cjs/migrations/0001_control_tables.d.ts.map +1 -0
  146. package/dist/cjs/migrations/0001_control_tables.js +115 -0
  147. package/dist/cjs/migrations/0001_control_tables.js.map +7 -0
  148. package/dist/cjs/migrations/0002_run_keys.d.ts +15 -0
  149. package/dist/cjs/migrations/0002_run_keys.d.ts.map +1 -0
  150. package/dist/cjs/migrations/0002_run_keys.js +44 -0
  151. package/dist/cjs/migrations/0002_run_keys.js.map +7 -0
  152. package/dist/cjs/migrations/0003_signal_commands.d.ts +13 -0
  153. package/dist/cjs/migrations/0003_signal_commands.d.ts.map +1 -0
  154. package/dist/cjs/migrations/0003_signal_commands.js +50 -0
  155. package/dist/cjs/migrations/0003_signal_commands.js.map +7 -0
  156. package/dist/cjs/migrations/0004_approval_decisions.d.ts +13 -0
  157. package/dist/cjs/migrations/0004_approval_decisions.d.ts.map +1 -0
  158. package/dist/cjs/migrations/0004_approval_decisions.js +45 -0
  159. package/dist/cjs/migrations/0004_approval_decisions.js.map +7 -0
  160. package/dist/cjs/migrations/0005_signal_principals.d.ts +18 -0
  161. package/dist/cjs/migrations/0005_signal_principals.d.ts.map +1 -0
  162. package/dist/cjs/migrations/0005_signal_principals.js +45 -0
  163. package/dist/cjs/migrations/0005_signal_principals.js.map +7 -0
  164. package/dist/cjs/migrations/0006_run_principals.d.ts +18 -0
  165. package/dist/cjs/migrations/0006_run_principals.d.ts.map +1 -0
  166. package/dist/cjs/migrations/0006_run_principals.js +49 -0
  167. package/dist/cjs/migrations/0006_run_principals.js.map +7 -0
  168. package/dist/cjs/migrations/0007_resume_consent.d.ts +18 -0
  169. package/dist/cjs/migrations/0007_resume_consent.d.ts.map +1 -0
  170. package/dist/cjs/migrations/0007_resume_consent.js +46 -0
  171. package/dist/cjs/migrations/0007_resume_consent.js.map +7 -0
  172. package/dist/cjs/package.json +1 -0
  173. package/dist/cjs/test/TestControl.d.ts +19 -0
  174. package/dist/cjs/test/TestControl.d.ts.map +1 -0
  175. package/dist/cjs/test/TestControl.js +62 -0
  176. package/dist/cjs/test/TestControl.js.map +7 -0
  177. package/dist/esm/ApprovalAuthority.d.ts +73 -0
  178. package/dist/esm/ApprovalAuthority.d.ts.map +1 -0
  179. package/dist/esm/ApprovalAuthority.js +72 -0
  180. package/dist/esm/ApprovalAuthority.js.map +1 -0
  181. package/dist/esm/Cancellation.d.ts +107 -0
  182. package/dist/esm/Cancellation.d.ts.map +1 -0
  183. package/dist/esm/Cancellation.js +116 -0
  184. package/dist/esm/Cancellation.js.map +1 -0
  185. package/dist/esm/Channels.d.ts +170 -0
  186. package/dist/esm/Channels.d.ts.map +1 -0
  187. package/dist/esm/Channels.js +312 -0
  188. package/dist/esm/Channels.js.map +1 -0
  189. package/dist/esm/Control.d.ts +202 -0
  190. package/dist/esm/Control.d.ts.map +1 -0
  191. package/dist/esm/Control.js +42 -0
  192. package/dist/esm/Control.js.map +1 -0
  193. package/dist/esm/ControlClient.d.ts +52 -0
  194. package/dist/esm/ControlClient.d.ts.map +1 -0
  195. package/dist/esm/ControlClient.js +217 -0
  196. package/dist/esm/ControlClient.js.map +1 -0
  197. package/dist/esm/ControlError.d.ts +318 -0
  198. package/dist/esm/ControlError.d.ts.map +1 -0
  199. package/dist/esm/ControlError.js +359 -0
  200. package/dist/esm/ControlError.js.map +1 -0
  201. package/dist/esm/ControlExecutor.d.ts +372 -0
  202. package/dist/esm/ControlExecutor.d.ts.map +1 -0
  203. package/dist/esm/ControlExecutor.js +212 -0
  204. package/dist/esm/ControlExecutor.js.map +1 -0
  205. package/dist/esm/ControlFacts.d.ts +454 -0
  206. package/dist/esm/ControlFacts.d.ts.map +1 -0
  207. package/dist/esm/ControlFacts.js +324 -0
  208. package/dist/esm/ControlFacts.js.map +1 -0
  209. package/dist/esm/ControlLive.d.ts +23 -0
  210. package/dist/esm/ControlLive.d.ts.map +1 -0
  211. package/dist/esm/ControlLive.js +1589 -0
  212. package/dist/esm/ControlLive.js.map +1 -0
  213. package/dist/esm/ControlRpcs.d.ts +1204 -0
  214. package/dist/esm/ControlRpcs.d.ts.map +1 -0
  215. package/dist/esm/ControlRpcs.js +299 -0
  216. package/dist/esm/ControlRpcs.js.map +1 -0
  217. package/dist/esm/ControlRuntime.d.ts +635 -0
  218. package/dist/esm/ControlRuntime.d.ts.map +1 -0
  219. package/dist/esm/ControlRuntime.js +808 -0
  220. package/dist/esm/ControlRuntime.js.map +1 -0
  221. package/dist/esm/ControlSchema.d.ts +2642 -0
  222. package/dist/esm/ControlSchema.d.ts.map +1 -0
  223. package/dist/esm/ControlSchema.js +1030 -0
  224. package/dist/esm/ControlSchema.js.map +1 -0
  225. package/dist/esm/ControlServer.d.ts +51 -0
  226. package/dist/esm/ControlServer.d.ts.map +1 -0
  227. package/dist/esm/ControlServer.js +145 -0
  228. package/dist/esm/ControlServer.js.map +1 -0
  229. package/dist/esm/Credential.d.ts +136 -0
  230. package/dist/esm/Credential.d.ts.map +1 -0
  231. package/dist/esm/Credential.js +190 -0
  232. package/dist/esm/Credential.js.map +1 -0
  233. package/dist/esm/CredentialCipher.d.ts +90 -0
  234. package/dist/esm/CredentialCipher.d.ts.map +1 -0
  235. package/dist/esm/CredentialCipher.js +56 -0
  236. package/dist/esm/CredentialCipher.js.map +1 -0
  237. package/dist/esm/CredentialStore.d.ts +97 -0
  238. package/dist/esm/CredentialStore.d.ts.map +1 -0
  239. package/dist/esm/CredentialStore.js +101 -0
  240. package/dist/esm/CredentialStore.js.map +1 -0
  241. package/dist/esm/DispatchReader.d.ts +112 -0
  242. package/dist/esm/DispatchReader.d.ts.map +1 -0
  243. package/dist/esm/DispatchReader.js +76 -0
  244. package/dist/esm/DispatchReader.js.map +1 -0
  245. package/dist/esm/Health.d.ts +333 -0
  246. package/dist/esm/Health.d.ts.map +1 -0
  247. package/dist/esm/Health.js +400 -0
  248. package/dist/esm/Health.js.map +1 -0
  249. package/dist/esm/JevSessionChecker.d.ts +57 -0
  250. package/dist/esm/JevSessionChecker.d.ts.map +1 -0
  251. package/dist/esm/JevSessionChecker.js +108 -0
  252. package/dist/esm/JevSessionChecker.js.map +1 -0
  253. package/dist/esm/Lineage.d.ts +131 -0
  254. package/dist/esm/Lineage.d.ts.map +1 -0
  255. package/dist/esm/Lineage.js +174 -0
  256. package/dist/esm/Lineage.js.map +1 -0
  257. package/dist/esm/Migrations.d.ts +34 -0
  258. package/dist/esm/Migrations.d.ts.map +1 -0
  259. package/dist/esm/Migrations.js +53 -0
  260. package/dist/esm/Migrations.js.map +1 -0
  261. package/dist/esm/Monitor.d.ts +282 -0
  262. package/dist/esm/Monitor.d.ts.map +1 -0
  263. package/dist/esm/Monitor.js +415 -0
  264. package/dist/esm/Monitor.js.map +1 -0
  265. package/dist/esm/ScopedToken.d.ts +193 -0
  266. package/dist/esm/ScopedToken.d.ts.map +1 -0
  267. package/dist/esm/ScopedToken.js +224 -0
  268. package/dist/esm/ScopedToken.js.map +1 -0
  269. package/dist/esm/SqlControlRuntime.d.ts +161 -0
  270. package/dist/esm/SqlControlRuntime.d.ts.map +1 -0
  271. package/dist/esm/SqlControlRuntime.js +1756 -0
  272. package/dist/esm/SqlControlRuntime.js.map +1 -0
  273. package/dist/esm/SqlCredentialStore.d.ts +43 -0
  274. package/dist/esm/SqlCredentialStore.d.ts.map +1 -0
  275. package/dist/esm/SqlCredentialStore.js +97 -0
  276. package/dist/esm/SqlCredentialStore.js.map +1 -0
  277. package/dist/esm/Steering.d.ts +69 -0
  278. package/dist/esm/Steering.d.ts.map +1 -0
  279. package/dist/esm/Steering.js +89 -0
  280. package/dist/esm/Steering.js.map +1 -0
  281. package/dist/esm/SystemFlows.d.ts +223 -0
  282. package/dist/esm/SystemFlows.d.ts.map +1 -0
  283. package/dist/esm/SystemFlows.js +198 -0
  284. package/dist/esm/SystemFlows.js.map +1 -0
  285. package/dist/esm/WebCryptoCipher.d.ts +49 -0
  286. package/dist/esm/WebCryptoCipher.d.ts.map +1 -0
  287. package/dist/esm/WebCryptoCipher.js +123 -0
  288. package/dist/esm/WebCryptoCipher.js.map +1 -0
  289. package/dist/esm/WebhookChannel.d.ts +113 -0
  290. package/dist/esm/WebhookChannel.d.ts.map +1 -0
  291. package/dist/esm/WebhookChannel.js +109 -0
  292. package/dist/esm/WebhookChannel.js.map +1 -0
  293. package/dist/esm/index.d.ts +160 -0
  294. package/dist/esm/index.d.ts.map +1 -0
  295. package/dist/esm/index.js +160 -0
  296. package/dist/esm/index.js.map +1 -0
  297. package/dist/esm/internal/MutationBoundary.d.ts +27 -0
  298. package/dist/esm/internal/MutationBoundary.d.ts.map +1 -0
  299. package/dist/esm/internal/MutationBoundary.js +40 -0
  300. package/dist/esm/internal/MutationBoundary.js.map +1 -0
  301. package/dist/esm/internal/activeFibers.d.ts +12 -0
  302. package/dist/esm/internal/activeFibers.d.ts.map +1 -0
  303. package/dist/esm/internal/activeFibers.js +17 -0
  304. package/dist/esm/internal/activeFibers.js.map +1 -0
  305. package/dist/esm/internal/issues.d.ts +28 -0
  306. package/dist/esm/internal/issues.d.ts.map +1 -0
  307. package/dist/esm/internal/issues.js +35 -0
  308. package/dist/esm/internal/issues.js.map +1 -0
  309. package/dist/esm/internal/planning.d.ts +347 -0
  310. package/dist/esm/internal/planning.d.ts.map +1 -0
  311. package/dist/esm/internal/planning.js +199 -0
  312. package/dist/esm/internal/planning.js.map +1 -0
  313. package/dist/esm/internal/sqlSchemaErrors.d.ts +18 -0
  314. package/dist/esm/internal/sqlSchemaErrors.d.ts.map +1 -0
  315. package/dist/esm/internal/sqlSchemaErrors.js +38 -0
  316. package/dist/esm/internal/sqlSchemaErrors.js.map +1 -0
  317. package/dist/esm/migrations/0001_control_tables.d.ts +18 -0
  318. package/dist/esm/migrations/0001_control_tables.d.ts.map +1 -0
  319. package/dist/esm/migrations/0001_control_tables.js +96 -0
  320. package/dist/esm/migrations/0001_control_tables.js.map +1 -0
  321. package/dist/esm/migrations/0002_run_keys.d.ts +15 -0
  322. package/dist/esm/migrations/0002_run_keys.d.ts.map +1 -0
  323. package/dist/esm/migrations/0002_run_keys.js +22 -0
  324. package/dist/esm/migrations/0002_run_keys.js.map +1 -0
  325. package/dist/esm/migrations/0003_signal_commands.d.ts +13 -0
  326. package/dist/esm/migrations/0003_signal_commands.d.ts.map +1 -0
  327. package/dist/esm/migrations/0003_signal_commands.js +26 -0
  328. package/dist/esm/migrations/0003_signal_commands.js.map +1 -0
  329. package/dist/esm/migrations/0004_approval_decisions.d.ts +13 -0
  330. package/dist/esm/migrations/0004_approval_decisions.d.ts.map +1 -0
  331. package/dist/esm/migrations/0004_approval_decisions.js +25 -0
  332. package/dist/esm/migrations/0004_approval_decisions.js.map +1 -0
  333. package/dist/esm/migrations/0005_signal_principals.d.ts +18 -0
  334. package/dist/esm/migrations/0005_signal_principals.d.ts.map +1 -0
  335. package/dist/esm/migrations/0005_signal_principals.js +27 -0
  336. package/dist/esm/migrations/0005_signal_principals.js.map +1 -0
  337. package/dist/esm/migrations/0006_run_principals.d.ts +18 -0
  338. package/dist/esm/migrations/0006_run_principals.d.ts.map +1 -0
  339. package/dist/esm/migrations/0006_run_principals.js +30 -0
  340. package/dist/esm/migrations/0006_run_principals.js.map +1 -0
  341. package/dist/esm/migrations/0007_resume_consent.d.ts +18 -0
  342. package/dist/esm/migrations/0007_resume_consent.d.ts.map +1 -0
  343. package/dist/esm/migrations/0007_resume_consent.js +27 -0
  344. package/dist/esm/migrations/0007_resume_consent.js.map +1 -0
  345. package/dist/esm/test/TestControl.d.ts +19 -0
  346. package/dist/esm/test/TestControl.d.ts.map +1 -0
  347. package/dist/esm/test/TestControl.js +30 -0
  348. package/dist/esm/test/TestControl.js.map +1 -0
  349. package/docs/README.md +189 -0
  350. package/docs/api.md +982 -0
  351. package/docs/concepts/authority.md +109 -0
  352. package/docs/concepts/cancellation.md +129 -0
  353. package/docs/concepts/lineage.md +132 -0
  354. package/docs/concepts/ownership.md +139 -0
  355. package/docs/concepts/projections.md +203 -0
  356. package/docs/concepts/receipts.md +128 -0
  357. package/docs/guides/approvals.md +284 -0
  358. package/docs/guides/cancel-and-resume.md +162 -0
  359. package/docs/guides/durable-storage.md +147 -0
  360. package/docs/guides/implement-an-executor.md +173 -0
  361. package/docs/guides/ingest-a-webhook.md +177 -0
  362. package/docs/guides/list-runs.md +160 -0
  363. package/docs/guides/monitor-runs.md +176 -0
  364. package/docs/guides/observe-health.md +147 -0
  365. package/docs/guides/postgres-tests.md +7 -0
  366. package/docs/guides/serve-over-rpc.md +220 -0
  367. package/docs/guides/signal-a-run.md +53 -0
  368. package/docs/guides/steer-a-run.md +138 -0
  369. package/docs/guides/store-credentials.md +164 -0
  370. package/docs/guides/testing.md +139 -0
  371. package/docs/guides/watch-a-run.md +154 -0
  372. package/docs/installation.md +106 -0
  373. package/docs/quickstart.md +163 -0
  374. package/docs/troubleshooting.md +208 -0
  375. package/package.json +405 -3
  376. package/src/ApprovalAuthority.ts +114 -0
  377. package/src/Cancellation.ts +172 -0
  378. package/src/Channels.ts +493 -0
  379. package/src/Control.ts +337 -0
  380. package/src/ControlClient.ts +319 -0
  381. package/src/ControlError.ts +378 -0
  382. package/src/ControlExecutor.ts +490 -0
  383. package/src/ControlFacts.ts +383 -0
  384. package/src/ControlLive.ts +2127 -0
  385. package/src/ControlRpcs.ts +443 -0
  386. package/src/ControlRuntime.ts +1601 -0
  387. package/src/ControlSchema.ts +1380 -0
  388. package/src/ControlServer.ts +182 -0
  389. package/src/Credential.ts +310 -0
  390. package/src/CredentialCipher.ts +110 -0
  391. package/src/CredentialStore.ts +152 -0
  392. package/src/DispatchReader.ts +122 -0
  393. package/src/Health.ts +591 -0
  394. package/src/JevSessionChecker.ts +127 -0
  395. package/src/Lineage.ts +203 -0
  396. package/src/Migrations.ts +56 -0
  397. package/src/Monitor.ts +600 -0
  398. package/src/ScopedToken.ts +306 -0
  399. package/src/SqlControlRuntime.ts +2478 -0
  400. package/src/SqlCredentialStore.ts +148 -0
  401. package/src/Steering.ts +96 -0
  402. package/src/SystemFlows.ts +225 -0
  403. package/src/WebCryptoCipher.ts +169 -0
  404. package/src/WebhookChannel.ts +166 -0
  405. package/src/index.ts +188 -0
  406. package/src/internal/MutationBoundary.ts +46 -0
  407. package/src/internal/activeFibers.ts +22 -0
  408. package/src/internal/issues.ts +40 -0
  409. package/src/internal/planning.ts +262 -0
  410. package/src/internal/sqlSchemaErrors.ts +37 -0
  411. package/src/migrations/0001_control_tables.ts +99 -0
  412. package/src/migrations/0002_run_keys.ts +23 -0
  413. package/src/migrations/0003_signal_commands.ts +27 -0
  414. package/src/migrations/0004_approval_decisions.ts +25 -0
  415. package/src/migrations/0005_signal_principals.ts +27 -0
  416. package/src/migrations/0006_run_principals.ts +31 -0
  417. package/src/migrations/0007_resume_consent.ts +28 -0
  418. package/src/test/TestControl.ts +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0001_control_tables.d.ts","sourceRoot":"","sources":["../../../src/migrations/0001_control_tables.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AA4E1D;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,CAKpE,CAAA"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Initial durable control-plane schema.
3
+ *
4
+ * @since 0.1.0
5
+ */
6
+ import * as Dialect from "@smthrs/database/Dialect";
7
+ import * as Effect from "effect/Effect";
8
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
9
+ const statements = (sql) => [
10
+ sql `CREATE TABLE IF NOT EXISTS control_plans (
11
+ ${Dialect.rowId(sql)}
12
+ plan_id TEXT PRIMARY KEY,
13
+ card_json TEXT NOT NULL,
14
+ decoded_input_json TEXT NOT NULL,
15
+ decision TEXT NOT NULL
16
+ )`,
17
+ sql `CREATE TABLE IF NOT EXISTS control_plan_keys (
18
+ idempotency_key TEXT PRIMARY KEY,
19
+ fingerprint TEXT NOT NULL,
20
+ plan_id TEXT NOT NULL
21
+ )`,
22
+ sql `CREATE TABLE IF NOT EXISTS control_tokens (
23
+ target_tag TEXT NOT NULL,
24
+ run_id TEXT NOT NULL,
25
+ target_id TEXT NOT NULL,
26
+ token_id TEXT NOT NULL,
27
+ target_json TEXT NOT NULL,
28
+ resolved ${Dialect.integer(sql)} NOT NULL,
29
+ decision_principal_json TEXT,
30
+ PRIMARY KEY (target_tag, run_id, target_id),
31
+ CHECK (target_tag IN ('Plan', 'Node')),
32
+ CHECK ((target_tag = 'Plan' AND run_id = '') OR (target_tag = 'Node' AND length(run_id) > 0)),
33
+ CHECK (length(target_id) > 0 AND token_id = target_id)
34
+ )`,
35
+ sql `CREATE TABLE IF NOT EXISTS control_grants (
36
+ target_tag TEXT NOT NULL,
37
+ run_id TEXT NOT NULL,
38
+ target_id TEXT NOT NULL,
39
+ token_id TEXT NOT NULL,
40
+ envelope_json TEXT NOT NULL,
41
+ scope TEXT NOT NULL,
42
+ installed_at_ms ${Dialect.integer(sql)} NOT NULL,
43
+ PRIMARY KEY (target_tag, run_id, target_id),
44
+ CHECK (target_tag IN ('Plan', 'Node')),
45
+ CHECK ((target_tag = 'Plan' AND run_id = '') OR (target_tag = 'Node' AND length(run_id) > 0)),
46
+ CHECK (length(target_id) > 0 AND token_id = target_id)
47
+ )`,
48
+ sql `CREATE TABLE IF NOT EXISTS control_mutations (
49
+ mutation_key TEXT PRIMARY KEY,
50
+ fingerprint TEXT NOT NULL,
51
+ receipt_json TEXT NOT NULL
52
+ )`,
53
+ sql `CREATE TABLE IF NOT EXISTS control_runs (
54
+ run_id TEXT PRIMARY KEY,
55
+ created_seq ${Dialect.integer(sql)} NOT NULL
56
+ )`,
57
+ sql `CREATE TABLE IF NOT EXISTS control_run_resumes (
58
+ run_id TEXT PRIMARY KEY,
59
+ requested_seq ${Dialect.integer(sql)} NOT NULL,
60
+ requested_at_ms ${Dialect.integer(sql)} NOT NULL
61
+ )`,
62
+ sql `CREATE TABLE IF NOT EXISTS control_run_messages (
63
+ seq ${Dialect.identity(sql)},
64
+ run_id TEXT NOT NULL,
65
+ kind TEXT NOT NULL,
66
+ payload_json TEXT NOT NULL
67
+ )`,
68
+ sql `CREATE TABLE IF NOT EXISTS control_sequences (
69
+ name TEXT PRIMARY KEY,
70
+ value ${Dialect.integer(sql)} NOT NULL
71
+ )`,
72
+ sql `CREATE TABLE IF NOT EXISTS control_credentials (
73
+ id TEXT PRIMARY KEY,
74
+ name TEXT NOT NULL,
75
+ ciphertext TEXT NOT NULL,
76
+ nonce TEXT NOT NULL,
77
+ version ${Dialect.integer(sql)} NOT NULL,
78
+ updated_at_ms ${Dialect.integer(sql)} NOT NULL
79
+ )`
80
+ ];
81
+ /**
82
+ * Creates every table owned by `@smthrs/control`.
83
+ *
84
+ * `IF NOT EXISTS` lets the recorded migration and each standalone adapter's
85
+ * bootstrap share this exact schema without competing over table creation.
86
+ *
87
+ * @category migrations
88
+ * @since 0.1.0
89
+ */
90
+ export const initial = Effect.gen(function* () {
91
+ const sql = yield* SqlClient.SqlClient;
92
+ for (const statement of statements(sql)) {
93
+ yield* statement;
94
+ }
95
+ });
96
+ //# sourceMappingURL=0001_control_tables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0001_control_tables.js","sourceRoot":"","sources":["../../../src/migrations/0001_control_tables.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D,MAAM,UAAU,GAAG,CAAC,GAAwB,EAAE,EAAE,CAC9C;IACE,GAAG,CAAA;MACD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;;;;;IAKpB;IACA,GAAG,CAAA;;;;IAIH;IACA,GAAG,CAAA;;;;;;eAMQ,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;;;;;;IAM/B;IACA,GAAG,CAAA;;;;;;;sBAOe,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;;;;;IAKtC;IACA,GAAG,CAAA;;;;IAIH;IACA,GAAG,CAAA;;kBAEW,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;IAClC;IACA,GAAG,CAAA;;oBAEa,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;sBAClB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;IACtC;IACA,GAAG,CAAA;UACG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;;;;IAI3B;IACA,GAAG,CAAA;;YAEK,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5B;IACA,GAAG,CAAA;;;;;cAKO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;oBACd,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;IACpC;CACQ,CAAA;AAEZ;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,OAAO,GAAsD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC5F,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,CAAC,SAAS,CAAA;IAClB,CAAC;AACH,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Initial durable control-plane schema.\n *\n * @since 0.1.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\nconst statements = (sql: SqlClient.SqlClient) =>\n [\n sql`CREATE TABLE IF NOT EXISTS control_plans (\n ${Dialect.rowId(sql)}\n plan_id TEXT PRIMARY KEY,\n card_json TEXT NOT NULL,\n decoded_input_json TEXT NOT NULL,\n decision TEXT NOT NULL\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_plan_keys (\n idempotency_key TEXT PRIMARY KEY,\n fingerprint TEXT NOT NULL,\n plan_id TEXT NOT NULL\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_tokens (\n target_tag TEXT NOT NULL,\n run_id TEXT NOT NULL,\n target_id TEXT NOT NULL,\n token_id TEXT NOT NULL,\n target_json TEXT NOT NULL,\n resolved ${Dialect.integer(sql)} NOT NULL,\n decision_principal_json TEXT,\n PRIMARY KEY (target_tag, run_id, target_id),\n CHECK (target_tag IN ('Plan', 'Node')),\n CHECK ((target_tag = 'Plan' AND run_id = '') OR (target_tag = 'Node' AND length(run_id) > 0)),\n CHECK (length(target_id) > 0 AND token_id = target_id)\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_grants (\n target_tag TEXT NOT NULL,\n run_id TEXT NOT NULL,\n target_id TEXT NOT NULL,\n token_id TEXT NOT NULL,\n envelope_json TEXT NOT NULL,\n scope TEXT NOT NULL,\n installed_at_ms ${Dialect.integer(sql)} NOT NULL,\n PRIMARY KEY (target_tag, run_id, target_id),\n CHECK (target_tag IN ('Plan', 'Node')),\n CHECK ((target_tag = 'Plan' AND run_id = '') OR (target_tag = 'Node' AND length(run_id) > 0)),\n CHECK (length(target_id) > 0 AND token_id = target_id)\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_mutations (\n mutation_key TEXT PRIMARY KEY,\n fingerprint TEXT NOT NULL,\n receipt_json TEXT NOT NULL\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_runs (\n run_id TEXT PRIMARY KEY,\n created_seq ${Dialect.integer(sql)} NOT NULL\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_run_resumes (\n run_id TEXT PRIMARY KEY,\n requested_seq ${Dialect.integer(sql)} NOT NULL,\n requested_at_ms ${Dialect.integer(sql)} NOT NULL\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_run_messages (\n seq ${Dialect.identity(sql)},\n run_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n payload_json TEXT NOT NULL\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_sequences (\n name TEXT PRIMARY KEY,\n value ${Dialect.integer(sql)} NOT NULL\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_credentials (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n ciphertext TEXT NOT NULL,\n nonce TEXT NOT NULL,\n version ${Dialect.integer(sql)} NOT NULL,\n updated_at_ms ${Dialect.integer(sql)} NOT NULL\n )`\n ] as const\n\n/**\n * Creates every table owned by `@smthrs/control`.\n *\n * `IF NOT EXISTS` lets the recorded migration and each standalone adapter's\n * bootstrap share this exact schema without competing over table creation.\n *\n * @category migrations\n * @since 0.1.0\n */\nexport const initial: Effect.Effect<void, unknown, SqlClient.SqlClient> = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n for (const statement of statements(sql)) {\n yield* statement\n }\n})\n"]}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Durable run idempotency claims, including upgrades of existing databases.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ import * as Effect from "effect/Effect";
7
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
8
+ /**
9
+ * Adds the run-key claim table without changing existing control data.
10
+ *
11
+ * @category migrations
12
+ * @since 1.0.0
13
+ */
14
+ export declare const runKeys: Effect.Effect<void, import("effect/unstable/sql/SqlError").SqlError, SqlClient.SqlClient>;
15
+ //# sourceMappingURL=0002_run_keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0002_run_keys.d.ts","sourceRoot":"","sources":["../../../src/migrations/0002_run_keys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,OAAO,2FAOlB,CAAA"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Durable run idempotency claims, including upgrades of existing databases.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ import * as Effect from "effect/Effect";
7
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
8
+ /**
9
+ * Adds the run-key claim table without changing existing control data.
10
+ *
11
+ * @category migrations
12
+ * @since 1.0.0
13
+ */
14
+ export const runKeys = Effect.gen(function* () {
15
+ const sql = yield* SqlClient.SqlClient;
16
+ yield* sql `CREATE TABLE IF NOT EXISTS control_run_keys (
17
+ idempotency_key TEXT PRIMARY KEY,
18
+ fingerprint TEXT NOT NULL,
19
+ claimant TEXT NOT NULL
20
+ )`;
21
+ });
22
+ //# sourceMappingURL=0002_run_keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0002_run_keys.js","sourceRoot":"","sources":["../../../src/migrations/0002_run_keys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACzC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAA;;;;IAIR,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Durable run idempotency claims, including upgrades of existing databases.\n *\n * @since 1.0.0\n */\n\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Adds the run-key claim table without changing existing control data.\n *\n * @category migrations\n * @since 1.0.0\n */\nexport const runKeys = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql`CREATE TABLE IF NOT EXISTS control_run_keys (\n idempotency_key TEXT PRIMARY KEY,\n fingerprint TEXT NOT NULL,\n claimant TEXT NOT NULL\n )`\n})\n"]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Durable signal admission and immutable wait bindings.
3
+ * @since 1.0.0
4
+ */
5
+ import * as Effect from "effect/Effect";
6
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
7
+ /**
8
+ * Adds the signal inbox without replaying legacy messages that lack delivery identity.
9
+ * @category migrations
10
+ * @since 1.0.0
11
+ */
12
+ export declare const signalCommands: Effect.Effect<void, import("effect/unstable/sql/SqlError").SqlError, SqlClient.SqlClient>;
13
+ //# sourceMappingURL=0003_signal_commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0003_signal_commands.d.ts","sourceRoot":"","sources":["../../../src/migrations/0003_signal_commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;GAIG;AACH,eAAO,MAAM,cAAc,2FAYzB,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Durable signal admission and immutable wait bindings.
3
+ * @since 1.0.0
4
+ */
5
+ import * as Dialect from "@smthrs/database/Dialect";
6
+ import * as Effect from "effect/Effect";
7
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
8
+ /**
9
+ * Adds the signal inbox without replaying legacy messages that lack delivery identity.
10
+ * @category migrations
11
+ * @since 1.0.0
12
+ */
13
+ export const signalCommands = Effect.gen(function* () {
14
+ const sql = yield* SqlClient.SqlClient;
15
+ yield* sql `CREATE TABLE IF NOT EXISTS control_signal_commands (
16
+ seq ${Dialect.identity(sql)},
17
+ command_id TEXT NOT NULL UNIQUE,
18
+ run_id TEXT NOT NULL,
19
+ payload_json TEXT NOT NULL,
20
+ wait_token TEXT,
21
+ state TEXT NOT NULL DEFAULT 'pending' CHECK (state IN ('pending', 'delivered', 'rejected', 'terminal'))
22
+ )`;
23
+ yield* sql `CREATE UNIQUE INDEX IF NOT EXISTS control_signal_commands_wait ON control_signal_commands(wait_token) WHERE wait_token IS NOT NULL`;
24
+ yield* sql `CREATE INDEX IF NOT EXISTS control_signal_commands_pending ON control_signal_commands(state, seq)`;
25
+ });
26
+ //# sourceMappingURL=0003_signal_commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0003_signal_commands.js","sourceRoot":"","sources":["../../../src/migrations/0003_signal_commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAChD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAA;UACF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;;;;;;IAM3B,CAAA;IACF,KAAK,CAAC,CAAC,GAAG,CAAA,oIAAoI,CAAA;IAC9I,KAAK,CAAC,CAAC,GAAG,CAAA,mGAAmG,CAAA;AAC/G,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Durable signal admission and immutable wait bindings.\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Adds the signal inbox without replaying legacy messages that lack delivery identity.\n * @category migrations\n * @since 1.0.0\n */\nexport const signalCommands = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql`CREATE TABLE IF NOT EXISTS control_signal_commands (\n seq ${Dialect.identity(sql)},\n command_id TEXT NOT NULL UNIQUE,\n run_id TEXT NOT NULL,\n payload_json TEXT NOT NULL,\n wait_token TEXT,\n state TEXT NOT NULL DEFAULT 'pending' CHECK (state IN ('pending', 'delivered', 'rejected', 'terminal'))\n )`\n yield* sql`CREATE UNIQUE INDEX IF NOT EXISTS control_signal_commands_wait ON control_signal_commands(wait_token) WHERE wait_token IS NOT NULL`\n yield* sql`CREATE INDEX IF NOT EXISTS control_signal_commands_pending ON control_signal_commands(state, seq)`\n})\n"]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Preserve the actual decision without guessing erased legacy answers.
3
+ * @since 1.0.0
4
+ */
5
+ import * as Effect from "effect/Effect";
6
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
7
+ /**
8
+ * Idempotent for both recorded migrations and standalone runtime bootstrap.
9
+ * @category migrations
10
+ * @since 1.0.0
11
+ */
12
+ export declare const approvalDecisions: Effect.Effect<void, import("effect/unstable/sql/SqlError").SqlError, SqlClient.SqlClient>;
13
+ //# sourceMappingURL=0004_approval_decisions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0004_approval_decisions.d.ts","sourceRoot":"","sources":["../../../src/migrations/0004_approval_decisions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,2FAU5B,CAAA"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Preserve the actual decision without guessing erased legacy answers.
3
+ * @since 1.0.0
4
+ */
5
+ import * as Dialect from "@smthrs/database/Dialect";
6
+ import * as Effect from "effect/Effect";
7
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
8
+ /**
9
+ * Idempotent for both recorded migrations and standalone runtime bootstrap.
10
+ * @category migrations
11
+ * @since 1.0.0
12
+ */
13
+ export const approvalDecisions = Effect.gen(function* () {
14
+ const sql = yield* SqlClient.SqlClient;
15
+ yield* sql.withTransaction(Effect.gen(function* () {
16
+ const columns = yield* Dialect.columns(sql, "control_tokens");
17
+ if (columns.some((column) => column.name === "decision_json"))
18
+ return;
19
+ // NULL is intentional: old terminal tokens erased their answer. Their
20
+ // decoder refuses recovery instead of inferring approval from a grant.
21
+ // An undecided token still has its unambiguous resolved=0 representation.
22
+ yield* sql `ALTER TABLE control_tokens ADD COLUMN decision_json TEXT`;
23
+ }));
24
+ });
25
+ //# sourceMappingURL=0004_approval_decisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0004_approval_decisions.js","sourceRoot":"","sources":["../../../src/migrations/0004_approval_decisions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAA;QAC7D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,eAAe,CAAC;YAAE,OAAM;QACrE,sEAAsE;QACtE,uEAAuE;QACvE,0EAA0E;QAC1E,KAAK,CAAC,CAAC,GAAG,CAAA,0DAA0D,CAAA;IACtE,CAAC,CAAC,CAAC,CAAA;AACL,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Preserve the actual decision without guessing erased legacy answers.\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Idempotent for both recorded migrations and standalone runtime bootstrap.\n * @category migrations\n * @since 1.0.0\n */\nexport const approvalDecisions = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql.withTransaction(Effect.gen(function*() {\n const columns = yield* Dialect.columns(sql, \"control_tokens\")\n if (columns.some((column) => column.name === \"decision_json\")) return\n // NULL is intentional: old terminal tokens erased their answer. Their\n // decoder refuses recovery instead of inferring approval from a grant.\n // An undecided token still has its unambiguous resolved=0 representation.\n yield* sql`ALTER TABLE control_tokens ADD COLUMN decision_json TEXT`\n }))\n})\n"]}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Record who admitted each signal command.
3
+ * @since 1.0.0
4
+ */
5
+ import * as Effect from "effect/Effect";
6
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
7
+ /**
8
+ * Adds the admitting principal to the signal inbox.
9
+ *
10
+ * NULL is intentional for existing rows: a command admitted before this column
11
+ * has no recorded identity, so it cannot answer a human wait, which requires
12
+ * `ApprovalAuthority` to authorize the admitting principal.
13
+ *
14
+ * @category migrations
15
+ * @since 1.0.0
16
+ */
17
+ export declare const signalPrincipals: Effect.Effect<void, import("effect/unstable/sql/SqlError").SqlError, SqlClient.SqlClient>;
18
+ //# sourceMappingURL=0005_signal_principals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0005_signal_principals.d.ts","sourceRoot":"","sources":["../../../src/migrations/0005_signal_principals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,2FAO3B,CAAA"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Record who admitted each signal command.
3
+ * @since 1.0.0
4
+ */
5
+ import * as Dialect from "@smthrs/database/Dialect";
6
+ import * as Effect from "effect/Effect";
7
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
8
+ /**
9
+ * Adds the admitting principal to the signal inbox.
10
+ *
11
+ * NULL is intentional for existing rows: a command admitted before this column
12
+ * has no recorded identity, so it cannot answer a human wait, which requires
13
+ * `ApprovalAuthority` to authorize the admitting principal.
14
+ *
15
+ * @category migrations
16
+ * @since 1.0.0
17
+ */
18
+ export const signalPrincipals = Effect.gen(function* () {
19
+ const sql = yield* SqlClient.SqlClient;
20
+ yield* sql.withTransaction(Effect.gen(function* () {
21
+ const columns = yield* Dialect.columns(sql, "control_signal_commands");
22
+ if (columns.some((column) => column.name === "principal_json"))
23
+ return;
24
+ yield* sql `ALTER TABLE control_signal_commands ADD COLUMN principal_json TEXT`;
25
+ }));
26
+ });
27
+ //# sourceMappingURL=0005_signal_principals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0005_signal_principals.js","sourceRoot":"","sources":["../../../src/migrations/0005_signal_principals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAA;QACtE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,gBAAgB,CAAC;YAAE,OAAM;QACtE,KAAK,CAAC,CAAC,GAAG,CAAA,oEAAoE,CAAA;IAChF,CAAC,CAAC,CAAC,CAAA;AACL,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Record who admitted each signal command.\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Adds the admitting principal to the signal inbox.\n *\n * NULL is intentional for existing rows: a command admitted before this column\n * has no recorded identity, so it cannot answer a human wait, which requires\n * `ApprovalAuthority` to authorize the admitting principal.\n *\n * @category migrations\n * @since 1.0.0\n */\nexport const signalPrincipals = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql.withTransaction(Effect.gen(function*() {\n const columns = yield* Dialect.columns(sql, \"control_signal_commands\")\n if (columns.some((column) => column.name === \"principal_json\")) return\n yield* sql`ALTER TABLE control_signal_commands ADD COLUMN principal_json TEXT`\n }))\n})\n"]}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Record who launched each run.
3
+ * @since 1.0.0
4
+ */
5
+ import * as Effect from "effect/Effect";
6
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
7
+ /**
8
+ * Adds the launching principal to the launch index.
9
+ *
10
+ * NULL is intentional for existing rows: a run launched before these columns
11
+ * has no recorded launcher, so only a reader that sees every run lists or
12
+ * watches it.
13
+ *
14
+ * @category migrations
15
+ * @since 1.0.0
16
+ */
17
+ export declare const runPrincipals: Effect.Effect<void, import("effect/unstable/sql/SqlError").SqlError, SqlClient.SqlClient>;
18
+ //# sourceMappingURL=0006_run_principals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0006_run_principals.d.ts","sourceRoot":"","sources":["../../../src/migrations/0006_run_principals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,2FAWxB,CAAA"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Record who launched each run.
3
+ * @since 1.0.0
4
+ */
5
+ import * as Dialect from "@smthrs/database/Dialect";
6
+ import * as Effect from "effect/Effect";
7
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
8
+ /**
9
+ * Adds the launching principal to the launch index.
10
+ *
11
+ * NULL is intentional for existing rows: a run launched before these columns
12
+ * has no recorded launcher, so only a reader that sees every run lists or
13
+ * watches it.
14
+ *
15
+ * @category migrations
16
+ * @since 1.0.0
17
+ */
18
+ export const runPrincipals = Effect.gen(function* () {
19
+ const sql = yield* SqlClient.SqlClient;
20
+ yield* sql.withTransaction(Effect.gen(function* () {
21
+ const columns = yield* Dialect.columns(sql, "control_runs");
22
+ if (!columns.some((column) => column.name === "principal_id")) {
23
+ yield* sql `ALTER TABLE control_runs ADD COLUMN principal_id TEXT`;
24
+ }
25
+ if (!columns.some((column) => column.name === "principal_kind")) {
26
+ yield* sql `ALTER TABLE control_runs ADD COLUMN principal_kind TEXT`;
27
+ }
28
+ }));
29
+ });
30
+ //# sourceMappingURL=0006_run_principals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0006_run_principals.js","sourceRoot":"","sources":["../../../src/migrations/0006_run_principals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,CAAC;YAC9D,KAAK,CAAC,CAAC,GAAG,CAAA,uDAAuD,CAAA;QACnE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,gBAAgB,CAAC,EAAE,CAAC;YAChE,KAAK,CAAC,CAAC,GAAG,CAAA,yDAAyD,CAAA;QACrE,CAAC;IACH,CAAC,CAAC,CAAC,CAAA;AACL,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Record who launched each run.\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Adds the launching principal to the launch index.\n *\n * NULL is intentional for existing rows: a run launched before these columns\n * has no recorded launcher, so only a reader that sees every run lists or\n * watches it.\n *\n * @category migrations\n * @since 1.0.0\n */\nexport const runPrincipals = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql.withTransaction(Effect.gen(function*() {\n const columns = yield* Dialect.columns(sql, \"control_runs\")\n if (!columns.some((column) => column.name === \"principal_id\")) {\n yield* sql`ALTER TABLE control_runs ADD COLUMN principal_id TEXT`\n }\n if (!columns.some((column) => column.name === \"principal_kind\")) {\n yield* sql`ALTER TABLE control_runs ADD COLUMN principal_kind TEXT`\n }\n }))\n})\n"]}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Record the operator consent a resume delegation carries.
3
+ * @since 1.0.0
4
+ */
5
+ import * as Effect from "effect/Effect";
6
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
7
+ /**
8
+ * Adds the journal sequence of an operator's explicit resume to the pending
9
+ * resume delegations.
10
+ *
11
+ * NULL is intentional for existing rows: a delegation recorded before this
12
+ * column is an approval or a wake, which is background intent.
13
+ *
14
+ * @category migrations
15
+ * @since 1.0.0
16
+ */
17
+ export declare const resumeConsent: Effect.Effect<void, import("effect/unstable/sql/SqlError").SqlError, SqlClient.SqlClient>;
18
+ //# sourceMappingURL=0007_resume_consent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0007_resume_consent.d.ts","sourceRoot":"","sources":["../../../src/migrations/0007_resume_consent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,2FAQxB,CAAA"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Record the operator consent a resume delegation carries.
3
+ * @since 1.0.0
4
+ */
5
+ import * as Dialect from "@smthrs/database/Dialect";
6
+ import * as Effect from "effect/Effect";
7
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
8
+ /**
9
+ * Adds the journal sequence of an operator's explicit resume to the pending
10
+ * resume delegations.
11
+ *
12
+ * NULL is intentional for existing rows: a delegation recorded before this
13
+ * column is an approval or a wake, which is background intent.
14
+ *
15
+ * @category migrations
16
+ * @since 1.0.0
17
+ */
18
+ export const resumeConsent = Effect.gen(function* () {
19
+ const sql = yield* SqlClient.SqlClient;
20
+ yield* sql.withTransaction(Effect.gen(function* () {
21
+ const columns = yield* Dialect.columns(sql, "control_run_resumes");
22
+ if (!columns.some((column) => column.name === "consent_seq")) {
23
+ yield* sql `ALTER TABLE control_run_resumes ADD COLUMN consent_seq ${Dialect.integer(sql)}`;
24
+ }
25
+ }));
26
+ });
27
+ //# sourceMappingURL=0007_resume_consent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"0007_resume_consent.js","sourceRoot":"","sources":["../../../src/migrations/0007_resume_consent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAA;QAClE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,CAAC;YAC7D,KAAK,CAAC,CAAC,GAAG,CAAA,0DAA0D,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAA;QAC5F,CAAC;IACH,CAAC,CAAC,CAAC,CAAA;AACL,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Record the operator consent a resume delegation carries.\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Adds the journal sequence of an operator's explicit resume to the pending\n * resume delegations.\n *\n * NULL is intentional for existing rows: a delegation recorded before this\n * column is an approval or a wake, which is background intent.\n *\n * @category migrations\n * @since 1.0.0\n */\nexport const resumeConsent = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql.withTransaction(Effect.gen(function*() {\n const columns = yield* Dialect.columns(sql, \"control_run_resumes\")\n if (!columns.some((column) => column.name === \"consent_seq\")) {\n yield* sql`ALTER TABLE control_run_resumes ADD COLUMN consent_seq ${Dialect.integer(sql)}`\n }\n }))\n})\n"]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Deterministic in-memory Control stack for package and consumer tests.
3
+ *
4
+ * @since 0.1.0
5
+ */
6
+ import { NotificationQueue } from "@smthrs/notifications";
7
+ import { Registry } from "@smthrs/registry";
8
+ import { Layer } from "effect";
9
+ import * as ControlExecutor from "../ControlExecutor.ts";
10
+ import * as ControlRuntime from "../ControlRuntime.ts";
11
+ /**
12
+ * Provides Control, ControlRuntime, the in-memory journal bundle, and an empty
13
+ * registry. Runtime flow metadata falls back to the reserved system catalog.
14
+ *
15
+ * @category layers
16
+ * @since 0.1.0
17
+ */
18
+ export declare const layer: (options?: ControlRuntime.MemoryOptions, executor?: ControlExecutor.Service) => Layer.Layer<import("@smthrs/journal/Journal").Journal | NotificationQueue.NotificationQueue | import("../Control.ts").Control | ControlRuntime.ControlRuntime | ControlExecutor.ControlExecutor | Registry.Registry, import("effect/unstable/sql/SqlError").SqlError | import("@smthrs/journal/Journal").JournalError | import("effect/unstable/sql/Migrator").MigrationError, never>;
19
+ //# sourceMappingURL=TestControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestControl.d.ts","sourceRoot":"","sources":["../../../src/test/TestControl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAkB,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9C,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAA;AActD;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GAChB,UAAU,cAAc,CAAC,aAAa,EACtC,WAAU,eAAe,CAAC,OAAoC,0XAW/D,CAAA"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Deterministic in-memory Control stack for package and consumer tests.
3
+ *
4
+ * @since 0.1.0
5
+ */
6
+ import * as TestJournal from "@smthrs/journal/test/TestJournal";
7
+ import { NotificationQueue } from "@smthrs/notifications";
8
+ import { Registry } from "@smthrs/registry";
9
+ import { Crypto, Effect, Layer } from "effect";
10
+ import * as ControlExecutor from "../ControlExecutor.js";
11
+ import * as ControlLive from "../ControlLive.js";
12
+ import * as ControlRuntime from "../ControlRuntime.js";
13
+ const browserCrypto = Layer.succeed(Crypto.Crypto, Crypto.make({
14
+ /* v8 ignore next -- `Crypto.make` requires a random-byte primitive, and the deterministic runtime this bundle composes derives every identifier from a counter, so only `digest` is ever called here */
15
+ randomBytes: (size) => globalThis.crypto.getRandomValues(new Uint8Array(size)),
16
+ digest: (algorithm, data) => Effect.promise(() => globalThis.crypto.subtle.digest(algorithm, data.slice().buffer)).pipe(Effect.map((buffer) => new Uint8Array(buffer)))
17
+ }));
18
+ /**
19
+ * Provides Control, ControlRuntime, the in-memory journal bundle, and an empty
20
+ * registry. Runtime flow metadata falls back to the reserved system catalog.
21
+ *
22
+ * @category layers
23
+ * @since 0.1.0
24
+ */
25
+ export const layer = (options, executor = ControlExecutor.makeNoop()) => {
26
+ const journal = TestJournal.layer();
27
+ const dependencies = Layer.mergeAll(ControlRuntime.layerMemory(options).pipe(Layer.provide(browserCrypto)), journal, NotificationQueue.layer.pipe(Layer.provide(journal)), ControlExecutor.layer(executor), Registry.layerNoop());
28
+ return Layer.provideMerge(ControlLive.layer, dependencies);
29
+ };
30
+ //# sourceMappingURL=TestControl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestControl.js","sourceRoot":"","sources":["../../../src/test/TestControl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,WAAW,MAAM,kCAAkC,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9C,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAA;AAEtD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CACjC,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,IAAI,CAAC;IACV,wMAAwM;IACxM,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9E,MAAM,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAC1B,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACxF,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAC/C;CACJ,CAAC,CACH,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,OAAsC,EACtC,WAAoC,eAAe,CAAC,QAAQ,EAAE,EAC9D,EAAE;IACF,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,CAAA;IACnC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CACjC,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EACtE,OAAO,EACP,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EACpD,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,EAC/B,QAAQ,CAAC,SAAS,EAAE,CACrB,CAAA;IACD,OAAO,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;AAC5D,CAAC,CAAA","sourcesContent":["/**\n * Deterministic in-memory Control stack for package and consumer tests.\n *\n * @since 0.1.0\n */\n\nimport * as TestJournal from \"@smthrs/journal/test/TestJournal\"\nimport { NotificationQueue } from \"@smthrs/notifications\"\nimport { Registry } from \"@smthrs/registry\"\nimport { Crypto, Effect, Layer } from \"effect\"\nimport * as ControlExecutor from \"../ControlExecutor.ts\"\nimport * as ControlLive from \"../ControlLive.ts\"\nimport * as ControlRuntime from \"../ControlRuntime.ts\"\n\nconst browserCrypto = Layer.succeed(\n Crypto.Crypto,\n Crypto.make({\n /* v8 ignore next -- `Crypto.make` requires a random-byte primitive, and the deterministic runtime this bundle composes derives every identifier from a counter, so only `digest` is ever called here */\n randomBytes: (size) => globalThis.crypto.getRandomValues(new Uint8Array(size)),\n digest: (algorithm, data) =>\n Effect.promise(() => globalThis.crypto.subtle.digest(algorithm, data.slice().buffer)).pipe(\n Effect.map((buffer) => new Uint8Array(buffer))\n )\n })\n)\n\n/**\n * Provides Control, ControlRuntime, the in-memory journal bundle, and an empty\n * registry. Runtime flow metadata falls back to the reserved system catalog.\n *\n * @category layers\n * @since 0.1.0\n */\nexport const layer = (\n options?: ControlRuntime.MemoryOptions,\n executor: ControlExecutor.Service = ControlExecutor.makeNoop()\n) => {\n const journal = TestJournal.layer()\n const dependencies = Layer.mergeAll(\n ControlRuntime.layerMemory(options).pipe(Layer.provide(browserCrypto)),\n journal,\n NotificationQueue.layer.pipe(Layer.provide(journal)),\n ControlExecutor.layer(executor),\n Registry.layerNoop()\n )\n return Layer.provideMerge(ControlLive.layer, dependencies)\n}\n"]}