@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
package/esm/trellis.js CHANGED
@@ -9,7 +9,7 @@ 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 _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;
12
+ 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;
13
13
  import { jetstream, jetstreamManager, } from "@nats-io/jetstream";
14
14
  import { createInbox, headers as natsHeaders, } from "@nats-io/nats-core";
15
15
  import { CONTRACT_JOBS_METADATA, CONTRACT_KV_METADATA, CONTRACT_STATE_METADATA, } from "./contract_support/mod.js";
@@ -140,16 +140,22 @@ export async function sha256(data) {
140
140
  const digest = await crypto.subtle.digest("SHA-256", toArrayBuffer(data));
141
141
  return new Uint8Array(digest);
142
142
  }
143
- export function buildProofInput(sessionKey, subject, payloadHash) {
143
+ export function buildProofInput(sessionKey, subject, payloadHash, iat, requestId) {
144
144
  const enc = new TextEncoder();
145
145
  const sessionKeyBytes = enc.encode(sessionKey);
146
146
  const subjectBytes = enc.encode(subject);
147
+ const iatBytes = enc.encode(String(iat));
148
+ const requestIdBytes = enc.encode(requestId);
147
149
  const buf = new Uint8Array(4 +
148
150
  sessionKeyBytes.length +
149
151
  4 +
150
152
  subjectBytes.length +
151
153
  4 +
152
- payloadHash.length);
154
+ payloadHash.length +
155
+ 4 +
156
+ iatBytes.length +
157
+ 4 +
158
+ requestIdBytes.length);
153
159
  const view = new DataView(buf.buffer);
154
160
  let offset = 0;
155
161
  view.setUint32(offset, sessionKeyBytes.length);
@@ -163,6 +169,14 @@ export function buildProofInput(sessionKey, subject, payloadHash) {
163
169
  view.setUint32(offset, payloadHash.length);
164
170
  offset += 4;
165
171
  buf.set(payloadHash, offset);
172
+ offset += payloadHash.length;
173
+ view.setUint32(offset, iatBytes.length);
174
+ offset += 4;
175
+ buf.set(iatBytes, offset);
176
+ offset += iatBytes.length;
177
+ view.setUint32(offset, requestIdBytes.length);
178
+ offset += 4;
179
+ buf.set(requestIdBytes, offset);
166
180
  return buf;
167
181
  }
168
182
  /**
@@ -176,6 +190,13 @@ export function isOperationDeferred(value) {
176
190
  export function isResultLike(value) {
177
191
  return value instanceof Result;
178
192
  }
193
+ const DurableOperationSignalSchema = Type.Object({
194
+ operationId: Type.String(),
195
+ sequence: Type.Number(),
196
+ signal: Type.String(),
197
+ input: Type.Optional(Type.Any()),
198
+ acceptedAt: Type.String(),
199
+ });
179
200
  const DurableOperationSnapshotSchema = Type.Object({
180
201
  id: Type.String(),
181
202
  service: Type.String(),
@@ -206,6 +227,8 @@ const DurableOperationSnapshotSchema = Type.Object({
206
227
  export const DurableOperationRecordSchema = Type.Object({
207
228
  ownerSessionKey: Type.String(),
208
229
  sequence: Type.Number(),
230
+ signalSequence: Type.Optional(Type.Number()),
231
+ signals: Type.Optional(Type.Array(DurableOperationSignalSchema)),
209
232
  snapshot: DurableOperationSnapshotSchema,
210
233
  });
211
234
  export function buildRuntimeOperationSnapshot(runtime, state, patch) {
@@ -462,12 +485,44 @@ const DEFAULT_NO_RESPONDER_MAX_RETRIES = 2;
462
485
  const DEFAULT_NO_RESPONDER_RETRY_MS = 200;
463
486
  const DEFAULT_AUTH_VALIDATE_SESSION_RETRY_ATTEMPTS = 3;
464
487
  const DEFAULT_AUTH_VALIDATE_SESSION_RETRY_MS = 25;
488
+ function activeTraceId(span) {
489
+ const traceId = span.spanContext().traceId;
490
+ return traceId === "00000000000000000000000000000000" ? undefined : traceId;
491
+ }
492
+ function traceIdFromTraceparent(traceparent) {
493
+ const [version, traceId, parentId, flags, extra] = traceparent?.split("-") ??
494
+ [];
495
+ if (extra !== undefined ||
496
+ !/^[0-9a-f]{2}$/u.test(version ?? "") ||
497
+ version === "ff" ||
498
+ !/^[0-9a-f]{32}$/u.test(traceId ?? "") ||
499
+ traceId === "00000000000000000000000000000000" ||
500
+ !/^[0-9a-f]{16}$/u.test(parentId ?? "") ||
501
+ parentId === "0000000000000000" ||
502
+ !/^[0-9a-f]{2}$/u.test(flags ?? "")) {
503
+ return undefined;
504
+ }
505
+ return traceId;
506
+ }
465
507
  const EMPTY_TRELLIS_API = {
466
508
  rpc: {},
467
509
  operations: {},
468
510
  events: {},
511
+ feeds: {},
469
512
  subjects: {},
470
513
  };
514
+ function isBrowserAuthRequiredError(error) {
515
+ const isAuthRequiredReason = (reason) => reason === "session_not_found" || reason === "reauth_required";
516
+ if (error instanceof AuthError) {
517
+ return isAuthRequiredReason(error.reason);
518
+ }
519
+ if (error instanceof RemoteError &&
520
+ error.remoteError.type === "AuthError") {
521
+ const reason = Reflect.get(error.remoteError, "reason");
522
+ return isAuthRequiredReason(reason);
523
+ }
524
+ return false;
525
+ }
471
526
  function isTransientAuthValidateSessionError(error) {
472
527
  if (error instanceof AuthError) {
473
528
  return error.reason === "session_not_found";
@@ -475,7 +530,7 @@ function isTransientAuthValidateSessionError(error) {
475
530
  if (error instanceof RemoteError &&
476
531
  error.remoteError.type === "AuthError") {
477
532
  const reason = Reflect.get(error.remoteError, "reason");
478
- return typeof reason === "string" && reason === "session_not_found";
533
+ return reason === "session_not_found";
479
534
  }
480
535
  return false;
481
536
  }
@@ -487,6 +542,20 @@ function isRuntimeRpcErrorDesc(value) {
487
542
  typeof Reflect.get(value, "type") === "string" &&
488
543
  typeof Reflect.get(value, "fromSerializable") === "function";
489
544
  }
545
+ const payloadSizeEncoder = new TextEncoder();
546
+ function payloadByteLength(payload) {
547
+ return typeof payload === "string"
548
+ ? payloadSizeEncoder.encode(payload).byteLength
549
+ : payload.byteLength;
550
+ }
551
+ function causeMessage(cause) {
552
+ return cause instanceof Error ? cause.message : String(cause);
553
+ }
554
+ function causeLogData(cause) {
555
+ return cause instanceof Error
556
+ ? { message: cause.message, stack: cause.stack, name: cause.name }
557
+ : cause;
558
+ }
490
559
  function reconstructDeclaredRpcError(errorNames, runtimeErrors, data, json) {
491
560
  if (!isDeclaredRpcError(errorNames, data.type)) {
492
561
  return null;
@@ -585,7 +654,6 @@ export class Trellis {
585
654
  _Trellis_hasExplicitApi.set(this, void 0);
586
655
  _Trellis_noResponderMaxRetries.set(this, void 0);
587
656
  _Trellis_noResponderRetryMs.set(this, void 0);
588
- _Trellis_authBypassMethods.set(this, void 0);
589
657
  _Trellis_onSessionNotFound.set(this, void 0);
590
658
  _Trellis_operationStore.set(this, void 0);
591
659
  const api = opts?.api;
@@ -602,7 +670,6 @@ export class Trellis {
602
670
  DEFAULT_NO_RESPONDER_MAX_RETRIES, "f");
603
671
  __classPrivateFieldSet(this, _Trellis_noResponderRetryMs, opts?.noResponderRetry?.baseDelayMs ??
604
672
  DEFAULT_NO_RESPONDER_RETRY_MS, "f");
605
- __classPrivateFieldSet(this, _Trellis_authBypassMethods, new Set(opts?.authBypassMethods ?? []), "f");
606
673
  __classPrivateFieldSet(this, _Trellis_onSessionNotFound, opts?.onSessionNotFound, "f");
607
674
  this.connection = opts?.connection ??
608
675
  new TrellisConnection({ kind: "client" });
@@ -646,6 +713,8 @@ export class Trellis {
646
713
  const record = {
647
714
  ownerSessionKey: runtime.ownerSessionKey,
648
715
  sequence: runtime.sequence,
716
+ signalSequence: runtime.signalSequence,
717
+ signals: runtime.signals,
649
718
  snapshot: runtime.snapshot,
650
719
  };
651
720
  await store.put(runtime.id, record);
@@ -661,6 +730,18 @@ export class Trellis {
661
730
  }
662
731
  return __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_requestBuiltRpcUnknown).call(this, method, input, ctx, opts);
663
732
  }
733
+ feed(feed) {
734
+ const descriptor = this.api.feeds?.[feed];
735
+ if (!descriptor) {
736
+ throw __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_unknownApiError).call(this, "feed", feed.toString());
737
+ }
738
+ return {
739
+ input: (input) => ({
740
+ subscribe: (opts) => __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_subscribeFeed).call(this, feed.toString(), descriptor, input, opts),
741
+ }),
742
+ handle: (handler) => __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_handleFeed).call(this, feed.toString(), descriptor, handler),
743
+ };
744
+ }
664
745
  operation(operation) {
665
746
  const descriptor = this.api["operations"]?.[operation];
666
747
  if (!descriptor) {
@@ -716,20 +797,24 @@ export class Trellis {
716
797
  logger.error({ err: subject.error }, "Failed to template event.");
717
798
  return subject;
718
799
  }
800
+ const header = {
801
+ id: ulid(),
802
+ time: new Date().toISOString(),
803
+ };
719
804
  const payload = {
720
805
  ...data,
721
- header: {
722
- id: ulid(),
723
- time: new Date().toISOString(),
724
- },
806
+ header,
725
807
  };
726
808
  const msg = encodeSchema(ctx.event, payload).take();
727
809
  if (isErr(msg)) {
728
810
  logger.error({ err: msg.error }, "Failed to encode event.");
729
811
  return err(new UnexpectedError({ cause: msg.error }));
730
812
  }
813
+ const headers = natsHeaders();
814
+ headers.set("Nats-Msg-Id", header.id);
815
+ injectTraceContext(createNatsHeaderCarrier(headers));
731
816
  logger.trace({ subject }, `Publishing ${event.toString()} event.`);
732
- await this.js.publish(subject, msg);
817
+ await this.js.publish(subject, msg, { headers });
733
818
  return ok(undefined);
734
819
  }
735
820
  catch (cause) {
@@ -825,10 +910,10 @@ export class Trellis {
825
910
  }
826
911
  requestAuthValidate(input) {
827
912
  const request = this.request.bind(this);
828
- return request("Auth.ValidateRequest", input);
913
+ return request("Auth.Requests.Validate", input);
829
914
  }
830
915
  }
831
- _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) {
916
+ _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) {
832
917
  const stores = (state ?? {});
833
918
  const facade = Object.fromEntries(Object.entries(stores).map(([store, descriptor]) => {
834
919
  if (descriptor.kind === "value") {
@@ -920,10 +1005,12 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
920
1005
  }
921
1006
  const span = startClientSpan(method, subject);
922
1007
  const attempt = async () => {
923
- const proof = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_createProof).call(this, subject, msg);
1008
+ const authHeaders = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_createProof).call(this, subject, msg);
924
1009
  const headers = natsHeaders();
925
1010
  headers.set("session-key", this.auth.sessionKey);
926
- headers.set("proof", proof);
1011
+ headers.set("proof", authHeaders.proof);
1012
+ headers.set("iat", String(authHeaders.iat));
1013
+ headers.set("request-id", authHeaders.requestId);
927
1014
  injectTraceContext(createNatsHeaderCarrier(headers), span);
928
1015
  const msgResult = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_requestMessageWithRetry).call(this, {
929
1016
  method,
@@ -968,11 +1055,11 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
968
1055
  : undefined;
969
1056
  const reconstructed = reconstructDeclaredRpcError(declaredErrorTypes, runtimeErrors, errorData, json);
970
1057
  if (reconstructed) {
971
- await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_handleSessionNotFound).call(this, reconstructed);
1058
+ await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_handleBrowserAuthRequired).call(this, reconstructed);
972
1059
  return err(reconstructed);
973
1060
  }
974
1061
  const remoteError = new RemoteError({ error: errorData });
975
- await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_handleSessionNotFound).call(this, remoteError);
1062
+ await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_handleBrowserAuthRequired).call(this, remoteError);
976
1063
  return err(remoteError);
977
1064
  }
978
1065
  const json = safeJson(response).take();
@@ -1023,11 +1110,284 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1023
1110
  }
1024
1111
  });
1025
1112
  })());
1026
- }, _Trellis_handleSessionNotFound = async function _Trellis_handleSessionNotFound(error) {
1027
- if (!__classPrivateFieldGet(this, _Trellis_onSessionNotFound, "f") || !isTransientAuthValidateSessionError(error)) {
1113
+ }, _Trellis_handleBrowserAuthRequired = async function _Trellis_handleBrowserAuthRequired(error) {
1114
+ if (!__classPrivateFieldGet(this, _Trellis_onSessionNotFound, "f") || !isBrowserAuthRequiredError(error)) {
1028
1115
  return;
1029
1116
  }
1030
1117
  await __classPrivateFieldGet(this, _Trellis_onSessionNotFound, "f").call(this);
1118
+ }, _Trellis_authenticateFeedRequest = async function _Trellis_authenticateFeedRequest(args) {
1119
+ const sessionKey = args.msg.headers?.get("session-key");
1120
+ const proof = args.msg.headers?.get("proof");
1121
+ const iatHeader = args.msg.headers?.get("iat");
1122
+ const requestId = args.msg.headers?.get("request-id");
1123
+ if (!sessionKey) {
1124
+ return err(new AuthError({ reason: "missing_session_key" }));
1125
+ }
1126
+ if (!proof)
1127
+ return err(new AuthError({ reason: "missing_proof" }));
1128
+ const iat = Number(iatHeader);
1129
+ if (!Number.isSafeInteger(iat) || !requestId) {
1130
+ return err(new AuthError({ reason: "invalid_signature" }));
1131
+ }
1132
+ const proofInput = buildProofInput(sessionKey, args.subject, args.payloadHash, iat, requestId);
1133
+ const digest = await sha256(proofInput);
1134
+ const verifyResult = await AsyncResult.try(async () => {
1135
+ const publicKeyRaw = base64urlDecode(sessionKey);
1136
+ const pub = await crypto.subtle.importKey("raw", toArrayBuffer(publicKeyRaw), { name: "Ed25519" }, true, ["verify"]);
1137
+ return crypto.subtle.verify({ name: "Ed25519" }, pub, toArrayBuffer(base64urlDecode(proof)), toArrayBuffer(digest));
1138
+ });
1139
+ if (!verifyResult.isOk() || verifyResult.take() !== true) {
1140
+ return err(new AuthError({ reason: "invalid_signature", context: { sessionKey } }));
1141
+ }
1142
+ const auth = await this.requestAuthValidate({
1143
+ sessionKey,
1144
+ proof,
1145
+ subject: args.subject,
1146
+ payloadHash: base64urlEncode(args.payloadHash),
1147
+ iat,
1148
+ requestId,
1149
+ capabilities: [...args.requiredCapabilities],
1150
+ }).take();
1151
+ if (isErr(auth))
1152
+ return err(auth.error);
1153
+ if (!auth.allowed) {
1154
+ return err(new AuthError({
1155
+ reason: "insufficient_permissions",
1156
+ context: {
1157
+ feed: args.feed,
1158
+ requiredCapabilities: args.requiredCapabilities,
1159
+ userCapabilities: auth.caller.capabilities,
1160
+ },
1161
+ }));
1162
+ }
1163
+ if (typeof args.msg.reply !== "string" ||
1164
+ !args.msg.reply.startsWith(`${auth.inboxPrefix}.`)) {
1165
+ return err(new AuthError({
1166
+ reason: "reply_subject_mismatch",
1167
+ context: { expected: auth.inboxPrefix, actual: args.msg.reply },
1168
+ }));
1169
+ }
1170
+ return ok(auth.caller);
1171
+ }, _Trellis_subscribeFeed = function _Trellis_subscribeFeed(feed, descriptor, input, opts) {
1172
+ return AsyncResult.from((async () => {
1173
+ const payload = encodeRuntimeSchema(descriptor.input, input).take();
1174
+ if (isErr(payload))
1175
+ return payload;
1176
+ const subject = this.template(descriptor.subject, input).take();
1177
+ if (isErr(subject))
1178
+ return subject;
1179
+ const authHeaders = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_createProof).call(this, subject, payload);
1180
+ const headers = natsHeaders();
1181
+ headers.set("session-key", this.auth.sessionKey);
1182
+ headers.set("proof", authHeaders.proof);
1183
+ headers.set("iat", String(authHeaders.iat));
1184
+ headers.set("request-id", authHeaders.requestId);
1185
+ injectTraceContext(createNatsHeaderCarrier(headers));
1186
+ const inbox = createInbox(`_INBOX.${this.auth.sessionKey.slice(0, 16)}`);
1187
+ const sub = this.nats.subscribe(inbox);
1188
+ const iterator = sub[Symbol.asyncIterator]();
1189
+ const abort = () => sub.unsubscribe();
1190
+ opts?.signal?.addEventListener("abort", abort, { once: true });
1191
+ try {
1192
+ this.nats.publish(subject, payload, { headers, reply: inbox });
1193
+ await this.nats.flush();
1194
+ }
1195
+ catch (cause) {
1196
+ opts?.signal?.removeEventListener("abort", abort);
1197
+ sub.unsubscribe();
1198
+ return err(createTransportError({
1199
+ code: "trellis.feed.subscribe_failed",
1200
+ message: "Trellis could not subscribe to the feed.",
1201
+ hint: "Retry the subscription. If it keeps failing, check Trellis runtime health.",
1202
+ cause,
1203
+ context: { feed, subject },
1204
+ }));
1205
+ }
1206
+ let timeoutId;
1207
+ let abortHandler;
1208
+ const handshakePromises = [
1209
+ iterator.next(),
1210
+ new Promise((resolve) => {
1211
+ timeoutId = setTimeout(() => resolve("timeout"), this.timeout);
1212
+ }),
1213
+ ];
1214
+ const signal = opts?.signal;
1215
+ if (signal) {
1216
+ handshakePromises.push(new Promise((resolve) => {
1217
+ abortHandler = () => resolve("aborted");
1218
+ signal.addEventListener("abort", abortHandler, { once: true });
1219
+ }));
1220
+ }
1221
+ const firstFrame = await Promise.race(handshakePromises);
1222
+ if (timeoutId !== undefined)
1223
+ clearTimeout(timeoutId);
1224
+ if (signal && abortHandler) {
1225
+ signal.removeEventListener("abort", abortHandler);
1226
+ }
1227
+ if (firstFrame === "timeout" || firstFrame === "aborted") {
1228
+ opts?.signal?.removeEventListener("abort", abort);
1229
+ sub.unsubscribe();
1230
+ return err(createTransportError({
1231
+ code: firstFrame === "timeout"
1232
+ ? "trellis.feed.subscribe_timeout"
1233
+ : "trellis.feed.subscribe_aborted",
1234
+ message: firstFrame === "timeout"
1235
+ ? "Trellis did not receive a feed acknowledgement."
1236
+ : "The feed subscription was aborted before Trellis acknowledged it.",
1237
+ hint: firstFrame === "timeout"
1238
+ ? "Check that the target service is running and has the current deployment digest, then retry."
1239
+ : "Retry the subscription if the feed is still needed.",
1240
+ context: { feed, subject },
1241
+ }));
1242
+ }
1243
+ if (firstFrame.done) {
1244
+ opts?.signal?.removeEventListener("abort", abort);
1245
+ sub.unsubscribe();
1246
+ return err(createTransportError({
1247
+ code: "trellis.feed.subscribe_closed",
1248
+ message: "Trellis closed the feed before acknowledging it.",
1249
+ hint: "Retry the subscription. If it keeps failing, check Trellis runtime health.",
1250
+ context: { feed, subject },
1251
+ }));
1252
+ }
1253
+ const firstMessage = firstFrame.value;
1254
+ if (firstMessage.headers?.get("status") === "error") {
1255
+ opts?.signal?.removeEventListener("abort", abort);
1256
+ sub.unsubscribe();
1257
+ return err(createTransportError({
1258
+ code: "trellis.feed.failed",
1259
+ message: "Trellis rejected the feed subscription.",
1260
+ hint: "Retry the subscription. If it keeps failing, check Trellis runtime health and permissions.",
1261
+ context: { feed, subject, frame: firstMessage.string() },
1262
+ }));
1263
+ }
1264
+ const firstEvent = firstMessage.headers?.get("feed-status") === "ready"
1265
+ ? undefined
1266
+ : firstMessage;
1267
+ const eventSchema = descriptor.event;
1268
+ return ok((async function* () {
1269
+ try {
1270
+ const parseFeedFrame = (msg) => {
1271
+ if (msg.headers?.get("status") === "error") {
1272
+ throw createTransportError({
1273
+ code: "trellis.feed.failed",
1274
+ message: "Trellis stopped the feed.",
1275
+ hint: "Retry the subscription. If it keeps failing, check Trellis runtime health.",
1276
+ context: { feed, subject, frame: msg.string() },
1277
+ });
1278
+ }
1279
+ const json = safeJson(msg).take();
1280
+ if (isErr(json))
1281
+ throw json.error;
1282
+ const parsed = parseRuntimeSchema(eventSchema, json).take();
1283
+ if (isErr(parsed))
1284
+ throw parsed.error;
1285
+ return parsed;
1286
+ };
1287
+ if (firstEvent)
1288
+ yield parseFeedFrame(firstEvent);
1289
+ while (true) {
1290
+ const next = await iterator.next();
1291
+ if (next.done)
1292
+ break;
1293
+ yield parseFeedFrame(next.value);
1294
+ }
1295
+ }
1296
+ finally {
1297
+ opts?.signal?.removeEventListener("abort", abort);
1298
+ sub.unsubscribe();
1299
+ }
1300
+ })());
1301
+ })());
1302
+ }, _Trellis_handleFeed = async function _Trellis_handleFeed(feed, descriptor, handler) {
1303
+ const subject = this.template(descriptor.subject, {}, true).take();
1304
+ if (isErr(subject))
1305
+ throw subject.error;
1306
+ let sub;
1307
+ try {
1308
+ sub = this.nats.subscribe(subject);
1309
+ await this.nats.flush();
1310
+ }
1311
+ catch (cause) {
1312
+ throw createTransportError({
1313
+ code: "trellis.feed.listen_failed",
1314
+ message: "Trellis could not listen for feed requests.",
1315
+ hint: "Check the service deployment digest and runtime permissions, then restart the service.",
1316
+ cause,
1317
+ context: { feed, subject },
1318
+ });
1319
+ }
1320
+ const task = AsyncResult.try(async () => {
1321
+ for await (const msg of sub) {
1322
+ void (async () => {
1323
+ try {
1324
+ const result = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_processFeedMessage).call(this, feed, descriptor, msg, handler);
1325
+ const value = result.take();
1326
+ if (isErr(value)) {
1327
+ __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithError).call(this, msg, value.error);
1328
+ }
1329
+ }
1330
+ catch (cause) {
1331
+ const error = cause instanceof BaseError
1332
+ ? cause
1333
+ : new UnexpectedError({ cause });
1334
+ __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithError).call(this, msg, error);
1335
+ }
1336
+ })();
1337
+ }
1338
+ });
1339
+ __classPrivateFieldGet(this, _Trellis_tasks, "f").add(`feed:${feed}`, task);
1340
+ }, _Trellis_processFeedMessage = async function _Trellis_processFeedMessage(feed, descriptor, msg, handler) {
1341
+ const json = safeJson(msg).take();
1342
+ if (isErr(json))
1343
+ return json;
1344
+ const parsed = parseRuntimeSchema(descriptor.input, json).take();
1345
+ if (isErr(parsed))
1346
+ return parsed;
1347
+ const caller = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_authenticateFeedRequest).call(this, {
1348
+ feed,
1349
+ subject: msg.subject,
1350
+ msg,
1351
+ payloadHash: await sha256(msg.data ?? new Uint8Array()),
1352
+ requiredCapabilities: descriptor.subscribeCapabilities,
1353
+ });
1354
+ const callerValue = caller.take();
1355
+ if (isErr(callerValue))
1356
+ return callerValue;
1357
+ if (!msg.reply) {
1358
+ return err(new UnexpectedError({
1359
+ context: { feed, reason: "missing_reply" },
1360
+ }));
1361
+ }
1362
+ const readyHeaders = natsHeaders();
1363
+ readyHeaders.set("feed-status", "ready");
1364
+ this.nats.publish(msg.reply, new Uint8Array(), { headers: readyHeaders });
1365
+ await this.nats.flush();
1366
+ const controller = new AbortController();
1367
+ try {
1368
+ await handler({
1369
+ input: parsed,
1370
+ caller: callerValue,
1371
+ signal: controller.signal,
1372
+ emit: (event) => AsyncResult.from((async () => {
1373
+ const payload = encodeRuntimeSchema(descriptor.event, event).take();
1374
+ if (isErr(payload))
1375
+ return payload;
1376
+ if (!msg.reply) {
1377
+ return err(new UnexpectedError({
1378
+ context: { feed, reason: "missing_reply" },
1379
+ }));
1380
+ }
1381
+ this.nats.publish(msg.reply, payload);
1382
+ await this.nats.flush();
1383
+ return ok(undefined);
1384
+ })()),
1385
+ });
1386
+ return ok(undefined);
1387
+ }
1388
+ finally {
1389
+ controller.abort();
1390
+ }
1031
1391
  }, _Trellis_handleRPC = function _Trellis_handleRPC(method, fn, subjectData = {}) {
1032
1392
  // Get API details
1033
1393
  const ctx = this.api["rpc"][method];
@@ -1043,10 +1403,31 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1043
1403
  const resultPromise = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_processRPCMessage).call(this, method, ctx, msg, fn, handlerTrellis);
1044
1404
  const result = resultPromise.take();
1045
1405
  if (isErr(result)) {
1046
- __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithError).call(this, msg, result.error);
1406
+ __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithError).call(this, msg, result.error, { method: String(method) });
1047
1407
  continue;
1048
1408
  }
1049
- msg.respond(result);
1409
+ const sent = __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithPayload).call(this, msg, result, undefined, {
1410
+ method: String(method),
1411
+ responseKind: "success",
1412
+ });
1413
+ if (sent.isErr()) {
1414
+ const responseBytes = payloadByteLength(result);
1415
+ const message = causeMessage(sent.error.cause);
1416
+ __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithError).call(this, msg, new TransportError({
1417
+ code: "trellis.rpc.response_send_failed",
1418
+ message: message.includes("max_payload")
1419
+ ? "Trellis RPC response exceeded NATS max_payload."
1420
+ : "Trellis could not send the RPC response.",
1421
+ hint: "Reduce the requested page size or use a narrower RPC that does not include large detail payloads.",
1422
+ cause: sent.error.cause,
1423
+ context: {
1424
+ method: String(method),
1425
+ subject: msg.subject,
1426
+ responseBytes,
1427
+ causeMessage: message,
1428
+ },
1429
+ }), { method: String(method), responseBytes });
1430
+ }
1050
1431
  }
1051
1432
  });
1052
1433
  }, _Trellis_processRPCMessage = async function _Trellis_processRPCMessage(method, ctx, msg, fn, handlerTrellis) {
@@ -1058,6 +1439,7 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1058
1439
  }));
1059
1440
  // Start a server span for this RPC handler
1060
1441
  const span = startServerSpan(method, msg.subject, parentContext);
1442
+ const incomingTraceId = traceIdFromTraceparent(msg.headers?.get("traceparent"));
1061
1443
  // Execute the handler within the span's context
1062
1444
  return withSpanAsync(span, async () => {
1063
1445
  const execute = async () => {
@@ -1081,7 +1463,7 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1081
1463
  let caller;
1082
1464
  const callerSessionKey = msg.headers?.get("session-key") ?? "";
1083
1465
  const authRequired = ctx.authRequired ?? true;
1084
- if (!authRequired || __classPrivateFieldGet(this, _Trellis_authBypassMethods, "f").has(method)) {
1466
+ if (!authRequired) {
1085
1467
  caller = {
1086
1468
  type: "service",
1087
1469
  id: "system",
@@ -1093,6 +1475,8 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1093
1475
  else {
1094
1476
  const sessionKey = msg.headers?.get("session-key");
1095
1477
  const proof = msg.headers?.get("proof");
1478
+ const iatHeader = msg.headers?.get("iat");
1479
+ const requestId = msg.headers?.get("request-id");
1096
1480
  if (!sessionKey) {
1097
1481
  __classPrivateFieldGet(this, _Trellis_log, "f").warn({ method }, "Missing session-key header");
1098
1482
  span.setStatus({
@@ -1109,10 +1493,14 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1109
1493
  });
1110
1494
  return err(new AuthError({ reason: "missing_proof" }));
1111
1495
  }
1496
+ const iat = Number(iatHeader);
1497
+ if (!Number.isSafeInteger(iat) || !requestId) {
1498
+ return err(new AuthError({ reason: "invalid_signature" }));
1499
+ }
1112
1500
  // Verify proof signature locally using the raw request bytes we received.
1113
1501
  const payloadBytes = msg.data ?? new Uint8Array();
1114
1502
  const payloadHash = await sha256(payloadBytes);
1115
- const proofInput = buildProofInput(sessionKey, msg.subject, payloadHash);
1503
+ const proofInput = buildProofInput(sessionKey, msg.subject, payloadHash, iat, requestId);
1116
1504
  const digest = await sha256(proofInput);
1117
1505
  const verifyResult = await AsyncResult.try(async () => {
1118
1506
  const publicKeyRaw = base64urlDecode(sessionKey);
@@ -1138,6 +1526,8 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1138
1526
  proof,
1139
1527
  subject: msg.subject,
1140
1528
  payloadHash: base64urlEncode(payloadHash),
1529
+ iat,
1530
+ requestId,
1141
1531
  capabilities: [...ctx.callerCapabilities],
1142
1532
  }).take();
1143
1533
  if (!isErr(authValue)) {
@@ -1165,10 +1555,10 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1165
1555
  remoteError: auth instanceof RemoteError
1166
1556
  ? auth.toSerializable()
1167
1557
  : undefined,
1168
- }, "Auth.ValidateRequest failed");
1558
+ }, "Auth.Requests.Validate failed");
1169
1559
  span.setStatus({
1170
1560
  code: SpanStatusCode.ERROR,
1171
- message: "Auth.ValidateRequest failed",
1561
+ message: "Auth.Requests.Validate failed",
1172
1562
  });
1173
1563
  if (auth instanceof BaseError) {
1174
1564
  return err(auth);
@@ -1203,11 +1593,13 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1203
1593
  }
1204
1594
  span.setAttribute("auth.caller.type", caller.type);
1205
1595
  if (caller.type === "user") {
1206
- span.setAttribute("user.id", caller.id);
1207
- span.setAttribute("user.origin", caller.origin);
1596
+ span.setAttribute("user.id", caller.userId);
1597
+ span.setAttribute("user.identity.provider", caller.identity.provider);
1598
+ span.setAttribute("user.identity.subject", caller.identity.subject);
1208
1599
  }
1209
1600
  if (caller.type === "service") {
1210
- span.setAttribute("service.id", caller.id);
1601
+ const { id } = caller;
1602
+ span.setAttribute("service.id", id);
1211
1603
  }
1212
1604
  if (caller.type === "device") {
1213
1605
  span.setAttribute("device.id", caller.deviceId);
@@ -1272,25 +1664,61 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1272
1664
  return ok(encoded);
1273
1665
  };
1274
1666
  const result = await execute();
1667
+ if (isErr(result)) {
1668
+ result.error.withTraceId(activeTraceId(span) ?? incomingTraceId);
1669
+ }
1275
1670
  span.end();
1276
1671
  return result;
1277
1672
  });
1278
- }, _Trellis_respondWithError = function _Trellis_respondWithError(msg, error) {
1673
+ }, _Trellis_respondWithPayload = function _Trellis_respondWithPayload(msg, payload, options, context) {
1674
+ const responseBytes = payloadByteLength(payload);
1675
+ try {
1676
+ msg.respond(payload, options);
1677
+ return ok(undefined);
1678
+ }
1679
+ catch (cause) {
1680
+ const error = new UnexpectedError({
1681
+ cause,
1682
+ context: {
1683
+ method: context.method,
1684
+ responseKind: context.responseKind,
1685
+ subject: msg.subject,
1686
+ reply: msg.reply,
1687
+ responseBytes,
1688
+ causeMessage: causeMessage(cause),
1689
+ },
1690
+ });
1691
+ __classPrivateFieldGet(this, _Trellis_log, "f").error({
1692
+ method: context.method,
1693
+ responseKind: context.responseKind,
1694
+ subject: msg.subject,
1695
+ reply: msg.reply,
1696
+ responseBytes,
1697
+ cause: causeLogData(cause),
1698
+ }, "Failed to send RPC response");
1699
+ return err(error);
1700
+ }
1701
+ }, _Trellis_respondWithError = function _Trellis_respondWithError(msg, error, context = {}) {
1279
1702
  const trellisError = error instanceof BaseError &&
1280
1703
  !(error instanceof RemoteError)
1281
1704
  ? error
1282
1705
  : new UnexpectedError({ cause: error });
1283
- __classPrivateFieldGet(this, _Trellis_log, "f").error({ error: trellisError.toSerializable() }, "RPC error");
1706
+ __classPrivateFieldGet(this, _Trellis_log, "f").error({
1707
+ method: context.method,
1708
+ subject: msg.subject,
1709
+ responseBytes: context.responseBytes,
1710
+ error: trellisError.toSerializable(),
1711
+ }, "RPC error");
1284
1712
  const errorData = trellisError.toSerializable();
1285
1713
  const hdrs = natsHeaders();
1286
1714
  hdrs.set("status", "error");
1287
1715
  const serialized = Result.try(() => JSON.stringify(errorData));
1288
1716
  if (serialized.isErr()) {
1289
1717
  __classPrivateFieldGet(this, _Trellis_log, "f").error({ error: serialized.error }, "Failed to serialize error response");
1290
- msg.respond('{"type":"UnexpectedError","message":"Failed to serialize error"}', { headers: hdrs });
1718
+ __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithPayload).call(this, msg, '{"type":"UnexpectedError","message":"Failed to serialize error"}', { headers: hdrs }, { method: context.method, responseKind: "error" });
1291
1719
  return;
1292
1720
  }
1293
- msg.respond(serialized.take(), { headers: hdrs });
1721
+ __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_respondWithPayload).call(this, msg, serialized.take(), { headers: hdrs }, { method: context.method, responseKind: "error" });
1294
1722
  }, _Trellis_startEphemeralEvent = function _Trellis_startEphemeralEvent(event, ctx, subject, fn, signal) {
1295
1723
  const sub = this.nats.subscribe(subject);
1296
1724
  if (signal) {
@@ -1358,13 +1786,17 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1358
1786
  return `_${out}`;
1359
1787
  }
1360
1788
  return out;
1789
+ }, _Trellis_currentIat = function _Trellis_currentIat() {
1790
+ return this.auth.currentIat?.() ?? Math.floor(Date.now() / 1000);
1361
1791
  }, _Trellis_createProof = async function _Trellis_createProof(subject, payload) {
1362
1792
  const payloadBytes = new TextEncoder().encode(payload);
1363
1793
  const payloadHash = await sha256(payloadBytes);
1364
- const input = buildProofInput(this.auth.sessionKey, subject, payloadHash);
1794
+ const iat = __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_currentIat).call(this);
1795
+ const requestId = ulid();
1796
+ const input = buildProofInput(this.auth.sessionKey, subject, payloadHash, iat, requestId);
1365
1797
  const digest = await sha256(input);
1366
1798
  const sigBytes = await this.auth.sign(digest);
1367
- return base64urlEncode(sigBytes);
1799
+ return { proof: base64urlEncode(sigBytes), iat, requestId };
1368
1800
  }, _Trellis_requestMessageWithRetry = async function _Trellis_requestMessageWithRetry(args) {
1369
1801
  for (let retry = 0; retry <= __classPrivateFieldGet(this, _Trellis_noResponderMaxRetries, "f"); retry++) {
1370
1802
  const result = await AsyncResult.try(() => this.nats.request(args.subject, args.payload, {
@@ -1400,39 +1832,71 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
1400
1832
  }));
1401
1833
  }, _Trellis_requestJson = function _Trellis_requestJson(subject, body) {
1402
1834
  return AsyncResult.from((async () => {
1403
- const payload = JSON.stringify(body);
1404
- const proof = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_createProof).call(this, subject, payload);
1405
- const headers = natsHeaders();
1406
- headers.set("session-key", this.auth.sessionKey);
1407
- headers.set("proof", proof);
1408
- const response = (await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_requestMessageWithRetry).call(this, {
1409
- subject,
1410
- payload,
1411
- headers,
1412
- timeout: this.timeout,
1413
- })).take();
1414
- if (isErr(response)) {
1415
- return response;
1416
- }
1417
- const json = safeJson(response).take();
1418
- if (isErr(json)) {
1419
- return err(createTransportError({
1420
- code: "trellis.request.invalid_response",
1421
- message: "Trellis returned an invalid response.",
1422
- hint: "Retry the request. If it keeps happening, reconnect to Trellis and try again.",
1423
- cause: json.error.cause,
1424
- context: { subject },
1425
- }));
1426
- }
1427
- return ok(json);
1835
+ const span = startClientSpan(subject, subject);
1836
+ return await withSpanAsync(span, async () => {
1837
+ try {
1838
+ const payload = JSON.stringify(body);
1839
+ const authHeaders = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_createProof).call(this, subject, payload);
1840
+ const headers = natsHeaders();
1841
+ headers.set("session-key", this.auth.sessionKey);
1842
+ headers.set("proof", authHeaders.proof);
1843
+ headers.set("iat", String(authHeaders.iat));
1844
+ headers.set("request-id", authHeaders.requestId);
1845
+ injectTraceContext(createNatsHeaderCarrier(headers), span);
1846
+ const response = (await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_requestMessageWithRetry).call(this, {
1847
+ subject,
1848
+ payload,
1849
+ headers,
1850
+ timeout: this.timeout,
1851
+ })).take();
1852
+ if (isErr(response)) {
1853
+ span.setStatus({
1854
+ code: SpanStatusCode.ERROR,
1855
+ message: response.error.message,
1856
+ });
1857
+ return response;
1858
+ }
1859
+ const json = safeJson(response).take();
1860
+ if (isErr(json)) {
1861
+ const error = createTransportError({
1862
+ code: "trellis.request.invalid_response",
1863
+ message: "Trellis returned an invalid response.",
1864
+ hint: "Retry the request. If it keeps happening, reconnect to Trellis and try again.",
1865
+ cause: json.error.cause,
1866
+ context: { subject },
1867
+ });
1868
+ span.setStatus({
1869
+ code: SpanStatusCode.ERROR,
1870
+ message: error.message,
1871
+ });
1872
+ return err(error);
1873
+ }
1874
+ span.setStatus({ code: SpanStatusCode.OK });
1875
+ return ok(json);
1876
+ }
1877
+ catch (cause) {
1878
+ const error = new UnexpectedError({ cause });
1879
+ span.setStatus({
1880
+ code: SpanStatusCode.ERROR,
1881
+ message: error.message,
1882
+ });
1883
+ span.recordException(error);
1884
+ return err(error);
1885
+ }
1886
+ finally {
1887
+ span.end();
1888
+ }
1889
+ });
1428
1890
  })());
1429
1891
  }, _Trellis_watchJson = function _Trellis_watchJson(subject, body) {
1430
1892
  return AsyncResult.from((async () => {
1431
1893
  const payload = JSON.stringify(body);
1432
- const proof = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_createProof).call(this, subject, payload);
1894
+ const authHeaders = await __classPrivateFieldGet(this, _Trellis_instances, "m", _Trellis_createProof).call(this, subject, payload);
1433
1895
  const headers = natsHeaders();
1434
1896
  headers.set("session-key", this.auth.sessionKey);
1435
- headers.set("proof", proof);
1897
+ headers.set("proof", authHeaders.proof);
1898
+ headers.set("iat", String(authHeaders.iat));
1899
+ headers.set("request-id", authHeaders.requestId);
1436
1900
  const inbox = createInbox(`_INBOX.${this.auth.sessionKey.slice(0, 16)}`);
1437
1901
  const sub = this.nats.subscribe(inbox);
1438
1902
  try {