@qlever-llc/trellis 0.8.4 → 0.9.0-rc.3

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 (584) hide show
  1. package/README.md +1 -1
  2. package/esm/auth/browser/login.d.ts.map +1 -1
  3. package/esm/auth/browser/login.js +46 -3
  4. package/esm/auth/browser/portal.d.ts.map +1 -1
  5. package/esm/auth/browser/portal.js +5 -1
  6. package/esm/auth/browser/session.d.ts +18 -7
  7. package/esm/auth/browser/session.d.ts.map +1 -1
  8. package/esm/auth/browser/session.js +47 -11
  9. package/esm/auth/browser/storage.d.ts +6 -1
  10. package/esm/auth/browser/storage.d.ts.map +1 -1
  11. package/esm/auth/browser/storage.js +15 -3
  12. package/esm/auth/browser.d.ts +2 -2
  13. package/esm/auth/browser.d.ts.map +1 -1
  14. package/esm/auth/browser.js +1 -1
  15. package/esm/auth/device_activation.d.ts +36 -33
  16. package/esm/auth/device_activation.d.ts.map +1 -1
  17. package/esm/auth/device_activation.js +26 -22
  18. package/esm/auth/mod.d.ts +4 -4
  19. package/esm/auth/mod.d.ts.map +1 -1
  20. package/esm/auth/mod.js +2 -2
  21. package/esm/auth/proof.d.ts +3 -1
  22. package/esm/auth/proof.d.ts.map +1 -1
  23. package/esm/auth/proof.js +21 -15
  24. package/esm/auth/protocol.d.ts +2457 -941
  25. package/esm/auth/protocol.d.ts.map +1 -1
  26. package/esm/auth/protocol.js +747 -375
  27. package/esm/auth/schemas.d.ts +25 -4
  28. package/esm/auth/schemas.d.ts.map +1 -1
  29. package/esm/auth/schemas.js +14 -4
  30. package/esm/auth/session_auth.d.ts +1 -1
  31. package/esm/auth/session_auth.d.ts.map +1 -1
  32. package/esm/auth/session_auth.js +7 -1
  33. package/esm/client_connect.d.ts +2 -0
  34. package/esm/client_connect.d.ts.map +1 -1
  35. package/esm/client_connect.js +76 -15
  36. package/esm/contract.d.ts +3 -0
  37. package/esm/contract.d.ts.map +1 -1
  38. package/esm/contract_support/mod.d.ts +422 -43
  39. package/esm/contract_support/mod.d.ts.map +1 -1
  40. package/esm/contract_support/mod.js +734 -33
  41. package/esm/contract_support/protocol.d.ts +20 -5
  42. package/esm/contract_support/protocol.d.ts.map +1 -1
  43. package/esm/contract_support/protocol.js +18 -10
  44. package/esm/contract_support/runtime.d.ts +11 -0
  45. package/esm/contract_support/runtime.d.ts.map +1 -1
  46. package/esm/contract_support/schema_pointers.d.ts.map +1 -1
  47. package/esm/contract_support/schema_pointers.js +32 -14
  48. package/esm/device.d.ts +2 -0
  49. package/esm/device.d.ts.map +1 -1
  50. package/esm/device.js +3 -0
  51. package/esm/errors/AuthError.d.ts +1 -1
  52. package/esm/errors/AuthError.d.ts.map +1 -1
  53. package/esm/errors/AuthError.js +5 -1
  54. package/esm/errors/index.d.ts +4 -4
  55. package/esm/generated-sdk/auth/api.d.ts +27 -9
  56. package/esm/generated-sdk/auth/api.d.ts.map +1 -1
  57. package/esm/generated-sdk/auth/api.js +16 -590
  58. package/esm/generated-sdk/auth/client.d.ts +91 -85
  59. package/esm/generated-sdk/auth/client.d.ts.map +1 -1
  60. package/esm/generated-sdk/auth/contract.d.ts +1 -1
  61. package/esm/generated-sdk/auth/contract.d.ts.map +1 -1
  62. package/esm/generated-sdk/auth/contract.js +4 -2
  63. package/esm/generated-sdk/auth/mod.d.ts +1 -0
  64. package/esm/generated-sdk/auth/mod.d.ts.map +1 -1
  65. package/esm/generated-sdk/auth/owned_api.d.ts +3 -0
  66. package/esm/generated-sdk/auth/owned_api.d.ts.map +1 -0
  67. package/esm/generated-sdk/auth/owned_api.js +594 -0
  68. package/esm/generated-sdk/auth/schemas.d.ts +9959 -5160
  69. package/esm/generated-sdk/auth/schemas.d.ts.map +1 -1
  70. package/esm/generated-sdk/auth/schemas.js +136 -137
  71. package/esm/generated-sdk/auth/types.d.ts +2418 -1557
  72. package/esm/generated-sdk/auth/types.d.ts.map +1 -1
  73. package/esm/generated-sdk/auth/types.js +1 -1
  74. package/esm/generated-sdk/health/api.d.ts +24 -9
  75. package/esm/generated-sdk/health/api.d.ts.map +1 -1
  76. package/esm/generated-sdk/health/api.js +12 -20
  77. package/esm/generated-sdk/health/client.d.ts +2 -1
  78. package/esm/generated-sdk/health/client.d.ts.map +1 -1
  79. package/esm/generated-sdk/health/contract.d.ts.map +1 -1
  80. package/esm/generated-sdk/health/contract.js +2 -0
  81. package/esm/generated-sdk/health/owned_api.d.ts +3 -0
  82. package/esm/generated-sdk/health/owned_api.d.ts.map +1 -0
  83. package/esm/generated-sdk/health/owned_api.js +16 -0
  84. package/esm/generated-sdk/health/types.d.ts +2 -0
  85. package/esm/generated-sdk/health/types.d.ts.map +1 -1
  86. package/esm/generated-sdk/jobs/api.d.ts +33 -9
  87. package/esm/generated-sdk/jobs/api.d.ts.map +1 -1
  88. package/esm/generated-sdk/jobs/api.js +22 -87
  89. package/esm/generated-sdk/jobs/client.d.ts +9 -2
  90. package/esm/generated-sdk/jobs/client.d.ts.map +1 -1
  91. package/esm/generated-sdk/jobs/contract.d.ts +1 -1
  92. package/esm/generated-sdk/jobs/contract.d.ts.map +1 -1
  93. package/esm/generated-sdk/jobs/contract.js +4 -2
  94. package/esm/generated-sdk/jobs/owned_api.d.ts +3 -0
  95. package/esm/generated-sdk/jobs/owned_api.d.ts.map +1 -0
  96. package/esm/generated-sdk/jobs/owned_api.js +118 -0
  97. package/esm/generated-sdk/jobs/schemas.d.ts +336 -123
  98. package/esm/generated-sdk/jobs/schemas.d.ts.map +1 -1
  99. package/esm/generated-sdk/jobs/schemas.js +17 -15
  100. package/esm/generated-sdk/jobs/types.d.ts +144 -34
  101. package/esm/generated-sdk/jobs/types.d.ts.map +1 -1
  102. package/esm/generated-sdk/jobs/types.js +36 -1
  103. package/esm/generated-sdk/state/api.d.ts +27 -9
  104. package/esm/generated-sdk/state/api.d.ts.map +1 -1
  105. package/esm/generated-sdk/state/api.js +16 -71
  106. package/esm/generated-sdk/state/client.d.ts +4 -2
  107. package/esm/generated-sdk/state/client.d.ts.map +1 -1
  108. package/esm/generated-sdk/state/contract.d.ts +1 -1
  109. package/esm/generated-sdk/state/contract.d.ts.map +1 -1
  110. package/esm/generated-sdk/state/contract.js +4 -2
  111. package/esm/generated-sdk/state/owned_api.d.ts +3 -0
  112. package/esm/generated-sdk/state/owned_api.d.ts.map +1 -0
  113. package/esm/generated-sdk/state/owned_api.js +66 -0
  114. package/esm/generated-sdk/state/schemas.d.ts +264 -284
  115. package/esm/generated-sdk/state/schemas.d.ts.map +1 -1
  116. package/esm/generated-sdk/state/schemas.js +6 -6
  117. package/esm/generated-sdk/state/types.d.ts +24 -23
  118. package/esm/generated-sdk/state/types.d.ts.map +1 -1
  119. package/esm/generated-sdk/state/types.js +1 -1
  120. package/esm/generated-sdk/trellis-core/api.d.ts +27 -9
  121. package/esm/generated-sdk/trellis-core/api.d.ts.map +1 -1
  122. package/esm/generated-sdk/trellis-core/api.js +16 -39
  123. package/esm/generated-sdk/trellis-core/client.d.ts +5 -2
  124. package/esm/generated-sdk/trellis-core/client.d.ts.map +1 -1
  125. package/esm/generated-sdk/trellis-core/contract.d.ts +1 -1
  126. package/esm/generated-sdk/trellis-core/contract.d.ts.map +1 -1
  127. package/esm/generated-sdk/trellis-core/contract.js +4 -2
  128. package/esm/generated-sdk/trellis-core/owned_api.d.ts +3 -0
  129. package/esm/generated-sdk/trellis-core/owned_api.d.ts.map +1 -0
  130. package/esm/generated-sdk/trellis-core/owned_api.js +42 -0
  131. package/esm/generated-sdk/trellis-core/schemas.d.ts +259 -11
  132. package/esm/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
  133. package/esm/generated-sdk/trellis-core/schemas.js +5 -3
  134. package/esm/generated-sdk/trellis-core/types.d.ts +56 -1
  135. package/esm/generated-sdk/trellis-core/types.d.ts.map +1 -1
  136. package/esm/generated-sdk/trellis-core/types.js +1 -1
  137. package/esm/helpers.d.ts.map +1 -1
  138. package/esm/index.d.ts +4 -3
  139. package/esm/index.d.ts.map +1 -1
  140. package/esm/index.js +1 -0
  141. package/esm/jobs.d.ts +10 -1
  142. package/esm/jobs.d.ts.map +1 -1
  143. package/esm/jobs.js +16 -1
  144. package/esm/kv.d.ts.map +1 -1
  145. package/esm/kv.js +10 -4
  146. package/esm/models/auth/rpc/Logout.d.ts +4 -4
  147. package/esm/models/auth/rpc/Logout.d.ts.map +1 -1
  148. package/esm/models/auth/rpc/Logout.js +2 -2
  149. package/esm/models/trellis/Page.d.ts +2 -0
  150. package/esm/models/trellis/Page.d.ts.map +1 -0
  151. package/esm/models/trellis/Page.js +1 -0
  152. package/esm/models/trellis/State.d.ts +1 -0
  153. package/esm/models/trellis/State.d.ts.map +1 -1
  154. package/esm/models/trellis/State.js +1 -0
  155. package/esm/models/trellis/rpc/StateList.d.ts +9 -12
  156. package/esm/models/trellis/rpc/StateList.d.ts.map +1 -1
  157. package/esm/models/trellis/rpc/StateList.js +16 -18
  158. package/esm/npm/src/auth/browser/login.d.ts.map +1 -1
  159. package/esm/npm/src/auth/browser/login.js +46 -3
  160. package/esm/npm/src/auth/browser/portal.d.ts.map +1 -1
  161. package/esm/npm/src/auth/browser/portal.js +5 -1
  162. package/esm/npm/src/auth/browser/session.d.ts +18 -7
  163. package/esm/npm/src/auth/browser/session.d.ts.map +1 -1
  164. package/esm/npm/src/auth/browser/session.js +47 -11
  165. package/esm/npm/src/auth/browser/storage.d.ts +6 -1
  166. package/esm/npm/src/auth/browser/storage.d.ts.map +1 -1
  167. package/esm/npm/src/auth/browser/storage.js +15 -3
  168. package/esm/npm/src/auth/browser.d.ts +2 -2
  169. package/esm/npm/src/auth/browser.d.ts.map +1 -1
  170. package/esm/npm/src/auth/browser.js +1 -1
  171. package/esm/npm/src/auth/device_activation.d.ts +36 -33
  172. package/esm/npm/src/auth/device_activation.d.ts.map +1 -1
  173. package/esm/npm/src/auth/device_activation.js +26 -22
  174. package/esm/npm/src/auth/mod.d.ts +4 -4
  175. package/esm/npm/src/auth/mod.d.ts.map +1 -1
  176. package/esm/npm/src/auth/mod.js +2 -2
  177. package/esm/npm/src/auth/proof.d.ts +3 -1
  178. package/esm/npm/src/auth/proof.d.ts.map +1 -1
  179. package/esm/npm/src/auth/proof.js +21 -15
  180. package/esm/npm/src/auth/protocol.d.ts +2457 -941
  181. package/esm/npm/src/auth/protocol.d.ts.map +1 -1
  182. package/esm/npm/src/auth/protocol.js +747 -375
  183. package/esm/npm/src/auth/schemas.d.ts +25 -4
  184. package/esm/npm/src/auth/schemas.d.ts.map +1 -1
  185. package/esm/npm/src/auth/schemas.js +14 -4
  186. package/esm/npm/src/auth/session_auth.d.ts +1 -1
  187. package/esm/npm/src/auth/session_auth.d.ts.map +1 -1
  188. package/esm/npm/src/auth/session_auth.js +7 -1
  189. package/esm/npm/src/client_connect.d.ts +2 -0
  190. package/esm/npm/src/client_connect.d.ts.map +1 -1
  191. package/esm/npm/src/client_connect.js +76 -15
  192. package/esm/npm/src/contract.d.ts +3 -0
  193. package/esm/npm/src/contract.d.ts.map +1 -1
  194. package/esm/npm/src/contract_support/mod.d.ts +422 -43
  195. package/esm/npm/src/contract_support/mod.d.ts.map +1 -1
  196. package/esm/npm/src/contract_support/mod.js +734 -33
  197. package/esm/npm/src/contract_support/protocol.d.ts +20 -5
  198. package/esm/npm/src/contract_support/protocol.d.ts.map +1 -1
  199. package/esm/npm/src/contract_support/protocol.js +18 -10
  200. package/esm/npm/src/contract_support/runtime.d.ts +11 -0
  201. package/esm/npm/src/contract_support/runtime.d.ts.map +1 -1
  202. package/esm/npm/src/contract_support/schema_pointers.d.ts.map +1 -1
  203. package/esm/npm/src/contract_support/schema_pointers.js +32 -14
  204. package/esm/npm/src/device/deno.d.ts.map +1 -1
  205. package/esm/npm/src/device/deno.js +6 -0
  206. package/esm/npm/src/device.d.ts +2 -0
  207. package/esm/npm/src/device.d.ts.map +1 -1
  208. package/esm/npm/src/device.js +3 -0
  209. package/esm/npm/src/errors/AuthError.d.ts +1 -1
  210. package/esm/npm/src/errors/AuthError.d.ts.map +1 -1
  211. package/esm/npm/src/errors/AuthError.js +5 -1
  212. package/esm/npm/src/errors/index.d.ts +4 -4
  213. package/esm/npm/src/generate.js +2 -19
  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 -3
  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/generate.js +2 -19
  500. package/script/npm/src/helpers.d.ts.map +1 -1
  501. package/script/npm/src/index.d.ts +4 -3
  502. package/script/npm/src/index.d.ts.map +1 -1
  503. package/script/npm/src/index.js +5 -2
  504. package/script/npm/src/jobs.d.ts +10 -1
  505. package/script/npm/src/jobs.d.ts.map +1 -1
  506. package/script/npm/src/jobs.js +17 -2
  507. package/script/npm/src/kv.d.ts.map +1 -1
  508. package/script/npm/src/kv.js +10 -4
  509. package/script/npm/src/models/auth/rpc/Logout.d.ts +4 -4
  510. package/script/npm/src/models/auth/rpc/Logout.d.ts.map +1 -1
  511. package/script/npm/src/models/auth/rpc/Logout.js +3 -3
  512. package/script/npm/src/models/trellis/Page.d.ts +2 -0
  513. package/script/npm/src/models/trellis/Page.d.ts.map +1 -0
  514. package/script/npm/src/models/trellis/Page.js +6 -0
  515. package/script/npm/src/models/trellis/State.d.ts +1 -0
  516. package/script/npm/src/models/trellis/State.d.ts.map +1 -1
  517. package/script/npm/src/models/trellis/State.js +1 -0
  518. package/script/npm/src/models/trellis/rpc/StateList.d.ts +9 -12
  519. package/script/npm/src/models/trellis/rpc/StateList.d.ts.map +1 -1
  520. package/script/npm/src/models/trellis/rpc/StateList.js +16 -18
  521. package/script/npm/src/operations.d.ts +16 -7
  522. package/script/npm/src/operations.d.ts.map +1 -1
  523. package/script/npm/src/operations.js +84 -19
  524. package/script/npm/src/runtime_transport.d.ts +2 -0
  525. package/script/npm/src/runtime_transport.d.ts.map +1 -1
  526. package/script/npm/src/runtime_transport.js +2 -1
  527. package/script/npm/src/server/internal_jobs/active-job.d.ts +2 -1
  528. package/script/npm/src/server/internal_jobs/active-job.d.ts.map +1 -1
  529. package/script/npm/src/server/internal_jobs/active-job.js +3 -0
  530. package/script/npm/src/server/internal_jobs/job-manager.d.ts +4 -1
  531. package/script/npm/src/server/internal_jobs/job-manager.d.ts.map +1 -1
  532. package/script/npm/src/server/internal_jobs/job-manager.js +61 -1
  533. package/script/npm/src/server/internal_jobs/projection.js +1 -0
  534. package/script/npm/src/server/internal_jobs/runtime-worker.d.ts +13 -1
  535. package/script/npm/src/server/internal_jobs/runtime-worker.d.ts.map +1 -1
  536. package/script/npm/src/server/internal_jobs/runtime-worker.js +74 -13
  537. package/script/npm/src/server/internal_jobs/types.d.ts +19 -0
  538. package/script/npm/src/server/internal_jobs/types.d.ts.map +1 -1
  539. package/script/npm/src/server/internal_jobs/types.js +11 -1
  540. package/script/npm/src/server/runtime.d.ts +1 -0
  541. package/script/npm/src/server/runtime.d.ts.map +1 -1
  542. package/script/npm/src/server/service.d.ts +10 -1
  543. package/script/npm/src/server/service.d.ts.map +1 -1
  544. package/script/npm/src/server/service.js +188 -62
  545. package/script/npm/src/server/transfer.d.ts.map +1 -1
  546. package/script/npm/src/server/transfer.js +4 -0
  547. package/script/npm/src/server.d.ts.map +1 -1
  548. package/script/npm/src/server.js +336 -33
  549. package/script/npm/src/store.d.ts +8 -1
  550. package/script/npm/src/store.d.ts.map +1 -1
  551. package/script/npm/src/store.js +46 -8
  552. package/script/npm/src/transfer.d.ts +3 -0
  553. package/script/npm/src/transfer.d.ts.map +1 -1
  554. package/script/npm/src/transfer.js +19 -29
  555. package/script/npm/src/trellis.d.ts +85 -22
  556. package/script/npm/src/trellis.d.ts.map +1 -1
  557. package/script/npm/src/trellis.js +525 -61
  558. package/script/operations.d.ts +16 -7
  559. package/script/operations.d.ts.map +1 -1
  560. package/script/operations.js +84 -19
  561. package/script/runtime_transport.d.ts +2 -0
  562. package/script/runtime_transport.d.ts.map +1 -1
  563. package/script/runtime_transport.js +2 -1
  564. package/script/store.d.ts +8 -1
  565. package/script/store.d.ts.map +1 -1
  566. package/script/store.js +46 -8
  567. package/script/transfer.d.ts +3 -0
  568. package/script/transfer.d.ts.map +1 -1
  569. package/script/transfer.js +19 -29
  570. package/script/trellis.d.ts +85 -22
  571. package/script/trellis.d.ts.map +1 -1
  572. package/script/trellis.js +525 -61
  573. package/esm/models/trellis/Paginate.d.ts +0 -7
  574. package/esm/models/trellis/Paginate.d.ts.map +0 -1
  575. package/esm/models/trellis/Paginate.js +0 -5
  576. package/esm/npm/src/models/trellis/Paginate.d.ts +0 -7
  577. package/esm/npm/src/models/trellis/Paginate.d.ts.map +0 -1
  578. package/esm/npm/src/models/trellis/Paginate.js +0 -5
  579. package/script/models/trellis/Paginate.d.ts +0 -7
  580. package/script/models/trellis/Paginate.d.ts.map +0 -1
  581. package/script/models/trellis/Paginate.js +0 -11
  582. package/script/npm/src/models/trellis/Paginate.d.ts +0 -7
  583. package/script/npm/src/models/trellis/Paginate.d.ts.map +0 -1
  584. package/script/npm/src/models/trellis/Paginate.js +0 -11
package/script/trellis.js CHANGED
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  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");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _Trellis_instances, _Trellis_log, _Trellis_tasks, _Trellis_hasExplicitApi, _Trellis_noResponderMaxRetries, _Trellis_noResponderRetryMs, _Trellis_authBypassMethods, _Trellis_onSessionNotFound, _Trellis_operationStore, _Trellis_createStateFacade, _Trellis_unknownApiError, _Trellis_requestBuiltRpcUnknown, _Trellis_requestBuiltRpc, _Trellis_handleSessionNotFound, _Trellis_handleRPC, _Trellis_processRPCMessage, _Trellis_respondWithError, _Trellis_startEphemeralEvent, _Trellis_handleDurableEvent, _Trellis_parseEventMessage, _Trellis_escapeSubjectToken, _Trellis_createProof, _Trellis_requestMessageWithRetry, _Trellis_requestJson, _Trellis_watchJson;
13
+ var _Trellis_instances, _Trellis_log, _Trellis_tasks, _Trellis_hasExplicitApi, _Trellis_noResponderMaxRetries, _Trellis_noResponderRetryMs, _Trellis_onSessionNotFound, _Trellis_operationStore, _Trellis_createStateFacade, _Trellis_unknownApiError, _Trellis_requestBuiltRpcUnknown, _Trellis_requestBuiltRpc, _Trellis_handleBrowserAuthRequired, _Trellis_authenticateFeedRequest, _Trellis_subscribeFeed, _Trellis_handleFeed, _Trellis_processFeedMessage, _Trellis_handleRPC, _Trellis_processRPCMessage, _Trellis_respondWithPayload, _Trellis_respondWithError, _Trellis_startEphemeralEvent, _Trellis_handleDurableEvent, _Trellis_parseEventMessage, _Trellis_escapeSubjectToken, _Trellis_currentIat, _Trellis_createProof, _Trellis_requestMessageWithRetry, _Trellis_requestJson, _Trellis_watchJson;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.Trellis = exports.DurableOperationRecordSchema = void 0;
16
16
  exports.safeJson = safeJson;
@@ -153,16 +153,22 @@ async function sha256(data) {
153
153
  const digest = await crypto.subtle.digest("SHA-256", toArrayBuffer(data));
154
154
  return new Uint8Array(digest);
155
155
  }
156
- function buildProofInput(sessionKey, subject, payloadHash) {
156
+ function buildProofInput(sessionKey, subject, payloadHash, iat, requestId) {
157
157
  const enc = new TextEncoder();
158
158
  const sessionKeyBytes = enc.encode(sessionKey);
159
159
  const subjectBytes = enc.encode(subject);
160
+ const iatBytes = enc.encode(String(iat));
161
+ const requestIdBytes = enc.encode(requestId);
160
162
  const buf = new Uint8Array(4 +
161
163
  sessionKeyBytes.length +
162
164
  4 +
163
165
  subjectBytes.length +
164
166
  4 +
165
- payloadHash.length);
167
+ payloadHash.length +
168
+ 4 +
169
+ iatBytes.length +
170
+ 4 +
171
+ requestIdBytes.length);
166
172
  const view = new DataView(buf.buffer);
167
173
  let offset = 0;
168
174
  view.setUint32(offset, sessionKeyBytes.length);
@@ -176,6 +182,14 @@ function buildProofInput(sessionKey, subject, payloadHash) {
176
182
  view.setUint32(offset, payloadHash.length);
177
183
  offset += 4;
178
184
  buf.set(payloadHash, offset);
185
+ offset += payloadHash.length;
186
+ view.setUint32(offset, iatBytes.length);
187
+ offset += 4;
188
+ buf.set(iatBytes, offset);
189
+ offset += iatBytes.length;
190
+ view.setUint32(offset, requestIdBytes.length);
191
+ offset += 4;
192
+ buf.set(requestIdBytes, offset);
179
193
  return buf;
180
194
  }
181
195
  /**
@@ -189,6 +203,13 @@ function isOperationDeferred(value) {
189
203
  function isResultLike(value) {
190
204
  return value instanceof result_1.Result;
191
205
  }
206
+ const DurableOperationSignalSchema = typebox_1.Type.Object({
207
+ operationId: typebox_1.Type.String(),
208
+ sequence: typebox_1.Type.Number(),
209
+ signal: typebox_1.Type.String(),
210
+ input: typebox_1.Type.Optional(typebox_1.Type.Any()),
211
+ acceptedAt: typebox_1.Type.String(),
212
+ });
192
213
  const DurableOperationSnapshotSchema = typebox_1.Type.Object({
193
214
  id: typebox_1.Type.String(),
194
215
  service: typebox_1.Type.String(),
@@ -219,6 +240,8 @@ const DurableOperationSnapshotSchema = typebox_1.Type.Object({
219
240
  exports.DurableOperationRecordSchema = typebox_1.Type.Object({
220
241
  ownerSessionKey: typebox_1.Type.String(),
221
242
  sequence: typebox_1.Type.Number(),
243
+ signalSequence: typebox_1.Type.Optional(typebox_1.Type.Number()),
244
+ signals: typebox_1.Type.Optional(typebox_1.Type.Array(DurableOperationSignalSchema)),
222
245
  snapshot: DurableOperationSnapshotSchema,
223
246
  });
224
247
  function buildRuntimeOperationSnapshot(runtime, state, patch) {
@@ -475,12 +498,44 @@ const DEFAULT_NO_RESPONDER_MAX_RETRIES = 2;
475
498
  const DEFAULT_NO_RESPONDER_RETRY_MS = 200;
476
499
  const DEFAULT_AUTH_VALIDATE_SESSION_RETRY_ATTEMPTS = 3;
477
500
  const DEFAULT_AUTH_VALIDATE_SESSION_RETRY_MS = 25;
501
+ function activeTraceId(span) {
502
+ const traceId = span.spanContext().traceId;
503
+ return traceId === "00000000000000000000000000000000" ? undefined : traceId;
504
+ }
505
+ function traceIdFromTraceparent(traceparent) {
506
+ const [version, traceId, parentId, flags, extra] = traceparent?.split("-") ??
507
+ [];
508
+ if (extra !== undefined ||
509
+ !/^[0-9a-f]{2}$/u.test(version ?? "") ||
510
+ version === "ff" ||
511
+ !/^[0-9a-f]{32}$/u.test(traceId ?? "") ||
512
+ traceId === "00000000000000000000000000000000" ||
513
+ !/^[0-9a-f]{16}$/u.test(parentId ?? "") ||
514
+ parentId === "0000000000000000" ||
515
+ !/^[0-9a-f]{2}$/u.test(flags ?? "")) {
516
+ return undefined;
517
+ }
518
+ return traceId;
519
+ }
478
520
  const EMPTY_TRELLIS_API = {
479
521
  rpc: {},
480
522
  operations: {},
481
523
  events: {},
524
+ feeds: {},
482
525
  subjects: {},
483
526
  };
527
+ function isBrowserAuthRequiredError(error) {
528
+ const isAuthRequiredReason = (reason) => reason === "session_not_found" || reason === "reauth_required";
529
+ if (error instanceof index_ts_1.AuthError) {
530
+ return isAuthRequiredReason(error.reason);
531
+ }
532
+ if (error instanceof RemoteError_ts_1.RemoteError &&
533
+ error.remoteError.type === "AuthError") {
534
+ const reason = Reflect.get(error.remoteError, "reason");
535
+ return isAuthRequiredReason(reason);
536
+ }
537
+ return false;
538
+ }
484
539
  function isTransientAuthValidateSessionError(error) {
485
540
  if (error instanceof index_ts_1.AuthError) {
486
541
  return error.reason === "session_not_found";
@@ -488,7 +543,7 @@ function isTransientAuthValidateSessionError(error) {
488
543
  if (error instanceof RemoteError_ts_1.RemoteError &&
489
544
  error.remoteError.type === "AuthError") {
490
545
  const reason = Reflect.get(error.remoteError, "reason");
491
- return typeof reason === "string" && reason === "session_not_found";
546
+ return reason === "session_not_found";
492
547
  }
493
548
  return false;
494
549
  }
@@ -500,6 +555,20 @@ function isRuntimeRpcErrorDesc(value) {
500
555
  typeof Reflect.get(value, "type") === "string" &&
501
556
  typeof Reflect.get(value, "fromSerializable") === "function";
502
557
  }
558
+ const payloadSizeEncoder = new TextEncoder();
559
+ function payloadByteLength(payload) {
560
+ return typeof payload === "string"
561
+ ? payloadSizeEncoder.encode(payload).byteLength
562
+ : payload.byteLength;
563
+ }
564
+ function causeMessage(cause) {
565
+ return cause instanceof Error ? cause.message : String(cause);
566
+ }
567
+ function causeLogData(cause) {
568
+ return cause instanceof Error
569
+ ? { message: cause.message, stack: cause.stack, name: cause.name }
570
+ : cause;
571
+ }
503
572
  function reconstructDeclaredRpcError(errorNames, runtimeErrors, data, json) {
504
573
  if (!isDeclaredRpcError(errorNames, data.type)) {
505
574
  return null;
@@ -598,7 +667,6 @@ class Trellis {
598
667
  _Trellis_hasExplicitApi.set(this, void 0);
599
668
  _Trellis_noResponderMaxRetries.set(this, void 0);
600
669
  _Trellis_noResponderRetryMs.set(this, void 0);
601
- _Trellis_authBypassMethods.set(this, void 0);
602
670
  _Trellis_onSessionNotFound.set(this, void 0);
603
671
  _Trellis_operationStore.set(this, void 0);
604
672
  const api = opts?.api;
@@ -615,7 +683,6 @@ class Trellis {
615
683
  DEFAULT_NO_RESPONDER_MAX_RETRIES, "f");
616
684
  __classPrivateFieldSet(this, _Trellis_noResponderRetryMs, opts?.noResponderRetry?.baseDelayMs ??
617
685
  DEFAULT_NO_RESPONDER_RETRY_MS, "f");
618
- __classPrivateFieldSet(this, _Trellis_authBypassMethods, new Set(opts?.authBypassMethods ?? []), "f");
619
686
  __classPrivateFieldSet(this, _Trellis_onSessionNotFound, opts?.onSessionNotFound, "f");
620
687
  this.connection = opts?.connection ??
621
688
  new connection_ts_1.TrellisConnection({ kind: "client" });
@@ -659,6 +726,8 @@ class Trellis {
659
726
  const record = {
660
727
  ownerSessionKey: runtime.ownerSessionKey,
661
728
  sequence: runtime.sequence,
729
+ signalSequence: runtime.signalSequence,
730
+ signals: runtime.signals,
662
731
  snapshot: runtime.snapshot,
663
732
  };
664
733
  await store.put(runtime.id, record);
@@ -674,6 +743,18 @@ class Trellis {
674
743
  }
675
744
  return __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_requestBuiltRpcUnknown).call(this, method, input, ctx, opts);
676
745
  }
746
+ feed(feed) {
747
+ const descriptor = this.api.feeds?.[feed];
748
+ if (!descriptor) {
749
+ throw __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_unknownApiError).call(this, "feed", feed.toString());
750
+ }
751
+ return {
752
+ input: (input) => ({
753
+ subscribe: (opts) => __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_subscribeFeed).call(this, feed.toString(), descriptor, input, opts),
754
+ }),
755
+ handle: (handler) => __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_handleFeed).call(this, feed.toString(), descriptor, handler),
756
+ };
757
+ }
677
758
  operation(operation) {
678
759
  const descriptor = this.api["operations"]?.[operation];
679
760
  if (!descriptor) {
@@ -729,20 +810,24 @@ class Trellis {
729
810
  globals_ts_1.logger.error({ err: subject.error }, "Failed to template event.");
730
811
  return subject;
731
812
  }
813
+ const header = {
814
+ id: (0, ulid_1.ulid)(),
815
+ time: new Date().toISOString(),
816
+ };
732
817
  const payload = {
733
818
  ...data,
734
- header: {
735
- id: (0, ulid_1.ulid)(),
736
- time: new Date().toISOString(),
737
- },
819
+ header,
738
820
  };
739
821
  const msg = (0, codec_ts_1.encodeSchema)(ctx.event, payload).take();
740
822
  if ((0, result_1.isErr)(msg)) {
741
823
  globals_ts_1.logger.error({ err: msg.error }, "Failed to encode event.");
742
824
  return (0, result_1.err)(new index_ts_1.UnexpectedError({ cause: msg.error }));
743
825
  }
826
+ const headers = (0, nats_core_1.headers)();
827
+ headers.set("Nats-Msg-Id", header.id);
828
+ (0, tracing_ts_1.injectTraceContext)((0, tracing_ts_1.createNatsHeaderCarrier)(headers));
744
829
  globals_ts_1.logger.trace({ subject }, `Publishing ${event.toString()} event.`);
745
- await this.js.publish(subject, msg);
830
+ await this.js.publish(subject, msg, { headers });
746
831
  return (0, result_1.ok)(undefined);
747
832
  }
748
833
  catch (cause) {
@@ -838,11 +923,11 @@ class Trellis {
838
923
  }
839
924
  requestAuthValidate(input) {
840
925
  const request = this.request.bind(this);
841
- return request("Auth.ValidateRequest", input);
926
+ return request("Auth.Requests.Validate", input);
842
927
  }
843
928
  }
844
929
  exports.Trellis = Trellis;
845
- _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplicitApi = new WeakMap(), _Trellis_noResponderMaxRetries = new WeakMap(), _Trellis_noResponderRetryMs = new WeakMap(), _Trellis_authBypassMethods = new WeakMap(), _Trellis_onSessionNotFound = new WeakMap(), _Trellis_operationStore = new WeakMap(), _Trellis_instances = new WeakSet(), _Trellis_createStateFacade = function _Trellis_createStateFacade(state) {
930
+ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplicitApi = new WeakMap(), _Trellis_noResponderMaxRetries = new WeakMap(), _Trellis_noResponderRetryMs = new WeakMap(), _Trellis_onSessionNotFound = new WeakMap(), _Trellis_operationStore = new WeakMap(), _Trellis_instances = new WeakSet(), _Trellis_createStateFacade = function _Trellis_createStateFacade(state) {
846
931
  const stores = (state ?? {});
847
932
  const facade = Object.fromEntries(Object.entries(stores).map(([store, descriptor]) => {
848
933
  if (descriptor.kind === "value") {
@@ -934,10 +1019,12 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
934
1019
  }
935
1020
  const span = (0, tracing_ts_1.startClientSpan)(method, subject);
936
1021
  const attempt = async () => {
937
- const proof = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_createProof).call(this, subject, msg);
1022
+ const authHeaders = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_createProof).call(this, subject, msg);
938
1023
  const headers = (0, nats_core_1.headers)();
939
1024
  headers.set("session-key", this.auth.sessionKey);
940
- headers.set("proof", proof);
1025
+ headers.set("proof", authHeaders.proof);
1026
+ headers.set("iat", String(authHeaders.iat));
1027
+ headers.set("request-id", authHeaders.requestId);
941
1028
  (0, tracing_ts_1.injectTraceContext)((0, tracing_ts_1.createNatsHeaderCarrier)(headers), span);
942
1029
  const msgResult = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_requestMessageWithRetry).call(this, {
943
1030
  method,
@@ -982,11 +1069,11 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
982
1069
  : undefined;
983
1070
  const reconstructed = reconstructDeclaredRpcError(declaredErrorTypes, runtimeErrors, errorData, json);
984
1071
  if (reconstructed) {
985
- await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_handleSessionNotFound).call(this, reconstructed);
1072
+ await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_handleBrowserAuthRequired).call(this, reconstructed);
986
1073
  return (0, result_1.err)(reconstructed);
987
1074
  }
988
1075
  const remoteError = new RemoteError_ts_1.RemoteError({ error: errorData });
989
- await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_handleSessionNotFound).call(this, remoteError);
1076
+ await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_handleBrowserAuthRequired).call(this, remoteError);
990
1077
  return (0, result_1.err)(remoteError);
991
1078
  }
992
1079
  const json = safeJson(response).take();
@@ -1037,11 +1124,284 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1037
1124
  }
1038
1125
  });
1039
1126
  })());
1040
- }, _Trellis_handleSessionNotFound = async function _Trellis_handleSessionNotFound(error) {
1041
- if (!__classPrivateFieldGet(this, _Trellis_onSessionNotFound, "f") || !isTransientAuthValidateSessionError(error)) {
1127
+ }, _Trellis_handleBrowserAuthRequired = async function _Trellis_handleBrowserAuthRequired(error) {
1128
+ if (!__classPrivateFieldGet(this, _Trellis_onSessionNotFound, "f") || !isBrowserAuthRequiredError(error)) {
1042
1129
  return;
1043
1130
  }
1044
1131
  await __classPrivateFieldGet(this, _Trellis_onSessionNotFound, "f").call(this);
1132
+ }, _Trellis_authenticateFeedRequest = async function _Trellis_authenticateFeedRequest(args) {
1133
+ const sessionKey = args.msg.headers?.get("session-key");
1134
+ const proof = args.msg.headers?.get("proof");
1135
+ const iatHeader = args.msg.headers?.get("iat");
1136
+ const requestId = args.msg.headers?.get("request-id");
1137
+ if (!sessionKey) {
1138
+ return (0, result_1.err)(new index_ts_1.AuthError({ reason: "missing_session_key" }));
1139
+ }
1140
+ if (!proof)
1141
+ return (0, result_1.err)(new index_ts_1.AuthError({ reason: "missing_proof" }));
1142
+ const iat = Number(iatHeader);
1143
+ if (!Number.isSafeInteger(iat) || !requestId) {
1144
+ return (0, result_1.err)(new index_ts_1.AuthError({ reason: "invalid_signature" }));
1145
+ }
1146
+ const proofInput = buildProofInput(sessionKey, args.subject, args.payloadHash, iat, requestId);
1147
+ const digest = await sha256(proofInput);
1148
+ const verifyResult = await result_1.AsyncResult.try(async () => {
1149
+ const publicKeyRaw = base64urlDecode(sessionKey);
1150
+ const pub = await crypto.subtle.importKey("raw", toArrayBuffer(publicKeyRaw), { name: "Ed25519" }, true, ["verify"]);
1151
+ return crypto.subtle.verify({ name: "Ed25519" }, pub, toArrayBuffer(base64urlDecode(proof)), toArrayBuffer(digest));
1152
+ });
1153
+ if (!verifyResult.isOk() || verifyResult.take() !== true) {
1154
+ return (0, result_1.err)(new index_ts_1.AuthError({ reason: "invalid_signature", context: { sessionKey } }));
1155
+ }
1156
+ const auth = await this.requestAuthValidate({
1157
+ sessionKey,
1158
+ proof,
1159
+ subject: args.subject,
1160
+ payloadHash: base64urlEncode(args.payloadHash),
1161
+ iat,
1162
+ requestId,
1163
+ capabilities: [...args.requiredCapabilities],
1164
+ }).take();
1165
+ if ((0, result_1.isErr)(auth))
1166
+ return (0, result_1.err)(auth.error);
1167
+ if (!auth.allowed) {
1168
+ return (0, result_1.err)(new index_ts_1.AuthError({
1169
+ reason: "insufficient_permissions",
1170
+ context: {
1171
+ feed: args.feed,
1172
+ requiredCapabilities: args.requiredCapabilities,
1173
+ userCapabilities: auth.caller.capabilities,
1174
+ },
1175
+ }));
1176
+ }
1177
+ if (typeof args.msg.reply !== "string" ||
1178
+ !args.msg.reply.startsWith(`${auth.inboxPrefix}.`)) {
1179
+ return (0, result_1.err)(new index_ts_1.AuthError({
1180
+ reason: "reply_subject_mismatch",
1181
+ context: { expected: auth.inboxPrefix, actual: args.msg.reply },
1182
+ }));
1183
+ }
1184
+ return (0, result_1.ok)(auth.caller);
1185
+ }, _Trellis_subscribeFeed = function _Trellis_subscribeFeed(feed, descriptor, input, opts) {
1186
+ return result_1.AsyncResult.from((async () => {
1187
+ const payload = encodeRuntimeSchema(descriptor.input, input).take();
1188
+ if ((0, result_1.isErr)(payload))
1189
+ return payload;
1190
+ const subject = this.template(descriptor.subject, input).take();
1191
+ if ((0, result_1.isErr)(subject))
1192
+ return subject;
1193
+ const authHeaders = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_createProof).call(this, subject, payload);
1194
+ const headers = (0, nats_core_1.headers)();
1195
+ headers.set("session-key", this.auth.sessionKey);
1196
+ headers.set("proof", authHeaders.proof);
1197
+ headers.set("iat", String(authHeaders.iat));
1198
+ headers.set("request-id", authHeaders.requestId);
1199
+ (0, tracing_ts_1.injectTraceContext)((0, tracing_ts_1.createNatsHeaderCarrier)(headers));
1200
+ const inbox = (0, nats_core_1.createInbox)(`_INBOX.${this.auth.sessionKey.slice(0, 16)}`);
1201
+ const sub = this.nats.subscribe(inbox);
1202
+ const iterator = sub[Symbol.asyncIterator]();
1203
+ const abort = () => sub.unsubscribe();
1204
+ opts?.signal?.addEventListener("abort", abort, { once: true });
1205
+ try {
1206
+ this.nats.publish(subject, payload, { headers, reply: inbox });
1207
+ await this.nats.flush();
1208
+ }
1209
+ catch (cause) {
1210
+ opts?.signal?.removeEventListener("abort", abort);
1211
+ sub.unsubscribe();
1212
+ return (0, result_1.err)(createTransportError({
1213
+ code: "trellis.feed.subscribe_failed",
1214
+ message: "Trellis could not subscribe to the feed.",
1215
+ hint: "Retry the subscription. If it keeps failing, check Trellis runtime health.",
1216
+ cause,
1217
+ context: { feed, subject },
1218
+ }));
1219
+ }
1220
+ let timeoutId;
1221
+ let abortHandler;
1222
+ const handshakePromises = [
1223
+ iterator.next(),
1224
+ new Promise((resolve) => {
1225
+ timeoutId = setTimeout(() => resolve("timeout"), this.timeout);
1226
+ }),
1227
+ ];
1228
+ const signal = opts?.signal;
1229
+ if (signal) {
1230
+ handshakePromises.push(new Promise((resolve) => {
1231
+ abortHandler = () => resolve("aborted");
1232
+ signal.addEventListener("abort", abortHandler, { once: true });
1233
+ }));
1234
+ }
1235
+ const firstFrame = await Promise.race(handshakePromises);
1236
+ if (timeoutId !== undefined)
1237
+ clearTimeout(timeoutId);
1238
+ if (signal && abortHandler) {
1239
+ signal.removeEventListener("abort", abortHandler);
1240
+ }
1241
+ if (firstFrame === "timeout" || firstFrame === "aborted") {
1242
+ opts?.signal?.removeEventListener("abort", abort);
1243
+ sub.unsubscribe();
1244
+ return (0, result_1.err)(createTransportError({
1245
+ code: firstFrame === "timeout"
1246
+ ? "trellis.feed.subscribe_timeout"
1247
+ : "trellis.feed.subscribe_aborted",
1248
+ message: firstFrame === "timeout"
1249
+ ? "Trellis did not receive a feed acknowledgement."
1250
+ : "The feed subscription was aborted before Trellis acknowledged it.",
1251
+ hint: firstFrame === "timeout"
1252
+ ? "Check that the target service is running and has the current deployment digest, then retry."
1253
+ : "Retry the subscription if the feed is still needed.",
1254
+ context: { feed, subject },
1255
+ }));
1256
+ }
1257
+ if (firstFrame.done) {
1258
+ opts?.signal?.removeEventListener("abort", abort);
1259
+ sub.unsubscribe();
1260
+ return (0, result_1.err)(createTransportError({
1261
+ code: "trellis.feed.subscribe_closed",
1262
+ message: "Trellis closed the feed before acknowledging it.",
1263
+ hint: "Retry the subscription. If it keeps failing, check Trellis runtime health.",
1264
+ context: { feed, subject },
1265
+ }));
1266
+ }
1267
+ const firstMessage = firstFrame.value;
1268
+ if (firstMessage.headers?.get("status") === "error") {
1269
+ opts?.signal?.removeEventListener("abort", abort);
1270
+ sub.unsubscribe();
1271
+ return (0, result_1.err)(createTransportError({
1272
+ code: "trellis.feed.failed",
1273
+ message: "Trellis rejected the feed subscription.",
1274
+ hint: "Retry the subscription. If it keeps failing, check Trellis runtime health and permissions.",
1275
+ context: { feed, subject, frame: firstMessage.string() },
1276
+ }));
1277
+ }
1278
+ const firstEvent = firstMessage.headers?.get("feed-status") === "ready"
1279
+ ? undefined
1280
+ : firstMessage;
1281
+ const eventSchema = descriptor.event;
1282
+ return (0, result_1.ok)((async function* () {
1283
+ try {
1284
+ const parseFeedFrame = (msg) => {
1285
+ if (msg.headers?.get("status") === "error") {
1286
+ throw createTransportError({
1287
+ code: "trellis.feed.failed",
1288
+ message: "Trellis stopped the feed.",
1289
+ hint: "Retry the subscription. If it keeps failing, check Trellis runtime health.",
1290
+ context: { feed, subject, frame: msg.string() },
1291
+ });
1292
+ }
1293
+ const json = safeJson(msg).take();
1294
+ if ((0, result_1.isErr)(json))
1295
+ throw json.error;
1296
+ const parsed = parseRuntimeSchema(eventSchema, json).take();
1297
+ if ((0, result_1.isErr)(parsed))
1298
+ throw parsed.error;
1299
+ return parsed;
1300
+ };
1301
+ if (firstEvent)
1302
+ yield parseFeedFrame(firstEvent);
1303
+ while (true) {
1304
+ const next = await iterator.next();
1305
+ if (next.done)
1306
+ break;
1307
+ yield parseFeedFrame(next.value);
1308
+ }
1309
+ }
1310
+ finally {
1311
+ opts?.signal?.removeEventListener("abort", abort);
1312
+ sub.unsubscribe();
1313
+ }
1314
+ })());
1315
+ })());
1316
+ }, _Trellis_handleFeed = async function _Trellis_handleFeed(feed, descriptor, handler) {
1317
+ const subject = this.template(descriptor.subject, {}, true).take();
1318
+ if ((0, result_1.isErr)(subject))
1319
+ throw subject.error;
1320
+ let sub;
1321
+ try {
1322
+ sub = this.nats.subscribe(subject);
1323
+ await this.nats.flush();
1324
+ }
1325
+ catch (cause) {
1326
+ throw createTransportError({
1327
+ code: "trellis.feed.listen_failed",
1328
+ message: "Trellis could not listen for feed requests.",
1329
+ hint: "Check the service deployment digest and runtime permissions, then restart the service.",
1330
+ cause,
1331
+ context: { feed, subject },
1332
+ });
1333
+ }
1334
+ const task = result_1.AsyncResult.try(async () => {
1335
+ for await (const msg of sub) {
1336
+ void (async () => {
1337
+ try {
1338
+ const result = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_processFeedMessage).call(this, feed, descriptor, msg, handler);
1339
+ const value = result.take();
1340
+ if ((0, result_1.isErr)(value)) {
1341
+ __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithError).call(this, msg, value.error);
1342
+ }
1343
+ }
1344
+ catch (cause) {
1345
+ const error = cause instanceof result_1.BaseError
1346
+ ? cause
1347
+ : new index_ts_1.UnexpectedError({ cause });
1348
+ __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithError).call(this, msg, error);
1349
+ }
1350
+ })();
1351
+ }
1352
+ });
1353
+ __classPrivateFieldGet(this, _Trellis_tasks, "f").add(`feed:${feed}`, task);
1354
+ }, _Trellis_processFeedMessage = async function _Trellis_processFeedMessage(feed, descriptor, msg, handler) {
1355
+ const json = safeJson(msg).take();
1356
+ if ((0, result_1.isErr)(json))
1357
+ return json;
1358
+ const parsed = parseRuntimeSchema(descriptor.input, json).take();
1359
+ if ((0, result_1.isErr)(parsed))
1360
+ return parsed;
1361
+ const caller = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_authenticateFeedRequest).call(this, {
1362
+ feed,
1363
+ subject: msg.subject,
1364
+ msg,
1365
+ payloadHash: await sha256(msg.data ?? new Uint8Array()),
1366
+ requiredCapabilities: descriptor.subscribeCapabilities,
1367
+ });
1368
+ const callerValue = caller.take();
1369
+ if ((0, result_1.isErr)(callerValue))
1370
+ return callerValue;
1371
+ if (!msg.reply) {
1372
+ return (0, result_1.err)(new index_ts_1.UnexpectedError({
1373
+ context: { feed, reason: "missing_reply" },
1374
+ }));
1375
+ }
1376
+ const readyHeaders = (0, nats_core_1.headers)();
1377
+ readyHeaders.set("feed-status", "ready");
1378
+ this.nats.publish(msg.reply, new Uint8Array(), { headers: readyHeaders });
1379
+ await this.nats.flush();
1380
+ const controller = new AbortController();
1381
+ try {
1382
+ await handler({
1383
+ input: parsed,
1384
+ caller: callerValue,
1385
+ signal: controller.signal,
1386
+ emit: (event) => result_1.AsyncResult.from((async () => {
1387
+ const payload = encodeRuntimeSchema(descriptor.event, event).take();
1388
+ if ((0, result_1.isErr)(payload))
1389
+ return payload;
1390
+ if (!msg.reply) {
1391
+ return (0, result_1.err)(new index_ts_1.UnexpectedError({
1392
+ context: { feed, reason: "missing_reply" },
1393
+ }));
1394
+ }
1395
+ this.nats.publish(msg.reply, payload);
1396
+ await this.nats.flush();
1397
+ return (0, result_1.ok)(undefined);
1398
+ })()),
1399
+ });
1400
+ return (0, result_1.ok)(undefined);
1401
+ }
1402
+ finally {
1403
+ controller.abort();
1404
+ }
1045
1405
  }, _Trellis_handleRPC = function _Trellis_handleRPC(method, fn, subjectData = {}) {
1046
1406
  // Get API details
1047
1407
  const ctx = this.api["rpc"][method];
@@ -1057,10 +1417,31 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1057
1417
  const resultPromise = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_processRPCMessage).call(this, method, ctx, msg, fn, handlerTrellis);
1058
1418
  const result = resultPromise.take();
1059
1419
  if ((0, result_1.isErr)(result)) {
1060
- __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithError).call(this, msg, result.error);
1420
+ __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithError).call(this, msg, result.error, { method: String(method) });
1061
1421
  continue;
1062
1422
  }
1063
- msg.respond(result);
1423
+ const sent = __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithPayload).call(this, msg, result, undefined, {
1424
+ method: String(method),
1425
+ responseKind: "success",
1426
+ });
1427
+ if (sent.isErr()) {
1428
+ const responseBytes = payloadByteLength(result);
1429
+ const message = causeMessage(sent.error.cause);
1430
+ __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithError).call(this, msg, new index_ts_1.TransportError({
1431
+ code: "trellis.rpc.response_send_failed",
1432
+ message: message.includes("max_payload")
1433
+ ? "Trellis RPC response exceeded NATS max_payload."
1434
+ : "Trellis could not send the RPC response.",
1435
+ hint: "Reduce the requested page size or use a narrower RPC that does not include large detail payloads.",
1436
+ cause: sent.error.cause,
1437
+ context: {
1438
+ method: String(method),
1439
+ subject: msg.subject,
1440
+ responseBytes,
1441
+ causeMessage: message,
1442
+ },
1443
+ }), { method: String(method), responseBytes });
1444
+ }
1064
1445
  }
1065
1446
  });
1066
1447
  }, _Trellis_processRPCMessage = async function _Trellis_processRPCMessage(method, ctx, msg, fn, handlerTrellis) {
@@ -1072,6 +1453,7 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1072
1453
  }));
1073
1454
  // Start a server span for this RPC handler
1074
1455
  const span = (0, tracing_ts_1.startServerSpan)(method, msg.subject, parentContext);
1456
+ const incomingTraceId = traceIdFromTraceparent(msg.headers?.get("traceparent"));
1075
1457
  // Execute the handler within the span's context
1076
1458
  return (0, tracing_ts_1.withSpanAsync)(span, async () => {
1077
1459
  const execute = async () => {
@@ -1095,7 +1477,7 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1095
1477
  let caller;
1096
1478
  const callerSessionKey = msg.headers?.get("session-key") ?? "";
1097
1479
  const authRequired = ctx.authRequired ?? true;
1098
- if (!authRequired || __classPrivateFieldGet(this, _Trellis_authBypassMethods, "f").has(method)) {
1480
+ if (!authRequired) {
1099
1481
  caller = {
1100
1482
  type: "service",
1101
1483
  id: "system",
@@ -1107,6 +1489,8 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1107
1489
  else {
1108
1490
  const sessionKey = msg.headers?.get("session-key");
1109
1491
  const proof = msg.headers?.get("proof");
1492
+ const iatHeader = msg.headers?.get("iat");
1493
+ const requestId = msg.headers?.get("request-id");
1110
1494
  if (!sessionKey) {
1111
1495
  __classPrivateFieldGet(this, _Trellis_log, "f").warn({ method }, "Missing session-key header");
1112
1496
  span.setStatus({
@@ -1123,10 +1507,14 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1123
1507
  });
1124
1508
  return (0, result_1.err)(new index_ts_1.AuthError({ reason: "missing_proof" }));
1125
1509
  }
1510
+ const iat = Number(iatHeader);
1511
+ if (!Number.isSafeInteger(iat) || !requestId) {
1512
+ return (0, result_1.err)(new index_ts_1.AuthError({ reason: "invalid_signature" }));
1513
+ }
1126
1514
  // Verify proof signature locally using the raw request bytes we received.
1127
1515
  const payloadBytes = msg.data ?? new Uint8Array();
1128
1516
  const payloadHash = await sha256(payloadBytes);
1129
- const proofInput = buildProofInput(sessionKey, msg.subject, payloadHash);
1517
+ const proofInput = buildProofInput(sessionKey, msg.subject, payloadHash, iat, requestId);
1130
1518
  const digest = await sha256(proofInput);
1131
1519
  const verifyResult = await result_1.AsyncResult.try(async () => {
1132
1520
  const publicKeyRaw = base64urlDecode(sessionKey);
@@ -1152,6 +1540,8 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1152
1540
  proof,
1153
1541
  subject: msg.subject,
1154
1542
  payloadHash: base64urlEncode(payloadHash),
1543
+ iat,
1544
+ requestId,
1155
1545
  capabilities: [...ctx.callerCapabilities],
1156
1546
  }).take();
1157
1547
  if (!(0, result_1.isErr)(authValue)) {
@@ -1179,10 +1569,10 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1179
1569
  remoteError: auth instanceof RemoteError_ts_1.RemoteError
1180
1570
  ? auth.toSerializable()
1181
1571
  : undefined,
1182
- }, "Auth.ValidateRequest failed");
1572
+ }, "Auth.Requests.Validate failed");
1183
1573
  span.setStatus({
1184
1574
  code: tracing_ts_1.SpanStatusCode.ERROR,
1185
- message: "Auth.ValidateRequest failed",
1575
+ message: "Auth.Requests.Validate failed",
1186
1576
  });
1187
1577
  if (auth instanceof result_1.BaseError) {
1188
1578
  return (0, result_1.err)(auth);
@@ -1217,11 +1607,13 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1217
1607
  }
1218
1608
  span.setAttribute("auth.caller.type", caller.type);
1219
1609
  if (caller.type === "user") {
1220
- span.setAttribute("user.id", caller.id);
1221
- span.setAttribute("user.origin", caller.origin);
1610
+ span.setAttribute("user.id", caller.userId);
1611
+ span.setAttribute("user.identity.provider", caller.identity.provider);
1612
+ span.setAttribute("user.identity.subject", caller.identity.subject);
1222
1613
  }
1223
1614
  if (caller.type === "service") {
1224
- span.setAttribute("service.id", caller.id);
1615
+ const { id } = caller;
1616
+ span.setAttribute("service.id", id);
1225
1617
  }
1226
1618
  if (caller.type === "device") {
1227
1619
  span.setAttribute("device.id", caller.deviceId);
@@ -1286,25 +1678,61 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1286
1678
  return (0, result_1.ok)(encoded);
1287
1679
  };
1288
1680
  const result = await execute();
1681
+ if ((0, result_1.isErr)(result)) {
1682
+ result.error.withTraceId(activeTraceId(span) ?? incomingTraceId);
1683
+ }
1289
1684
  span.end();
1290
1685
  return result;
1291
1686
  });
1292
- }, _Trellis_respondWithError = function _Trellis_respondWithError(msg, error) {
1687
+ }, _Trellis_respondWithPayload = function _Trellis_respondWithPayload(msg, payload, options, context) {
1688
+ const responseBytes = payloadByteLength(payload);
1689
+ try {
1690
+ msg.respond(payload, options);
1691
+ return (0, result_1.ok)(undefined);
1692
+ }
1693
+ catch (cause) {
1694
+ const error = new index_ts_1.UnexpectedError({
1695
+ cause,
1696
+ context: {
1697
+ method: context.method,
1698
+ responseKind: context.responseKind,
1699
+ subject: msg.subject,
1700
+ reply: msg.reply,
1701
+ responseBytes,
1702
+ causeMessage: causeMessage(cause),
1703
+ },
1704
+ });
1705
+ __classPrivateFieldGet(this, _Trellis_log, "f").error({
1706
+ method: context.method,
1707
+ responseKind: context.responseKind,
1708
+ subject: msg.subject,
1709
+ reply: msg.reply,
1710
+ responseBytes,
1711
+ cause: causeLogData(cause),
1712
+ }, "Failed to send RPC response");
1713
+ return (0, result_1.err)(error);
1714
+ }
1715
+ }, _Trellis_respondWithError = function _Trellis_respondWithError(msg, error, context = {}) {
1293
1716
  const trellisError = error instanceof result_1.BaseError &&
1294
1717
  !(error instanceof RemoteError_ts_1.RemoteError)
1295
1718
  ? error
1296
1719
  : new index_ts_1.UnexpectedError({ cause: error });
1297
- __classPrivateFieldGet(this, _Trellis_log, "f").error({ error: trellisError.toSerializable() }, "RPC error");
1720
+ __classPrivateFieldGet(this, _Trellis_log, "f").error({
1721
+ method: context.method,
1722
+ subject: msg.subject,
1723
+ responseBytes: context.responseBytes,
1724
+ error: trellisError.toSerializable(),
1725
+ }, "RPC error");
1298
1726
  const errorData = trellisError.toSerializable();
1299
1727
  const hdrs = (0, nats_core_1.headers)();
1300
1728
  hdrs.set("status", "error");
1301
1729
  const serialized = result_1.Result.try(() => JSON.stringify(errorData));
1302
1730
  if (serialized.isErr()) {
1303
1731
  __classPrivateFieldGet(this, _Trellis_log, "f").error({ error: serialized.error }, "Failed to serialize error response");
1304
- msg.respond('{"type":"UnexpectedError","message":"Failed to serialize error"}', { headers: hdrs });
1732
+ __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithPayload).call(this, msg, '{"type":"UnexpectedError","message":"Failed to serialize error"}', { headers: hdrs }, { method: context.method, responseKind: "error" });
1305
1733
  return;
1306
1734
  }
1307
- msg.respond(serialized.take(), { headers: hdrs });
1735
+ __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithPayload).call(this, msg, serialized.take(), { headers: hdrs }, { method: context.method, responseKind: "error" });
1308
1736
  }, _Trellis_startEphemeralEvent = function _Trellis_startEphemeralEvent(event, ctx, subject, fn, signal) {
1309
1737
  const sub = this.nats.subscribe(subject);
1310
1738
  if (signal) {
@@ -1372,13 +1800,17 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1372
1800
  return `_${out}`;
1373
1801
  }
1374
1802
  return out;
1803
+ }, _Trellis_currentIat = function _Trellis_currentIat() {
1804
+ return this.auth.currentIat?.() ?? Math.floor(Date.now() / 1000);
1375
1805
  }, _Trellis_createProof = async function _Trellis_createProof(subject, payload) {
1376
1806
  const payloadBytes = new TextEncoder().encode(payload);
1377
1807
  const payloadHash = await sha256(payloadBytes);
1378
- const input = buildProofInput(this.auth.sessionKey, subject, payloadHash);
1808
+ const iat = __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_currentIat).call(this);
1809
+ const requestId = (0, ulid_1.ulid)();
1810
+ const input = buildProofInput(this.auth.sessionKey, subject, payloadHash, iat, requestId);
1379
1811
  const digest = await sha256(input);
1380
1812
  const sigBytes = await this.auth.sign(digest);
1381
- return base64urlEncode(sigBytes);
1813
+ return { proof: base64urlEncode(sigBytes), iat, requestId };
1382
1814
  }, _Trellis_requestMessageWithRetry = async function _Trellis_requestMessageWithRetry(args) {
1383
1815
  for (let retry = 0; retry <= __classPrivateFieldGet(this, _Trellis_noResponderMaxRetries, "f"); retry++) {
1384
1816
  const result = await result_1.AsyncResult.try(() => this.nats.request(args.subject, args.payload, {
@@ -1414,39 +1846,71 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1414
1846
  }));
1415
1847
  }, _Trellis_requestJson = function _Trellis_requestJson(subject, body) {
1416
1848
  return result_1.AsyncResult.from((async () => {
1417
- const payload = JSON.stringify(body);
1418
- const proof = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_createProof).call(this, subject, payload);
1419
- const headers = (0, nats_core_1.headers)();
1420
- headers.set("session-key", this.auth.sessionKey);
1421
- headers.set("proof", proof);
1422
- const response = (await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_requestMessageWithRetry).call(this, {
1423
- subject,
1424
- payload,
1425
- headers,
1426
- timeout: this.timeout,
1427
- })).take();
1428
- if ((0, result_1.isErr)(response)) {
1429
- return response;
1430
- }
1431
- const json = safeJson(response).take();
1432
- if ((0, result_1.isErr)(json)) {
1433
- return (0, result_1.err)(createTransportError({
1434
- code: "trellis.request.invalid_response",
1435
- message: "Trellis returned an invalid response.",
1436
- hint: "Retry the request. If it keeps happening, reconnect to Trellis and try again.",
1437
- cause: json.error.cause,
1438
- context: { subject },
1439
- }));
1440
- }
1441
- return (0, result_1.ok)(json);
1849
+ const span = (0, tracing_ts_1.startClientSpan)(subject, subject);
1850
+ return await (0, tracing_ts_1.withSpanAsync)(span, async () => {
1851
+ try {
1852
+ const payload = JSON.stringify(body);
1853
+ const authHeaders = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_createProof).call(this, subject, payload);
1854
+ const headers = (0, nats_core_1.headers)();
1855
+ headers.set("session-key", this.auth.sessionKey);
1856
+ headers.set("proof", authHeaders.proof);
1857
+ headers.set("iat", String(authHeaders.iat));
1858
+ headers.set("request-id", authHeaders.requestId);
1859
+ (0, tracing_ts_1.injectTraceContext)((0, tracing_ts_1.createNatsHeaderCarrier)(headers), span);
1860
+ const response = (await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_requestMessageWithRetry).call(this, {
1861
+ subject,
1862
+ payload,
1863
+ headers,
1864
+ timeout: this.timeout,
1865
+ })).take();
1866
+ if ((0, result_1.isErr)(response)) {
1867
+ span.setStatus({
1868
+ code: tracing_ts_1.SpanStatusCode.ERROR,
1869
+ message: response.error.message,
1870
+ });
1871
+ return response;
1872
+ }
1873
+ const json = safeJson(response).take();
1874
+ if ((0, result_1.isErr)(json)) {
1875
+ const error = createTransportError({
1876
+ code: "trellis.request.invalid_response",
1877
+ message: "Trellis returned an invalid response.",
1878
+ hint: "Retry the request. If it keeps happening, reconnect to Trellis and try again.",
1879
+ cause: json.error.cause,
1880
+ context: { subject },
1881
+ });
1882
+ span.setStatus({
1883
+ code: tracing_ts_1.SpanStatusCode.ERROR,
1884
+ message: error.message,
1885
+ });
1886
+ return (0, result_1.err)(error);
1887
+ }
1888
+ span.setStatus({ code: tracing_ts_1.SpanStatusCode.OK });
1889
+ return (0, result_1.ok)(json);
1890
+ }
1891
+ catch (cause) {
1892
+ const error = new index_ts_1.UnexpectedError({ cause });
1893
+ span.setStatus({
1894
+ code: tracing_ts_1.SpanStatusCode.ERROR,
1895
+ message: error.message,
1896
+ });
1897
+ span.recordException(error);
1898
+ return (0, result_1.err)(error);
1899
+ }
1900
+ finally {
1901
+ span.end();
1902
+ }
1903
+ });
1442
1904
  })());
1443
1905
  }, _Trellis_watchJson = function _Trellis_watchJson(subject, body) {
1444
1906
  return result_1.AsyncResult.from((async () => {
1445
1907
  const payload = JSON.stringify(body);
1446
- const proof = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_createProof).call(this, subject, payload);
1908
+ const authHeaders = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_createProof).call(this, subject, payload);
1447
1909
  const headers = (0, nats_core_1.headers)();
1448
1910
  headers.set("session-key", this.auth.sessionKey);
1449
- headers.set("proof", proof);
1911
+ headers.set("proof", authHeaders.proof);
1912
+ headers.set("iat", String(authHeaders.iat));
1913
+ headers.set("request-id", authHeaders.requestId);
1450
1914
  const inbox = (0, nats_core_1.createInbox)(`_INBOX.${this.auth.sessionKey.slice(0, 16)}`);
1451
1915
  const sub = this.nats.subscribe(inbox);
1452
1916
  try {