@teepin/sdk 0.2.1 → 0.3.0

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 (134) hide show
  1. package/README.md +41 -36
  2. package/dist/cjs/client.js +42 -4
  3. package/dist/cjs/client.js.map +1 -1
  4. package/dist/cjs/direct/bytes.js +50 -0
  5. package/dist/cjs/direct/bytes.js.map +1 -0
  6. package/dist/cjs/direct/common.js +167 -0
  7. package/dist/cjs/direct/common.js.map +1 -0
  8. package/dist/cjs/direct/downloads-plan.js +127 -0
  9. package/dist/cjs/direct/downloads-plan.js.map +1 -0
  10. package/dist/cjs/direct/engine.js +405 -0
  11. package/dist/cjs/direct/engine.js.map +1 -0
  12. package/dist/cjs/direct/formats.js +44 -0
  13. package/dist/cjs/direct/formats.js.map +1 -0
  14. package/dist/cjs/direct/hpke.js +275 -0
  15. package/dist/cjs/direct/hpke.js.map +1 -0
  16. package/dist/cjs/direct/journal.js +80 -0
  17. package/dist/cjs/direct/journal.js.map +1 -0
  18. package/dist/cjs/direct/large.js +850 -0
  19. package/dist/cjs/direct/large.js.map +1 -0
  20. package/dist/cjs/direct/reads.js +1314 -0
  21. package/dist/cjs/direct/reads.js.map +1 -0
  22. package/dist/cjs/direct/sha256.js +122 -0
  23. package/dist/cjs/direct/sha256.js.map +1 -0
  24. package/dist/cjs/direct/tws1.js +480 -0
  25. package/dist/cjs/direct/tws1.js.map +1 -0
  26. package/dist/cjs/direct/uploads.js +1706 -0
  27. package/dist/cjs/direct/uploads.js.map +1 -0
  28. package/dist/cjs/errors.js +70 -13
  29. package/dist/cjs/errors.js.map +1 -1
  30. package/dist/cjs/index.js +5 -1
  31. package/dist/cjs/index.js.map +1 -1
  32. package/dist/cjs/links.js +195 -0
  33. package/dist/cjs/links.js.map +1 -0
  34. package/dist/cjs/node/downloads.js +835 -0
  35. package/dist/cjs/node/downloads.js.map +1 -0
  36. package/dist/cjs/node/journal.js +841 -0
  37. package/dist/cjs/node/journal.js.map +1 -0
  38. package/dist/cjs/node/uploads.js +219 -0
  39. package/dist/cjs/node/uploads.js.map +1 -0
  40. package/dist/cjs/node.js +26 -39
  41. package/dist/cjs/node.js.map +1 -1
  42. package/dist/cjs/storage.js +214 -184
  43. package/dist/cjs/storage.js.map +1 -1
  44. package/dist/cjs/transfer.js +18 -351
  45. package/dist/cjs/transfer.js.map +1 -1
  46. package/dist/esm/client.js +42 -4
  47. package/dist/esm/client.js.map +1 -1
  48. package/dist/esm/direct/bytes.js +42 -0
  49. package/dist/esm/direct/bytes.js.map +1 -0
  50. package/dist/esm/direct/common.js +155 -0
  51. package/dist/esm/direct/common.js.map +1 -0
  52. package/dist/esm/direct/downloads-plan.js +117 -0
  53. package/dist/esm/direct/downloads-plan.js.map +1 -0
  54. package/dist/esm/direct/engine.js +385 -0
  55. package/dist/esm/direct/engine.js.map +1 -0
  56. package/dist/esm/direct/formats.js +40 -0
  57. package/dist/esm/direct/formats.js.map +1 -0
  58. package/dist/esm/direct/hpke.js +262 -0
  59. package/dist/esm/direct/hpke.js.map +1 -0
  60. package/dist/esm/direct/journal.js +75 -0
  61. package/dist/esm/direct/journal.js.map +1 -0
  62. package/dist/esm/direct/large.js +816 -0
  63. package/dist/esm/direct/large.js.map +1 -0
  64. package/dist/esm/direct/reads.js +1275 -0
  65. package/dist/esm/direct/reads.js.map +1 -0
  66. package/dist/esm/direct/sha256.js +118 -0
  67. package/dist/esm/direct/sha256.js.map +1 -0
  68. package/dist/esm/direct/tws1.js +460 -0
  69. package/dist/esm/direct/tws1.js.map +1 -0
  70. package/dist/esm/direct/uploads.js +1660 -0
  71. package/dist/esm/direct/uploads.js.map +1 -0
  72. package/dist/esm/errors.js +64 -11
  73. package/dist/esm/errors.js.map +1 -1
  74. package/dist/esm/index.js +1 -0
  75. package/dist/esm/index.js.map +1 -1
  76. package/dist/esm/links.js +189 -0
  77. package/dist/esm/links.js.map +1 -0
  78. package/dist/esm/node/downloads.js +829 -0
  79. package/dist/esm/node/downloads.js.map +1 -0
  80. package/dist/esm/node/journal.js +824 -0
  81. package/dist/esm/node/journal.js.map +1 -0
  82. package/dist/esm/node/uploads.js +187 -0
  83. package/dist/esm/node/uploads.js.map +1 -0
  84. package/dist/esm/node.js +17 -14
  85. package/dist/esm/node.js.map +1 -1
  86. package/dist/esm/storage.js +214 -184
  87. package/dist/esm/storage.js.map +1 -1
  88. package/dist/esm/transfer.js +19 -349
  89. package/dist/esm/transfer.js.map +1 -1
  90. package/dist/types/client.d.ts +45 -4
  91. package/dist/types/client.d.ts.map +1 -1
  92. package/dist/types/direct/bytes.d.ts +11 -0
  93. package/dist/types/direct/bytes.d.ts.map +1 -0
  94. package/dist/types/direct/common.d.ts +47 -0
  95. package/dist/types/direct/common.d.ts.map +1 -0
  96. package/dist/types/direct/downloads-plan.d.ts +75 -0
  97. package/dist/types/direct/downloads-plan.d.ts.map +1 -0
  98. package/dist/types/direct/engine.d.ts +191 -0
  99. package/dist/types/direct/engine.d.ts.map +1 -0
  100. package/dist/types/direct/formats.d.ts +9 -0
  101. package/dist/types/direct/formats.d.ts.map +1 -0
  102. package/dist/types/direct/hpke.d.ts +55 -0
  103. package/dist/types/direct/hpke.d.ts.map +1 -0
  104. package/dist/types/direct/journal.d.ts +55 -0
  105. package/dist/types/direct/journal.d.ts.map +1 -0
  106. package/dist/types/direct/large.d.ts +170 -0
  107. package/dist/types/direct/large.d.ts.map +1 -0
  108. package/dist/types/direct/reads.d.ts +306 -0
  109. package/dist/types/direct/reads.d.ts.map +1 -0
  110. package/dist/types/direct/sha256.d.ts +16 -0
  111. package/dist/types/direct/sha256.d.ts.map +1 -0
  112. package/dist/types/direct/tws1.d.ts +157 -0
  113. package/dist/types/direct/tws1.d.ts.map +1 -0
  114. package/dist/types/direct/uploads.d.ts +461 -0
  115. package/dist/types/direct/uploads.d.ts.map +1 -0
  116. package/dist/types/errors.d.ts +47 -8
  117. package/dist/types/errors.d.ts.map +1 -1
  118. package/dist/types/index.d.ts +1 -0
  119. package/dist/types/index.d.ts.map +1 -1
  120. package/dist/types/links.d.ts +86 -0
  121. package/dist/types/links.d.ts.map +1 -0
  122. package/dist/types/node/downloads.d.ts +73 -0
  123. package/dist/types/node/downloads.d.ts.map +1 -0
  124. package/dist/types/node/journal.d.ts +162 -0
  125. package/dist/types/node/journal.d.ts.map +1 -0
  126. package/dist/types/node/uploads.d.ts +86 -0
  127. package/dist/types/node/uploads.d.ts.map +1 -0
  128. package/dist/types/node.d.ts +4 -2
  129. package/dist/types/node.d.ts.map +1 -1
  130. package/dist/types/storage.d.ts +107 -64
  131. package/dist/types/storage.d.ts.map +1 -1
  132. package/dist/types/transfer.d.ts +14 -23
  133. package/dist/types/transfer.d.ts.map +1 -1
  134. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloads-plan.js","sourceRoot":"","sources":["../../../src/direct/downloads-plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,405 @@
1
+ "use strict";
2
+ // Copyright 2026 TEEPIN Project
3
+ // Licensed under the Apache License, Version 2.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.isPassing = exports.isThrottle = exports.storageOutcome = exports.waitDelayMs = exports.RetryBudget = exports.AdaptiveLimit = exports.nextPack = exports.planPacks = exports.packedSize = exports.envNumber = exports.streamPartSize = exports.directPartSize = exports.tooSlow = exports.formatSpeed = exports.packObjectLimit = exports.packTarget = exports.SpeedMeter = exports.SPEED_WEIGHT = exports.SPEED_SAMPLE_BYTES = exports.PACK_MIN_TARGET = exports.REQUEST_MS = exports.PART_RULES = exports.STREAM_CONCURRENCY = exports.STREAM_PART_BYTES = exports.MAX_PART_STORED = exports.MAX_DIRECT_PARTS = exports.MIN_PART_BYTES = exports.DEFAULT_PART_BYTES = exports.MAX_REBUILDS = exports.COMMIT_VERIFY_TRIES = exports.SIGN_MARGIN_MS = exports.UPLOAD_WAIT_ENV = exports.DEFAULT_UPLOAD_WAIT_MS = exports.CONCURRENCY_ENV = exports.MAX_CONCURRENCY = exports.START_CONCURRENCY = exports.PACK_OBJECT_LIMIT = exports.PACK_MAX_OBJECTS = exports.PACK_TARGET_BYTES = void 0;
6
+ // The rules of direct uploads that don't depend on how bytes are sent (TEEPIN-STORAGE-DESIGN.md sections 17, 22 and
7
+ // 24): what goes into a pack, how many requests may be in flight, when to retry, and what a storage network's answer
8
+ // means. The same rules as the Python SDK's _engine.py, so the two can't drift apart in behaviour.
9
+ const client_js_1 = require("../client.js");
10
+ const errors_js_1 = require("../errors.js");
11
+ const tws1_js_1 = require("./tws1.js");
12
+ /** A pack is closed at about this many bytes as stored (section 12.4): one of the storage network's efficient writes. */
13
+ exports.PACK_TARGET_BYTES = 9 * 2 ** 20;
14
+ /** The most objects in one pack (the control plane's cap). */
15
+ exports.PACK_MAX_OBJECTS = 1000;
16
+ /** Objects up to this size go into packs; larger ones are uploaded in parts. */
17
+ exports.PACK_OBJECT_LIMIT = 16 * 2 ** 20;
18
+ /** Packs and parts in flight: where the adaptive limit starts, and its ceiling. */
19
+ exports.START_CONCURRENCY = 4;
20
+ exports.MAX_CONCURRENCY = 32;
21
+ exports.CONCURRENCY_ENV = 'TEEPIN_UPLOAD_CONCURRENCY';
22
+ /** How long an upload waits for an unavailable storage network or control plane, in ms (section 17.4). */
23
+ exports.DEFAULT_UPLOAD_WAIT_MS = 600000;
24
+ exports.UPLOAD_WAIT_ENV = 'TEEPIN_UPLOAD_WAIT';
25
+ /** A signature closer than this to its expiry is renewed before use, in ms. */
26
+ exports.SIGN_MARGIN_MS = 60000;
27
+ /** How often a commit that answers "verifying" is asked again before the pack is sent again (section 19.13). */
28
+ exports.COMMIT_VERIFY_TRIES = 4;
29
+ /** Times a pack's files are reserved again (conflict, bad bytes) before they fail. */
30
+ exports.MAX_REBUILDS = 3;
31
+ /**
32
+ * A large object's parts (section 21.2): 16 MiB of plaintext by default, at least 5 MiB, a multiple of TWS1's 64 KiB
33
+ * segment, and at most 3,000 of them; each at most 5 GiB as stored.
34
+ */
35
+ exports.DEFAULT_PART_BYTES = 16 * 2 ** 20;
36
+ exports.MIN_PART_BYTES = 5 * 2 ** 20;
37
+ exports.MAX_DIRECT_PARTS = 3000;
38
+ exports.MAX_PART_STORED = 5 * 2 ** 30;
39
+ /** A stream's part size when neither its size nor a part size is given: about 187 GiB at most, in 3,000 parts. */
40
+ exports.STREAM_PART_BYTES = 64 * 2 ** 20;
41
+ /**
42
+ * A stream's parts in flight unless the caller says: each holds its ciphertext in memory, so with the reader's parts a
43
+ * stream holds at most about (STREAM_CONCURRENCY + 3) x its part size.
44
+ */
45
+ exports.STREAM_CONCURRENCY = 4;
46
+ exports.PART_RULES = Object.freeze({
47
+ defaultBytes: exports.DEFAULT_PART_BYTES,
48
+ minBytes: exports.MIN_PART_BYTES,
49
+ maxParts: exports.MAX_DIRECT_PARTS,
50
+ streamBytes: exports.STREAM_PART_BYTES,
51
+ });
52
+ /**
53
+ * Slow links (section 22.7): one request to the storage network should take at most about this long (ms) at the
54
+ * measured speed. Packs, and the parts of uploads created from then on, shrink to fit it.
55
+ */
56
+ exports.REQUEST_MS = 240000;
57
+ /** A pack's target never shrinks below one TWS1 segment (a pack still always holds at least one object). */
58
+ exports.PACK_MIN_TARGET = tws1_js_1.SEGMENT_SIZE;
59
+ /** A PUT smaller than this isn't measured: its time is mostly the round trip, not the link. */
60
+ exports.SPEED_SAMPLE_BYTES = 256 * 2 ** 10;
61
+ /** How far each measured PUT moves the estimate (an exponential moving average of bytes and of time). */
62
+ exports.SPEED_WEIGHT = 0.3;
63
+ /**
64
+ * The upload speed to the storage network, measured from completed PUTs (section 22.7): a moving estimate per client,
65
+ * of bytes over time, so a long transfer counts for more than a short one. Failed PUTs, and ones under
66
+ * minBytes, aren't measured. Until a PUT is measured, requestBytes is undefined and today's sizes hold. set (tests)
67
+ * fixes the speed; ms is the per-request budget.
68
+ */
69
+ class SpeedMeter {
70
+ ms = exports.REQUEST_MS;
71
+ /** The smallest PUT measured (SPEED_SAMPLE_BYTES; tests lower it). */
72
+ minBytes = exports.SPEED_SAMPLE_BYTES;
73
+ bytes = 0;
74
+ time = 0;
75
+ fixed;
76
+ /** A PUT of nbytes that succeeded in elapsedMs. */
77
+ observe(nbytes, elapsedMs) {
78
+ if (nbytes < this.minBytes || !(elapsedMs > 0))
79
+ return;
80
+ this.sample(nbytes, elapsedMs);
81
+ }
82
+ sample(nbytes, elapsedMs) {
83
+ if (this.time <= 0) {
84
+ this.bytes = nbytes;
85
+ this.time = elapsedMs;
86
+ }
87
+ else {
88
+ this.bytes += exports.SPEED_WEIGHT * (nbytes - this.bytes);
89
+ this.time += exports.SPEED_WEIGHT * (elapsedMs - this.time);
90
+ }
91
+ }
92
+ /**
93
+ * A PUT of nbytes that timed out on its own timer after elapsedMs, with no answer: evidence of a slow link (section
94
+ * 22.7). Taken as an upper bound, weighted like a completed PUT: at most nbytes over elapsedMs, and never above the
95
+ * speed measured so far, so it can only lower the estimate. nbytes is the request's size: fetch doesn't say how much
96
+ * of it was written.
97
+ */
98
+ observeTimeout(nbytes, elapsedMs) {
99
+ if (nbytes < this.minBytes || !(elapsedMs > 0))
100
+ return;
101
+ const measured = this.time > 0 ? this.bytes / this.time : undefined; // bytes per ms
102
+ this.sample(measured === undefined ? nbytes : Math.min(nbytes, measured * elapsedMs), elapsedMs);
103
+ }
104
+ /** Fixes the measured speed in bytes per second (tests); undefined goes back to measuring. */
105
+ set(bytesPerSecond) {
106
+ this.fixed = bytesPerSecond;
107
+ }
108
+ /** Bytes per second, or undefined before anything is measured. */
109
+ get bytesPerSecond() {
110
+ if (this.fixed !== undefined)
111
+ return this.fixed;
112
+ return this.time > 0 ? (this.bytes / this.time) * 1000 : undefined;
113
+ }
114
+ /** The speed and budget for the part-size rule, or undefined before anything is measured. */
115
+ get link() {
116
+ const bps = this.bytesPerSecond;
117
+ return bps === undefined ? undefined : { bytesPerSecond: bps, ms: this.ms };
118
+ }
119
+ /** The most bytes one request carries within ms at the measured speed; undefined before anything is measured. */
120
+ requestBytes() {
121
+ const bps = this.bytesPerSecond;
122
+ return bps === undefined ? undefined : Math.floor((bps * this.ms) / 1000);
123
+ }
124
+ }
125
+ exports.SpeedMeter = SpeedMeter;
126
+ /** A pack's target size: target (9 MiB), or less when requestBytes (the measured speed's budget) is smaller, never below floor. */
127
+ function packTarget(requestBytes, target = exports.PACK_TARGET_BYTES, floor = exports.PACK_MIN_TARGET) {
128
+ if (requestBytes === undefined)
129
+ return target;
130
+ return Math.max(floor, Math.min(target, requestBytes));
131
+ }
132
+ exports.packTarget = packTarget;
133
+ /**
134
+ * The largest object that goes into a pack; a larger one goes in parts. limit (16 MiB), or on a slow link (section 22.7)
135
+ * the bytes one request carries at the measured speed (requestBytes), but never under minPart: an object a pack request
136
+ * couldn't carry in time goes in parts, which the part rule sizes for the link.
137
+ */
138
+ function packObjectLimit(requestBytes, limit = exports.PACK_OBJECT_LIMIT, minPart = exports.MIN_PART_BYTES) {
139
+ if (requestBytes === undefined)
140
+ return limit;
141
+ return Math.min(limit, Math.max(requestBytes, minPart));
142
+ }
143
+ exports.packObjectLimit = packObjectLimit;
144
+ function formatSpeed(bytesPerSecond) {
145
+ if (bytesPerSecond >= 2 ** 20)
146
+ return `${(bytesPerSecond / 2 ** 20).toFixed(1)} MiB/s`;
147
+ return `${(bytesPerSecond / 2 ** 10).toFixed(1)} KiB/s`;
148
+ }
149
+ exports.formatSpeed = formatSpeed;
150
+ const mib = (n) => `${Number((n / 2 ** 20).toFixed(4))} MiB`;
151
+ /**
152
+ * TooLargeError with reason connection_speed: name (size bytes, 0 for a stream of unknown size) can't be sent at the
153
+ * measured speed. partCap is the largest part the speed allows.
154
+ */
155
+ function tooSlow(name, size, speed, partCap, rules = exports.PART_RULES) {
156
+ const why = partCap < rules.minBytes
157
+ ? `even a ${mib(rules.minBytes)} part would take over ${Number((speed.ms / 60000).toFixed(2))} minutes to send`
158
+ : `parts can be at most ${mib(partCap)}, and it would need more than ${rules.maxParts.toLocaleString('en-US')} of them`;
159
+ const what = size > 0 ? `${size} bytes` : 'this stream';
160
+ return new errors_js_1.TooLargeError({
161
+ statusCode: 413,
162
+ message: `${name || 'the upload'}: the connection to storage measured ${formatSpeed(speed.bytesPerSecond)}; at that speed ${why}, so ${what} is too large to send over this connection`,
163
+ code: 'connection_speed',
164
+ reason: 'connection_speed',
165
+ });
166
+ }
167
+ exports.tooSlow = tooSlow;
168
+ /**
169
+ * The part size for a large object of size bytes when want (0 for the default) is asked for: at least MIN_PART_BYTES,
170
+ * rounded up to whole segments, doubled until the parts fit in MAX_DIRECT_PARTS.
171
+ *
172
+ * A slow link (section 22.7): with speed measured (undefined before anything is), a part carries at most speed.ms of
173
+ * it, rounded down to whole segments. When that cap is under the smallest part, or the parts can't fit in the most
174
+ * parts under it, TooLargeError with reason connection_speed, before anything is created or sent.
175
+ */
176
+ function directPartSize(size, want = 0, rules = exports.PART_RULES, speed, name = '') {
177
+ return partSize(size, size, want, rules, speed, name);
178
+ }
179
+ exports.directPartSize = directPartSize;
180
+ function partSize(size, declared, want, rules, speed, name) {
181
+ let p = Math.max(want > 0 ? want : rules.defaultBytes, rules.minBytes);
182
+ p = Math.ceil(p / tws1_js_1.SEGMENT_SIZE) * tws1_js_1.SEGMENT_SIZE;
183
+ let cap = 0;
184
+ if (speed) {
185
+ cap = Math.floor(Math.floor((speed.bytesPerSecond * speed.ms) / 1000) / tws1_js_1.SEGMENT_SIZE) * tws1_js_1.SEGMENT_SIZE;
186
+ if (cap < rules.minBytes)
187
+ throw tooSlow(name, declared, speed, cap, rules);
188
+ p = Math.min(p, cap);
189
+ }
190
+ while (Math.ceil(size / p) > rules.maxParts)
191
+ p *= 2;
192
+ if (speed && p > cap) {
193
+ // Doubling passed the cap: the smallest whole-segment size that fits, if the cap allows it (over the size before
194
+ // doubling, so over the smallest part).
195
+ const fit = Math.ceil(Math.ceil(size / rules.maxParts) / tws1_js_1.SEGMENT_SIZE) * tws1_js_1.SEGMENT_SIZE;
196
+ if (fit > cap)
197
+ throw tooSlow(name, declared, speed, cap, rules);
198
+ p = fit;
199
+ }
200
+ if ((0, tws1_js_1.partOf)(size, p, 1).storedSize > exports.MAX_PART_STORED) {
201
+ throw new errors_js_1.TeepinError(`${size} bytes needs parts over ${exports.MAX_PART_STORED} bytes; it is too large to upload`);
202
+ }
203
+ return p;
204
+ }
205
+ /**
206
+ * The part size for a stream whose size isn't known (section 22.1, E2 b). It fixes the largest stream: MAX_DIRECT_PARTS
207
+ * of it. expectedSize, a hint, chooses it as for a known size; with neither hint nor want, STREAM_PART_BYTES. A
208
+ * measured speed caps it as for a known size.
209
+ */
210
+ function streamPartSize(expectedSize = 0, want = 0, rules = exports.PART_RULES, speed, name = '') {
211
+ if (expectedSize > 0)
212
+ return partSize(expectedSize, expectedSize, want, rules, speed, name);
213
+ return partSize(1, 0, want > 0 ? want : rules.streamBytes, rules, speed, name);
214
+ }
215
+ exports.streamPartSize = streamPartSize;
216
+ /** A positive number from the environment (Node only; browsers have none), else def. */
217
+ function envNumber(name, def) {
218
+ const env = globalThis.process?.env;
219
+ const v = Number(env?.[name] ?? '');
220
+ return Number.isFinite(v) && v > 0 ? v : def;
221
+ }
222
+ exports.envNumber = envNumber;
223
+ /** A pack's size: each object's needle and TWS1 bytes. */
224
+ function packedSize(sizes) {
225
+ return sizes.reduce((n, s) => n + tws1_js_1.NEEDLE_HEADER_SIZE + (0, tws1_js_1.storedSize)(s), 0);
226
+ }
227
+ exports.packedSize = packedSize;
228
+ /**
229
+ * Packs for items, in order: each closes when the next item would take it past target bytes or maxObjects objects,
230
+ * and never holds one key twice (a second write to a key waits for the next pack, and writes to one key keep their
231
+ * order). An item bigger than target gets a pack of its own.
232
+ */
233
+ function planPacks(items, sizeOf, keyOf, target = exports.PACK_TARGET_BYTES, maxObjects = exports.PACK_MAX_OBJECTS) {
234
+ const packs = [];
235
+ let pending = items;
236
+ while (pending.length) {
237
+ const [pack, rest] = nextPack(pending, sizeOf, keyOf, target, maxObjects);
238
+ packs.push(pack);
239
+ pending = rest;
240
+ }
241
+ return packs;
242
+ }
243
+ exports.planPacks = planPacks;
244
+ /**
245
+ * The first of planPacks's packs, and the items left for later ones: a planner that packs as it goes, so each pack
246
+ * takes the target the speed measured by then allows (section 22.7).
247
+ */
248
+ function nextPack(items, sizeOf, keyOf, target = exports.PACK_TARGET_BYTES, maxObjects = exports.PACK_MAX_OBJECTS) {
249
+ const pack = [];
250
+ const keys = new Set();
251
+ const waiting = new Set(); // keys of items left for a later pack, in this pass
252
+ let size = 0;
253
+ const rest = [];
254
+ for (const it of items) {
255
+ const n = tws1_js_1.NEEDLE_HEADER_SIZE + (0, tws1_js_1.storedSize)(sizeOf(it));
256
+ const k = keyOf(it);
257
+ const fits = !pack.length || (size + n <= target && pack.length < maxObjects);
258
+ if (fits && !keys.has(k) && !waiting.has(k)) {
259
+ pack.push(it);
260
+ keys.add(k);
261
+ size += n;
262
+ }
263
+ else {
264
+ rest.push(it);
265
+ waiting.add(k);
266
+ }
267
+ }
268
+ return [pack, rest];
269
+ }
270
+ exports.nextPack = nextPack;
271
+ /**
272
+ * How many packs or parts may be in flight (section 17.8): starts at 4, adds about one per round of successes, halves
273
+ * on a throttle or a timeout, and never passes its ceiling.
274
+ *
275
+ * priority is set while putObject calls wait for a slot: a run's acquire() then waits too, so a freed slot goes to them
276
+ * (tryAcquire) before the run's next pack, and a long run never makes a putObject wait for its end.
277
+ */
278
+ class AdaptiveLimit {
279
+ ceiling;
280
+ limit;
281
+ inFlight = 0;
282
+ priority = false;
283
+ waiters = [];
284
+ constructor(start = exports.START_CONCURRENCY, ceiling = exports.MAX_CONCURRENCY) {
285
+ this.ceiling = Math.max(1, ceiling);
286
+ this.limit = Math.min(Math.max(1, start), this.ceiling);
287
+ }
288
+ free() {
289
+ return this.inFlight < Math.floor(this.limit);
290
+ }
291
+ /** A slot now, if one is free (putObject's dispatch, which priority doesn't hold back). */
292
+ tryAcquire() {
293
+ if (!this.free())
294
+ return false;
295
+ this.inFlight++;
296
+ return true;
297
+ }
298
+ /** Waits for a slot that putObject's callers aren't waiting for. An abort ends the wait with the signal's reason. */
299
+ async acquire(signal) {
300
+ for (;;) {
301
+ signal?.throwIfAborted();
302
+ if (this.free() && !this.priority) {
303
+ this.inFlight++;
304
+ return;
305
+ }
306
+ await new Promise((resolve, reject) => {
307
+ const wake = () => {
308
+ signal?.removeEventListener('abort', onAbort);
309
+ resolve();
310
+ };
311
+ const onAbort = () => {
312
+ this.waiters = this.waiters.filter((w) => w !== wake);
313
+ reject(signal?.reason);
314
+ };
315
+ this.waiters.push(wake);
316
+ signal?.addEventListener('abort', onAbort, { once: true });
317
+ });
318
+ }
319
+ }
320
+ setPriority(on) {
321
+ const changed = this.priority !== on;
322
+ this.priority = on;
323
+ if (changed && !on)
324
+ this.wakeAll();
325
+ }
326
+ release(outcome = 'ok') {
327
+ this.inFlight = Math.max(0, this.inFlight - 1);
328
+ if (outcome === 'ok')
329
+ this.limit = Math.min(this.ceiling, this.limit + 1 / this.limit);
330
+ else if (outcome === 'throttled')
331
+ this.limit = Math.max(1, this.limit / 2);
332
+ this.wakeAll();
333
+ }
334
+ wakeAll() {
335
+ const woken = this.waiters;
336
+ this.waiters = [];
337
+ for (const w of woken)
338
+ w();
339
+ }
340
+ }
341
+ exports.AdaptiveLimit = AdaptiveLimit;
342
+ /** A token bucket that caps retries at about a tenth of requests, plus a burst, so an incident doesn't become a retry storm (section 17.6). */
343
+ class RetryBudget {
344
+ ratio;
345
+ burst;
346
+ tokens;
347
+ constructor(ratio = 0.1, burst = 10) {
348
+ this.ratio = ratio;
349
+ this.burst = burst;
350
+ this.tokens = burst;
351
+ }
352
+ onRequest() {
353
+ this.tokens = Math.min(this.burst, this.tokens + this.ratio);
354
+ }
355
+ tryRetry() {
356
+ if (this.tokens < 1)
357
+ return false;
358
+ this.tokens -= 1;
359
+ return true;
360
+ }
361
+ }
362
+ exports.RetryBudget = RetryBudget;
363
+ /**
364
+ * The wait in ms before the next round when storage or the control plane is unavailable: from 5 s, doubling to 5
365
+ * minutes, with jitter; a server's Retry-After when it sent one (section 17.6).
366
+ */
367
+ function waitDelayMs(round, retryAfterMs) {
368
+ if (retryAfterMs)
369
+ return Math.min(retryAfterMs, 300000);
370
+ const base = Math.min(5000 * 2 ** round, 300000);
371
+ return base * (0.75 + Math.random() * 0.25);
372
+ }
373
+ exports.waitDelayMs = waitDelayMs;
374
+ /** What a PUT to the storage network ended in (undefined: success). */
375
+ function storageOutcome(err) {
376
+ if (err === undefined || err === null)
377
+ return 'sent';
378
+ if (err instanceof errors_js_1.ConnectionError)
379
+ return (0, client_js_1.certainlyUnsent)(err.cause) ? 'unsent' : 'unknown';
380
+ if (err instanceof errors_js_1.APIError) {
381
+ const s = err.statusCode;
382
+ if (s === 412)
383
+ return 'sent';
384
+ if (s === 401 || s === 403)
385
+ return 'resign';
386
+ if (s === 400 && (err.code === 'BadDigest' || err.message.includes('BadDigest')))
387
+ return 'bad';
388
+ if (s === 429 || s >= 500)
389
+ return 'busy';
390
+ }
391
+ return 'refused';
392
+ }
393
+ exports.storageOutcome = storageOutcome;
394
+ function isThrottle(err) {
395
+ return err instanceof errors_js_1.APIError && (err.statusCode === 429 || err.statusCode === 503);
396
+ }
397
+ exports.isThrottle = isThrottle;
398
+ /** A control-plane failure worth waiting out: the network, a busy or failing server (the client has already retried it). */
399
+ function isPassing(err) {
400
+ if (err instanceof errors_js_1.ConnectionError)
401
+ return true;
402
+ return err instanceof errors_js_1.APIError && (err.statusCode === 429 || err.statusCode >= 500);
403
+ }
404
+ exports.isPassing = isPassing;
405
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/direct/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ // Copyright 2026 TEEPIN Project
3
+ // Licensed under the Apache License, Version 2.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.openServerV1 = exports.SOURCE_API = exports.SOURCE_STORAGE = exports.FORMATS = exports.FORMAT_PLAIN = exports.FORMAT_SERVER = exports.FORMAT_TWS1 = void 0;
6
+ // The three formats objects are stored in, as a read session names them (TEEPIN-STORAGE-DESIGN.md sections 17.7 and
7
+ // 21.3), a port of teepin-python's _formats.py:
8
+ //
9
+ // - tws1: encrypted on the device (tws1.ts), read by segment;
10
+ // - teepin-v1: encrypted by Teepin when it staged a small object (teepin-core's crypt.go): one AES-256-GCM message,
11
+ // nonce, ciphertext and tag, bound to the session's associated_data. It is read whole and its tag checked before
12
+ // any byte is used;
13
+ // - plain: stored as is (objects written before encryption).
14
+ //
15
+ // A session's source says where the bytes are: storage (fetched with the signed requests) or api (an object still in
16
+ // the API's old stage, which isn't read: reads.ts's stagedError).
17
+ //
18
+ // Crypto is WebCrypto only, so the same code runs in Node 20+ and browsers.
19
+ const errors_js_1 = require("../errors.js");
20
+ exports.FORMAT_TWS1 = 'tws1';
21
+ exports.FORMAT_SERVER = 'teepin-v1';
22
+ exports.FORMAT_PLAIN = 'plain';
23
+ exports.FORMATS = [exports.FORMAT_TWS1, exports.FORMAT_SERVER, exports.FORMAT_PLAIN];
24
+ exports.SOURCE_STORAGE = 'storage';
25
+ exports.SOURCE_API = 'api';
26
+ const SERVER_NONCE_SIZE = 12;
27
+ const SERVER_TAG_SIZE = 16;
28
+ /** A teepin-v1 object's plaintext, after its tag is checked; DataIntegrityError if it doesn't authenticate. */
29
+ async function openServerV1(key, stored, associatedData) {
30
+ if (key.length !== 32)
31
+ throw new errors_js_1.DataIntegrityError('a teepin-v1 key is 32 bytes', 'format');
32
+ if (stored.length < SERVER_NONCE_SIZE + SERVER_TAG_SIZE)
33
+ throw new errors_js_1.DataIntegrityError('the object is too short to be encrypted', 'truncated');
34
+ const k = await crypto.subtle.importKey('raw', key, 'AES-GCM', false, ['decrypt']);
35
+ const params = { name: 'AES-GCM', iv: stored.subarray(0, SERVER_NONCE_SIZE), additionalData: associatedData };
36
+ try {
37
+ return new Uint8Array(await crypto.subtle.decrypt(params, k, stored.subarray(SERVER_NONCE_SIZE)));
38
+ }
39
+ catch {
40
+ throw new errors_js_1.DataIntegrityError('the object failed authentication', 'segment');
41
+ }
42
+ }
43
+ exports.openServerV1 = openServerV1;
44
+ //# sourceMappingURL=formats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formats.js","sourceRoot":"","sources":["../../../src/direct/formats.ts"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,iDAAiD;;;AAEjD,oHAAoH;AACpH,gDAAgD;AAChD,EAAE;AACF,8DAA8D;AAC9D,oHAAoH;AACpH,mHAAmH;AACnH,sBAAsB;AACtB,6DAA6D;AAC7D,EAAE;AACF,qHAAqH;AACrH,kEAAkE;AAClE,EAAE;AACF,4EAA4E;AAE5E,4CAAkD;AAErC,QAAA,WAAW,GAAG,MAAM,CAAC;AACrB,QAAA,aAAa,GAAG,WAAW,CAAC;AAC5B,QAAA,YAAY,GAAG,OAAO,CAAC;AACvB,QAAA,OAAO,GAAsB,CAAC,mBAAW,EAAE,qBAAa,EAAE,oBAAY,CAAC,CAAC;AAExE,QAAA,cAAc,GAAG,SAAS,CAAC;AAC3B,QAAA,UAAU,GAAG,KAAK,CAAC;AAEhC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,+GAA+G;AACxG,KAAK,UAAU,YAAY,CAAC,GAAe,EAAE,MAAkB,EAAE,cAA0B;IAChG,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;QAAE,MAAM,IAAI,8BAAkB,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAC;IAC7F,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB,GAAG,eAAe;QAAE,MAAM,IAAI,8BAAkB,CAAC,yCAAyC,EAAE,WAAW,CAAC,CAAC;IAC9I,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACnF,MAAM,MAAM,GAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;IAC5H,IAAI;QACF,OAAO,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;KACnG;IAAC,MAAM;QACN,MAAM,IAAI,8BAAkB,CAAC,kCAAkC,EAAE,SAAS,CAAC,CAAC;KAC7E;AACH,CAAC;AAVD,oCAUC"}