@qlever-llc/trellis 0.6.1 → 0.7.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 (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,367 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ 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");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ var _BaseTransferHandle_nc, _BaseTransferHandle_auth, _BaseTransferHandle_timeoutMs, _UploadTransferHandle_grant, _DownloadTransferHandle_grant;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.DownloadTransferHandle = exports.UploadTransferHandle = exports.TransferGrantSchema = exports.DownloadTransferGrantSchema = exports.UploadTransferGrantSchema = exports.FileInfoSchema = void 0;
19
+ exports.createTransferHandle = createTransferHandle;
20
+ exports.verifyTransferMessage = verifyTransferMessage;
21
+ const result_1 = require("@qlever-llc/result");
22
+ const nats_core_1 = require("@nats-io/nats-core");
23
+ const typebox_1 = __importDefault(require("typebox"));
24
+ const proof_ts_1 = require("../auth/proof.ts");
25
+ const utils_ts_1 = require("../auth/utils.ts");
26
+ const TransferError_ts_1 = require("./errors/TransferError.ts");
27
+ const TRANSFER_SEQUENCE_HEADER = "trellis-transfer-seq";
28
+ const TRANSFER_EOF_HEADER = "trellis-transfer-eof";
29
+ exports.FileInfoSchema = typebox_1.default.Object({
30
+ key: typebox_1.default.String({ minLength: 1 }),
31
+ size: typebox_1.default.Integer({ minimum: 0 }),
32
+ updatedAt: typebox_1.default.String({ minLength: 1 }),
33
+ digest: typebox_1.default.Optional(typebox_1.default.String({ minLength: 1 })),
34
+ contentType: typebox_1.default.Optional(typebox_1.default.String({ minLength: 1 })),
35
+ metadata: typebox_1.default.Record(typebox_1.default.String({ minLength: 1 }), typebox_1.default.String()),
36
+ }, { additionalProperties: false });
37
+ const TransferGrantBaseSchema = typebox_1.default.Object({
38
+ type: typebox_1.default.Literal("TransferGrant"),
39
+ service: typebox_1.default.String({ minLength: 1 }),
40
+ sessionKey: typebox_1.default.String({ minLength: 1 }),
41
+ transferId: typebox_1.default.String({ minLength: 1 }),
42
+ subject: typebox_1.default.String({ minLength: 1 }),
43
+ expiresAt: typebox_1.default.String({ minLength: 1 }),
44
+ chunkBytes: typebox_1.default.Integer({ minimum: 1 }),
45
+ }, { additionalProperties: false });
46
+ exports.UploadTransferGrantSchema = typebox_1.default.Intersect([
47
+ TransferGrantBaseSchema,
48
+ typebox_1.default.Object({
49
+ kind: typebox_1.default.Literal("upload"),
50
+ maxBytes: typebox_1.default.Optional(typebox_1.default.Integer({ minimum: 1 })),
51
+ contentType: typebox_1.default.Optional(typebox_1.default.String({ minLength: 1 })),
52
+ metadata: typebox_1.default.Optional(typebox_1.default.Record(typebox_1.default.String({ minLength: 1 }), typebox_1.default.String())),
53
+ }, { additionalProperties: false }),
54
+ ]);
55
+ exports.DownloadTransferGrantSchema = typebox_1.default.Intersect([
56
+ TransferGrantBaseSchema,
57
+ typebox_1.default.Object({
58
+ kind: typebox_1.default.Literal("download"),
59
+ info: exports.FileInfoSchema,
60
+ }, { additionalProperties: false }),
61
+ ]);
62
+ exports.TransferGrantSchema = typebox_1.default.Union([
63
+ exports.UploadTransferGrantSchema,
64
+ exports.DownloadTransferGrantSchema,
65
+ ]);
66
+ async function createTransferProof(auth, subject, payload) {
67
+ const payloadHash = await (0, utils_ts_1.sha256)(payload);
68
+ const proofOk = await auth.sign(await (0, utils_ts_1.sha256)(buildTransferProofInput(auth.sessionKey, subject, payloadHash)));
69
+ return (0, utils_ts_1.base64urlEncode)(proofOk);
70
+ }
71
+ function buildTransferProofInput(sessionKey, subject, payloadHash) {
72
+ const enc = new TextEncoder();
73
+ const sessionKeyBytes = enc.encode(sessionKey);
74
+ const subjectBytes = enc.encode(subject);
75
+ const buf = new Uint8Array(4 + sessionKeyBytes.length + 4 + subjectBytes.length + 4 + payloadHash.length);
76
+ const view = new DataView(buf.buffer);
77
+ let offset = 0;
78
+ view.setUint32(offset, sessionKeyBytes.length);
79
+ offset += 4;
80
+ buf.set(sessionKeyBytes, offset);
81
+ offset += sessionKeyBytes.length;
82
+ view.setUint32(offset, subjectBytes.length);
83
+ offset += 4;
84
+ buf.set(subjectBytes, offset);
85
+ offset += subjectBytes.length;
86
+ view.setUint32(offset, payloadHash.length);
87
+ offset += 4;
88
+ buf.set(payloadHash, offset);
89
+ return buf;
90
+ }
91
+ function expired(expiresAt) {
92
+ return Date.now() >= Date.parse(expiresAt);
93
+ }
94
+ function asUint8Array(body) {
95
+ return body instanceof Uint8Array ? body : new Uint8Array(body);
96
+ }
97
+ function streamFromAsyncIterable(iterable) {
98
+ const iterator = iterable[Symbol.asyncIterator]();
99
+ return new ReadableStream({
100
+ async pull(controller) {
101
+ const next = await iterator.next();
102
+ if (next.done) {
103
+ controller.close();
104
+ return;
105
+ }
106
+ controller.enqueue(next.value);
107
+ },
108
+ async cancel(reason) {
109
+ await iterator.return?.(reason);
110
+ },
111
+ });
112
+ }
113
+ function streamFromBody(body) {
114
+ if (body instanceof Uint8Array || body instanceof ArrayBuffer) {
115
+ const bytes = asUint8Array(body);
116
+ return new ReadableStream({
117
+ start(controller) {
118
+ controller.enqueue(bytes);
119
+ controller.close();
120
+ },
121
+ });
122
+ }
123
+ return body instanceof ReadableStream ? body : streamFromAsyncIterable(body);
124
+ }
125
+ async function* chunkBody(body, chunkBytes) {
126
+ const reader = streamFromBody(body).getReader();
127
+ try {
128
+ while (true) {
129
+ const next = await reader.read();
130
+ if (next.done) {
131
+ return;
132
+ }
133
+ let offset = 0;
134
+ while (offset < next.value.length) {
135
+ const end = Math.min(offset + chunkBytes, next.value.length);
136
+ yield next.value.slice(offset, end);
137
+ offset = end;
138
+ }
139
+ }
140
+ }
141
+ finally {
142
+ reader.releaseLock();
143
+ }
144
+ }
145
+ function parseTransferAck(msg, operation) {
146
+ if (msg.headers?.get("status") === "error") {
147
+ return result_1.Result.err(deserializeTransferError(msg, operation));
148
+ }
149
+ try {
150
+ const value = JSON.parse(msg.string());
151
+ return result_1.Result.ok(value);
152
+ }
153
+ catch (cause) {
154
+ return result_1.Result.err(new TransferError_ts_1.TransferError({ operation, cause }));
155
+ }
156
+ }
157
+ function deserializeTransferError(msg, operation) {
158
+ try {
159
+ const value = JSON.parse(msg.string());
160
+ return new TransferError_ts_1.TransferError({
161
+ operation: value.operation ?? operation,
162
+ context: value.context,
163
+ cause: value.message ? new Error(value.message) : undefined,
164
+ });
165
+ }
166
+ catch (cause) {
167
+ return new TransferError_ts_1.TransferError({ operation, cause });
168
+ }
169
+ }
170
+ async function collectDownload(nc, inbox, timeoutMs) {
171
+ const sub = nc.subscribe(inbox);
172
+ const iterator = sub[Symbol.asyncIterator]();
173
+ const chunks = [];
174
+ let total = 0;
175
+ try {
176
+ while (true) {
177
+ const next = await new Promise((resolve, reject) => {
178
+ const timer = setTimeout(() => {
179
+ clearTimeout(timer);
180
+ reject(new TransferError_ts_1.TransferError({ operation: "get", context: { reason: "timeout" } }));
181
+ }, timeoutMs);
182
+ iterator.next().then((value) => {
183
+ clearTimeout(timer);
184
+ resolve(value);
185
+ }, (error) => {
186
+ clearTimeout(timer);
187
+ reject(error);
188
+ });
189
+ });
190
+ if (next.done) {
191
+ return result_1.Result.err(new TransferError_ts_1.TransferError({ operation: "get", context: { reason: "stream_closed" } }));
192
+ }
193
+ const msg = next.value;
194
+ if (msg.headers?.get("status") === "error") {
195
+ return result_1.Result.err(deserializeTransferError(msg, "get"));
196
+ }
197
+ if (msg.data.length > 0) {
198
+ chunks.push(msg.data);
199
+ total += msg.data.length;
200
+ }
201
+ if (msg.headers?.get(TRANSFER_EOF_HEADER) === "true") {
202
+ const merged = new Uint8Array(total);
203
+ let offset = 0;
204
+ for (const chunk of chunks) {
205
+ merged.set(chunk, offset);
206
+ offset += chunk.length;
207
+ }
208
+ return result_1.Result.ok(merged);
209
+ }
210
+ }
211
+ }
212
+ catch (cause) {
213
+ return result_1.Result.err(cause instanceof TransferError_ts_1.TransferError ? cause : new TransferError_ts_1.TransferError({ operation: "get", cause }));
214
+ }
215
+ finally {
216
+ sub.unsubscribe();
217
+ }
218
+ }
219
+ class BaseTransferHandle {
220
+ constructor(nc, auth, timeoutMs) {
221
+ _BaseTransferHandle_nc.set(this, void 0);
222
+ _BaseTransferHandle_auth.set(this, void 0);
223
+ _BaseTransferHandle_timeoutMs.set(this, void 0);
224
+ __classPrivateFieldSet(this, _BaseTransferHandle_nc, nc, "f");
225
+ __classPrivateFieldSet(this, _BaseTransferHandle_auth, auth, "f");
226
+ __classPrivateFieldSet(this, _BaseTransferHandle_timeoutMs, timeoutMs, "f");
227
+ }
228
+ get nc() {
229
+ return __classPrivateFieldGet(this, _BaseTransferHandle_nc, "f");
230
+ }
231
+ get auth() {
232
+ return __classPrivateFieldGet(this, _BaseTransferHandle_auth, "f");
233
+ }
234
+ get timeoutMs() {
235
+ return __classPrivateFieldGet(this, _BaseTransferHandle_timeoutMs, "f");
236
+ }
237
+ validateGrant(grant, operation) {
238
+ if (expired(grant.expiresAt)) {
239
+ return result_1.Result.err(new TransferError_ts_1.TransferError({ operation, context: { reason: "expired", transferId: grant.transferId } }));
240
+ }
241
+ if (grant.sessionKey !== __classPrivateFieldGet(this, _BaseTransferHandle_auth, "f").sessionKey) {
242
+ return result_1.Result.err(new TransferError_ts_1.TransferError({
243
+ operation,
244
+ context: {
245
+ reason: "session_mismatch",
246
+ expectedSessionKey: grant.sessionKey,
247
+ actualSessionKey: __classPrivateFieldGet(this, _BaseTransferHandle_auth, "f").sessionKey,
248
+ },
249
+ }));
250
+ }
251
+ return result_1.Result.ok(undefined);
252
+ }
253
+ async buildHeaders(subject, payload, seq, eof) {
254
+ const headers = (0, nats_core_1.headers)();
255
+ headers.set("session-key", __classPrivateFieldGet(this, _BaseTransferHandle_auth, "f").sessionKey);
256
+ headers.set("proof", await createTransferProof(__classPrivateFieldGet(this, _BaseTransferHandle_auth, "f"), subject, payload));
257
+ if (seq !== undefined) {
258
+ headers.set(TRANSFER_SEQUENCE_HEADER, String(seq));
259
+ }
260
+ if (eof) {
261
+ headers.set(TRANSFER_EOF_HEADER, "true");
262
+ }
263
+ return headers;
264
+ }
265
+ }
266
+ _BaseTransferHandle_nc = new WeakMap(), _BaseTransferHandle_auth = new WeakMap(), _BaseTransferHandle_timeoutMs = new WeakMap();
267
+ class UploadTransferHandle extends BaseTransferHandle {
268
+ constructor(nc, auth, timeoutMs, grant) {
269
+ super(nc, auth, timeoutMs);
270
+ _UploadTransferHandle_grant.set(this, void 0);
271
+ __classPrivateFieldSet(this, _UploadTransferHandle_grant, grant, "f");
272
+ }
273
+ async put(body) {
274
+ const valid = this.validateGrant(__classPrivateFieldGet(this, _UploadTransferHandle_grant, "f"), "put").take();
275
+ if ((0, result_1.isErr)(valid)) {
276
+ return result_1.Result.err(valid.error);
277
+ }
278
+ let sentBytes = 0;
279
+ let seq = 0;
280
+ let completed = null;
281
+ for await (const chunk of chunkBody(body, __classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").chunkBytes)) {
282
+ sentBytes += chunk.length;
283
+ if (__classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").maxBytes !== undefined && sentBytes > __classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").maxBytes) {
284
+ return result_1.Result.err(new TransferError_ts_1.TransferError({
285
+ operation: "put",
286
+ context: {
287
+ reason: "max_bytes_exceeded",
288
+ maxBytes: __classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").maxBytes,
289
+ attemptedBytes: sentBytes,
290
+ },
291
+ }));
292
+ }
293
+ const headers = await this.buildHeaders(__classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").subject, chunk, seq, false);
294
+ const response = await result_1.AsyncResult.try(() => this.nc.request(__classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").subject, chunk, { timeout: this.timeoutMs, headers })).take();
295
+ if ((0, result_1.isErr)(response)) {
296
+ return result_1.Result.err(new TransferError_ts_1.TransferError({ operation: "put", cause: response.error }));
297
+ }
298
+ const ack = parseTransferAck(response, "put").take();
299
+ if ((0, result_1.isErr)(ack)) {
300
+ return result_1.Result.err(ack.error);
301
+ }
302
+ if (ack.status === "complete") {
303
+ completed = ack.info;
304
+ }
305
+ seq += 1;
306
+ }
307
+ const finalHeaders = await this.buildHeaders(__classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").subject, new Uint8Array(), seq, true);
308
+ const finalResponse = await result_1.AsyncResult.try(() => this.nc.request(__classPrivateFieldGet(this, _UploadTransferHandle_grant, "f").subject, new Uint8Array(), {
309
+ timeout: this.timeoutMs,
310
+ headers: finalHeaders,
311
+ })).take();
312
+ if ((0, result_1.isErr)(finalResponse)) {
313
+ return result_1.Result.err(new TransferError_ts_1.TransferError({ operation: "put", cause: finalResponse.error }));
314
+ }
315
+ const finalAck = parseTransferAck(finalResponse, "put").take();
316
+ if ((0, result_1.isErr)(finalAck)) {
317
+ return result_1.Result.err(finalAck.error);
318
+ }
319
+ if (finalAck.status !== "complete") {
320
+ return result_1.Result.err(new TransferError_ts_1.TransferError({ operation: "put", context: { reason: "missing_completion" } }));
321
+ }
322
+ return result_1.Result.ok(finalAck.info ?? completed);
323
+ }
324
+ }
325
+ exports.UploadTransferHandle = UploadTransferHandle;
326
+ _UploadTransferHandle_grant = new WeakMap();
327
+ class DownloadTransferHandle extends BaseTransferHandle {
328
+ constructor(nc, auth, timeoutMs, grant) {
329
+ super(nc, auth, timeoutMs);
330
+ _DownloadTransferHandle_grant.set(this, void 0);
331
+ __classPrivateFieldSet(this, _DownloadTransferHandle_grant, grant, "f");
332
+ }
333
+ async getBytes() {
334
+ const valid = this.validateGrant(__classPrivateFieldGet(this, _DownloadTransferHandle_grant, "f"), "get").take();
335
+ if ((0, result_1.isErr)(valid)) {
336
+ return result_1.Result.err(valid.error);
337
+ }
338
+ const inbox = (0, nats_core_1.createInbox)(`_INBOX.${this.auth.sessionKey.slice(0, 16)}`);
339
+ const payload = new Uint8Array();
340
+ const headers = await this.buildHeaders(__classPrivateFieldGet(this, _DownloadTransferHandle_grant, "f").subject, payload);
341
+ try {
342
+ this.nc.publish(__classPrivateFieldGet(this, _DownloadTransferHandle_grant, "f").subject, payload, { headers, reply: inbox });
343
+ await this.nc.flush();
344
+ }
345
+ catch (cause) {
346
+ return result_1.Result.err(new TransferError_ts_1.TransferError({ operation: "get", cause }));
347
+ }
348
+ return await collectDownload(this.nc, inbox, this.timeoutMs);
349
+ }
350
+ }
351
+ exports.DownloadTransferHandle = DownloadTransferHandle;
352
+ _DownloadTransferHandle_grant = new WeakMap();
353
+ function createTransferHandle(nc, auth, timeoutMs, grant) {
354
+ return grant.kind === "upload"
355
+ ? new UploadTransferHandle(nc, auth, timeoutMs, grant)
356
+ : new DownloadTransferHandle(nc, auth, timeoutMs, grant);
357
+ }
358
+ async function verifyTransferMessage(args) {
359
+ if (!args.proof || !args.sessionKey || args.sessionKey !== args.expectedSessionKey) {
360
+ return false;
361
+ }
362
+ return await (0, proof_ts_1.verifyProof)(args.expectedSessionKey, {
363
+ sessionKey: args.sessionKey,
364
+ subject: args.subject,
365
+ payloadHash: await (0, utils_ts_1.sha256)(args.payload),
366
+ }, args.proof);
367
+ }
@@ -11,6 +11,7 @@ import { RemoteError } from "./errors/RemoteError.ts";
11
11
  import { type LoggerLike } from "./globals.ts";
12
12
  import { TypedKV } from "./kv.ts";
13
13
  import { OperationInvoker, type OperationRefData } from "./operations.ts";
14
+ import { type DownloadTransferGrant, type DownloadTransferHandle, type UploadTransferGrant, type UploadTransferHandle } from "./transfer.ts";
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":["../../../trellis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trellis.d.ts","sourceRoot":"","sources":["../../../trellis.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,KAAK,GAAG,EACR,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAEV,eAAe,EACf,OAAO,EACP,UAAU,EACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,iCAAiC,EACjC,yBAAyB,EAC1B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,WAAW,EACX,KAAK,SAAS,EAId,KAAK,UAAU,EAEf,MAAM,EACP,MAAM,oBAAoB,CAAC;AAY5B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG/B,OAAO,EAEL,KAAK,SAAS,EAIf,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,KAAK,oBAAoB,EACzB,eAAe,EACf,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EACL,gBAAgB,EAChB,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAE3B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,eAAe,CAAC;AAGvB,MAAM,MAAM,2BAA2B,GAAG,YAAY,CACpD,OAAO,iCAAiC,CACzC,CAAC;AACF,MAAM,MAAM,wBAAwB,GAAG,YAAY,CACjD,OAAO,yBAAyB,CACjC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;AAElE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAErE;AAmBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAGxD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAQrD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CAQ3D;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAGlE;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,UAAU,GACtB,UAAU,CA+BZ;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,IAAI,EAAE,UAAU,KACb,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;AAEtC,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC;AACvC,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC9C,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;AACpD,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,aAAa,IAAI,QAAQ,CACxD,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,CACzB,CAAC;AACF,MAAM,MAAM,YAAY,CAAC,EAAE,SAAS,aAAa,IAAI,QAAQ,CAC3D,MAAM,EAAE,CAAC,YAAY,CAAC,GAAG,MAAM,CAChC,CAAC;AAEF,KAAK,aAAa,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,IAClE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,MAAM,EAAE,MAAM,QAAQ,EAAE,MAAM,QAAQ,CAAC,GACtE,eAAe,CAAC,MAAM,CAAC,GACvB,KAAK,CAAC;AACZ,KAAK,cAAc,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,IACnE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,OAAO,EAAE,MAAM,QAAQ,CAAC,GACtE,eAAe,CAAC,OAAO,CAAC,GACxB,KAAK,CAAC;AAgBZ,MAAM,MAAM,gBAAgB,CAC1B,EAAE,SAAS,aAAa,EACxB,CAAC,SAAS,YAAY,CAAC,EAAE,CAAC,IACxB,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,MAAM,CAAA;CAAE,GACnD,eAAe,CAAC,MAAM,CAAC,GACvB,KAAK,CAAC;AACV,MAAM,MAAM,mBAAmB,CAC7B,EAAE,SAAS,aAAa,EACxB,CAAC,SAAS,YAAY,CAAC,EAAE,CAAC,IACxB,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;IAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;CAAE,GACzD,SAAS,SAAS,SAAS,GAAG,OAAO,GACrC,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,GACvC,OAAO,CAAC;AACZ,MAAM,MAAM,iBAAiB,CAC3B,EAAE,SAAS,aAAa,EACxB,CAAC,SAAS,YAAY,CAAC,EAAE,CAAC,IACxB,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,OAAO,CAAA;CAAE,GACrD,OAAO,SAAS,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAC3E,OAAO,CAAC;AACZ,MAAM,MAAM,sBAAsB,CAAC,SAAS,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI;IAC3E,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC,CAAC;IACtE,QAAQ,CACN,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC,CAAC;IAC9D,QAAQ,CACN,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC,CAAC;IAC9D,IAAI,CACF,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC,CAAC;IAC9D,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC,CAAC;IACrE,MAAM,CACJ,GAAG,EAAE;QAAE,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;KAAE,GACnD,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC,CAAC;CAC/D,CAAC;AACF,MAAM,MAAM,uBAAuB,CACjC,MAAM,EACN,SAAS,GAAG,OAAO,EACnB,OAAO,GAAG,OAAO,IACf;IACF,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,sBAAsB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AACF,MAAM,MAAM,qBAAqB,CAC/B,MAAM,EACN,SAAS,GAAG,OAAO,EACnB,OAAO,GAAG,OAAO,IACf;IACF,MAAM,CACJ,OAAO,EAAE,CACP,OAAO,EAAE,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,KACzD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB,CAAC;AACF,MAAM,MAAM,gBAAgB,CAC1B,EAAE,SAAS,aAAa,EACxB,KAAK,SAAS,WAAW,EACzB,CAAC,SAAS,YAAY,CAAC,EAAE,CAAC,IACxB,KAAK,SAAS,QAAQ,GAAG,qBAAqB,CAC9C,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,EACvB,mBAAmB,CAAC,EAAE,EAAE,CAAC,CAAC,EAC1B,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC,CACzB,GACC,gBAAgB,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC;AAEjE,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAErC;AACD,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,wBAAwB,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,wBAAwB,CAAC;CACpC,CAAC;AAyBF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;EAIvC,CAAC;AAEH,MAAM,MAAM,gCAAgC,GAAG;IAC7C,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,gBAAgB,CAAC;IACtB,QAAQ,EAAE,wBAAwB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,GAAG,CACD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC,CAAC;IAC9D,OAAO,CACL,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC,CAAC;IAC9D,QAAQ,CACN,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC,CAAC;IAC9D,QAAQ,CACN,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC,CAAC;IAC9D,IAAI,CACF,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC,CAAC;IAC9D,MAAM,CACJ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC,CAAC;CAC/D,CAAC;AAEF,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,IAAI,CACX,sBAAsB,EACtB,IAAI,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAC5C,EACD,KAAK,EAAE,qBAAqB,EAC5B,KAAK,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,GACxC,wBAAwB,CA+B1B;AAeD,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,wBAAwB,CAKnC;AAED,KAAK,oBAAoB,GAAG;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,EAAE,SAAS,aAAa,IAAI;IAClD,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,GAAG,CAAC,EAAE,EAAE,CAAC;IACT,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,IAAI,CACzE,CAAC,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,EACvB,OAAO,EAAE;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,KACnD,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAmClE,qBAAa,OAAO,CAClB,EAAE,SAAS,aAAa,GAAG,UAAU,EACrC,KAAK,SAAS,WAAW,GAAG,QAAQ;;IAEpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC;IAC/B,SAAS,CAAC,EAAE,EAAE,eAAe,CAAC;IAC9B,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;gBAUf,IAAI,EAAE,MAAM,EAAE,+BAA+B;IAC7C,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,WAAW,EACjB,IAAI,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;IAsBxB;;OAEG;IACH,IAAI,cAAc,IAAI,cAAc,CAEnC;IAED,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB;IAC1D,QAAQ,CAAC,KAAK,EAAE,qBAAqB,GAAG,sBAAsB;IAexD,oBAAoB,IAAI,OAAO,CACnC,OAAO,CAAC,OAAO,4BAA4B,CAAC,CAC7C;IAyBK,mBAAmB,CACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAUnC,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgOzE,SAAS,CAAC,CAAC,SAAS,YAAY,CAAC,EAAE,CAAC,EAClC,SAAS,EAAE,CAAC,GACX,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAqB3B,KAAK,CACT,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,CACF,KAAK,EAAE,OAAO,EACd,OAAO,EAAE;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KACnD,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IAwYrD,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,oBAAoB,GAAG,IAAI;IAI/D,OAAO,CACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CAAC,CAAC;IAuCrD,KAAK,CACT,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,GACpD,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CAAC,CAAC;IAmG3D,IAAI,IAAI,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC;IAKpC,QAAQ,CACN,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,EACb,cAAc,UAAQ,GACrB,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;cA8HlB,mBAAmB,CACjC,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CACR,MAAM,CACJ,2BAA2B,EAC3B,WAAW,GAAG,eAAe,GAAG,eAAe,CAChD,CACF;CAcF;AAED,MAAM,WAAW,OAAO,CACtB,EAAE,SAAS,aAAa,GAAG,UAAU,EACrC,KAAK,SAAS,WAAW,GAAG,QAAQ;IAEpC,OAAO,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,EAC7B,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,EAC3B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CACR,MAAM,CACJ,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,EACrB,WAAW,GAAG,eAAe,GAAG,eAAe,CAChD,CACF,CAAC;IACF,cAAc,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,EACpC,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,EAC3B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,OAAO,CACtB,EAAE,SAAS,aAAa,GAAG,UAAU,EACrC,KAAK,SAAS,WAAW,GAAG,QAAQ;IAEpC,OAAO,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,EAC7B,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,EAC3B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CACR,MAAM,CACJ,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,EACrB,WAAW,GAAG,eAAe,GAAG,eAAe,CAChD,CACF,CAAC;IACF,cAAc,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,EACpC,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,EAC3B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;CACnC"}
@@ -36,6 +36,7 @@ const globals_ts_1 = require("./globals.ts");
36
36
  const kv_ts_1 = require("./kv.ts");
37
37
  const TrellisError_ts_1 = require("./models/trellis/TrellisError.ts");
38
38
  const operations_ts_1 = require("./operations.ts");
39
+ const transfer_ts_1 = require("./transfer.ts");
39
40
  const tasks_ts_1 = require("./tasks.ts");
40
41
  /**
41
42
  * Safely extract JSON from a NATS message.
@@ -180,12 +181,22 @@ function isTerminalRuntimeOperationSnapshot(value) {
180
181
  const NATS_SUBJECT_TOKEN_FORBIDDEN = /[\u0000\s.*>~]/gu;
181
182
  const DEFAULT_NO_RESPONDER_MAX_RETRIES = 2;
182
183
  const DEFAULT_NO_RESPONDER_RETRY_MS = 200;
184
+ const DEFAULT_AUTH_VALIDATE_SESSION_RETRY_ATTEMPTS = 3;
185
+ const DEFAULT_AUTH_VALIDATE_SESSION_RETRY_MS = 25;
183
186
  const EMPTY_TRELLIS_API = {
184
187
  rpc: {},
185
188
  operations: {},
186
189
  events: {},
187
190
  subjects: {},
188
191
  };
192
+ function isTransientAuthValidateSessionError(error) {
193
+ return error instanceof RemoteError_ts_1.RemoteError &&
194
+ error.remoteError.type === "AuthError" &&
195
+ error.remoteError.reason === "session_not_found";
196
+ }
197
+ async function sleep(ms) {
198
+ await new Promise((resolve) => setTimeout(resolve, ms));
199
+ }
189
200
  class Trellis {
190
201
  constructor(name, // Must be unique for a service
191
202
  nats, auth, opts) {
@@ -262,6 +273,9 @@ class Trellis {
262
273
  get natsConnection() {
263
274
  return this.nats;
264
275
  }
276
+ transfer(grant) {
277
+ return (0, transfer_ts_1.createTransferHandle)(this.nats, this.auth, this.timeout, grant);
278
+ }
265
279
  async operationStoreHandle() {
266
280
  if (!__classPrivateFieldGet(this, _Trellis_operationStore, "f")) {
267
281
  const bucket = `trellis_operations_${this.name.replace(/[^A-Za-z0-9_-]/g, "_")}`;
@@ -679,28 +693,45 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
679
693
  context: { sessionKey },
680
694
  }));
681
695
  }
682
- const authResult = await this.requestAuthValidate({
683
- sessionKey,
684
- proof,
685
- subject: msg.subject,
686
- payloadHash: base64urlEncode(payloadHash),
687
- capabilities: ctx.callerCapabilities,
688
- });
689
- const auth = authResult.take();
690
- if ((0, result_1.isErr)(auth)) {
696
+ let auth;
697
+ for (let attempt = 0; attempt < DEFAULT_AUTH_VALIDATE_SESSION_RETRY_ATTEMPTS; attempt++) {
698
+ const authResult = await this.requestAuthValidate({
699
+ sessionKey,
700
+ proof,
701
+ subject: msg.subject,
702
+ payloadHash: base64urlEncode(payloadHash),
703
+ capabilities: ctx.callerCapabilities,
704
+ });
705
+ const authValue = authResult.take();
706
+ if (!(0, result_1.isErr)(authValue)) {
707
+ auth = authValue;
708
+ break;
709
+ }
710
+ const authError = authValue.error;
711
+ if (!isTransientAuthValidateSessionError(authError) ||
712
+ attempt === DEFAULT_AUTH_VALIDATE_SESSION_RETRY_ATTEMPTS - 1) {
713
+ auth = authError;
714
+ break;
715
+ }
716
+ await sleep(DEFAULT_AUTH_VALIDATE_SESSION_RETRY_MS * (attempt + 1));
717
+ }
718
+ if (!auth) {
719
+ return (0, result_1.err)(new index_ts_1.UnexpectedError({ context: { reason: "missing_auth_validate_result" } }));
720
+ }
721
+ if (auth instanceof Error) {
691
722
  __classPrivateFieldGet(this, _Trellis_log, "f").warn({
692
723
  method,
693
- error: auth.error.message,
694
- errorType: auth.error.name,
695
- remoteError: auth.error instanceof RemoteError_ts_1.RemoteError
696
- ? auth.error.toSerializable()
724
+ error: auth.message,
725
+ errorType: auth.name,
726
+ remoteError: auth instanceof RemoteError_ts_1.RemoteError
727
+ ? auth.toSerializable()
697
728
  : undefined,
698
729
  }, "Auth.ValidateRequest failed");
699
730
  span.setStatus({
700
731
  code: tracing_ts_1.SpanStatusCode.ERROR,
701
732
  message: "Auth.ValidateRequest failed",
702
733
  });
703
- return (0, result_1.err)(auth.error);
734
+ return (0, result_1.err)(auth);
704
735
  }
705
736
  if (!auth.allowed) {
706
737
  span.setStatus({
@@ -736,9 +767,9 @@ _Trellis_log = new WeakMap(), _Trellis_tasks = new WeakMap(), _Trellis_hasExplic
736
767
  if (caller.type === "service") {
737
768
  span.setAttribute("service.id", caller.id);
738
769
  }
739
- if (caller.type === "workload") {
740
- span.setAttribute("workload.instance_id", caller.instanceId);
741
- span.setAttribute("workload.profile_id", caller.profileId);
770
+ if (caller.type === "device") {
771
+ span.setAttribute("device.id", caller.deviceId);
772
+ span.setAttribute("device.profile_id", caller.profileId);
742
773
  }
743
774
  const handlerResultWrapped = await result_1.AsyncResult.try(() => fn(parsedInput, {
744
775
  caller,