@qlever-llc/trellis 0.8.3 → 0.9.0-rc.2

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 (583) hide show
  1. package/README.md +1 -1
  2. package/bin/trellis-generate.js +132 -0
  3. package/esm/auth/browser/login.d.ts.map +1 -1
  4. package/esm/auth/browser/login.js +46 -3
  5. package/esm/auth/browser/portal.d.ts.map +1 -1
  6. package/esm/auth/browser/portal.js +5 -1
  7. package/esm/auth/browser/session.d.ts +18 -7
  8. package/esm/auth/browser/session.d.ts.map +1 -1
  9. package/esm/auth/browser/session.js +47 -11
  10. package/esm/auth/browser/storage.d.ts +6 -1
  11. package/esm/auth/browser/storage.d.ts.map +1 -1
  12. package/esm/auth/browser/storage.js +15 -3
  13. package/esm/auth/browser.d.ts +2 -2
  14. package/esm/auth/browser.d.ts.map +1 -1
  15. package/esm/auth/browser.js +1 -1
  16. package/esm/auth/device_activation.d.ts +36 -33
  17. package/esm/auth/device_activation.d.ts.map +1 -1
  18. package/esm/auth/device_activation.js +26 -22
  19. package/esm/auth/mod.d.ts +4 -4
  20. package/esm/auth/mod.d.ts.map +1 -1
  21. package/esm/auth/mod.js +2 -2
  22. package/esm/auth/proof.d.ts +3 -1
  23. package/esm/auth/proof.d.ts.map +1 -1
  24. package/esm/auth/proof.js +21 -15
  25. package/esm/auth/protocol.d.ts +2457 -941
  26. package/esm/auth/protocol.d.ts.map +1 -1
  27. package/esm/auth/protocol.js +747 -375
  28. package/esm/auth/schemas.d.ts +25 -4
  29. package/esm/auth/schemas.d.ts.map +1 -1
  30. package/esm/auth/schemas.js +14 -4
  31. package/esm/auth/session_auth.d.ts +1 -1
  32. package/esm/auth/session_auth.d.ts.map +1 -1
  33. package/esm/auth/session_auth.js +7 -1
  34. package/esm/client_connect.d.ts +2 -0
  35. package/esm/client_connect.d.ts.map +1 -1
  36. package/esm/client_connect.js +76 -15
  37. package/esm/contract.d.ts +3 -0
  38. package/esm/contract.d.ts.map +1 -1
  39. package/esm/contract_support/mod.d.ts +422 -43
  40. package/esm/contract_support/mod.d.ts.map +1 -1
  41. package/esm/contract_support/mod.js +734 -33
  42. package/esm/contract_support/protocol.d.ts +20 -5
  43. package/esm/contract_support/protocol.d.ts.map +1 -1
  44. package/esm/contract_support/protocol.js +18 -10
  45. package/esm/contract_support/runtime.d.ts +11 -0
  46. package/esm/contract_support/runtime.d.ts.map +1 -1
  47. package/esm/contract_support/schema_pointers.d.ts.map +1 -1
  48. package/esm/contract_support/schema_pointers.js +32 -14
  49. package/esm/device.d.ts +2 -0
  50. package/esm/device.d.ts.map +1 -1
  51. package/esm/device.js +3 -0
  52. package/esm/errors/AuthError.d.ts +1 -1
  53. package/esm/errors/AuthError.d.ts.map +1 -1
  54. package/esm/errors/AuthError.js +5 -1
  55. package/esm/errors/index.d.ts +4 -4
  56. package/esm/generated-sdk/auth/api.d.ts +27 -9
  57. package/esm/generated-sdk/auth/api.d.ts.map +1 -1
  58. package/esm/generated-sdk/auth/api.js +16 -590
  59. package/esm/generated-sdk/auth/client.d.ts +91 -85
  60. package/esm/generated-sdk/auth/client.d.ts.map +1 -1
  61. package/esm/generated-sdk/auth/contract.d.ts +1 -1
  62. package/esm/generated-sdk/auth/contract.d.ts.map +1 -1
  63. package/esm/generated-sdk/auth/contract.js +4 -2
  64. package/esm/generated-sdk/auth/mod.d.ts +1 -0
  65. package/esm/generated-sdk/auth/mod.d.ts.map +1 -1
  66. package/esm/generated-sdk/auth/owned_api.d.ts +3 -0
  67. package/esm/generated-sdk/auth/owned_api.d.ts.map +1 -0
  68. package/esm/generated-sdk/auth/owned_api.js +594 -0
  69. package/esm/generated-sdk/auth/schemas.d.ts +9959 -5160
  70. package/esm/generated-sdk/auth/schemas.d.ts.map +1 -1
  71. package/esm/generated-sdk/auth/schemas.js +136 -137
  72. package/esm/generated-sdk/auth/types.d.ts +2418 -1557
  73. package/esm/generated-sdk/auth/types.d.ts.map +1 -1
  74. package/esm/generated-sdk/auth/types.js +1 -1
  75. package/esm/generated-sdk/health/api.d.ts +24 -9
  76. package/esm/generated-sdk/health/api.d.ts.map +1 -1
  77. package/esm/generated-sdk/health/api.js +12 -20
  78. package/esm/generated-sdk/health/client.d.ts +2 -1
  79. package/esm/generated-sdk/health/client.d.ts.map +1 -1
  80. package/esm/generated-sdk/health/contract.d.ts.map +1 -1
  81. package/esm/generated-sdk/health/contract.js +2 -0
  82. package/esm/generated-sdk/health/owned_api.d.ts +3 -0
  83. package/esm/generated-sdk/health/owned_api.d.ts.map +1 -0
  84. package/esm/generated-sdk/health/owned_api.js +16 -0
  85. package/esm/generated-sdk/health/types.d.ts +2 -0
  86. package/esm/generated-sdk/health/types.d.ts.map +1 -1
  87. package/esm/generated-sdk/jobs/api.d.ts +33 -9
  88. package/esm/generated-sdk/jobs/api.d.ts.map +1 -1
  89. package/esm/generated-sdk/jobs/api.js +22 -87
  90. package/esm/generated-sdk/jobs/client.d.ts +9 -2
  91. package/esm/generated-sdk/jobs/client.d.ts.map +1 -1
  92. package/esm/generated-sdk/jobs/contract.d.ts +1 -1
  93. package/esm/generated-sdk/jobs/contract.d.ts.map +1 -1
  94. package/esm/generated-sdk/jobs/contract.js +4 -2
  95. package/esm/generated-sdk/jobs/owned_api.d.ts +3 -0
  96. package/esm/generated-sdk/jobs/owned_api.d.ts.map +1 -0
  97. package/esm/generated-sdk/jobs/owned_api.js +118 -0
  98. package/esm/generated-sdk/jobs/schemas.d.ts +336 -123
  99. package/esm/generated-sdk/jobs/schemas.d.ts.map +1 -1
  100. package/esm/generated-sdk/jobs/schemas.js +17 -15
  101. package/esm/generated-sdk/jobs/types.d.ts +144 -34
  102. package/esm/generated-sdk/jobs/types.d.ts.map +1 -1
  103. package/esm/generated-sdk/jobs/types.js +36 -1
  104. package/esm/generated-sdk/state/api.d.ts +27 -9
  105. package/esm/generated-sdk/state/api.d.ts.map +1 -1
  106. package/esm/generated-sdk/state/api.js +16 -71
  107. package/esm/generated-sdk/state/client.d.ts +4 -2
  108. package/esm/generated-sdk/state/client.d.ts.map +1 -1
  109. package/esm/generated-sdk/state/contract.d.ts +1 -1
  110. package/esm/generated-sdk/state/contract.d.ts.map +1 -1
  111. package/esm/generated-sdk/state/contract.js +4 -2
  112. package/esm/generated-sdk/state/owned_api.d.ts +3 -0
  113. package/esm/generated-sdk/state/owned_api.d.ts.map +1 -0
  114. package/esm/generated-sdk/state/owned_api.js +66 -0
  115. package/esm/generated-sdk/state/schemas.d.ts +264 -284
  116. package/esm/generated-sdk/state/schemas.d.ts.map +1 -1
  117. package/esm/generated-sdk/state/schemas.js +6 -6
  118. package/esm/generated-sdk/state/types.d.ts +24 -23
  119. package/esm/generated-sdk/state/types.d.ts.map +1 -1
  120. package/esm/generated-sdk/state/types.js +1 -1
  121. package/esm/generated-sdk/trellis-core/api.d.ts +27 -9
  122. package/esm/generated-sdk/trellis-core/api.d.ts.map +1 -1
  123. package/esm/generated-sdk/trellis-core/api.js +16 -39
  124. package/esm/generated-sdk/trellis-core/client.d.ts +5 -2
  125. package/esm/generated-sdk/trellis-core/client.d.ts.map +1 -1
  126. package/esm/generated-sdk/trellis-core/contract.d.ts +1 -1
  127. package/esm/generated-sdk/trellis-core/contract.d.ts.map +1 -1
  128. package/esm/generated-sdk/trellis-core/contract.js +4 -2
  129. package/esm/generated-sdk/trellis-core/owned_api.d.ts +3 -0
  130. package/esm/generated-sdk/trellis-core/owned_api.d.ts.map +1 -0
  131. package/esm/generated-sdk/trellis-core/owned_api.js +42 -0
  132. package/esm/generated-sdk/trellis-core/schemas.d.ts +259 -11
  133. package/esm/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
  134. package/esm/generated-sdk/trellis-core/schemas.js +5 -3
  135. package/esm/generated-sdk/trellis-core/types.d.ts +56 -1
  136. package/esm/generated-sdk/trellis-core/types.d.ts.map +1 -1
  137. package/esm/generated-sdk/trellis-core/types.js +1 -1
  138. package/esm/helpers.d.ts.map +1 -1
  139. package/esm/index.d.ts +4 -3
  140. package/esm/index.d.ts.map +1 -1
  141. package/esm/index.js +1 -0
  142. package/esm/jobs.d.ts +10 -1
  143. package/esm/jobs.d.ts.map +1 -1
  144. package/esm/jobs.js +16 -1
  145. package/esm/kv.d.ts.map +1 -1
  146. package/esm/kv.js +10 -4
  147. package/esm/models/auth/rpc/Logout.d.ts +4 -4
  148. package/esm/models/auth/rpc/Logout.d.ts.map +1 -1
  149. package/esm/models/auth/rpc/Logout.js +2 -2
  150. package/esm/models/trellis/Page.d.ts +2 -0
  151. package/esm/models/trellis/Page.d.ts.map +1 -0
  152. package/esm/models/trellis/Page.js +1 -0
  153. package/esm/models/trellis/State.d.ts +1 -0
  154. package/esm/models/trellis/State.d.ts.map +1 -1
  155. package/esm/models/trellis/State.js +1 -0
  156. package/esm/models/trellis/rpc/StateList.d.ts +9 -12
  157. package/esm/models/trellis/rpc/StateList.d.ts.map +1 -1
  158. package/esm/models/trellis/rpc/StateList.js +16 -18
  159. package/esm/npm/src/auth/browser/login.d.ts.map +1 -1
  160. package/esm/npm/src/auth/browser/login.js +46 -3
  161. package/esm/npm/src/auth/browser/portal.d.ts.map +1 -1
  162. package/esm/npm/src/auth/browser/portal.js +5 -1
  163. package/esm/npm/src/auth/browser/session.d.ts +18 -7
  164. package/esm/npm/src/auth/browser/session.d.ts.map +1 -1
  165. package/esm/npm/src/auth/browser/session.js +47 -11
  166. package/esm/npm/src/auth/browser/storage.d.ts +6 -1
  167. package/esm/npm/src/auth/browser/storage.d.ts.map +1 -1
  168. package/esm/npm/src/auth/browser/storage.js +15 -3
  169. package/esm/npm/src/auth/browser.d.ts +2 -2
  170. package/esm/npm/src/auth/browser.d.ts.map +1 -1
  171. package/esm/npm/src/auth/browser.js +1 -1
  172. package/esm/npm/src/auth/device_activation.d.ts +36 -33
  173. package/esm/npm/src/auth/device_activation.d.ts.map +1 -1
  174. package/esm/npm/src/auth/device_activation.js +26 -22
  175. package/esm/npm/src/auth/mod.d.ts +4 -4
  176. package/esm/npm/src/auth/mod.d.ts.map +1 -1
  177. package/esm/npm/src/auth/mod.js +2 -2
  178. package/esm/npm/src/auth/proof.d.ts +3 -1
  179. package/esm/npm/src/auth/proof.d.ts.map +1 -1
  180. package/esm/npm/src/auth/proof.js +21 -15
  181. package/esm/npm/src/auth/protocol.d.ts +2457 -941
  182. package/esm/npm/src/auth/protocol.d.ts.map +1 -1
  183. package/esm/npm/src/auth/protocol.js +747 -375
  184. package/esm/npm/src/auth/schemas.d.ts +25 -4
  185. package/esm/npm/src/auth/schemas.d.ts.map +1 -1
  186. package/esm/npm/src/auth/schemas.js +14 -4
  187. package/esm/npm/src/auth/session_auth.d.ts +1 -1
  188. package/esm/npm/src/auth/session_auth.d.ts.map +1 -1
  189. package/esm/npm/src/auth/session_auth.js +7 -1
  190. package/esm/npm/src/client_connect.d.ts +2 -0
  191. package/esm/npm/src/client_connect.d.ts.map +1 -1
  192. package/esm/npm/src/client_connect.js +76 -15
  193. package/esm/npm/src/contract.d.ts +3 -0
  194. package/esm/npm/src/contract.d.ts.map +1 -1
  195. package/esm/npm/src/contract_support/mod.d.ts +422 -43
  196. package/esm/npm/src/contract_support/mod.d.ts.map +1 -1
  197. package/esm/npm/src/contract_support/mod.js +734 -33
  198. package/esm/npm/src/contract_support/protocol.d.ts +20 -5
  199. package/esm/npm/src/contract_support/protocol.d.ts.map +1 -1
  200. package/esm/npm/src/contract_support/protocol.js +18 -10
  201. package/esm/npm/src/contract_support/runtime.d.ts +11 -0
  202. package/esm/npm/src/contract_support/runtime.d.ts.map +1 -1
  203. package/esm/npm/src/contract_support/schema_pointers.d.ts.map +1 -1
  204. package/esm/npm/src/contract_support/schema_pointers.js +32 -14
  205. package/esm/npm/src/device/deno.d.ts.map +1 -1
  206. package/esm/npm/src/device/deno.js +6 -0
  207. package/esm/npm/src/device.d.ts +2 -0
  208. package/esm/npm/src/device.d.ts.map +1 -1
  209. package/esm/npm/src/device.js +3 -0
  210. package/esm/npm/src/errors/AuthError.d.ts +1 -1
  211. package/esm/npm/src/errors/AuthError.d.ts.map +1 -1
  212. package/esm/npm/src/errors/AuthError.js +5 -1
  213. package/esm/npm/src/errors/index.d.ts +4 -4
  214. package/esm/npm/src/helpers.d.ts.map +1 -1
  215. package/esm/npm/src/index.d.ts +4 -3
  216. package/esm/npm/src/index.d.ts.map +1 -1
  217. package/esm/npm/src/index.js +1 -0
  218. package/esm/npm/src/jobs.d.ts +10 -1
  219. package/esm/npm/src/jobs.d.ts.map +1 -1
  220. package/esm/npm/src/jobs.js +16 -1
  221. package/esm/npm/src/kv.d.ts.map +1 -1
  222. package/esm/npm/src/kv.js +10 -4
  223. package/esm/npm/src/models/auth/rpc/Logout.d.ts +4 -4
  224. package/esm/npm/src/models/auth/rpc/Logout.d.ts.map +1 -1
  225. package/esm/npm/src/models/auth/rpc/Logout.js +2 -2
  226. package/esm/npm/src/models/trellis/Page.d.ts +2 -0
  227. package/esm/npm/src/models/trellis/Page.d.ts.map +1 -0
  228. package/esm/npm/src/models/trellis/Page.js +1 -0
  229. package/esm/npm/src/models/trellis/State.d.ts +1 -0
  230. package/esm/npm/src/models/trellis/State.d.ts.map +1 -1
  231. package/esm/npm/src/models/trellis/State.js +1 -0
  232. package/esm/npm/src/models/trellis/rpc/StateList.d.ts +9 -12
  233. package/esm/npm/src/models/trellis/rpc/StateList.d.ts.map +1 -1
  234. package/esm/npm/src/models/trellis/rpc/StateList.js +16 -18
  235. package/esm/npm/src/operations.d.ts +16 -7
  236. package/esm/npm/src/operations.d.ts.map +1 -1
  237. package/esm/npm/src/operations.js +84 -19
  238. package/esm/npm/src/runtime_transport.d.ts +2 -0
  239. package/esm/npm/src/runtime_transport.d.ts.map +1 -1
  240. package/esm/npm/src/runtime_transport.js +1 -0
  241. package/esm/npm/src/server/internal_jobs/active-job.d.ts +2 -1
  242. package/esm/npm/src/server/internal_jobs/active-job.d.ts.map +1 -1
  243. package/esm/npm/src/server/internal_jobs/active-job.js +3 -0
  244. package/esm/npm/src/server/internal_jobs/job-manager.d.ts +4 -1
  245. package/esm/npm/src/server/internal_jobs/job-manager.d.ts.map +1 -1
  246. package/esm/npm/src/server/internal_jobs/job-manager.js +61 -1
  247. package/esm/npm/src/server/internal_jobs/projection.js +1 -0
  248. package/esm/npm/src/server/internal_jobs/runtime-worker.d.ts +13 -1
  249. package/esm/npm/src/server/internal_jobs/runtime-worker.d.ts.map +1 -1
  250. package/esm/npm/src/server/internal_jobs/runtime-worker.js +73 -13
  251. package/esm/npm/src/server/internal_jobs/types.d.ts +19 -0
  252. package/esm/npm/src/server/internal_jobs/types.d.ts.map +1 -1
  253. package/esm/npm/src/server/internal_jobs/types.js +10 -0
  254. package/esm/npm/src/server/runtime.d.ts +1 -0
  255. package/esm/npm/src/server/runtime.d.ts.map +1 -1
  256. package/esm/npm/src/server/service.d.ts +10 -1
  257. package/esm/npm/src/server/service.d.ts.map +1 -1
  258. package/esm/npm/src/server/service.js +190 -64
  259. package/esm/npm/src/server/transfer.d.ts.map +1 -1
  260. package/esm/npm/src/server/transfer.js +4 -0
  261. package/esm/npm/src/server.d.ts.map +1 -1
  262. package/esm/npm/src/server.js +337 -34
  263. package/esm/npm/src/store.d.ts +8 -1
  264. package/esm/npm/src/store.d.ts.map +1 -1
  265. package/esm/npm/src/store.js +46 -8
  266. package/esm/npm/src/transfer.d.ts +3 -0
  267. package/esm/npm/src/transfer.d.ts.map +1 -1
  268. package/esm/npm/src/transfer.js +20 -30
  269. package/esm/npm/src/trellis.d.ts +85 -22
  270. package/esm/npm/src/trellis.d.ts.map +1 -1
  271. package/esm/npm/src/trellis.js +525 -61
  272. package/esm/operations.d.ts +16 -7
  273. package/esm/operations.d.ts.map +1 -1
  274. package/esm/operations.js +84 -19
  275. package/esm/runtime_transport.d.ts +2 -0
  276. package/esm/runtime_transport.d.ts.map +1 -1
  277. package/esm/runtime_transport.js +1 -0
  278. package/esm/store.d.ts +8 -1
  279. package/esm/store.d.ts.map +1 -1
  280. package/esm/store.js +46 -8
  281. package/esm/transfer.d.ts +3 -0
  282. package/esm/transfer.d.ts.map +1 -1
  283. package/esm/transfer.js +20 -30
  284. package/esm/trellis.d.ts +85 -22
  285. package/esm/trellis.d.ts.map +1 -1
  286. package/esm/trellis.js +525 -61
  287. package/package.json +6 -4
  288. package/script/auth/browser/login.d.ts.map +1 -1
  289. package/script/auth/browser/login.js +46 -3
  290. package/script/auth/browser/portal.d.ts.map +1 -1
  291. package/script/auth/browser/portal.js +5 -1
  292. package/script/auth/browser/session.d.ts +18 -7
  293. package/script/auth/browser/session.d.ts.map +1 -1
  294. package/script/auth/browser/session.js +47 -11
  295. package/script/auth/browser/storage.d.ts +6 -1
  296. package/script/auth/browser/storage.d.ts.map +1 -1
  297. package/script/auth/browser/storage.js +15 -3
  298. package/script/auth/browser.d.ts +2 -2
  299. package/script/auth/browser.d.ts.map +1 -1
  300. package/script/auth/browser.js +2 -1
  301. package/script/auth/device_activation.d.ts +36 -33
  302. package/script/auth/device_activation.d.ts.map +1 -1
  303. package/script/auth/device_activation.js +25 -21
  304. package/script/auth/mod.d.ts +4 -4
  305. package/script/auth/mod.d.ts.map +1 -1
  306. package/script/auth/mod.js +132 -137
  307. package/script/auth/proof.d.ts +3 -1
  308. package/script/auth/proof.d.ts.map +1 -1
  309. package/script/auth/proof.js +21 -15
  310. package/script/auth/protocol.d.ts +2457 -941
  311. package/script/auth/protocol.d.ts.map +1 -1
  312. package/script/auth/protocol.js +749 -377
  313. package/script/auth/schemas.d.ts +25 -4
  314. package/script/auth/schemas.d.ts.map +1 -1
  315. package/script/auth/schemas.js +16 -5
  316. package/script/auth/session_auth.d.ts +1 -1
  317. package/script/auth/session_auth.d.ts.map +1 -1
  318. package/script/auth/session_auth.js +7 -1
  319. package/script/client_connect.d.ts +2 -0
  320. package/script/client_connect.d.ts.map +1 -1
  321. package/script/client_connect.js +76 -15
  322. package/script/contract.d.ts +3 -0
  323. package/script/contract.d.ts.map +1 -1
  324. package/script/contract_support/mod.d.ts +422 -43
  325. package/script/contract_support/mod.d.ts.map +1 -1
  326. package/script/contract_support/mod.js +757 -51
  327. package/script/contract_support/protocol.d.ts +20 -5
  328. package/script/contract_support/protocol.d.ts.map +1 -1
  329. package/script/contract_support/protocol.js +20 -11
  330. package/script/contract_support/runtime.d.ts +11 -0
  331. package/script/contract_support/runtime.d.ts.map +1 -1
  332. package/script/contract_support/schema_pointers.d.ts.map +1 -1
  333. package/script/contract_support/schema_pointers.js +32 -14
  334. package/script/device.d.ts +2 -0
  335. package/script/device.d.ts.map +1 -1
  336. package/script/device.js +3 -0
  337. package/script/errors/AuthError.d.ts +1 -1
  338. package/script/errors/AuthError.d.ts.map +1 -1
  339. package/script/errors/AuthError.js +5 -1
  340. package/script/errors/index.d.ts +4 -4
  341. package/script/generated-sdk/auth/api.d.ts +27 -9
  342. package/script/generated-sdk/auth/api.d.ts.map +1 -1
  343. package/script/generated-sdk/auth/api.js +17 -591
  344. package/script/generated-sdk/auth/client.d.ts +91 -85
  345. package/script/generated-sdk/auth/client.d.ts.map +1 -1
  346. package/script/generated-sdk/auth/contract.d.ts +1 -1
  347. package/script/generated-sdk/auth/contract.d.ts.map +1 -1
  348. package/script/generated-sdk/auth/contract.js +4 -2
  349. package/script/generated-sdk/auth/mod.d.ts +1 -0
  350. package/script/generated-sdk/auth/mod.d.ts.map +1 -1
  351. package/script/generated-sdk/auth/owned_api.d.ts +3 -0
  352. package/script/generated-sdk/auth/owned_api.d.ts.map +1 -0
  353. package/script/generated-sdk/auth/owned_api.js +597 -0
  354. package/script/generated-sdk/auth/schemas.d.ts +9959 -5160
  355. package/script/generated-sdk/auth/schemas.d.ts.map +1 -1
  356. package/script/generated-sdk/auth/schemas.js +139 -140
  357. package/script/generated-sdk/auth/types.d.ts +2418 -1557
  358. package/script/generated-sdk/auth/types.d.ts.map +1 -1
  359. package/script/generated-sdk/auth/types.js +1 -1
  360. package/script/generated-sdk/health/api.d.ts +24 -9
  361. package/script/generated-sdk/health/api.d.ts.map +1 -1
  362. package/script/generated-sdk/health/api.js +13 -21
  363. package/script/generated-sdk/health/client.d.ts +2 -1
  364. package/script/generated-sdk/health/client.d.ts.map +1 -1
  365. package/script/generated-sdk/health/contract.d.ts.map +1 -1
  366. package/script/generated-sdk/health/contract.js +2 -0
  367. package/script/generated-sdk/health/owned_api.d.ts +3 -0
  368. package/script/generated-sdk/health/owned_api.d.ts.map +1 -0
  369. package/script/generated-sdk/health/owned_api.js +19 -0
  370. package/script/generated-sdk/health/types.d.ts +2 -0
  371. package/script/generated-sdk/health/types.d.ts.map +1 -1
  372. package/script/generated-sdk/jobs/api.d.ts +33 -9
  373. package/script/generated-sdk/jobs/api.d.ts.map +1 -1
  374. package/script/generated-sdk/jobs/api.js +23 -88
  375. package/script/generated-sdk/jobs/client.d.ts +9 -2
  376. package/script/generated-sdk/jobs/client.d.ts.map +1 -1
  377. package/script/generated-sdk/jobs/contract.d.ts +1 -1
  378. package/script/generated-sdk/jobs/contract.d.ts.map +1 -1
  379. package/script/generated-sdk/jobs/contract.js +4 -2
  380. package/script/generated-sdk/jobs/owned_api.d.ts +3 -0
  381. package/script/generated-sdk/jobs/owned_api.d.ts.map +1 -0
  382. package/script/generated-sdk/jobs/owned_api.js +154 -0
  383. package/script/generated-sdk/jobs/schemas.d.ts +336 -123
  384. package/script/generated-sdk/jobs/schemas.d.ts.map +1 -1
  385. package/script/generated-sdk/jobs/schemas.js +18 -16
  386. package/script/generated-sdk/jobs/types.d.ts +144 -34
  387. package/script/generated-sdk/jobs/types.d.ts.map +1 -1
  388. package/script/generated-sdk/jobs/types.js +38 -2
  389. package/script/generated-sdk/state/api.d.ts +27 -9
  390. package/script/generated-sdk/state/api.d.ts.map +1 -1
  391. package/script/generated-sdk/state/api.js +17 -72
  392. package/script/generated-sdk/state/client.d.ts +4 -2
  393. package/script/generated-sdk/state/client.d.ts.map +1 -1
  394. package/script/generated-sdk/state/contract.d.ts +1 -1
  395. package/script/generated-sdk/state/contract.d.ts.map +1 -1
  396. package/script/generated-sdk/state/contract.js +4 -2
  397. package/script/generated-sdk/state/owned_api.d.ts +3 -0
  398. package/script/generated-sdk/state/owned_api.d.ts.map +1 -0
  399. package/script/generated-sdk/state/owned_api.js +69 -0
  400. package/script/generated-sdk/state/schemas.d.ts +264 -284
  401. package/script/generated-sdk/state/schemas.d.ts.map +1 -1
  402. package/script/generated-sdk/state/schemas.js +6 -6
  403. package/script/generated-sdk/state/types.d.ts +24 -23
  404. package/script/generated-sdk/state/types.d.ts.map +1 -1
  405. package/script/generated-sdk/state/types.js +1 -1
  406. package/script/generated-sdk/trellis-core/api.d.ts +27 -9
  407. package/script/generated-sdk/trellis-core/api.d.ts.map +1 -1
  408. package/script/generated-sdk/trellis-core/api.js +17 -40
  409. package/script/generated-sdk/trellis-core/client.d.ts +5 -2
  410. package/script/generated-sdk/trellis-core/client.d.ts.map +1 -1
  411. package/script/generated-sdk/trellis-core/contract.d.ts +1 -1
  412. package/script/generated-sdk/trellis-core/contract.d.ts.map +1 -1
  413. package/script/generated-sdk/trellis-core/contract.js +4 -2
  414. package/script/generated-sdk/trellis-core/owned_api.d.ts +3 -0
  415. package/script/generated-sdk/trellis-core/owned_api.d.ts.map +1 -0
  416. package/script/generated-sdk/trellis-core/owned_api.js +45 -0
  417. package/script/generated-sdk/trellis-core/schemas.d.ts +259 -11
  418. package/script/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
  419. package/script/generated-sdk/trellis-core/schemas.js +6 -4
  420. package/script/generated-sdk/trellis-core/types.d.ts +56 -1
  421. package/script/generated-sdk/trellis-core/types.d.ts.map +1 -1
  422. package/script/generated-sdk/trellis-core/types.js +1 -1
  423. package/script/helpers.d.ts.map +1 -1
  424. package/script/index.d.ts +4 -3
  425. package/script/index.d.ts.map +1 -1
  426. package/script/index.js +5 -2
  427. package/script/jobs.d.ts +10 -1
  428. package/script/jobs.d.ts.map +1 -1
  429. package/script/jobs.js +17 -2
  430. package/script/kv.d.ts.map +1 -1
  431. package/script/kv.js +10 -4
  432. package/script/models/auth/rpc/Logout.d.ts +4 -4
  433. package/script/models/auth/rpc/Logout.d.ts.map +1 -1
  434. package/script/models/auth/rpc/Logout.js +3 -3
  435. package/script/models/trellis/Page.d.ts +2 -0
  436. package/script/models/trellis/Page.d.ts.map +1 -0
  437. package/script/models/trellis/Page.js +6 -0
  438. package/script/models/trellis/State.d.ts +1 -0
  439. package/script/models/trellis/State.d.ts.map +1 -1
  440. package/script/models/trellis/State.js +1 -0
  441. package/script/models/trellis/rpc/StateList.d.ts +9 -12
  442. package/script/models/trellis/rpc/StateList.d.ts.map +1 -1
  443. package/script/models/trellis/rpc/StateList.js +16 -18
  444. package/script/npm/src/auth/browser/login.d.ts.map +1 -1
  445. package/script/npm/src/auth/browser/login.js +46 -3
  446. package/script/npm/src/auth/browser/portal.d.ts.map +1 -1
  447. package/script/npm/src/auth/browser/portal.js +5 -1
  448. package/script/npm/src/auth/browser/session.d.ts +18 -7
  449. package/script/npm/src/auth/browser/session.d.ts.map +1 -1
  450. package/script/npm/src/auth/browser/session.js +47 -11
  451. package/script/npm/src/auth/browser/storage.d.ts +6 -1
  452. package/script/npm/src/auth/browser/storage.d.ts.map +1 -1
  453. package/script/npm/src/auth/browser/storage.js +15 -3
  454. package/script/npm/src/auth/browser.d.ts +2 -2
  455. package/script/npm/src/auth/browser.d.ts.map +1 -1
  456. package/script/npm/src/auth/browser.js +2 -1
  457. package/script/npm/src/auth/device_activation.d.ts +36 -33
  458. package/script/npm/src/auth/device_activation.d.ts.map +1 -1
  459. package/script/npm/src/auth/device_activation.js +25 -21
  460. package/script/npm/src/auth/mod.d.ts +4 -4
  461. package/script/npm/src/auth/mod.d.ts.map +1 -1
  462. package/script/npm/src/auth/mod.js +132 -137
  463. package/script/npm/src/auth/proof.d.ts +3 -1
  464. package/script/npm/src/auth/proof.d.ts.map +1 -1
  465. package/script/npm/src/auth/proof.js +21 -15
  466. package/script/npm/src/auth/protocol.d.ts +2457 -941
  467. package/script/npm/src/auth/protocol.d.ts.map +1 -1
  468. package/script/npm/src/auth/protocol.js +749 -377
  469. package/script/npm/src/auth/schemas.d.ts +25 -4
  470. package/script/npm/src/auth/schemas.d.ts.map +1 -1
  471. package/script/npm/src/auth/schemas.js +16 -5
  472. package/script/npm/src/auth/session_auth.d.ts +1 -1
  473. package/script/npm/src/auth/session_auth.d.ts.map +1 -1
  474. package/script/npm/src/auth/session_auth.js +7 -1
  475. package/script/npm/src/client_connect.d.ts +2 -0
  476. package/script/npm/src/client_connect.d.ts.map +1 -1
  477. package/script/npm/src/client_connect.js +76 -15
  478. package/script/npm/src/contract.d.ts +3 -0
  479. package/script/npm/src/contract.d.ts.map +1 -1
  480. package/script/npm/src/contract_support/mod.d.ts +422 -43
  481. package/script/npm/src/contract_support/mod.d.ts.map +1 -1
  482. package/script/npm/src/contract_support/mod.js +757 -51
  483. package/script/npm/src/contract_support/protocol.d.ts +20 -5
  484. package/script/npm/src/contract_support/protocol.d.ts.map +1 -1
  485. package/script/npm/src/contract_support/protocol.js +20 -11
  486. package/script/npm/src/contract_support/runtime.d.ts +11 -0
  487. package/script/npm/src/contract_support/runtime.d.ts.map +1 -1
  488. package/script/npm/src/contract_support/schema_pointers.d.ts.map +1 -1
  489. package/script/npm/src/contract_support/schema_pointers.js +32 -14
  490. package/script/npm/src/device/deno.d.ts.map +1 -1
  491. package/script/npm/src/device/deno.js +6 -0
  492. package/script/npm/src/device.d.ts +2 -0
  493. package/script/npm/src/device.d.ts.map +1 -1
  494. package/script/npm/src/device.js +3 -0
  495. package/script/npm/src/errors/AuthError.d.ts +1 -1
  496. package/script/npm/src/errors/AuthError.d.ts.map +1 -1
  497. package/script/npm/src/errors/AuthError.js +5 -1
  498. package/script/npm/src/errors/index.d.ts +4 -4
  499. package/script/npm/src/helpers.d.ts.map +1 -1
  500. package/script/npm/src/index.d.ts +4 -3
  501. package/script/npm/src/index.d.ts.map +1 -1
  502. package/script/npm/src/index.js +5 -2
  503. package/script/npm/src/jobs.d.ts +10 -1
  504. package/script/npm/src/jobs.d.ts.map +1 -1
  505. package/script/npm/src/jobs.js +17 -2
  506. package/script/npm/src/kv.d.ts.map +1 -1
  507. package/script/npm/src/kv.js +10 -4
  508. package/script/npm/src/models/auth/rpc/Logout.d.ts +4 -4
  509. package/script/npm/src/models/auth/rpc/Logout.d.ts.map +1 -1
  510. package/script/npm/src/models/auth/rpc/Logout.js +3 -3
  511. package/script/npm/src/models/trellis/Page.d.ts +2 -0
  512. package/script/npm/src/models/trellis/Page.d.ts.map +1 -0
  513. package/script/npm/src/models/trellis/Page.js +6 -0
  514. package/script/npm/src/models/trellis/State.d.ts +1 -0
  515. package/script/npm/src/models/trellis/State.d.ts.map +1 -1
  516. package/script/npm/src/models/trellis/State.js +1 -0
  517. package/script/npm/src/models/trellis/rpc/StateList.d.ts +9 -12
  518. package/script/npm/src/models/trellis/rpc/StateList.d.ts.map +1 -1
  519. package/script/npm/src/models/trellis/rpc/StateList.js +16 -18
  520. package/script/npm/src/operations.d.ts +16 -7
  521. package/script/npm/src/operations.d.ts.map +1 -1
  522. package/script/npm/src/operations.js +84 -19
  523. package/script/npm/src/runtime_transport.d.ts +2 -0
  524. package/script/npm/src/runtime_transport.d.ts.map +1 -1
  525. package/script/npm/src/runtime_transport.js +2 -1
  526. package/script/npm/src/server/internal_jobs/active-job.d.ts +2 -1
  527. package/script/npm/src/server/internal_jobs/active-job.d.ts.map +1 -1
  528. package/script/npm/src/server/internal_jobs/active-job.js +3 -0
  529. package/script/npm/src/server/internal_jobs/job-manager.d.ts +4 -1
  530. package/script/npm/src/server/internal_jobs/job-manager.d.ts.map +1 -1
  531. package/script/npm/src/server/internal_jobs/job-manager.js +61 -1
  532. package/script/npm/src/server/internal_jobs/projection.js +1 -0
  533. package/script/npm/src/server/internal_jobs/runtime-worker.d.ts +13 -1
  534. package/script/npm/src/server/internal_jobs/runtime-worker.d.ts.map +1 -1
  535. package/script/npm/src/server/internal_jobs/runtime-worker.js +74 -13
  536. package/script/npm/src/server/internal_jobs/types.d.ts +19 -0
  537. package/script/npm/src/server/internal_jobs/types.d.ts.map +1 -1
  538. package/script/npm/src/server/internal_jobs/types.js +11 -1
  539. package/script/npm/src/server/runtime.d.ts +1 -0
  540. package/script/npm/src/server/runtime.d.ts.map +1 -1
  541. package/script/npm/src/server/service.d.ts +10 -1
  542. package/script/npm/src/server/service.d.ts.map +1 -1
  543. package/script/npm/src/server/service.js +188 -62
  544. package/script/npm/src/server/transfer.d.ts.map +1 -1
  545. package/script/npm/src/server/transfer.js +4 -0
  546. package/script/npm/src/server.d.ts.map +1 -1
  547. package/script/npm/src/server.js +336 -33
  548. package/script/npm/src/store.d.ts +8 -1
  549. package/script/npm/src/store.d.ts.map +1 -1
  550. package/script/npm/src/store.js +46 -8
  551. package/script/npm/src/transfer.d.ts +3 -0
  552. package/script/npm/src/transfer.d.ts.map +1 -1
  553. package/script/npm/src/transfer.js +19 -29
  554. package/script/npm/src/trellis.d.ts +85 -22
  555. package/script/npm/src/trellis.d.ts.map +1 -1
  556. package/script/npm/src/trellis.js +525 -61
  557. package/script/operations.d.ts +16 -7
  558. package/script/operations.d.ts.map +1 -1
  559. package/script/operations.js +84 -19
  560. package/script/runtime_transport.d.ts +2 -0
  561. package/script/runtime_transport.d.ts.map +1 -1
  562. package/script/runtime_transport.js +2 -1
  563. package/script/store.d.ts +8 -1
  564. package/script/store.d.ts.map +1 -1
  565. package/script/store.js +46 -8
  566. package/script/transfer.d.ts +3 -0
  567. package/script/transfer.d.ts.map +1 -1
  568. package/script/transfer.js +19 -29
  569. package/script/trellis.d.ts +85 -22
  570. package/script/trellis.d.ts.map +1 -1
  571. package/script/trellis.js +525 -61
  572. package/esm/models/trellis/Paginate.d.ts +0 -7
  573. package/esm/models/trellis/Paginate.d.ts.map +0 -1
  574. package/esm/models/trellis/Paginate.js +0 -5
  575. package/esm/npm/src/models/trellis/Paginate.d.ts +0 -7
  576. package/esm/npm/src/models/trellis/Paginate.d.ts.map +0 -1
  577. package/esm/npm/src/models/trellis/Paginate.js +0 -5
  578. package/script/models/trellis/Paginate.d.ts +0 -7
  579. package/script/models/trellis/Paginate.d.ts.map +0 -1
  580. package/script/models/trellis/Paginate.js +0 -11
  581. package/script/npm/src/models/trellis/Paginate.d.ts +0 -7
  582. package/script/npm/src/models/trellis/Paginate.d.ts.map +0 -1
  583. package/script/npm/src/models/trellis/Paginate.js +0 -11
@@ -9,14 +9,27 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
- var _TrellisServiceRuntime_instances, _TrellisServiceRuntime_version, _TrellisServiceRuntime_log, _TrellisServiceRuntime_operations, _TrellisServiceRuntime_mountedOperationControls, _TrellisServiceRuntime_stopPromise, _TrellisServiceRuntime_transferSupport, _TrellisServiceRuntime_resolveOperation, _TrellisServiceRuntime_applyOperationUpdate, _TrellisServiceRuntime_makeAcceptedOperation, _TrellisServiceRuntime_acceptOperation, _TrellisServiceRuntime_authenticateOperationMessage, _TrellisServiceRuntime_ensureOperationControlLoop;
12
+ var _TrellisServiceRuntime_instances, _TrellisServiceRuntime_version, _TrellisServiceRuntime_log, _TrellisServiceRuntime_operations, _TrellisServiceRuntime_mountedOperationControls, _TrellisServiceRuntime_stopPromise, _TrellisServiceRuntime_transferSupport, _TrellisServiceRuntime_signals, _TrellisServiceRuntime_nextSignal, _TrellisServiceRuntime_nextSignalAfter, _TrellisServiceRuntime_resolveOperation, _TrellisServiceRuntime_applyOperationUpdate, _TrellisServiceRuntime_validateOperationValue, _TrellisServiceRuntime_applyControlledOperationUpdate, _TrellisServiceRuntime_controlOperation, _TrellisServiceRuntime_makeControlledOperation, _TrellisServiceRuntime_makeAcceptedOperation, _TrellisServiceRuntime_controlAuthContext, _TrellisServiceRuntime_terminalSignalError, _TrellisServiceRuntime_unsupportedCancelError, _TrellisServiceRuntime_rejectSignalWaiters, _TrellisServiceRuntime_acceptSignal, _TrellisServiceRuntime_acceptOperation, _TrellisServiceRuntime_authenticateOperationMessage, _TrellisServiceRuntime_ensureOperationControlLoop;
13
13
  import { Pointer } from "typebox/value";
14
14
  import { AsyncResult, err, isErr, ok, } from "@qlever-llc/result";
15
15
  import { ulid } from "ulid";
16
16
  import { parseSchema } from "./codec.js";
17
- import { AuthError, TransferError, UnexpectedError, } from "./errors/index.js";
17
+ import { AuthError, TransferError, UnexpectedError, ValidationError, } from "./errors/index.js";
18
18
  import { serverLogger } from "./server_logger.js";
19
19
  import { base64urlDecode, base64urlEncode, buildProofInput, buildRuntimeOperationSnapshot, isOperationDeferred, isResultLike, isTerminalRuntimeOperationSnapshot, safeJson, sha256, toArrayBuffer, Trellis, } from "./trellis.js";
20
+ function isJsonValue(value) {
21
+ if (value === null || typeof value === "string" || typeof value === "number" ||
22
+ typeof value === "boolean") {
23
+ return true;
24
+ }
25
+ if (Array.isArray(value))
26
+ return value.every(isJsonValue);
27
+ if (typeof value !== "object")
28
+ return false;
29
+ if (Object.getPrototypeOf(value) !== Object.prototype)
30
+ return false;
31
+ return Object.values(value).every(isJsonValue);
32
+ }
20
33
  function asStringPointerValue(operation, input, pointer, field) {
21
34
  const value = Pointer.Get(input, pointer);
22
35
  if (typeof value !== "string" || value.length === 0) {
@@ -113,6 +126,8 @@ export class TrellisServiceRuntime extends Trellis {
113
126
  cancel: (operationId) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_applyOperationUpdate).call(this, operationId, "cancelled", {
114
127
  event: { type: "cancelled" },
115
128
  }),
129
+ signals: (operationId) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_signals).call(this, operationId),
130
+ nextSignal: (operationId, name) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_nextSignal).call(this, operationId, name),
116
131
  };
117
132
  }
118
133
  mountRuntime(method, fn) {
@@ -128,6 +143,10 @@ export class TrellisServiceRuntime extends Trellis {
128
143
  throw new Error(`Unknown operation '${operation.toString()}'. Did you forget to include its API module?`);
129
144
  }
130
145
  return {
146
+ control: (operationId) => {
147
+ __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_ensureOperationControlLoop).call(this, String(operation), ctx);
148
+ return __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_controlOperation).call(this, String(operation), ctx, operationId);
149
+ },
131
150
  accept: ({ sessionKey }) => {
132
151
  __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_ensureOperationControlLoop).call(this, String(operation), ctx);
133
152
  if (ctx.transfer) {
@@ -135,7 +154,7 @@ export class TrellisServiceRuntime extends Trellis {
135
154
  cause: new Error(`Operation '${String(operation)}' uses transfer-capable start semantics and cannot be accepted manually`),
136
155
  }));
137
156
  }
138
- return AsyncResult.from(__classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_acceptOperation).call(this, String(operation), sessionKey));
157
+ return AsyncResult.from(__classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_acceptOperation).call(this, String(operation), ctx, sessionKey));
139
158
  },
140
159
  handle: async (handler) => {
141
160
  const startSubject = ctx.subject;
@@ -219,6 +238,7 @@ export class TrellisServiceRuntime extends Trellis {
219
238
  snapshot,
220
239
  });
221
240
  await flushWaiters(runtime);
241
+ __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_rejectSignalWaiters).call(this, runtime);
222
242
  return ok(snapshot);
223
243
  })()),
224
244
  fail: (error) => AsyncResult.from((async () => {
@@ -238,6 +258,7 @@ export class TrellisServiceRuntime extends Trellis {
238
258
  snapshot,
239
259
  });
240
260
  await flushWaiters(runtime);
261
+ __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_rejectSignalWaiters).call(this, runtime);
241
262
  return ok(snapshot);
242
263
  })()),
243
264
  cancel: () => AsyncResult.from((async () => {
@@ -256,6 +277,7 @@ export class TrellisServiceRuntime extends Trellis {
256
277
  snapshot,
257
278
  });
258
279
  await flushWaiters(runtime);
280
+ __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_rejectSignalWaiters).call(this, runtime);
259
281
  return ok(snapshot);
260
282
  })()),
261
283
  attach: (job) => AsyncResult.from((async () => {
@@ -272,6 +294,8 @@ export class TrellisServiceRuntime extends Trellis {
272
294
  }
273
295
  return ok(finalRuntime.snapshot);
274
296
  })()),
297
+ signals: () => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_signals).call(this, runtime.id),
298
+ nextSignal: (name) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_nextSignal).call(this, runtime.id, name),
275
299
  defer: () => ({ kind: "deferred" }),
276
300
  };
277
301
  };
@@ -292,14 +316,20 @@ export class TrellisServiceRuntime extends Trellis {
292
316
  }
293
317
  const sessionKey = msg.headers?.get("session-key");
294
318
  const proof = msg.headers?.get("proof");
319
+ const iatHeader = msg.headers?.get("iat");
320
+ const requestId = msg.headers?.get("request-id");
295
321
  if (!sessionKey) {
296
322
  return err(new AuthError({ reason: "missing_session_key" }));
297
323
  }
298
324
  if (!proof)
299
325
  return err(new AuthError({ reason: "missing_proof" }));
326
+ const iat = Number(iatHeader);
327
+ if (!Number.isSafeInteger(iat) || !requestId) {
328
+ return err(new AuthError({ reason: "invalid_signature" }));
329
+ }
300
330
  const payloadBytes = msg.data ?? new Uint8Array();
301
331
  const payloadHash = await sha256(payloadBytes);
302
- const proofInput = buildProofInput(sessionKey, msg.subject, payloadHash);
332
+ const proofInput = buildProofInput(sessionKey, msg.subject, payloadHash, iat, requestId);
303
333
  const digest = await sha256(proofInput);
304
334
  const verifyResult = await AsyncResult.try(async () => {
305
335
  const publicKeyRaw = base64urlDecode(sessionKey);
@@ -319,6 +349,8 @@ export class TrellisServiceRuntime extends Trellis {
319
349
  proof,
320
350
  subject: msg.subject,
321
351
  payloadHash: base64urlEncode(payloadHash),
352
+ iat,
353
+ requestId,
322
354
  capabilities: ctx.callerCapabilities
323
355
  ? [...ctx.callerCapabilities]
324
356
  : undefined,
@@ -420,9 +452,12 @@ export class TrellisServiceRuntime extends Trellis {
420
452
  updatedAt: createdAt,
421
453
  },
422
454
  sequence: 0,
455
+ signalSequence: 0,
456
+ signals: [],
423
457
  terminal: false,
424
458
  watchers: new Set(),
425
459
  waiters: new Set(),
460
+ signalWaiters: new Set(),
426
461
  };
427
462
  __classPrivateFieldGet(this, _TrellisServiceRuntime_operations, "f").set(operationId, runtime);
428
463
  await this.saveOperationRecord(runtime);
@@ -516,7 +551,57 @@ export class TrellisServiceRuntime extends Trellis {
516
551
  await __classPrivateFieldGet(this, _TrellisServiceRuntime_stopPromise, "f");
517
552
  }
518
553
  }
519
- _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new WeakMap(), _TrellisServiceRuntime_operations = new WeakMap(), _TrellisServiceRuntime_mountedOperationControls = new WeakMap(), _TrellisServiceRuntime_stopPromise = new WeakMap(), _TrellisServiceRuntime_transferSupport = new WeakMap(), _TrellisServiceRuntime_instances = new WeakSet(), _TrellisServiceRuntime_resolveOperation = async function _TrellisServiceRuntime_resolveOperation(operationId) {
554
+ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new WeakMap(), _TrellisServiceRuntime_operations = new WeakMap(), _TrellisServiceRuntime_mountedOperationControls = new WeakMap(), _TrellisServiceRuntime_stopPromise = new WeakMap(), _TrellisServiceRuntime_transferSupport = new WeakMap(), _TrellisServiceRuntime_instances = new WeakSet(), _TrellisServiceRuntime_signals = async function* _TrellisServiceRuntime_signals(operationId) {
555
+ let cursor = 0;
556
+ while (true) {
557
+ const next = await __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_nextSignalAfter).call(this, operationId, cursor).take();
558
+ if (isErr(next)) {
559
+ throw next.error;
560
+ }
561
+ cursor = next.sequence;
562
+ yield next;
563
+ }
564
+ }, _TrellisServiceRuntime_nextSignal = function _TrellisServiceRuntime_nextSignal(operationId, name) {
565
+ return AsyncResult.from((async () => {
566
+ let cursor = 0;
567
+ while (true) {
568
+ const next = await __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_nextSignalAfter).call(this, operationId, cursor).take();
569
+ if (isErr(next))
570
+ return next;
571
+ cursor = next.sequence;
572
+ if (!name || next.signal === name)
573
+ return ok(next);
574
+ }
575
+ })());
576
+ }, _TrellisServiceRuntime_nextSignalAfter = function _TrellisServiceRuntime_nextSignalAfter(operationId, afterSequence) {
577
+ return AsyncResult.from((async () => {
578
+ const runtime = await __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_resolveOperation).call(this, operationId);
579
+ if (!runtime) {
580
+ return err(new UnexpectedError({
581
+ cause: new Error(`Unknown operation '${operationId}'`),
582
+ }));
583
+ }
584
+ const queued = runtime.signals.find((signal) => signal.sequence > afterSequence);
585
+ if (queued)
586
+ return ok(queued);
587
+ if (runtime.terminal) {
588
+ return err(new UnexpectedError({
589
+ cause: new Error("operation already terminal"),
590
+ }));
591
+ }
592
+ return await new Promise((resolve) => {
593
+ const waiter = (result) => {
594
+ const value = result.take();
595
+ if (!isErr(value) && value.sequence <= afterSequence) {
596
+ return;
597
+ }
598
+ runtime.signalWaiters.delete(waiter);
599
+ resolve(result);
600
+ };
601
+ runtime.signalWaiters.add(waiter);
602
+ });
603
+ })());
604
+ }, _TrellisServiceRuntime_resolveOperation = async function _TrellisServiceRuntime_resolveOperation(operationId) {
520
605
  const existing = __classPrivateFieldGet(this, _TrellisServiceRuntime_operations, "f").get(operationId);
521
606
  if (existing)
522
607
  return existing;
@@ -533,8 +618,11 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
533
618
  terminal: durable.snapshot.state === "completed" ||
534
619
  durable.snapshot.state === "failed" ||
535
620
  durable.snapshot.state === "cancelled",
621
+ signalSequence: durable.signalSequence ?? 0,
622
+ signals: durable.signals ?? [],
536
623
  watchers: new Set(),
537
624
  waiters: new Set(),
625
+ signalWaiters: new Set(),
538
626
  };
539
627
  __classPrivateFieldGet(this, _TrellisServiceRuntime_operations, "f").set(operationId, runtime);
540
628
  return runtime;
@@ -546,7 +634,7 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
546
634
  cause: new Error(`Unknown operation '${operationId}'`),
547
635
  }));
548
636
  }
549
- if (runtime.terminal && state !== "cancelled") {
637
+ if (runtime.terminal) {
550
638
  return err(new UnexpectedError({
551
639
  cause: new Error("operation already terminal"),
552
640
  }));
@@ -573,10 +661,110 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
573
661
  await this.nats.publish(reply, JSON.stringify(terminalFrame));
574
662
  }
575
663
  runtime.waiters.clear();
664
+ __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_rejectSignalWaiters).call(this, runtime);
576
665
  }
577
666
  return ok(runtime.snapshot);
578
667
  })());
579
- }, _TrellisServiceRuntime_makeAcceptedOperation = function _TrellisServiceRuntime_makeAcceptedOperation(runtime) {
668
+ }, _TrellisServiceRuntime_validateOperationValue = function _TrellisServiceRuntime_validateOperationValue(ctx, kind, value) {
669
+ const schema = kind === "progress" ? ctx.progress : ctx.output;
670
+ if (schema === undefined)
671
+ return ok(value);
672
+ if (!isJsonValue(value)) {
673
+ return err(new ValidationError({
674
+ errors: [{
675
+ path: "/",
676
+ message: `Operation ${kind} must be JSON-serializable`,
677
+ }],
678
+ context: { kind },
679
+ }));
680
+ }
681
+ const parsed = parseSchema(schema, value).take();
682
+ if (isErr(parsed))
683
+ return err(parsed.error);
684
+ return ok(parsed);
685
+ }, _TrellisServiceRuntime_applyControlledOperationUpdate = function _TrellisServiceRuntime_applyControlledOperationUpdate(runtime, ctx, state, opts) {
686
+ return AsyncResult.from((async () => {
687
+ if (opts.patch?.progress !== undefined) {
688
+ const parsed = __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_validateOperationValue).call(this, ctx, "progress", opts.patch.progress).take();
689
+ if (isErr(parsed))
690
+ return parsed;
691
+ opts.patch.progress = parsed;
692
+ if ("progress" in opts.event)
693
+ opts.event.progress = parsed;
694
+ }
695
+ if (opts.patch?.output !== undefined) {
696
+ const parsed = __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_validateOperationValue).call(this, ctx, "output", opts.patch.output).take();
697
+ if (isErr(parsed))
698
+ return parsed;
699
+ opts.patch.output = parsed;
700
+ }
701
+ return await __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_applyOperationUpdate).call(this, runtime.id, state, opts);
702
+ })());
703
+ }, _TrellisServiceRuntime_controlOperation = function _TrellisServiceRuntime_controlOperation(operation, ctx, operationId) {
704
+ return AsyncResult.from((async () => {
705
+ const runtime = await __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_resolveOperation).call(this, operationId);
706
+ if (!runtime) {
707
+ return err(new UnexpectedError({
708
+ cause: new Error(`Unknown operation '${operationId}'`),
709
+ }));
710
+ }
711
+ if (runtime.service !== this.name) {
712
+ return err(new UnexpectedError({
713
+ cause: new Error(`Operation '${operationId}' belongs to service '${runtime.service}', not '${this.name}'`),
714
+ }));
715
+ }
716
+ if (runtime.operation !== operation) {
717
+ return err(new UnexpectedError({
718
+ cause: new Error(`Operation '${operationId}' is '${runtime.operation}', not '${operation}'`),
719
+ }));
720
+ }
721
+ return ok(__classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_makeControlledOperation).call(this, runtime, ctx));
722
+ })());
723
+ }, _TrellisServiceRuntime_makeControlledOperation = function _TrellisServiceRuntime_makeControlledOperation(runtime, ctx) {
724
+ return {
725
+ id: runtime.id,
726
+ started: () => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_applyControlledOperationUpdate).call(this, runtime, ctx, "running", {
727
+ event: { type: "started" },
728
+ }),
729
+ progress: (value) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_applyControlledOperationUpdate).call(this, runtime, ctx, "running", {
730
+ patch: { progress: value },
731
+ event: { type: "progress", progress: value },
732
+ }),
733
+ complete: (value) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_applyControlledOperationUpdate).call(this, runtime, ctx, "completed", {
734
+ patch: { output: value },
735
+ event: { type: "completed" },
736
+ }),
737
+ fail: (error) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_applyControlledOperationUpdate).call(this, runtime, ctx, "failed", {
738
+ patch: { error: { type: error.name, message: error.message } },
739
+ event: { type: "failed" },
740
+ }),
741
+ cancel: () => {
742
+ if (ctx.cancel !== true) {
743
+ return AsyncResult.err(__classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_unsupportedCancelError).call(this, runtime.operation));
744
+ }
745
+ return __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_applyControlledOperationUpdate).call(this, runtime, ctx, "cancelled", {
746
+ event: { type: "cancelled" },
747
+ });
748
+ },
749
+ attach: (job) => AsyncResult.from((async () => {
750
+ const waited = await job.wait();
751
+ const waitedValue = waited.take();
752
+ if (isErr(waitedValue)) {
753
+ return err(new UnexpectedError({ cause: waitedValue.error }));
754
+ }
755
+ const finalRuntime = await __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_resolveOperation).call(this, runtime.id);
756
+ if (!finalRuntime || !finalRuntime.terminal) {
757
+ return err(new UnexpectedError({
758
+ cause: new Error("attached job completed without terminal operation state"),
759
+ }));
760
+ }
761
+ return ok(finalRuntime.snapshot);
762
+ })()),
763
+ signals: () => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_signals).call(this, runtime.id),
764
+ nextSignal: (name) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_nextSignal).call(this, runtime.id, name),
765
+ defer: () => ({ kind: "deferred" }),
766
+ };
767
+ }, _TrellisServiceRuntime_makeAcceptedOperation = function _TrellisServiceRuntime_makeAcceptedOperation(runtime, ctx) {
580
768
  return {
581
769
  id: runtime.id,
582
770
  ref: {
@@ -589,7 +777,12 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
589
777
  progress: (value) => this.operations.progress(runtime.id, value),
590
778
  complete: (value) => this.operations.complete(runtime.id, value),
591
779
  fail: (error) => this.operations.fail(runtime.id, error),
592
- cancel: () => this.operations.cancel(runtime.id),
780
+ cancel: () => {
781
+ if (ctx.cancel !== true) {
782
+ return AsyncResult.err(__classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_unsupportedCancelError).call(this, runtime.operation));
783
+ }
784
+ return this.operations.cancel(runtime.id);
785
+ },
593
786
  attach: (job) => AsyncResult.from((async () => {
594
787
  const waited = await job.wait();
595
788
  const waitedValue = waited.take();
@@ -604,9 +797,79 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
604
797
  }
605
798
  return ok(finalRuntime.snapshot);
606
799
  })()),
800
+ signals: () => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_signals).call(this, runtime.id),
801
+ nextSignal: (name) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_nextSignal).call(this, runtime.id, name),
607
802
  defer: () => ({ kind: "deferred" }),
608
803
  };
609
- }, _TrellisServiceRuntime_acceptOperation = async function _TrellisServiceRuntime_acceptOperation(operation, sessionKey) {
804
+ }, _TrellisServiceRuntime_controlAuthContext = function _TrellisServiceRuntime_controlAuthContext(ctx, action) {
805
+ if (action === "signal" && ctx.controlCapabilities !== undefined) {
806
+ return { ...ctx, callerCapabilities: ctx.controlCapabilities };
807
+ }
808
+ if (action === "cancel" && ctx.cancelCapabilities !== undefined) {
809
+ return { ...ctx, callerCapabilities: ctx.cancelCapabilities };
810
+ }
811
+ return ctx;
812
+ }, _TrellisServiceRuntime_terminalSignalError = function _TrellisServiceRuntime_terminalSignalError() {
813
+ return new UnexpectedError({
814
+ cause: new Error("operation already terminal"),
815
+ });
816
+ }, _TrellisServiceRuntime_unsupportedCancelError = function _TrellisServiceRuntime_unsupportedCancelError(operation) {
817
+ return new ValidationError({
818
+ errors: [{
819
+ path: "/action",
820
+ message: `Operation '${operation}' does not support cancel`,
821
+ }],
822
+ context: { operation, action: "cancel" },
823
+ });
824
+ }, _TrellisServiceRuntime_rejectSignalWaiters = function _TrellisServiceRuntime_rejectSignalWaiters(runtime) {
825
+ const result = err(__classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_terminalSignalError).call(this));
826
+ for (const waiter of runtime.signalWaiters) {
827
+ waiter(result);
828
+ }
829
+ runtime.signalWaiters.clear();
830
+ }, _TrellisServiceRuntime_acceptSignal = async function _TrellisServiceRuntime_acceptSignal(runtime, ctx, control) {
831
+ if (runtime.terminal) {
832
+ return err(__classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_terminalSignalError).call(this));
833
+ }
834
+ const descriptor = ctx.signals?.[control.signal];
835
+ if (!descriptor) {
836
+ return err(new ValidationError({
837
+ errors: [{
838
+ path: "/signal",
839
+ message: `Unknown operation signal '${control.signal}'`,
840
+ }],
841
+ context: { operation: runtime.operation, signal: control.signal },
842
+ }));
843
+ }
844
+ const input = control.input;
845
+ const parsed = parseSchema(descriptor.input, input).take();
846
+ if (isErr(parsed)) {
847
+ return err(parsed.error);
848
+ }
849
+ runtime.signalSequence += 1;
850
+ const acceptedAt = new Date().toISOString();
851
+ const signal = {
852
+ operationId: runtime.id,
853
+ sequence: runtime.signalSequence,
854
+ signal: control.signal,
855
+ ...(control.input !== undefined ? { input: control.input } : {}),
856
+ acceptedAt,
857
+ };
858
+ runtime.signals.push(signal);
859
+ await this.saveOperationRecord(runtime);
860
+ const result = ok(signal);
861
+ for (const waiter of runtime.signalWaiters) {
862
+ waiter(result);
863
+ }
864
+ return ok({
865
+ kind: "signal-accepted",
866
+ operationId: runtime.id,
867
+ signal: signal.signal,
868
+ signalSequence: signal.sequence,
869
+ acceptedAt,
870
+ snapshot: runtime.snapshot,
871
+ });
872
+ }, _TrellisServiceRuntime_acceptOperation = async function _TrellisServiceRuntime_acceptOperation(operation, ctx, sessionKey) {
610
873
  const createdAt = new Date().toISOString();
611
874
  const operationId = ulid();
612
875
  const runtime = {
@@ -624,13 +887,16 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
624
887
  updatedAt: createdAt,
625
888
  },
626
889
  sequence: 0,
890
+ signalSequence: 0,
891
+ signals: [],
627
892
  terminal: false,
628
893
  watchers: new Set(),
629
894
  waiters: new Set(),
895
+ signalWaiters: new Set(),
630
896
  };
631
897
  __classPrivateFieldGet(this, _TrellisServiceRuntime_operations, "f").set(operationId, runtime);
632
898
  await this.saveOperationRecord(runtime);
633
- return ok(__classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_makeAcceptedOperation).call(this, runtime));
899
+ return ok(__classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_makeAcceptedOperation).call(this, runtime, ctx));
634
900
  }, _TrellisServiceRuntime_authenticateOperationMessage = async function _TrellisServiceRuntime_authenticateOperationMessage(msg, ctx, parseInput) {
635
901
  const jsonData = safeJson(msg).take();
636
902
  if (isErr(jsonData))
@@ -648,14 +914,20 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
648
914
  }
649
915
  const sessionKey = msg.headers?.get("session-key");
650
916
  const proof = msg.headers?.get("proof");
917
+ const iatHeader = msg.headers?.get("iat");
918
+ const requestId = msg.headers?.get("request-id");
651
919
  if (!sessionKey) {
652
920
  return err(new AuthError({ reason: "missing_session_key" }));
653
921
  }
654
922
  if (!proof)
655
923
  return err(new AuthError({ reason: "missing_proof" }));
924
+ const iat = Number(iatHeader);
925
+ if (!Number.isSafeInteger(iat) || !requestId) {
926
+ return err(new AuthError({ reason: "invalid_signature" }));
927
+ }
656
928
  const payloadBytes = msg.data ?? new Uint8Array();
657
929
  const payloadHash = await sha256(payloadBytes);
658
- const proofInput = buildProofInput(sessionKey, msg.subject, payloadHash);
930
+ const proofInput = buildProofInput(sessionKey, msg.subject, payloadHash, iat, requestId);
659
931
  const digest = await sha256(proofInput);
660
932
  const verifyResult = await AsyncResult.try(async () => {
661
933
  const publicKeyRaw = base64urlDecode(sessionKey);
@@ -675,6 +947,8 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
675
947
  proof,
676
948
  subject: msg.subject,
677
949
  payloadHash: base64urlEncode(payloadHash),
950
+ iat,
951
+ requestId,
678
952
  capabilities: ctx.callerCapabilities
679
953
  ? [...ctx.callerCapabilities]
680
954
  : undefined,
@@ -716,18 +990,18 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
716
990
  const publishSnapshot = async (reply, snapshot) => {
717
991
  await publishFrame(reply, { kind: "snapshot", snapshot });
718
992
  };
993
+ const respondControlError = (msg, error) => {
994
+ msg.respond(JSON.stringify({
995
+ kind: "error",
996
+ error: { type: error.name, message: error.message },
997
+ }));
998
+ };
719
999
  const controlSub = this.nats.subscribe(controlSubject);
720
1000
  void (async () => {
721
1001
  for await (const msg of controlSub) {
722
- const validated = await __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_authenticateOperationMessage).call(this, msg, ctx, false);
723
- const value = validated.take();
724
- if (isErr(value)) {
725
- this.respondWithError(msg, value.error);
726
- continue;
727
- }
728
1002
  const request = safeJson(msg).take();
729
1003
  if (isErr(request)) {
730
- this.respondWithError(msg, request.error);
1004
+ respondControlError(msg, request.error);
731
1005
  continue;
732
1006
  }
733
1007
  if (!request ||
@@ -736,27 +1010,35 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
736
1010
  "string" ||
737
1011
  typeof request.operationId !==
738
1012
  "string") {
739
- this.respondWithError(msg, new UnexpectedError({
1013
+ respondControlError(msg, new UnexpectedError({
740
1014
  cause: new Error("Invalid operation control request"),
741
1015
  }));
742
1016
  continue;
743
1017
  }
744
1018
  const control = request;
745
- const runtime = __classPrivateFieldGet(this, _TrellisServiceRuntime_operations, "f").get(control.operationId);
746
- const durableRecord = runtime
747
- ? null
748
- : await this.loadOperationRecord(control.operationId);
749
- if (!runtime && !durableRecord) {
750
- this.respondWithError(msg, new UnexpectedError({
1019
+ const validated = await __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_authenticateOperationMessage).call(this, msg, __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_controlAuthContext).call(this, ctx, control.action), false);
1020
+ const value = validated.take();
1021
+ if (isErr(value)) {
1022
+ respondControlError(msg, value.error);
1023
+ continue;
1024
+ }
1025
+ const runtime = await __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_resolveOperation).call(this, control.operationId);
1026
+ if (!runtime) {
1027
+ respondControlError(msg, new UnexpectedError({
751
1028
  cause: new Error(`Unknown operation '${control.operationId}'`),
752
1029
  }));
753
1030
  continue;
754
1031
  }
755
- const snapshot = runtime?.snapshot ?? durableRecord.snapshot;
756
- const ownerSessionKey = runtime?.ownerSessionKey ??
757
- durableRecord.ownerSessionKey;
1032
+ if (runtime.service !== this.name || runtime.operation !== operation) {
1033
+ respondControlError(msg, new UnexpectedError({
1034
+ cause: new Error(`Operation '${control.operationId}' belongs to service '${runtime.service}' operation '${runtime.operation}', not service '${this.name}' operation '${operation}'`),
1035
+ }));
1036
+ continue;
1037
+ }
1038
+ const snapshot = runtime.snapshot;
1039
+ const ownerSessionKey = runtime.ownerSessionKey;
758
1040
  if (ownerSessionKey !== value.sessionKey) {
759
- this.respondWithError(msg, new AuthError({
1041
+ respondControlError(msg, new AuthError({
760
1042
  reason: "forbidden",
761
1043
  context: { ownerSessionKey },
762
1044
  }));
@@ -780,12 +1062,12 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
780
1062
  runtime.waiters.add(msg.reply);
781
1063
  }
782
1064
  else if (msg.reply) {
783
- this.respondWithError(msg, new UnexpectedError({
1065
+ respondControlError(msg, new UnexpectedError({
784
1066
  cause: new Error("operation is not running in this process"),
785
1067
  }));
786
1068
  }
787
1069
  else {
788
- this.respondWithError(msg, new UnexpectedError({
1070
+ respondControlError(msg, new UnexpectedError({
789
1071
  cause: new Error("missing reply subject for wait request"),
790
1072
  }));
791
1073
  }
@@ -796,8 +1078,12 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
796
1078
  continue;
797
1079
  }
798
1080
  if (control.action === "cancel") {
799
- if (!runtime) {
800
- msg.respond(JSON.stringify({ kind: "snapshot", snapshot }));
1081
+ if (ctx.cancel !== true) {
1082
+ respondControlError(msg, __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_unsupportedCancelError).call(this, operation));
1083
+ continue;
1084
+ }
1085
+ if (runtime.terminal) {
1086
+ respondControlError(msg, __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_terminalSignalError).call(this));
801
1087
  continue;
802
1088
  }
803
1089
  runtime.snapshot = {
@@ -825,10 +1111,27 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
825
1111
  await this.nats.publish(reply, JSON.stringify({ kind: "snapshot", snapshot: runtime.snapshot }));
826
1112
  }
827
1113
  runtime.waiters.clear();
1114
+ __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_rejectSignalWaiters).call(this, runtime);
828
1115
  msg.respond(JSON.stringify({ kind: "snapshot", snapshot: runtime.snapshot }));
829
1116
  continue;
830
1117
  }
831
- this.respondWithError(msg, new UnexpectedError({
1118
+ if (control.action === "signal") {
1119
+ if (!runtime) {
1120
+ respondControlError(msg, new UnexpectedError({
1121
+ cause: new Error("operation is not running in this process"),
1122
+ }));
1123
+ continue;
1124
+ }
1125
+ const accepted = await __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_acceptSignal).call(this, runtime, ctx, control);
1126
+ const acceptedValue = accepted.take();
1127
+ if (isErr(acceptedValue)) {
1128
+ respondControlError(msg, acceptedValue.error);
1129
+ continue;
1130
+ }
1131
+ msg.respond(JSON.stringify(acceptedValue));
1132
+ continue;
1133
+ }
1134
+ respondControlError(msg, new UnexpectedError({
832
1135
  cause: new Error(`Unknown operation control action '${control.action}' for '${operation}'`),
833
1136
  }));
834
1137
  }
@@ -2,6 +2,7 @@ import { type ObjectStore } from "@nats-io/obj";
2
2
  import type { NatsConnection } from "@nats-io/nats-core/internal";
3
3
  import { AsyncResult } from "@qlever-llc/result";
4
4
  import { StoreError } from "./errors/index.js";
5
+ import type { PageResponse } from "./models/trellis/Page.js";
5
6
  export type StoreBody = Uint8Array | ReadableStream<Uint8Array> | AsyncIterable<Uint8Array>;
6
7
  export type StoreWaitOptions = {
7
8
  timeoutMs?: number;
@@ -18,6 +19,12 @@ export type StorePutOptions = {
18
19
  contentType?: string;
19
20
  metadata?: Record<string, string>;
20
21
  };
22
+ /** Explicit bounded query for listing object metadata in a typed store. */
23
+ export type StoreListOptions = {
24
+ prefix?: string;
25
+ offset?: number;
26
+ limit: number;
27
+ };
21
28
  export type StoreInfo = {
22
29
  key: string;
23
30
  size: number;
@@ -45,7 +52,7 @@ export declare class TypedStore {
45
52
  */
46
53
  waitFor(key: string, options?: StoreWaitOptions): AsyncResult<TypedStoreEntry, StoreError>;
47
54
  delete(key: string): AsyncResult<void, StoreError>;
48
- list(prefix?: string): AsyncResult<AsyncIterable<StoreInfo>, StoreError>;
55
+ list(opts: StoreListOptions): AsyncResult<PageResponse<StoreInfo>, StoreError>;
49
56
  status(): AsyncResult<StoreStatus, StoreError>;
50
57
  }
51
58
  export declare class TypedStoreEntry {
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/store.ts"],"names":[],"mappings":"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"}