@qlever-llc/trellis 0.6.1 → 0.7.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 (244) hide show
  1. package/README.md +6 -2
  2. package/esm/auth/device_activation.d.ts +194 -0
  3. package/esm/auth/device_activation.d.ts.map +1 -0
  4. package/esm/auth/{workload_activation.js → device_activation.js} +85 -60
  5. package/esm/auth/mod.d.ts +2 -2
  6. package/esm/auth/mod.d.ts.map +1 -1
  7. package/esm/auth/mod.js +2 -2
  8. package/esm/auth/protocol.d.ts +175 -72
  9. package/esm/auth/protocol.d.ts.map +1 -1
  10. package/esm/auth/protocol.js +126 -78
  11. package/esm/contracts/mod.d.ts +19 -3
  12. package/esm/contracts/mod.d.ts.map +1 -1
  13. package/esm/contracts/mod.js +28 -4
  14. package/esm/contracts/protocol.d.ts +34 -0
  15. package/esm/contracts/protocol.d.ts.map +1 -1
  16. package/esm/contracts/protocol.js +15 -0
  17. package/esm/server/deno.d.ts +1 -6
  18. package/esm/server/deno.d.ts.map +1 -1
  19. package/esm/server/deno.js +1 -16
  20. package/esm/server/mod.d.ts +3 -2
  21. package/esm/server/mod.d.ts.map +1 -1
  22. package/esm/server/mod.js +2 -2
  23. package/esm/server/node.d.ts +1 -6
  24. package/esm/server/node.d.ts.map +1 -1
  25. package/esm/server/node.js +1 -16
  26. package/esm/server/service.d.ts +32 -10
  27. package/esm/server/service.d.ts.map +1 -1
  28. package/esm/server/service.js +188 -41
  29. package/esm/server/transfer.d.ts +41 -0
  30. package/esm/server/transfer.d.ts.map +1 -0
  31. package/esm/server/transfer.js +418 -0
  32. package/esm/telemetry/init.d.ts +4 -0
  33. package/esm/telemetry/init.d.ts.map +1 -0
  34. package/esm/telemetry/init.js +7 -0
  35. package/esm/telemetry/mod.d.ts +1 -2
  36. package/esm/telemetry/mod.d.ts.map +1 -1
  37. package/esm/telemetry/mod.js +1 -2
  38. package/esm/telemetry/runtime.d.ts.map +1 -1
  39. package/esm/telemetry/runtime.js +9 -5
  40. package/esm/telemetry/trellis.d.ts +0 -1
  41. package/esm/telemetry/trellis.d.ts.map +1 -1
  42. package/esm/telemetry/trellis.js +0 -6
  43. package/esm/trellis/_sdk/auth/api.d.ts.map +1 -1
  44. package/esm/trellis/_sdk/auth/api.js +132 -110
  45. package/esm/trellis/_sdk/auth/contract.d.ts +1 -1
  46. package/esm/trellis/_sdk/auth/contract.d.ts.map +1 -1
  47. package/esm/trellis/_sdk/auth/contract.js +2 -2
  48. package/esm/trellis/_sdk/auth/schemas.d.ts +4212 -3069
  49. package/esm/trellis/_sdk/auth/schemas.d.ts.map +1 -1
  50. package/esm/trellis/_sdk/auth/schemas.js +144 -125
  51. package/esm/trellis/_sdk/auth/types.d.ts +417 -267
  52. package/esm/trellis/_sdk/auth/types.d.ts.map +1 -1
  53. package/esm/trellis/_sdk/auth/types.js +1 -1
  54. package/esm/trellis/_sdk/core/contract.d.ts +1 -1
  55. package/esm/trellis/_sdk/core/contract.d.ts.map +1 -1
  56. package/esm/trellis/_sdk/core/contract.js +2 -2
  57. package/esm/trellis/_sdk/core/schemas.d.ts +122 -0
  58. package/esm/trellis/_sdk/core/schemas.d.ts.map +1 -1
  59. package/esm/trellis/_sdk/core/schemas.js +4 -4
  60. package/esm/trellis/_sdk/core/types.d.ts +18 -1
  61. package/esm/trellis/_sdk/core/types.d.ts.map +1 -1
  62. package/esm/trellis/_sdk/core/types.js +1 -1
  63. package/esm/trellis/_sdk/state/_dnt.polyfills.d.ts +12 -0
  64. package/esm/trellis/_sdk/state/_dnt.polyfills.d.ts.map +1 -0
  65. package/esm/trellis/_sdk/state/_dnt.polyfills.js +15 -0
  66. package/esm/trellis/_sdk/state/api.d.ts +10 -0
  67. package/esm/trellis/_sdk/state/api.d.ts.map +1 -0
  68. package/esm/trellis/_sdk/state/api.js +71 -0
  69. package/esm/trellis/_sdk/state/contract.d.ts +8 -0
  70. package/esm/trellis/_sdk/state/contract.d.ts.map +1 -0
  71. package/esm/trellis/_sdk/state/contract.js +59 -0
  72. package/esm/trellis/_sdk/state/mod.d.ts +7 -0
  73. package/esm/trellis/_sdk/state/mod.d.ts.map +1 -0
  74. package/esm/trellis/_sdk/state/mod.js +5 -0
  75. package/esm/trellis/_sdk/state/package.json +3 -0
  76. package/esm/trellis/_sdk/state/schemas.d.ts +1437 -0
  77. package/esm/trellis/_sdk/state/schemas.d.ts.map +1 -0
  78. package/esm/trellis/_sdk/state/schemas.js +62 -0
  79. package/esm/trellis/_sdk/state/types.d.ts +206 -0
  80. package/esm/trellis/_sdk/state/types.d.ts.map +1 -0
  81. package/esm/trellis/_sdk/state/types.js +3 -0
  82. package/esm/trellis/client_connect.d.ts +53 -0
  83. package/esm/trellis/client_connect.d.ts.map +1 -0
  84. package/esm/trellis/client_connect.js +300 -0
  85. package/esm/trellis/contract.d.ts +1 -7
  86. package/esm/trellis/contract.d.ts.map +1 -1
  87. package/esm/trellis/contract.js +1 -12
  88. package/esm/trellis/device.d.ts +41 -0
  89. package/esm/trellis/device.d.ts.map +1 -0
  90. package/esm/trellis/device.js +209 -0
  91. package/esm/trellis/errors/AuthError.d.ts +1 -1
  92. package/esm/trellis/errors/AuthError.js +9 -9
  93. package/esm/trellis/errors/StoreError.d.ts +22 -0
  94. package/esm/trellis/errors/StoreError.d.ts.map +1 -0
  95. package/esm/trellis/errors/StoreError.js +41 -0
  96. package/esm/trellis/errors/TransferError.d.ts +22 -0
  97. package/esm/trellis/errors/TransferError.d.ts.map +1 -0
  98. package/esm/trellis/errors/TransferError.js +41 -0
  99. package/esm/trellis/errors/index.d.ts +8 -0
  100. package/esm/trellis/errors/index.d.ts.map +1 -1
  101. package/esm/trellis/errors/index.js +8 -0
  102. package/esm/trellis/index.d.ts +10 -4
  103. package/esm/trellis/index.d.ts.map +1 -1
  104. package/esm/trellis/index.js +6 -4
  105. package/esm/trellis/kv.d.ts +2 -0
  106. package/esm/trellis/kv.d.ts.map +1 -1
  107. package/esm/trellis/kv.js +6 -0
  108. package/esm/trellis/models/trellis/TrellisError.d.ts +15 -1
  109. package/esm/trellis/models/trellis/TrellisError.d.ts.map +1 -1
  110. package/esm/trellis/models/trellis/TrellisError.js +4 -0
  111. package/esm/trellis/runtime_transport.d.ts +12 -0
  112. package/esm/trellis/runtime_transport.d.ts.map +1 -0
  113. package/esm/trellis/runtime_transport.js +35 -0
  114. package/esm/trellis/sdk/state.d.ts +4 -0
  115. package/esm/trellis/sdk/state.d.ts.map +1 -0
  116. package/esm/trellis/sdk/state.js +3 -0
  117. package/esm/trellis/store.d.ts +51 -0
  118. package/esm/trellis/store.d.ts.map +1 -0
  119. package/esm/trellis/store.js +310 -0
  120. package/esm/trellis/tracing.js +1 -1
  121. package/esm/trellis/transfer.d.ts +118 -0
  122. package/esm/trellis/transfer.d.ts.map +1 -0
  123. package/esm/trellis/transfer.js +357 -0
  124. package/esm/trellis/trellis.d.ts +3 -0
  125. package/esm/trellis/trellis.d.ts.map +1 -1
  126. package/esm/trellis/trellis.js +48 -17
  127. package/package.json +7 -2
  128. package/script/auth/device_activation.d.ts +194 -0
  129. package/script/auth/device_activation.d.ts.map +1 -0
  130. package/script/auth/{workload_activation.js → device_activation.js} +99 -74
  131. package/script/auth/mod.d.ts +2 -2
  132. package/script/auth/mod.d.ts.map +1 -1
  133. package/script/auth/mod.js +84 -76
  134. package/script/auth/protocol.d.ts +175 -72
  135. package/script/auth/protocol.d.ts.map +1 -1
  136. package/script/auth/protocol.js +129 -81
  137. package/script/contracts/mod.d.ts +19 -3
  138. package/script/contracts/mod.d.ts.map +1 -1
  139. package/script/contracts/mod.js +30 -4
  140. package/script/contracts/protocol.d.ts +34 -0
  141. package/script/contracts/protocol.d.ts.map +1 -1
  142. package/script/contracts/protocol.js +16 -1
  143. package/script/telemetry/init.d.ts +4 -0
  144. package/script/telemetry/init.d.ts.map +1 -0
  145. package/script/telemetry/init.js +11 -0
  146. package/script/telemetry/mod.d.ts +1 -2
  147. package/script/telemetry/mod.d.ts.map +1 -1
  148. package/script/telemetry/mod.js +1 -4
  149. package/script/telemetry/runtime.d.ts.map +1 -1
  150. package/script/telemetry/runtime.js +9 -28
  151. package/script/telemetry/trellis.d.ts +0 -1
  152. package/script/telemetry/trellis.d.ts.map +1 -1
  153. package/script/telemetry/trellis.js +0 -7
  154. package/script/trellis/_sdk/auth/api.d.ts.map +1 -1
  155. package/script/trellis/_sdk/auth/api.js +132 -110
  156. package/script/trellis/_sdk/auth/contract.d.ts +1 -1
  157. package/script/trellis/_sdk/auth/contract.d.ts.map +1 -1
  158. package/script/trellis/_sdk/auth/contract.js +2 -2
  159. package/script/trellis/_sdk/auth/schemas.d.ts +4212 -3069
  160. package/script/trellis/_sdk/auth/schemas.d.ts.map +1 -1
  161. package/script/trellis/_sdk/auth/schemas.js +144 -125
  162. package/script/trellis/_sdk/auth/types.d.ts +417 -267
  163. package/script/trellis/_sdk/auth/types.d.ts.map +1 -1
  164. package/script/trellis/_sdk/auth/types.js +1 -1
  165. package/script/trellis/_sdk/core/contract.d.ts +1 -1
  166. package/script/trellis/_sdk/core/contract.d.ts.map +1 -1
  167. package/script/trellis/_sdk/core/contract.js +2 -2
  168. package/script/trellis/_sdk/core/schemas.d.ts +122 -0
  169. package/script/trellis/_sdk/core/schemas.d.ts.map +1 -1
  170. package/script/trellis/_sdk/core/schemas.js +4 -4
  171. package/script/trellis/_sdk/core/types.d.ts +18 -1
  172. package/script/trellis/_sdk/core/types.d.ts.map +1 -1
  173. package/script/trellis/_sdk/core/types.js +1 -1
  174. package/script/trellis/_sdk/state/_dnt.polyfills.d.ts +12 -0
  175. package/script/trellis/_sdk/state/_dnt.polyfills.d.ts.map +1 -0
  176. package/script/trellis/_sdk/state/_dnt.polyfills.js +16 -0
  177. package/script/trellis/_sdk/state/api.d.ts +10 -0
  178. package/script/trellis/_sdk/state/api.d.ts.map +1 -0
  179. package/script/trellis/_sdk/state/api.js +74 -0
  180. package/script/trellis/_sdk/state/contract.d.ts +8 -0
  181. package/script/trellis/_sdk/state/contract.d.ts.map +1 -0
  182. package/script/trellis/_sdk/state/contract.js +62 -0
  183. package/script/trellis/_sdk/state/mod.d.ts +7 -0
  184. package/script/trellis/_sdk/state/mod.d.ts.map +1 -0
  185. package/script/trellis/_sdk/state/mod.js +30 -0
  186. package/script/trellis/_sdk/state/package.json +3 -0
  187. package/script/trellis/_sdk/state/schemas.d.ts +1437 -0
  188. package/script/trellis/_sdk/state/schemas.d.ts.map +1 -0
  189. package/script/trellis/_sdk/state/schemas.js +65 -0
  190. package/script/trellis/_sdk/state/types.d.ts +206 -0
  191. package/script/trellis/_sdk/state/types.d.ts.map +1 -0
  192. package/script/trellis/_sdk/state/types.js +6 -0
  193. package/script/trellis/client_connect.d.ts +53 -0
  194. package/script/trellis/client_connect.d.ts.map +1 -0
  195. package/script/trellis/client_connect.js +304 -0
  196. package/script/trellis/contract.d.ts +1 -7
  197. package/script/trellis/contract.d.ts.map +1 -1
  198. package/script/trellis/contract.js +1 -12
  199. package/script/trellis/device.d.ts +41 -0
  200. package/script/trellis/device.d.ts.map +1 -0
  201. package/script/trellis/device.js +213 -0
  202. package/script/trellis/errors/AuthError.d.ts +1 -1
  203. package/script/trellis/errors/AuthError.js +9 -9
  204. package/script/trellis/errors/StoreError.d.ts +22 -0
  205. package/script/trellis/errors/StoreError.d.ts.map +1 -0
  206. package/script/trellis/errors/StoreError.js +48 -0
  207. package/script/trellis/errors/TransferError.d.ts +22 -0
  208. package/script/trellis/errors/TransferError.d.ts.map +1 -0
  209. package/script/trellis/errors/TransferError.js +48 -0
  210. package/script/trellis/errors/index.d.ts +8 -0
  211. package/script/trellis/errors/index.d.ts.map +1 -1
  212. package/script/trellis/errors/index.js +13 -1
  213. package/script/trellis/index.d.ts +10 -4
  214. package/script/trellis/index.d.ts.map +1 -1
  215. package/script/trellis/index.js +17 -6
  216. package/script/trellis/kv.d.ts +2 -0
  217. package/script/trellis/kv.d.ts.map +1 -1
  218. package/script/trellis/kv.js +6 -0
  219. package/script/trellis/models/trellis/TrellisError.d.ts +15 -1
  220. package/script/trellis/models/trellis/TrellisError.d.ts.map +1 -1
  221. package/script/trellis/models/trellis/TrellisError.js +4 -0
  222. package/script/trellis/runtime_transport.d.ts +12 -0
  223. package/script/trellis/runtime_transport.d.ts.map +1 -0
  224. package/script/trellis/runtime_transport.js +37 -0
  225. package/script/trellis/store.d.ts +51 -0
  226. package/script/trellis/store.d.ts.map +1 -0
  227. package/script/trellis/store.js +316 -0
  228. package/script/trellis/tracing.js +1 -1
  229. package/script/trellis/transfer.d.ts +118 -0
  230. package/script/trellis/transfer.d.ts.map +1 -0
  231. package/script/trellis/transfer.js +367 -0
  232. package/script/trellis/trellis.d.ts +3 -0
  233. package/script/trellis/trellis.d.ts.map +1 -1
  234. package/script/trellis/trellis.js +48 -17
  235. package/esm/auth/workload_activation.d.ts +0 -192
  236. package/esm/auth/workload_activation.d.ts.map +0 -1
  237. package/esm/trellis/workload.d.ts +0 -45
  238. package/esm/trellis/workload.d.ts.map +0 -1
  239. package/esm/trellis/workload.js +0 -144
  240. package/script/auth/workload_activation.d.ts +0 -192
  241. package/script/auth/workload_activation.d.ts.map +0 -1
  242. package/script/trellis/workload.d.ts +0 -45
  243. package/script/trellis/workload.d.ts.map +0 -1
  244. package/script/trellis/workload.js +0 -172
@@ -0,0 +1,357 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
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
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _BaseTransferHandle_nc, _BaseTransferHandle_auth, _BaseTransferHandle_timeoutMs, _UploadTransferHandle_grant, _DownloadTransferHandle_grant;
13
+ import { AsyncResult, isErr, Result } from "@qlever-llc/result";
14
+ import { createInbox, headers as natsHeaders } from "@nats-io/nats-core";
15
+ import Type from "typebox";
16
+ import { verifyProof } from "../auth/proof.js";
17
+ import { base64urlEncode, sha256 } from "../auth/utils.js";
18
+ import { TransferError } from "./errors/TransferError.js";
19
+ const TRANSFER_SEQUENCE_HEADER = "trellis-transfer-seq";
20
+ const TRANSFER_EOF_HEADER = "trellis-transfer-eof";
21
+ export const FileInfoSchema = Type.Object({
22
+ key: Type.String({ minLength: 1 }),
23
+ size: Type.Integer({ minimum: 0 }),
24
+ updatedAt: Type.String({ minLength: 1 }),
25
+ digest: Type.Optional(Type.String({ minLength: 1 })),
26
+ contentType: Type.Optional(Type.String({ minLength: 1 })),
27
+ metadata: Type.Record(Type.String({ minLength: 1 }), Type.String()),
28
+ }, { additionalProperties: false });
29
+ const TransferGrantBaseSchema = Type.Object({
30
+ type: Type.Literal("TransferGrant"),
31
+ service: Type.String({ minLength: 1 }),
32
+ sessionKey: Type.String({ minLength: 1 }),
33
+ transferId: Type.String({ minLength: 1 }),
34
+ subject: Type.String({ minLength: 1 }),
35
+ expiresAt: Type.String({ minLength: 1 }),
36
+ chunkBytes: Type.Integer({ minimum: 1 }),
37
+ }, { additionalProperties: false });
38
+ export const UploadTransferGrantSchema = Type.Intersect([
39
+ TransferGrantBaseSchema,
40
+ Type.Object({
41
+ kind: Type.Literal("upload"),
42
+ maxBytes: Type.Optional(Type.Integer({ minimum: 1 })),
43
+ contentType: Type.Optional(Type.String({ minLength: 1 })),
44
+ metadata: Type.Optional(Type.Record(Type.String({ minLength: 1 }), Type.String())),
45
+ }, { additionalProperties: false }),
46
+ ]);
47
+ export const DownloadTransferGrantSchema = Type.Intersect([
48
+ TransferGrantBaseSchema,
49
+ Type.Object({
50
+ kind: Type.Literal("download"),
51
+ info: FileInfoSchema,
52
+ }, { additionalProperties: false }),
53
+ ]);
54
+ export const TransferGrantSchema = Type.Union([
55
+ UploadTransferGrantSchema,
56
+ DownloadTransferGrantSchema,
57
+ ]);
58
+ async function createTransferProof(auth, subject, payload) {
59
+ const payloadHash = await sha256(payload);
60
+ const proofOk = await auth.sign(await sha256(buildTransferProofInput(auth.sessionKey, subject, payloadHash)));
61
+ return base64urlEncode(proofOk);
62
+ }
63
+ function buildTransferProofInput(sessionKey, subject, payloadHash) {
64
+ const enc = new TextEncoder();
65
+ const sessionKeyBytes = enc.encode(sessionKey);
66
+ const subjectBytes = enc.encode(subject);
67
+ const buf = new Uint8Array(4 + sessionKeyBytes.length + 4 + subjectBytes.length + 4 + payloadHash.length);
68
+ const view = new DataView(buf.buffer);
69
+ let offset = 0;
70
+ view.setUint32(offset, sessionKeyBytes.length);
71
+ offset += 4;
72
+ buf.set(sessionKeyBytes, offset);
73
+ offset += sessionKeyBytes.length;
74
+ view.setUint32(offset, subjectBytes.length);
75
+ offset += 4;
76
+ buf.set(subjectBytes, offset);
77
+ offset += subjectBytes.length;
78
+ view.setUint32(offset, payloadHash.length);
79
+ offset += 4;
80
+ buf.set(payloadHash, offset);
81
+ return buf;
82
+ }
83
+ function expired(expiresAt) {
84
+ return Date.now() >= Date.parse(expiresAt);
85
+ }
86
+ function asUint8Array(body) {
87
+ return body instanceof Uint8Array ? body : new Uint8Array(body);
88
+ }
89
+ function streamFromAsyncIterable(iterable) {
90
+ const iterator = iterable[Symbol.asyncIterator]();
91
+ return new ReadableStream({
92
+ async pull(controller) {
93
+ const next = await iterator.next();
94
+ if (next.done) {
95
+ controller.close();
96
+ return;
97
+ }
98
+ controller.enqueue(next.value);
99
+ },
100
+ async cancel(reason) {
101
+ await iterator.return?.(reason);
102
+ },
103
+ });
104
+ }
105
+ function streamFromBody(body) {
106
+ if (body instanceof Uint8Array || body instanceof ArrayBuffer) {
107
+ const bytes = asUint8Array(body);
108
+ return new ReadableStream({
109
+ start(controller) {
110
+ controller.enqueue(bytes);
111
+ controller.close();
112
+ },
113
+ });
114
+ }
115
+ return body instanceof ReadableStream ? body : streamFromAsyncIterable(body);
116
+ }
117
+ async function* chunkBody(body, chunkBytes) {
118
+ const reader = streamFromBody(body).getReader();
119
+ try {
120
+ while (true) {
121
+ const next = await reader.read();
122
+ if (next.done) {
123
+ return;
124
+ }
125
+ let offset = 0;
126
+ while (offset < next.value.length) {
127
+ const end = Math.min(offset + chunkBytes, next.value.length);
128
+ yield next.value.slice(offset, end);
129
+ offset = end;
130
+ }
131
+ }
132
+ }
133
+ finally {
134
+ reader.releaseLock();
135
+ }
136
+ }
137
+ function parseTransferAck(msg, operation) {
138
+ if (msg.headers?.get("status") === "error") {
139
+ return Result.err(deserializeTransferError(msg, operation));
140
+ }
141
+ try {
142
+ const value = JSON.parse(msg.string());
143
+ return Result.ok(value);
144
+ }
145
+ catch (cause) {
146
+ return Result.err(new TransferError({ operation, cause }));
147
+ }
148
+ }
149
+ function deserializeTransferError(msg, operation) {
150
+ try {
151
+ const value = JSON.parse(msg.string());
152
+ return new TransferError({
153
+ operation: value.operation ?? operation,
154
+ context: value.context,
155
+ cause: value.message ? new Error(value.message) : undefined,
156
+ });
157
+ }
158
+ catch (cause) {
159
+ return new TransferError({ operation, cause });
160
+ }
161
+ }
162
+ async function collectDownload(nc, inbox, timeoutMs) {
163
+ const sub = nc.subscribe(inbox);
164
+ const iterator = sub[Symbol.asyncIterator]();
165
+ const chunks = [];
166
+ let total = 0;
167
+ try {
168
+ while (true) {
169
+ const next = await new Promise((resolve, reject) => {
170
+ const timer = setTimeout(() => {
171
+ clearTimeout(timer);
172
+ reject(new TransferError({ operation: "get", context: { reason: "timeout" } }));
173
+ }, timeoutMs);
174
+ iterator.next().then((value) => {
175
+ clearTimeout(timer);
176
+ resolve(value);
177
+ }, (error) => {
178
+ clearTimeout(timer);
179
+ reject(error);
180
+ });
181
+ });
182
+ if (next.done) {
183
+ return Result.err(new TransferError({ operation: "get", context: { reason: "stream_closed" } }));
184
+ }
185
+ const msg = next.value;
186
+ if (msg.headers?.get("status") === "error") {
187
+ return Result.err(deserializeTransferError(msg, "get"));
188
+ }
189
+ if (msg.data.length > 0) {
190
+ chunks.push(msg.data);
191
+ total += msg.data.length;
192
+ }
193
+ if (msg.headers?.get(TRANSFER_EOF_HEADER) === "true") {
194
+ const merged = new Uint8Array(total);
195
+ let offset = 0;
196
+ for (const chunk of chunks) {
197
+ merged.set(chunk, offset);
198
+ offset += chunk.length;
199
+ }
200
+ return Result.ok(merged);
201
+ }
202
+ }
203
+ }
204
+ catch (cause) {
205
+ return Result.err(cause instanceof TransferError ? cause : new TransferError({ operation: "get", cause }));
206
+ }
207
+ finally {
208
+ sub.unsubscribe();
209
+ }
210
+ }
211
+ class BaseTransferHandle {
212
+ constructor(nc, auth, timeoutMs) {
213
+ _BaseTransferHandle_nc.set(this, void 0);
214
+ _BaseTransferHandle_auth.set(this, void 0);
215
+ _BaseTransferHandle_timeoutMs.set(this, void 0);
216
+ __classPrivateFieldSet(this, _BaseTransferHandle_nc, nc, "f");
217
+ __classPrivateFieldSet(this, _BaseTransferHandle_auth, auth, "f");
218
+ __classPrivateFieldSet(this, _BaseTransferHandle_timeoutMs, timeoutMs, "f");
219
+ }
220
+ get nc() {
221
+ return __classPrivateFieldGet(this, _BaseTransferHandle_nc, "f");
222
+ }
223
+ get auth() {
224
+ return __classPrivateFieldGet(this, _BaseTransferHandle_auth, "f");
225
+ }
226
+ get timeoutMs() {
227
+ return __classPrivateFieldGet(this, _BaseTransferHandle_timeoutMs, "f");
228
+ }
229
+ validateGrant(grant, operation) {
230
+ if (expired(grant.expiresAt)) {
231
+ return Result.err(new TransferError({ operation, context: { reason: "expired", transferId: grant.transferId } }));
232
+ }
233
+ if (grant.sessionKey !== __classPrivateFieldGet(this, _BaseTransferHandle_auth, "f").sessionKey) {
234
+ return Result.err(new TransferError({
235
+ operation,
236
+ context: {
237
+ reason: "session_mismatch",
238
+ expectedSessionKey: grant.sessionKey,
239
+ actualSessionKey: __classPrivateFieldGet(this, _BaseTransferHandle_auth, "f").sessionKey,
240
+ },
241
+ }));
242
+ }
243
+ return Result.ok(undefined);
244
+ }
245
+ async buildHeaders(subject, payload, seq, eof) {
246
+ const headers = natsHeaders();
247
+ headers.set("session-key", __classPrivateFieldGet(this, _BaseTransferHandle_auth, "f").sessionKey);
248
+ headers.set("proof", await createTransferProof(__classPrivateFieldGet(this, _BaseTransferHandle_auth, "f"), subject, payload));
249
+ if (seq !== undefined) {
250
+ headers.set(TRANSFER_SEQUENCE_HEADER, String(seq));
251
+ }
252
+ if (eof) {
253
+ headers.set(TRANSFER_EOF_HEADER, "true");
254
+ }
255
+ return headers;
256
+ }
257
+ }
258
+ _BaseTransferHandle_nc = new WeakMap(), _BaseTransferHandle_auth = new WeakMap(), _BaseTransferHandle_timeoutMs = new WeakMap();
259
+ export class UploadTransferHandle extends BaseTransferHandle {
260
+ constructor(nc, auth, timeoutMs, grant) {
261
+ super(nc, auth, timeoutMs);
262
+ _UploadTransferHandle_grant.set(this, void 0);
263
+ __classPrivateFieldSet(this, _UploadTransferHandle_grant, grant, "f");
264
+ }
265
+ async put(body) {
266
+ const valid = this.validateGrant(__classPrivateFieldGet(this, _UploadTransferHandle_grant, "f"), "put").take();
267
+ if (isErr(valid)) {
268
+ return Result.err(valid.error);
269
+ }
270
+ let sentBytes = 0;
271
+ let seq = 0;
272
+ let completed = null;
273
+ for await (const chunk of chunkBody(body, __classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").chunkBytes)) {
274
+ sentBytes += chunk.length;
275
+ if (__classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").maxBytes !== undefined && sentBytes > __classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").maxBytes) {
276
+ return Result.err(new TransferError({
277
+ operation: "put",
278
+ context: {
279
+ reason: "max_bytes_exceeded",
280
+ maxBytes: __classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").maxBytes,
281
+ attemptedBytes: sentBytes,
282
+ },
283
+ }));
284
+ }
285
+ const headers = await this.buildHeaders(__classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").subject, chunk, seq, false);
286
+ const response = await AsyncResult.try(() => this.nc.request(__classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").subject, chunk, { timeout: this.timeoutMs, headers })).take();
287
+ if (isErr(response)) {
288
+ return Result.err(new TransferError({ operation: "put", cause: response.error }));
289
+ }
290
+ const ack = parseTransferAck(response, "put").take();
291
+ if (isErr(ack)) {
292
+ return Result.err(ack.error);
293
+ }
294
+ if (ack.status === "complete") {
295
+ completed = ack.info;
296
+ }
297
+ seq += 1;
298
+ }
299
+ const finalHeaders = await this.buildHeaders(__classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").subject, new Uint8Array(), seq, true);
300
+ const finalResponse = await AsyncResult.try(() => this.nc.request(__classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").subject, new Uint8Array(), {
301
+ timeout: this.timeoutMs,
302
+ headers: finalHeaders,
303
+ })).take();
304
+ if (isErr(finalResponse)) {
305
+ return Result.err(new TransferError({ operation: "put", cause: finalResponse.error }));
306
+ }
307
+ const finalAck = parseTransferAck(finalResponse, "put").take();
308
+ if (isErr(finalAck)) {
309
+ return Result.err(finalAck.error);
310
+ }
311
+ if (finalAck.status !== "complete") {
312
+ return Result.err(new TransferError({ operation: "put", context: { reason: "missing_completion" } }));
313
+ }
314
+ return Result.ok(finalAck.info ?? completed);
315
+ }
316
+ }
317
+ _UploadTransferHandle_grant = new WeakMap();
318
+ export class DownloadTransferHandle extends BaseTransferHandle {
319
+ constructor(nc, auth, timeoutMs, grant) {
320
+ super(nc, auth, timeoutMs);
321
+ _DownloadTransferHandle_grant.set(this, void 0);
322
+ __classPrivateFieldSet(this, _DownloadTransferHandle_grant, grant, "f");
323
+ }
324
+ async getBytes() {
325
+ const valid = this.validateGrant(__classPrivateFieldGet(this, _DownloadTransferHandle_grant, "f"), "get").take();
326
+ if (isErr(valid)) {
327
+ return Result.err(valid.error);
328
+ }
329
+ const inbox = createInbox(`_INBOX.${this.auth.sessionKey.slice(0, 16)}`);
330
+ const payload = new Uint8Array();
331
+ const headers = await this.buildHeaders(__classPrivateFieldGet(this, _DownloadTransferHandle_grant, "f").subject, payload);
332
+ try {
333
+ this.nc.publish(__classPrivateFieldGet(this, _DownloadTransferHandle_grant, "f").subject, payload, { headers, reply: inbox });
334
+ await this.nc.flush();
335
+ }
336
+ catch (cause) {
337
+ return Result.err(new TransferError({ operation: "get", cause }));
338
+ }
339
+ return await collectDownload(this.nc, inbox, this.timeoutMs);
340
+ }
341
+ }
342
+ _DownloadTransferHandle_grant = new WeakMap();
343
+ export function createTransferHandle(nc, auth, timeoutMs, grant) {
344
+ return grant.kind === "upload"
345
+ ? new UploadTransferHandle(nc, auth, timeoutMs, grant)
346
+ : new DownloadTransferHandle(nc, auth, timeoutMs, grant);
347
+ }
348
+ export async function verifyTransferMessage(args) {
349
+ if (!args.proof || !args.sessionKey || args.sessionKey !== args.expectedSessionKey) {
350
+ return false;
351
+ }
352
+ return await verifyProof(args.expectedSessionKey, {
353
+ sessionKey: args.sessionKey,
354
+ subject: args.subject,
355
+ payloadHash: await sha256(args.payload),
356
+ }, args.proof);
357
+ }
@@ -11,6 +11,7 @@ import { RemoteError } from "./errors/RemoteError.js";
11
11
  import { type LoggerLike } from "./globals.js";
12
12
  import { TypedKV } from "./kv.js";
13
13
  import { OperationInvoker, type OperationRefData } from "./operations.js";
14
+ import { type DownloadTransferGrant, type DownloadTransferHandle, type UploadTransferGrant, type UploadTransferHandle } from "./transfer.js";
14
15
  export type AuthValidateRequestResponse = StaticDecode<typeof AuthValidateRequestResponseSchema>;
15
16
  export type AuthValidateRequestInput = StaticDecode<typeof AuthValidateRequestSchema>;
16
17
  export type SessionCaller = AuthValidateRequestResponse["caller"];
@@ -179,6 +180,8 @@ export declare class Trellis<TA extends AnyTrellisAPI = TrellisAPI, TMode extend
179
180
  * Returns the underlying NATS connection.
180
181
  */
181
182
  get natsConnection(): NatsConnection;
183
+ transfer(grant: UploadTransferGrant): UploadTransferHandle;
184
+ transfer(grant: DownloadTransferGrant): DownloadTransferHandle;
182
185
  operationStoreHandle(): Promise<TypedKV<typeof DurableOperationRecordSchema>>;
183
186
  loadOperationRecord(operationId: string): Promise<DurableOperationRecord | null>;
184
187
  saveOperationRecord(runtime: RuntimeOperationRecord): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"trellis.d.ts","sourceRoot":"","sources":["../../src/trellis/trellis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trellis.d.ts","sourceRoot":"","sources":["../../src/trellis/trellis.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ import { logger } from "./globals.js";
24
24
  import { TypedKV } from "./kv.js";
25
25
  import { TrellisErrorDataSchema } from "./models/trellis/TrellisError.js";
26
26
  import { OperationInvoker, } from "./operations.js";
27
+ import { createTransferHandle, } from "./transfer.js";
27
28
  import { TrellisTasks } from "./tasks.js";
28
29
  /**
29
30
  * Safely extract JSON from a NATS message.
@@ -168,12 +169,22 @@ export function isTerminalRuntimeOperationSnapshot(value) {
168
169
  const NATS_SUBJECT_TOKEN_FORBIDDEN = /[\u0000\s.*>~]/gu;
169
170
  const DEFAULT_NO_RESPONDER_MAX_RETRIES = 2;
170
171
  const DEFAULT_NO_RESPONDER_RETRY_MS = 200;
172
+ const DEFAULT_AUTH_VALIDATE_SESSION_RETRY_ATTEMPTS = 3;
173
+ const DEFAULT_AUTH_VALIDATE_SESSION_RETRY_MS = 25;
171
174
  const EMPTY_TRELLIS_API = {
172
175
  rpc: {},
173
176
  operations: {},
174
177
  events: {},
175
178
  subjects: {},
176
179
  };
180
+ function isTransientAuthValidateSessionError(error) {
181
+ return error instanceof RemoteError &&
182
+ error.remoteError.type === "AuthError" &&
183
+ error.remoteError.reason === "session_not_found";
184
+ }
185
+ async function sleep(ms) {
186
+ await new Promise((resolve) => setTimeout(resolve, ms));
187
+ }
177
188
  export class Trellis {
178
189
  constructor(name, // Must be unique for a service
179
190
  nats, auth, opts) {
@@ -250,6 +261,9 @@ export class Trellis {
250
261
  get natsConnection() {
251
262
  return this.nats;
252
263
  }
264
+ transfer(grant) {
265
+ return createTransferHandle(this.nats, this.auth, this.timeout, grant);
266
+ }
253
267
  async operationStoreHandle() {
254
268
  if (!__classPrivateFieldGet(this, _Trellis_operationStore, "f")) {
255
269
  const bucket = `trellis_operations_${this.name.replace(/[^A-Za-z0-9_-]/g, "_")}`;
@@ -666,28 +680,45 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
666
680
  context: { sessionKey },
667
681
  }));
668
682
  }
669
- const authResult = await this.requestAuthValidate({
670
- sessionKey,
671
- proof,
672
- subject: msg.subject,
673
- payloadHash: base64urlEncode(payloadHash),
674
- capabilities: ctx.callerCapabilities,
675
- });
676
- const auth = authResult.take();
677
- if (isErr(auth)) {
683
+ let auth;
684
+ for (let attempt = 0; attempt < DEFAULT_AUTH_VALIDATE_SESSION_RETRY_ATTEMPTS; attempt++) {
685
+ const authResult = await this.requestAuthValidate({
686
+ sessionKey,
687
+ proof,
688
+ subject: msg.subject,
689
+ payloadHash: base64urlEncode(payloadHash),
690
+ capabilities: ctx.callerCapabilities,
691
+ });
692
+ const authValue = authResult.take();
693
+ if (!isErr(authValue)) {
694
+ auth = authValue;
695
+ break;
696
+ }
697
+ const authError = authValue.error;
698
+ if (!isTransientAuthValidateSessionError(authError) ||
699
+ attempt === DEFAULT_AUTH_VALIDATE_SESSION_RETRY_ATTEMPTS - 1) {
700
+ auth = authError;
701
+ break;
702
+ }
703
+ await sleep(DEFAULT_AUTH_VALIDATE_SESSION_RETRY_MS * (attempt + 1));
704
+ }
705
+ if (!auth) {
706
+ return err(new UnexpectedError({ context: { reason: "missing_auth_validate_result" } }));
707
+ }
708
+ if (auth instanceof Error) {
678
709
  __classPrivateFieldGet(this, _Trellis_log, "f").warn({
679
710
  method,
680
- error: auth.error.message,
681
- errorType: auth.error.name,
682
- remoteError: auth.error instanceof RemoteError
683
- ? auth.error.toSerializable()
711
+ error: auth.message,
712
+ errorType: auth.name,
713
+ remoteError: auth instanceof RemoteError
714
+ ? auth.toSerializable()
684
715
  : undefined,
685
716
  }, "Auth.ValidateRequest failed");
686
717
  span.setStatus({
687
718
  code: SpanStatusCode.ERROR,
688
719
  message: "Auth.ValidateRequest failed",
689
720
  });
690
- return err(auth.error);
721
+ return err(auth);
691
722
  }
692
723
  if (!auth.allowed) {
693
724
  span.setStatus({
@@ -723,9 +754,9 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
723
754
  if (caller.type === "service") {
724
755
  span.setAttribute("service.id", caller.id);
725
756
  }
726
- if (caller.type === "workload") {
727
- span.setAttribute("workload.instance_id", caller.instanceId);
728
- span.setAttribute("workload.profile_id", caller.profileId);
757
+ if (caller.type === "device") {
758
+ span.setAttribute("device.id", caller.deviceId);
759
+ span.setAttribute("device.profile_id", caller.profileId);
729
760
  }
730
761
  const handlerResultWrapped = await AsyncResult.try(() => fn(parsedInput, {
731
762
  caller,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qlever-llc/trellis",
3
- "version": "0.6.1",
3
+ "version": "0.7.0-rc.3",
4
4
  "description": "Client-side Trellis runtime, models, and contract helpers for TypeScript applications.",
5
5
  "homepage": "https://github.com/Qlever-LLC/trellis#readme",
6
6
  "repository": {
@@ -74,6 +74,10 @@
74
74
  "import": "./esm/trellis/sdk/core.js",
75
75
  "require": "./script/trellis/sdk/core.js"
76
76
  },
77
+ "./sdk/state": {
78
+ "import": "./esm/trellis/sdk/state.js",
79
+ "require": "./script/trellis/sdk/state.js"
80
+ },
77
81
  "./tracing": {
78
82
  "import": "./esm/trellis/tracing.js",
79
83
  "require": "./script/trellis/tracing.js"
@@ -92,6 +96,7 @@
92
96
  "@opentelemetry/semantic-conventions": "^1.28.0",
93
97
  "@nats-io/jetstream": "^3.3.0",
94
98
  "@nats-io/kv": "^3.2.0",
99
+ "@nats-io/obj": "^3.3.1",
95
100
  "@nats-io/nats-core": "^3.3.1",
96
101
  "@nats-io/transport-node": "^3.3.1",
97
102
  "json-schema-library": "^10.5.2",
@@ -99,7 +104,7 @@
99
104
  "ts-deepmerge": "^7.0.3",
100
105
  "typebox": "^1.0.15",
101
106
  "ulid": "^3.0.1",
102
- "@qlever-llc/result": "^0.6.1"
107
+ "@qlever-llc/result": "^0.7.0-rc.3"
103
108
  },
104
109
  "devDependencies": {
105
110
  "@types/node": "^20.9.0"