@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,378 @@
1
+ /**
2
+ * Stable, schema-backed control-plane failures.
3
+ *
4
+ * @since 0.1.0
5
+ */
6
+
7
+ import * as Fault from "@smthrs/flow/Fault"
8
+ import { NotificationError } from "@smthrs/notifications/NotificationQueue"
9
+ import { Effect, Schema } from "effect"
10
+ import { FlowId, RunHost, RunId } from "./ControlSchema.ts"
11
+
12
+ const constantCode = <const Code extends string>(code: Code) =>
13
+ Schema.Literal(code).pipe(Schema.withConstructorDefault(Effect.succeed(code)))
14
+
15
+ /**
16
+ * No run with this id exists.
17
+ *
18
+ * @category errors
19
+ * @since 0.1.0
20
+ */
21
+ export class RunNotFound extends Schema.TaggedError<RunNotFound>()("/control/RunNotFound", {
22
+ code: constantCode("run_not_found"),
23
+ runId: RunId
24
+ }) {
25
+ /**
26
+ * The sentence an operator reads. Without one the CLI printed the bare
27
+ * fields, `run_not_found runId=nope`, which names no next action.
28
+ */
29
+ override get message(): string {
30
+ return `Run ${this.runId} was not found. Run \`smthrs runs list\` to see the runs you can read.`
31
+ }
32
+ }
33
+
34
+ /**
35
+ * No plan with this id exists.
36
+ *
37
+ * @category errors
38
+ * @since 0.1.0
39
+ */
40
+ export class PlanNotFound extends Schema.TaggedError<PlanNotFound>()("/control/PlanNotFound", {
41
+ code: constantCode("plan_not_found"),
42
+ planId: Schema.String
43
+ }) {
44
+ /**
45
+ * The sentence an operator reads. Every renderer in the tree prints
46
+ * `message`, so a refusal without one does not explain the next action.
47
+ */
48
+ override get message(): string {
49
+ return `Plan ${this.planId} was not found. Create the plan again before approving or launching it.`
50
+ }
51
+ }
52
+
53
+ /**
54
+ * The plan was denied and cannot be launched.
55
+ *
56
+ * @category errors
57
+ * @since 0.1.0
58
+ */
59
+ export class PlanDenied extends Schema.TaggedError<PlanDenied>()("/control/PlanDenied", {
60
+ code: constantCode("plan_denied"),
61
+ planId: Schema.String
62
+ }) {
63
+ /**
64
+ * The sentence an operator reads. Every renderer in the tree prints
65
+ * `message`, so a denial must state how to make a later launch possible.
66
+ */
67
+ override get message(): string {
68
+ return `Plan ${this.planId} was denied and cannot be launched. Create and approve a new plan before running it.`
69
+ }
70
+ }
71
+
72
+ /**
73
+ * No flow with this id is registered.
74
+ *
75
+ * @category errors
76
+ * @since 0.1.0
77
+ */
78
+ export class FlowNotFound extends Schema.TaggedError<FlowNotFound>()("/control/FlowNotFound", {
79
+ code: constantCode("flow_not_found"),
80
+ flowId: FlowId
81
+ }) {
82
+ /**
83
+ * The sentence an operator reads, which names the command that lists the
84
+ * flows a caller can start.
85
+ */
86
+ override get message(): string {
87
+ return `Flow ${this.flowId} is not registered. Run \`smthrs flow list\` to see the flows you can start.`
88
+ }
89
+ }
90
+
91
+ /**
92
+ * The submitted plan does not hash to the digest the caller declared, so
93
+ * the control plane refuses to store it.
94
+ *
95
+ * @category errors
96
+ * @since 0.1.0
97
+ */
98
+ export class PlanDigestMismatch extends Schema.TaggedError<PlanDigestMismatch>()("/control/PlanDigestMismatch", {
99
+ code: constantCode("plan_digest_mismatch"),
100
+ planId: Schema.String,
101
+ expected: Schema.String,
102
+ actual: Schema.String
103
+ }) {}
104
+
105
+ /**
106
+ * The plan's effect envelope differs from the one the caller declared.
107
+ *
108
+ * @category errors
109
+ * @since 0.1.0
110
+ */
111
+ export class EnvelopeMismatch extends Schema.TaggedError<EnvelopeMismatch>()("/control/EnvelopeMismatch", {
112
+ code: constantCode("envelope_mismatch"),
113
+ planId: Schema.String,
114
+ expected: Schema.String,
115
+ actual: Schema.String
116
+ }) {}
117
+
118
+ /**
119
+ * The caller's claim on this run lapsed or was fenced by a newer owner.
120
+ *
121
+ * `parkedBy` names the live process that parked the run: it, not the caller,
122
+ * drives the run, so `Control.resume` hands the resume to it.
123
+ *
124
+ * @category errors
125
+ * @since 0.1.0
126
+ */
127
+ export class ClaimLost extends Schema.TaggedError<ClaimLost>()("/control/ClaimLost", {
128
+ code: constantCode("claim_lost"),
129
+ runId: RunId,
130
+ reason: Schema.optional(Schema.String),
131
+ parkedBy: Schema.optional(RunHost)
132
+ }) {}
133
+
134
+ /**
135
+ * The run's flow or engine changed since the run started, so resuming it would
136
+ * run code the run did not start with. Pass `allowCodeDrift` to resume it
137
+ * anyway; the run then records the code it resumed on.
138
+ *
139
+ * @category errors
140
+ * @since 1.0.0
141
+ */
142
+ export class CodeDrift extends Schema.TaggedError<CodeDrift>()("/control/CodeDrift", {
143
+ code: constantCode("code_drift"),
144
+ runId: RunId,
145
+ flowId: FlowId,
146
+ /** The execution digest the run started with; absent when only the engine changed. */
147
+ recorded: Schema.optional(Schema.String),
148
+ /** The flow's execution digest now; absent when the flow is gone or declares none. */
149
+ current: Schema.optional(Schema.String),
150
+ /** The engine version the run started on, when the engine changed. */
151
+ recordedEngine: Schema.optional(Schema.String),
152
+ /** The engine version resuming it, when the engine changed. */
153
+ currentEngine: Schema.optional(Schema.String)
154
+ }) {
155
+ override get message(): string {
156
+ const changes = [
157
+ ...(this.recorded === undefined
158
+ ? []
159
+ : [`${this.flowId} ${this.recorded}, which is now ${this.current ?? "gone"}`]),
160
+ ...(this.recordedEngine === undefined
161
+ ? []
162
+ : [`engine ${this.recordedEngine}, which is now ${this.currentEngine ?? "unknown"}`])
163
+ ]
164
+ // A flow that is gone has no code to adopt, so the flag would not help.
165
+ const next = this.recorded !== undefined && this.current === undefined
166
+ ? "Restore the flow to resume it."
167
+ : "Resume with --allow-code-drift to run the changed code."
168
+ return `Run ${this.runId} started on ${changes.join(" and ")}. ${next}`
169
+ }
170
+ }
171
+
172
+ /**
173
+ * This request was already answered; a second answer is refused rather
174
+ * than overwriting the first.
175
+ *
176
+ * @category errors
177
+ * @since 0.1.0
178
+ */
179
+ export class AlreadyResolved extends Schema.TaggedError<AlreadyResolved>()("/control/AlreadyResolved", {
180
+ code: constantCode("already_resolved"),
181
+ requestId: Schema.String
182
+ }) {}
183
+
184
+ /**
185
+ * The request did not satisfy its schema or a stated precondition.
186
+ *
187
+ * @category errors
188
+ * @since 0.1.0
189
+ */
190
+ export class InvalidInput extends Schema.TaggedError<InvalidInput>()("/control/InvalidInput", {
191
+ code: constantCode("invalid_input"),
192
+ issue: Schema.String
193
+ }) {}
194
+
195
+ /**
196
+ * The caller lacks a usable credential or authority for this operation.
197
+ *
198
+ * @category errors
199
+ * @since 0.1.0
200
+ */
201
+ export class Unauthorized extends Schema.TaggedError<Unauthorized>()("/control/Unauthorized", {
202
+ code: constantCode("unauthorized"),
203
+ message: Schema.String
204
+ }) {}
205
+
206
+ /**
207
+ * The operation is not implemented in this deployment. `ticket` names the
208
+ * issue that tracks it, per `Concepts/Tickets Not Exceptions.md`.
209
+ *
210
+ * @category errors
211
+ * @since 0.1.0
212
+ */
213
+ export class Unavailable extends Schema.TaggedError<Unavailable>()("/control/Unavailable", {
214
+ code: constantCode("unavailable"),
215
+ feature: Schema.String,
216
+ ticket: Schema.String
217
+ }) {}
218
+
219
+ /**
220
+ * The request failed before a declared control response reached the caller.
221
+ *
222
+ * `retryable` classifies only the transport phase. Connection failures and
223
+ * HTTP 5xx responses are retryable; local encode failures, response decode
224
+ * failures, and HTTP 4xx responses are not. A caller may resend a retryable
225
+ * mutation only when its idempotency key makes replay safe. A keyless request
226
+ * can have reached the server even when its response was lost.
227
+ *
228
+ * `message` is a fixed operator-facing sentence. `cause` retains the original
229
+ * client failure for diagnostics without copying its raw text into output.
230
+ *
231
+ * @category errors
232
+ * @since 0.1.0
233
+ */
234
+ export class TransportError extends Schema.TaggedError<TransportError>()("/control/TransportError", {
235
+ code: constantCode("transport_error"),
236
+ message: Schema.String,
237
+ retryable: Schema.Boolean,
238
+ cause: Schema.optional(Schema.Defect())
239
+ }) {}
240
+
241
+ /**
242
+ * A control-plane store operation failed.
243
+ *
244
+ * @category errors
245
+ * @since 0.1.0
246
+ */
247
+ export class PersistenceError extends Schema.TaggedError<PersistenceError>()("/control/PersistenceError", {
248
+ code: constantCode("persistence_failed"),
249
+ operation: Schema.String,
250
+ message: Schema.String,
251
+ cause: Schema.optional(Schema.Defect())
252
+ }) {}
253
+
254
+ /**
255
+ * The executor refused or could not start the run.
256
+ *
257
+ * @category errors
258
+ * @since 0.1.0
259
+ */
260
+ export class LaunchFailed extends Schema.TaggedError<LaunchFailed>()("/control/LaunchFailed", {
261
+ code: constantCode("launch_failed"),
262
+ runId: RunId,
263
+ message: Schema.String,
264
+ cause: Schema.optional(Schema.Defect())
265
+ }) {}
266
+
267
+ /**
268
+ * A signal named a wait point the run does not have open.
269
+ *
270
+ * `Control.signal` completes the `WaitFor` deferred a run is parked on. A
271
+ * signal whose name matches no open wait point completes nothing, and recording
272
+ * it anyway would leave an operator watching a delivery that never lands, so it
273
+ * is refused where it arrives.
274
+ *
275
+ * The signal's name is `waitName`, not `name`. A field spelled `name` on an
276
+ * `Error` subclass shadows `Error.prototype.name`, which every renderer in the
277
+ * tree reads: `smithers signal run-3 '{"name":"go"}'` against a timer-parked
278
+ * run printed `go: ` to stderr and exited 1, because `bin.ts` reports
279
+ * `${error.name}: ${error.message}` and this class had overwritten one and
280
+ * defined neither (release validation, defect D3).
281
+ *
282
+ * @category errors
283
+ * @since 0.1.0
284
+ */
285
+ export class NoMatchingWait extends Schema.TaggedError<NoMatchingWait>()("/control/NoMatchingWait", {
286
+ code: constantCode("no_matching_wait"),
287
+ runId: RunId,
288
+ waitName: Schema.String
289
+ }) {
290
+ /**
291
+ * The sentence an operator reads. Every other renderer in the tree prints
292
+ * `message`, so a refusal with none is a refusal with no reason.
293
+ */
294
+ override get message(): string {
295
+ return `no wait point named "${this.waitName}" is open on run ${this.runId}. ` +
296
+ `Read \`smthrs runs show ${this.runId}\` to see what that run is waiting for.`
297
+ }
298
+ }
299
+
300
+ /**
301
+ * A credential write lost a race: the record moved on before this writer
302
+ * committed, so the update is refused rather than silently overwriting the
303
+ * winner.
304
+ *
305
+ * @since 0.1.0
306
+ * @category errors
307
+ */
308
+ export class CredentialConflict extends Schema.TaggedError<CredentialConflict>()("/control/CredentialConflict", {
309
+ code: constantCode("credential_conflict"),
310
+ id: Schema.String,
311
+ expectedVersion: Schema.Number,
312
+ actualVersion: Schema.Number
313
+ }) {}
314
+
315
+ /**
316
+ * Every stable failure emitted by the control plane, as one schema.
317
+ *
318
+ * This is the single membership list. The exported union type is derived from
319
+ * it and `ControlClient.isControlError` is `Schema.is` of it, so an error class
320
+ * added here reaches both. Two hand-maintained lists drifted: `ControlError`
321
+ * omitted `CredentialConflict` while the README documented it as a member, and
322
+ * `isControlError` repeated the same thirteen names a second time.
323
+ *
324
+ * @since 0.1.0
325
+ * @category errors
326
+ */
327
+ export const ControlErrorSchema = Schema.Union([
328
+ RunNotFound,
329
+ PlanNotFound,
330
+ PlanDenied,
331
+ FlowNotFound,
332
+ PlanDigestMismatch,
333
+ EnvelopeMismatch,
334
+ ClaimLost,
335
+ CodeDrift,
336
+ AlreadyResolved,
337
+ InvalidInput,
338
+ Unauthorized,
339
+ Unavailable,
340
+ TransportError,
341
+ PersistenceError,
342
+ LaunchFailed,
343
+ NoMatchingWait,
344
+ CredentialConflict,
345
+ NotificationError
346
+ ])
347
+
348
+ /**
349
+ * Every stable failure emitted by the control plane.
350
+ *
351
+ * @since 0.1.0
352
+ * @category errors
353
+ */
354
+ export type ControlError = typeof ControlErrorSchema.Type
355
+
356
+ // Whose problem each control refusal is when it ends a run.
357
+ for (
358
+ const [tag, kind] of [
359
+ ["RunNotFound", "user"],
360
+ ["PlanNotFound", "user"],
361
+ ["PlanDenied", "user"],
362
+ ["FlowNotFound", "user"],
363
+ ["PlanDigestMismatch", "user"],
364
+ ["EnvelopeMismatch", "user"],
365
+ ["AlreadyResolved", "user"],
366
+ ["InvalidInput", "user"],
367
+ ["Unauthorized", "user"],
368
+ ["NoMatchingWait", "user"],
369
+ ["CredentialConflict", "user"],
370
+ // A flow without a model or an approved executable identity: the person's to fix.
371
+ ["LaunchFailed", "user"],
372
+ ["ClaimLost", "infra"],
373
+ ["CodeDrift", "infra"],
374
+ ["Unavailable", "infra"],
375
+ ["TransportError", "infra"],
376
+ ["PersistenceError", "infra"]
377
+ ] as const
378
+ ) Fault.register(`/control/${tag}`, kind)