@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.
- package/README.md +41 -36
- package/dist/cjs/client.js +42 -4
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/direct/bytes.js +50 -0
- package/dist/cjs/direct/bytes.js.map +1 -0
- package/dist/cjs/direct/common.js +167 -0
- package/dist/cjs/direct/common.js.map +1 -0
- package/dist/cjs/direct/downloads-plan.js +127 -0
- package/dist/cjs/direct/downloads-plan.js.map +1 -0
- package/dist/cjs/direct/engine.js +405 -0
- package/dist/cjs/direct/engine.js.map +1 -0
- package/dist/cjs/direct/formats.js +44 -0
- package/dist/cjs/direct/formats.js.map +1 -0
- package/dist/cjs/direct/hpke.js +275 -0
- package/dist/cjs/direct/hpke.js.map +1 -0
- package/dist/cjs/direct/journal.js +80 -0
- package/dist/cjs/direct/journal.js.map +1 -0
- package/dist/cjs/direct/large.js +850 -0
- package/dist/cjs/direct/large.js.map +1 -0
- package/dist/cjs/direct/reads.js +1314 -0
- package/dist/cjs/direct/reads.js.map +1 -0
- package/dist/cjs/direct/sha256.js +122 -0
- package/dist/cjs/direct/sha256.js.map +1 -0
- package/dist/cjs/direct/tws1.js +480 -0
- package/dist/cjs/direct/tws1.js.map +1 -0
- package/dist/cjs/direct/uploads.js +1706 -0
- package/dist/cjs/direct/uploads.js.map +1 -0
- package/dist/cjs/errors.js +70 -13
- package/dist/cjs/errors.js.map +1 -1
- package/dist/cjs/index.js +5 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/links.js +195 -0
- package/dist/cjs/links.js.map +1 -0
- package/dist/cjs/node/downloads.js +835 -0
- package/dist/cjs/node/downloads.js.map +1 -0
- package/dist/cjs/node/journal.js +841 -0
- package/dist/cjs/node/journal.js.map +1 -0
- package/dist/cjs/node/uploads.js +219 -0
- package/dist/cjs/node/uploads.js.map +1 -0
- package/dist/cjs/node.js +26 -39
- package/dist/cjs/node.js.map +1 -1
- package/dist/cjs/storage.js +214 -184
- package/dist/cjs/storage.js.map +1 -1
- package/dist/cjs/transfer.js +18 -351
- package/dist/cjs/transfer.js.map +1 -1
- package/dist/esm/client.js +42 -4
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/direct/bytes.js +42 -0
- package/dist/esm/direct/bytes.js.map +1 -0
- package/dist/esm/direct/common.js +155 -0
- package/dist/esm/direct/common.js.map +1 -0
- package/dist/esm/direct/downloads-plan.js +117 -0
- package/dist/esm/direct/downloads-plan.js.map +1 -0
- package/dist/esm/direct/engine.js +385 -0
- package/dist/esm/direct/engine.js.map +1 -0
- package/dist/esm/direct/formats.js +40 -0
- package/dist/esm/direct/formats.js.map +1 -0
- package/dist/esm/direct/hpke.js +262 -0
- package/dist/esm/direct/hpke.js.map +1 -0
- package/dist/esm/direct/journal.js +75 -0
- package/dist/esm/direct/journal.js.map +1 -0
- package/dist/esm/direct/large.js +816 -0
- package/dist/esm/direct/large.js.map +1 -0
- package/dist/esm/direct/reads.js +1275 -0
- package/dist/esm/direct/reads.js.map +1 -0
- package/dist/esm/direct/sha256.js +118 -0
- package/dist/esm/direct/sha256.js.map +1 -0
- package/dist/esm/direct/tws1.js +460 -0
- package/dist/esm/direct/tws1.js.map +1 -0
- package/dist/esm/direct/uploads.js +1660 -0
- package/dist/esm/direct/uploads.js.map +1 -0
- package/dist/esm/errors.js +64 -11
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/links.js +189 -0
- package/dist/esm/links.js.map +1 -0
- package/dist/esm/node/downloads.js +829 -0
- package/dist/esm/node/downloads.js.map +1 -0
- package/dist/esm/node/journal.js +824 -0
- package/dist/esm/node/journal.js.map +1 -0
- package/dist/esm/node/uploads.js +187 -0
- package/dist/esm/node/uploads.js.map +1 -0
- package/dist/esm/node.js +17 -14
- package/dist/esm/node.js.map +1 -1
- package/dist/esm/storage.js +214 -184
- package/dist/esm/storage.js.map +1 -1
- package/dist/esm/transfer.js +19 -349
- package/dist/esm/transfer.js.map +1 -1
- package/dist/types/client.d.ts +45 -4
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/direct/bytes.d.ts +11 -0
- package/dist/types/direct/bytes.d.ts.map +1 -0
- package/dist/types/direct/common.d.ts +47 -0
- package/dist/types/direct/common.d.ts.map +1 -0
- package/dist/types/direct/downloads-plan.d.ts +75 -0
- package/dist/types/direct/downloads-plan.d.ts.map +1 -0
- package/dist/types/direct/engine.d.ts +191 -0
- package/dist/types/direct/engine.d.ts.map +1 -0
- package/dist/types/direct/formats.d.ts +9 -0
- package/dist/types/direct/formats.d.ts.map +1 -0
- package/dist/types/direct/hpke.d.ts +55 -0
- package/dist/types/direct/hpke.d.ts.map +1 -0
- package/dist/types/direct/journal.d.ts +55 -0
- package/dist/types/direct/journal.d.ts.map +1 -0
- package/dist/types/direct/large.d.ts +170 -0
- package/dist/types/direct/large.d.ts.map +1 -0
- package/dist/types/direct/reads.d.ts +306 -0
- package/dist/types/direct/reads.d.ts.map +1 -0
- package/dist/types/direct/sha256.d.ts +16 -0
- package/dist/types/direct/sha256.d.ts.map +1 -0
- package/dist/types/direct/tws1.d.ts +157 -0
- package/dist/types/direct/tws1.d.ts.map +1 -0
- package/dist/types/direct/uploads.d.ts +461 -0
- package/dist/types/direct/uploads.d.ts.map +1 -0
- package/dist/types/errors.d.ts +47 -8
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/links.d.ts +86 -0
- package/dist/types/links.d.ts.map +1 -0
- package/dist/types/node/downloads.d.ts +73 -0
- package/dist/types/node/downloads.d.ts.map +1 -0
- package/dist/types/node/journal.d.ts +162 -0
- package/dist/types/node/journal.d.ts.map +1 -0
- package/dist/types/node/uploads.d.ts +86 -0
- package/dist/types/node/uploads.d.ts.map +1 -0
- package/dist/types/node.d.ts +4 -2
- package/dist/types/node.d.ts.map +1 -1
- package/dist/types/storage.d.ts +107 -64
- package/dist/types/storage.d.ts.map +1 -1
- package/dist/types/transfer.d.ts +14 -23
- package/dist/types/transfer.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/esm/transfer.js
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
// Copyright 2026 TEEPIN Project
|
|
2
2
|
// Licensed under the Apache License, Version 2.0
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
import { Sha256 } from './direct/sha256.js';
|
|
4
|
+
import { TeepinError } from './errors.js';
|
|
5
|
+
import { MAX_PART_SIZE, MAX_PARTS, MIN_PART_SIZE } from './storage.js';
|
|
6
|
+
/** computeETag hashes a whole source in reads of this size, so a file of any size is never held in memory at once. */
|
|
7
|
+
const ETAG_READ = 8 * 2 ** 20;
|
|
8
|
+
/** The part size of uploads in parts, unless asked for. */
|
|
8
9
|
export const DEFAULT_PART_SIZE = 16 * 2 ** 20;
|
|
9
10
|
/** upload sends larger data in parts. */
|
|
10
11
|
export const MULTIPART_THRESHOLD = 16 * 2 ** 20;
|
|
11
12
|
/** How many parts or ranges move at once. */
|
|
12
13
|
export const DEFAULT_CONCURRENCY = 8;
|
|
13
14
|
/**
|
|
14
|
-
* The part size
|
|
15
|
-
*
|
|
15
|
+
* The part size earlier releases' uploads in parts used for size bytes when want was asked for: at least
|
|
16
|
+
* MIN_PART_SIZE, doubled until the parts fit in MAX_PARTS. With computeETag it matches the ETag of an object uploaded
|
|
17
|
+
* in parts before the direct path (one ending in "-<parts>"); objects uploaded now have their SHA-256 as their ETag.
|
|
16
18
|
*/
|
|
17
19
|
export function partSize(size, want = 0) {
|
|
18
20
|
let p = Math.max(want || DEFAULT_PART_SIZE, MIN_PART_SIZE);
|
|
@@ -34,14 +36,18 @@ async function composite(parts) {
|
|
|
34
36
|
return `${await sha256Hex(all)}-${parts.length}`;
|
|
35
37
|
}
|
|
36
38
|
/**
|
|
37
|
-
* The ETag Teepin gives source:
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
39
|
+
* The ETag Teepin gives source: its SHA-256 when parts is 0, which is every object uploaded now however it was sent.
|
|
40
|
+
* An object uploaded in parts by an earlier release has the SHA-256 of its parts' SHA-256s with "-<parts>": pass the
|
|
41
|
+
* part size it used (partSize) and its part count. Compare with StorageObject.etag to tell whether local data and an
|
|
42
|
+
* object hold the same bytes.
|
|
41
43
|
*/
|
|
42
44
|
export async function computeETag(source, partBytes, parts) {
|
|
43
|
-
if (parts === 0)
|
|
44
|
-
|
|
45
|
+
if (parts === 0) {
|
|
46
|
+
const h = new Sha256();
|
|
47
|
+
for (let off = 0; off < source.size; off += ETAG_READ)
|
|
48
|
+
h.update(await source.read(off, Math.min(ETAG_READ, source.size - off)));
|
|
49
|
+
return h.hexDigest();
|
|
50
|
+
}
|
|
45
51
|
if (Math.ceil(source.size / partBytes) !== parts)
|
|
46
52
|
throw new TeepinError(`${source.size} bytes in parts of ${partBytes} is not ${parts} parts`);
|
|
47
53
|
const sums = [];
|
|
@@ -65,340 +71,4 @@ export function sourceOf(body) {
|
|
|
65
71
|
}
|
|
66
72
|
return body;
|
|
67
73
|
}
|
|
68
|
-
function isStream(body) {
|
|
69
|
-
if (typeof ReadableStream !== 'undefined' && body instanceof ReadableStream)
|
|
70
|
-
return true;
|
|
71
|
-
return typeof body === 'object' && body !== null && Symbol.asyncIterator in body && !('read' in body && 'size' in body);
|
|
72
|
-
}
|
|
73
|
-
class Progress {
|
|
74
|
-
total;
|
|
75
|
-
fn;
|
|
76
|
-
done = 0;
|
|
77
|
-
constructor(total, fn) {
|
|
78
|
-
this.total = total;
|
|
79
|
-
this.fn = fn;
|
|
80
|
-
}
|
|
81
|
-
add(n) {
|
|
82
|
-
if (!this.fn || n === 0)
|
|
83
|
-
return;
|
|
84
|
-
this.done += n;
|
|
85
|
-
this.fn(this.done, this.total);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
/** Runs fn for each item, n at a time, stopping at the first error, which it throws. */
|
|
89
|
-
async function parallel(items, n, signal, fn) {
|
|
90
|
-
const ctl = new AbortController();
|
|
91
|
-
const onAbort = () => ctl.abort(signal?.reason);
|
|
92
|
-
signal?.addEventListener('abort', onAbort, { once: true });
|
|
93
|
-
let next = 0;
|
|
94
|
-
let failure;
|
|
95
|
-
const worker = async () => {
|
|
96
|
-
while (next < items.length && failure === undefined && !ctl.signal.aborted) {
|
|
97
|
-
const item = items[next++];
|
|
98
|
-
try {
|
|
99
|
-
await fn(item, ctl.signal);
|
|
100
|
-
}
|
|
101
|
-
catch (err) {
|
|
102
|
-
if (failure === undefined)
|
|
103
|
-
failure = err;
|
|
104
|
-
ctl.abort(err);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
try {
|
|
109
|
-
await Promise.all(Array.from({ length: Math.min(n, items.length) }, worker));
|
|
110
|
-
}
|
|
111
|
-
finally {
|
|
112
|
-
signal?.removeEventListener('abort', onAbort);
|
|
113
|
-
}
|
|
114
|
-
if (failure !== undefined)
|
|
115
|
-
throw failure;
|
|
116
|
-
if (signal?.aborted)
|
|
117
|
-
throw signal.reason;
|
|
118
|
-
}
|
|
119
|
-
export async function upload(s, bucket, key, body, opts = {}) {
|
|
120
|
-
if (isStream(body))
|
|
121
|
-
return uploadStream(s, bucket, key, body, opts);
|
|
122
|
-
const src = sourceOf(body);
|
|
123
|
-
const contentType = opts.contentType || src.type;
|
|
124
|
-
if (src.size > MAX_OBJECT_SIZE)
|
|
125
|
-
throw new TeepinError(`${src.size} bytes is over the 5 TiB an object may hold`);
|
|
126
|
-
if (src.size <= MULTIPART_THRESHOLD) {
|
|
127
|
-
const bytes = await src.read(0, src.size);
|
|
128
|
-
return putVerified(s, bucket, key, bytes, contentType, opts);
|
|
129
|
-
}
|
|
130
|
-
return uploadParts(s, bucket, key, src, contentType, opts);
|
|
131
|
-
}
|
|
132
|
-
async function putVerified(s, bucket, key, bytes, contentType, opts) {
|
|
133
|
-
const want = await sha256Hex(bytes);
|
|
134
|
-
const obj = await s.putObject(bucket, key, bytes, { contentType, metadata: opts.metadata, signal: opts.signal });
|
|
135
|
-
if (obj.etag && obj.etag !== want)
|
|
136
|
-
throw new ChecksumMismatchError(`stored ${obj.etag}, sent ${want}`);
|
|
137
|
-
opts.onProgress?.(bytes.length, bytes.length);
|
|
138
|
-
return obj;
|
|
139
|
-
}
|
|
140
|
-
async function uploadParts(s, bucket, key, src, contentType, opts) {
|
|
141
|
-
const size = partSize(src.size, opts.partSize);
|
|
142
|
-
const n = Math.ceil(src.size / size);
|
|
143
|
-
const span = (num) => {
|
|
144
|
-
const off = (num - 1) * size;
|
|
145
|
-
return [off, Math.min(size, src.size - off)];
|
|
146
|
-
};
|
|
147
|
-
const progress = new Progress(src.size, opts.onProgress);
|
|
148
|
-
const sums = new Array(n + 1);
|
|
149
|
-
let up;
|
|
150
|
-
if (opts.resume)
|
|
151
|
-
up = await resumable(s, bucket, key, contentType, src, n, span, sums, progress, opts.signal);
|
|
152
|
-
up ??= await s.createUpload(bucket, key, { contentType, metadata: opts.metadata, signal: opts.signal });
|
|
153
|
-
const id = up.id;
|
|
154
|
-
const todo = [];
|
|
155
|
-
for (let num = 1; num <= n; num++)
|
|
156
|
-
if (!sums[num])
|
|
157
|
-
todo.push(num);
|
|
158
|
-
try {
|
|
159
|
-
await parallel(todo, opts.concurrency ?? DEFAULT_CONCURRENCY, opts.signal, async (num, signal) => {
|
|
160
|
-
const [off, len] = span(num);
|
|
161
|
-
const bytes = await src.read(off, len);
|
|
162
|
-
const md5 = md5Hex(bytes);
|
|
163
|
-
const part = await s.uploadPart(bucket, id, num, bytes, signal);
|
|
164
|
-
if (part.etag !== md5)
|
|
165
|
-
throw new ChecksumMismatchError(`part ${num}: the server received MD5 ${part.etag}, sent ${md5}`);
|
|
166
|
-
sums[num] = { md5, sha256: await sha256Raw(bytes) };
|
|
167
|
-
progress.add(len);
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
catch (err) {
|
|
171
|
-
throw await failUpload(s, bucket, id, !!opts.resume, err);
|
|
172
|
-
}
|
|
173
|
-
const parts = [];
|
|
174
|
-
const shas = [];
|
|
175
|
-
for (let num = 1; num <= n; num++) {
|
|
176
|
-
parts.push({ number: num, etag: sums[num].md5 });
|
|
177
|
-
shas.push(sums[num].sha256);
|
|
178
|
-
}
|
|
179
|
-
return complete(s, bucket, key, id, parts, await composite(shas), !!opts.resume, opts.signal);
|
|
180
|
-
}
|
|
181
|
-
async function complete(s, bucket, key, id, parts, want, keep, signal) {
|
|
182
|
-
let obj;
|
|
183
|
-
try {
|
|
184
|
-
obj = await s.completeUpload(bucket, id, parts, signal);
|
|
185
|
-
}
|
|
186
|
-
catch (err) {
|
|
187
|
-
if (isRetryable(err) || errorCode(err) === 'upload_not_found') {
|
|
188
|
-
// The answer may have been lost after the object was made.
|
|
189
|
-
const got = await s.statObject(bucket, key, signal).catch(() => null);
|
|
190
|
-
if (got && got.etag === want)
|
|
191
|
-
return got;
|
|
192
|
-
}
|
|
193
|
-
throw await failUpload(s, bucket, id, keep, err);
|
|
194
|
-
}
|
|
195
|
-
if (obj.etag !== want)
|
|
196
|
-
throw new ChecksumMismatchError(`stored ${obj.etag}, sent ${want}`);
|
|
197
|
-
return obj;
|
|
198
|
-
}
|
|
199
|
-
async function failUpload(s, bucket, id, keep, err) {
|
|
200
|
-
if (!keep)
|
|
201
|
-
await s.abortUpload(bucket, id).catch(() => undefined);
|
|
202
|
-
return new UploadError(id, err);
|
|
203
|
-
}
|
|
204
|
-
/** The newest open upload of key this data can continue, with sums filled for parts it already holds with the same bytes. */
|
|
205
|
-
async function resumable(s, bucket, key, contentType, src, n, span, sums, progress, signal) {
|
|
206
|
-
const ups = await s.listUploads(bucket, key, signal);
|
|
207
|
-
for (let i = ups.length - 1; i >= 0; i--) {
|
|
208
|
-
if (ups[i].key !== key || (contentType && ups[i].contentType !== contentType))
|
|
209
|
-
continue;
|
|
210
|
-
let up;
|
|
211
|
-
try {
|
|
212
|
-
up = await s.listParts(bucket, ups[i].id, signal);
|
|
213
|
-
}
|
|
214
|
-
catch (err) {
|
|
215
|
-
if (errorCode(err) === 'upload_not_found')
|
|
216
|
-
continue; // completed, cancelled or expired meanwhile
|
|
217
|
-
throw err;
|
|
218
|
-
}
|
|
219
|
-
for (const p of up.parts) {
|
|
220
|
-
if (p.number < 1 || p.number > n)
|
|
221
|
-
continue;
|
|
222
|
-
const [off, len] = span(p.number);
|
|
223
|
-
if (p.size !== len)
|
|
224
|
-
continue; // another part size: sent again
|
|
225
|
-
const bytes = await src.read(off, len);
|
|
226
|
-
if (md5Hex(bytes) === p.etag) {
|
|
227
|
-
sums[p.number] = { md5: p.etag, sha256: await sha256Raw(bytes) };
|
|
228
|
-
progress.add(len);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
return up;
|
|
232
|
-
}
|
|
233
|
-
return undefined;
|
|
234
|
-
}
|
|
235
|
-
async function* chunksOf(body) {
|
|
236
|
-
if (typeof ReadableStream !== 'undefined' && body instanceof ReadableStream) {
|
|
237
|
-
const reader = body.getReader();
|
|
238
|
-
try {
|
|
239
|
-
for (;;) {
|
|
240
|
-
const { done, value } = await reader.read();
|
|
241
|
-
if (done)
|
|
242
|
-
return;
|
|
243
|
-
if (value?.length)
|
|
244
|
-
yield value;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
finally {
|
|
248
|
-
reader.releaseLock();
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
else {
|
|
252
|
-
for await (const c of body)
|
|
253
|
-
if (c?.length)
|
|
254
|
-
yield c;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
/** Reads a stream into parts of size bytes (the last may be shorter). */
|
|
258
|
-
async function* partsOf(body, size) {
|
|
259
|
-
let buf = new Uint8Array(size);
|
|
260
|
-
let filled = 0;
|
|
261
|
-
for await (let chunk of chunksOf(body)) {
|
|
262
|
-
while (chunk.length) {
|
|
263
|
-
const take = Math.min(size - filled, chunk.length);
|
|
264
|
-
buf.set(chunk.subarray(0, take), filled);
|
|
265
|
-
filled += take;
|
|
266
|
-
chunk = chunk.subarray(take);
|
|
267
|
-
if (filled === size) {
|
|
268
|
-
yield buf;
|
|
269
|
-
buf = new Uint8Array(size);
|
|
270
|
-
filled = 0;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
if (filled)
|
|
275
|
-
yield buf.subarray(0, filled);
|
|
276
|
-
}
|
|
277
|
-
/** Sends a stream of unknown size: what fits in one part in one request, the rest in parts, concurrency at a time. */
|
|
278
|
-
async function uploadStream(s, bucket, key, body, opts) {
|
|
279
|
-
const size = Math.max(opts.partSize || DEFAULT_PART_SIZE, MIN_PART_SIZE);
|
|
280
|
-
const parts = partsOf(body, size);
|
|
281
|
-
const first = await parts.next();
|
|
282
|
-
const firstBytes = first.done ? new Uint8Array() : first.value;
|
|
283
|
-
const second = firstBytes.length === size ? await parts.next() : { done: true, value: undefined };
|
|
284
|
-
if (second.done)
|
|
285
|
-
return putVerified(s, bucket, key, firstBytes, opts.contentType, opts);
|
|
286
|
-
const progress = new Progress(-1, opts.onProgress);
|
|
287
|
-
const up = await s.createUpload(bucket, key, { contentType: opts.contentType, metadata: opts.metadata, signal: opts.signal });
|
|
288
|
-
const sums = [];
|
|
289
|
-
const inflight = new Set();
|
|
290
|
-
let failure;
|
|
291
|
-
const ctl = new AbortController();
|
|
292
|
-
opts.signal?.addEventListener('abort', () => ctl.abort(opts.signal?.reason), { once: true });
|
|
293
|
-
const send = (num, bytes) => {
|
|
294
|
-
const p = (async () => {
|
|
295
|
-
const md5 = md5Hex(bytes);
|
|
296
|
-
const part = await s.uploadPart(bucket, up.id, num, bytes, ctl.signal);
|
|
297
|
-
if (part.etag !== md5)
|
|
298
|
-
throw new ChecksumMismatchError(`part ${num}`);
|
|
299
|
-
sums[num - 1] = { md5, sha256: await sha256Raw(bytes) };
|
|
300
|
-
progress.add(bytes.length);
|
|
301
|
-
})().catch((err) => {
|
|
302
|
-
failure ??= err;
|
|
303
|
-
ctl.abort(err);
|
|
304
|
-
});
|
|
305
|
-
inflight.add(p);
|
|
306
|
-
p.finally(() => inflight.delete(p));
|
|
307
|
-
};
|
|
308
|
-
try {
|
|
309
|
-
let num = 0;
|
|
310
|
-
const queue = async (bytes) => {
|
|
311
|
-
if (++num > MAX_PARTS)
|
|
312
|
-
throw new TeepinError(`the stream is over ${MAX_PARTS} parts of ${size} bytes; raise partSize`);
|
|
313
|
-
while (inflight.size >= (opts.concurrency ?? DEFAULT_CONCURRENCY))
|
|
314
|
-
await Promise.race(inflight);
|
|
315
|
-
if (failure !== undefined)
|
|
316
|
-
throw failure;
|
|
317
|
-
send(num, bytes);
|
|
318
|
-
};
|
|
319
|
-
await queue(firstBytes);
|
|
320
|
-
await queue(second.value);
|
|
321
|
-
for await (const bytes of { [Symbol.asyncIterator]: () => parts }) {
|
|
322
|
-
if (failure !== undefined)
|
|
323
|
-
break;
|
|
324
|
-
await queue(bytes);
|
|
325
|
-
}
|
|
326
|
-
await Promise.all(inflight);
|
|
327
|
-
if (failure !== undefined)
|
|
328
|
-
throw failure;
|
|
329
|
-
}
|
|
330
|
-
catch (err) {
|
|
331
|
-
await Promise.allSettled(inflight);
|
|
332
|
-
throw await failUpload(s, bucket, up.id, false, failure ?? err);
|
|
333
|
-
}
|
|
334
|
-
const list = sums.map((x, i) => ({ number: i + 1, etag: x.md5 }));
|
|
335
|
-
return complete(s, bucket, key, up.id, list, await composite(sums.map((x) => x.sha256)), false, opts.signal);
|
|
336
|
-
}
|
|
337
|
-
/** Copies length bytes of obj from start into write, continuing where it broke off after a passing failure. */
|
|
338
|
-
async function fetchRange(s, bucket, key, obj, start, length, write, progress, signal) {
|
|
339
|
-
let done = 0;
|
|
340
|
-
for (let attempt = 0; length > 0; attempt++) {
|
|
341
|
-
try {
|
|
342
|
-
const r = await s.getObject(bucket, key, { range: { start: start + done, end: start + length - 1 }, ifMatch: obj.etag, signal });
|
|
343
|
-
const reader = r.body.getReader();
|
|
344
|
-
try {
|
|
345
|
-
for (;;) {
|
|
346
|
-
let chunk;
|
|
347
|
-
try {
|
|
348
|
-
chunk = await reader.read();
|
|
349
|
-
}
|
|
350
|
-
catch (err) {
|
|
351
|
-
if (signal?.aborted)
|
|
352
|
-
throw signal.reason;
|
|
353
|
-
throw new ConnectionError('the download broke off', err);
|
|
354
|
-
}
|
|
355
|
-
if (chunk.done)
|
|
356
|
-
break;
|
|
357
|
-
await write(start + done, chunk.value);
|
|
358
|
-
done += chunk.value.length;
|
|
359
|
-
progress.add(chunk.value.length);
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
finally {
|
|
363
|
-
reader.releaseLock();
|
|
364
|
-
}
|
|
365
|
-
if (done < length)
|
|
366
|
-
throw new ConnectionError('the download ended early');
|
|
367
|
-
return;
|
|
368
|
-
}
|
|
369
|
-
catch (err) {
|
|
370
|
-
if (err instanceof ObjectChangedError || !isRetryable(err) || attempt >= s.client.maxRetries || signal?.aborted)
|
|
371
|
-
throw err;
|
|
372
|
-
await s.client.sleep(backoff(attempt, err), signal);
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
/** Stats the object, opens a writer for it, and fetches it as ranges, concurrency at a time. */
|
|
377
|
-
async function fetchAll(s, bucket, key, open, opts) {
|
|
378
|
-
const obj = await s.statObject(bucket, key, opts.signal);
|
|
379
|
-
const write = open(obj);
|
|
380
|
-
const size = opts.partSize || DEFAULT_PART_SIZE;
|
|
381
|
-
const progress = new Progress(obj.size, opts.onProgress);
|
|
382
|
-
const ranges = [];
|
|
383
|
-
for (let off = 0; off < obj.size; off += size)
|
|
384
|
-
ranges.push(off);
|
|
385
|
-
await parallel(ranges, opts.concurrency ?? DEFAULT_CONCURRENCY, opts.signal, (off, signal) => fetchRange(s, bucket, key, obj, off, Math.min(size, obj.size - off), write, progress, signal));
|
|
386
|
-
return obj;
|
|
387
|
-
}
|
|
388
|
-
/** Downloads into memory and checks objects stored in one request against their SHA-256. For large files use downloadTo. */
|
|
389
|
-
export async function download(s, bucket, key, opts = {}) {
|
|
390
|
-
let data = new Uint8Array();
|
|
391
|
-
const object = await fetchAll(s, bucket, key, (obj) => {
|
|
392
|
-
data = new Uint8Array(obj.size);
|
|
393
|
-
return (off, chunk) => data.set(chunk, off);
|
|
394
|
-
}, opts);
|
|
395
|
-
if (!opts.skipVerify && object.partCount === 0 && object.checksumSha256 && (await sha256Hex(data)) !== object.checksumSha256) {
|
|
396
|
-
throw new ChecksumMismatchError();
|
|
397
|
-
}
|
|
398
|
-
return { object, data };
|
|
399
|
-
}
|
|
400
|
-
/** Downloads into sink, as parallel ranges pinned to one version of the object. Does not check the checksum; @teepin/sdk/node's downloadFile does. */
|
|
401
|
-
export async function downloadTo(s, bucket, key, sink, opts = {}) {
|
|
402
|
-
return fetchAll(s, bucket, key, () => (off, chunk) => sink.write(off, chunk), opts);
|
|
403
|
-
}
|
|
404
74
|
//# sourceMappingURL=transfer.js.map
|
package/dist/esm/transfer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/transfer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/transfer.ts"],"names":[],"mappings":"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"}
|
package/dist/types/client.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { InferenceService } from './inference.js';
|
|
|
2
2
|
import { InstancesService } from './instances.js';
|
|
3
3
|
import { StorageService } from './storage.js';
|
|
4
4
|
/** This SDK's version, sent in the User-Agent where the runtime allows it. */
|
|
5
|
-
export declare const VERSION = "0.
|
|
5
|
+
export declare const VERSION = "0.3.0";
|
|
6
6
|
/** The public API. */
|
|
7
7
|
export declare const DEFAULT_BASE_URL = "https://api.teepin.com";
|
|
8
8
|
/** Client configuration. Usually nothing: the key and address come from the
|
|
@@ -23,6 +23,32 @@ export interface ClientConfig {
|
|
|
23
23
|
maxRetries?: number;
|
|
24
24
|
/** The fetch to use (default: the global one). */
|
|
25
25
|
fetch?: typeof fetch;
|
|
26
|
+
/**
|
|
27
|
+
* Milliseconds a read keeps an object's data key in memory, so later reads of the same version needn't fetch it
|
|
28
|
+
* (default 600000; 0 keeps none). Keys are zeroed on expiry and on close().
|
|
29
|
+
*/
|
|
30
|
+
keyCacheTtl?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Milliseconds an upload waits for an unavailable storage network or control plane before StorageUnavailableError
|
|
33
|
+
* (default: the TEEPIN_UPLOAD_WAIT environment variable in seconds, else 600000). 0 fails at once.
|
|
34
|
+
*/
|
|
35
|
+
uploadWait?: number;
|
|
36
|
+
/** The most packs or parts an upload has in flight at once (default: TEEPIN_UPLOAD_CONCURRENCY, else 32). */
|
|
37
|
+
uploadConcurrency?: number;
|
|
38
|
+
/**
|
|
39
|
+
* Where @teepin/sdk/node's upload runs keep their journals (default: TEEPIN_STATE_DIR, else the OS's state
|
|
40
|
+
* directory: $XDG_STATE_HOME/teepin, ~/Library/Application Support/teepin or %LOCALAPPDATA%\teepin).
|
|
41
|
+
*/
|
|
42
|
+
stateDir?: string;
|
|
43
|
+
}
|
|
44
|
+
/** One request to a URL the control plane signed: the storage network's. */
|
|
45
|
+
export interface SignedRequest {
|
|
46
|
+
method: string;
|
|
47
|
+
url: string;
|
|
48
|
+
/** Sent exactly as signed. */
|
|
49
|
+
headers: Record<string, string>;
|
|
50
|
+
body?: BodyInit;
|
|
51
|
+
signal?: AbortSignal;
|
|
26
52
|
}
|
|
27
53
|
/** When a failed request may be sent again. */
|
|
28
54
|
export type RetryMode =
|
|
@@ -91,8 +117,17 @@ export declare class TeepinClient {
|
|
|
91
117
|
readonly inference: InferenceService;
|
|
92
118
|
private readonly apiKey?;
|
|
93
119
|
private readonly projectId?;
|
|
94
|
-
|
|
120
|
+
/** Milliseconds one call that is not a transfer may take; also how long a storage read waits for its next bytes. */
|
|
121
|
+
readonly timeout: number;
|
|
95
122
|
readonly maxRetries: number;
|
|
123
|
+
/** Milliseconds a read keeps a data key (ClientConfig.keyCacheTtl); 0 keeps none. */
|
|
124
|
+
readonly keyCacheTtl: number;
|
|
125
|
+
/** Milliseconds an upload waits for storage to come back (ClientConfig.uploadWait); 0 fails at once. */
|
|
126
|
+
readonly uploadWait: number;
|
|
127
|
+
/** The most packs or parts in flight at once (ClientConfig.uploadConcurrency). */
|
|
128
|
+
readonly uploadConcurrency: number;
|
|
129
|
+
/** Where upload runs keep their journals (ClientConfig.stateDir); undefined for the default. */
|
|
130
|
+
readonly stateDir?: string;
|
|
96
131
|
private readonly fetchImpl;
|
|
97
132
|
/** Waits between retries; replaced in tests. */
|
|
98
133
|
sleep: (ms: number, signal?: AbortSignal) => Promise<void>;
|
|
@@ -106,8 +141,14 @@ export declare class TeepinClient {
|
|
|
106
141
|
}>;
|
|
107
142
|
/** The JSON call the compute API uses. */
|
|
108
143
|
request<T = unknown>(method: string, path: string, json?: unknown): Promise<T>;
|
|
109
|
-
/**
|
|
110
|
-
|
|
144
|
+
/**
|
|
145
|
+
* Sends a request the control plane signed for the storage network, once: without the API key, and with no retries
|
|
146
|
+
* (the direct engine decides). Resolves once the answer's headers are in, its body then bounded by signal; throws
|
|
147
|
+
* ConnectionError when no answer came (an abort throws the signal's reason) and APIError for an error answer.
|
|
148
|
+
*/
|
|
149
|
+
sendSigned(req: SignedRequest): Promise<Response>;
|
|
150
|
+
/** Zeroes the data keys storage reads keep in memory. The client still works: later reads fetch their keys again. */
|
|
151
|
+
close(): void;
|
|
111
152
|
private sendOnce;
|
|
112
153
|
}
|
|
113
154
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** The bytes of parts, joined into one new array. */
|
|
2
|
+
export declare function concat(parts: Uint8Array[]): Uint8Array;
|
|
3
|
+
/** Whether a and b hold the same bytes, in time that depends only on their lengths. */
|
|
4
|
+
export declare function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean;
|
|
5
|
+
/** A string's UTF-8 bytes. */
|
|
6
|
+
export declare function utf8(s: string): Uint8Array;
|
|
7
|
+
/** The bytes of a base64 string (atob is in Node 16+ and every browser). */
|
|
8
|
+
export declare function fromBase64(s: string): Uint8Array;
|
|
9
|
+
/** Whether n is a whole number JavaScript holds exactly. */
|
|
10
|
+
export declare function isInt(n: number): boolean;
|
|
11
|
+
//# sourceMappingURL=bytes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../../src/direct/bytes.ts"],"names":[],"mappings":"AAKA,qDAAqD;AACrD,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,CAUtD;AAED,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAKvE;AAED,8BAA8B;AAC9B,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAE1C;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAKhD;AAED,4DAA4D;AAC5D,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAExC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { StorageObject } from '../storage.js';
|
|
2
|
+
/** Plain JSON, as the API answers it. */
|
|
3
|
+
export type Json = Record<string, unknown>;
|
|
4
|
+
/** base64 of bytes (btoa is in Node 16+ and every browser). */
|
|
5
|
+
export declare function toBase64(b: Uint8Array): string;
|
|
6
|
+
/** A UUIDv7 (RFC 9562): a millisecond timestamp, then random bits, so ids sort by time. */
|
|
7
|
+
export declare function uuid7(): string;
|
|
8
|
+
/** An object from the API's JSON. */
|
|
9
|
+
export declare function objectFrom(raw: unknown): StorageObject;
|
|
10
|
+
/** A promise with its resolve at hand. */
|
|
11
|
+
export declare class Deferred {
|
|
12
|
+
readonly promise: Promise<void>;
|
|
13
|
+
resolve: () => void;
|
|
14
|
+
settled: boolean;
|
|
15
|
+
constructor();
|
|
16
|
+
}
|
|
17
|
+
/** Resolves when p does, or rejects with signal's reason when it aborts first. */
|
|
18
|
+
export declare function abortable<T>(p: Promise<T>, signal?: AbortSignal): Promise<T>;
|
|
19
|
+
/** A controller that aborts with parent's reason, and a function that unlinks it once it is no longer needed. */
|
|
20
|
+
export declare function linked(parent?: AbortSignal): {
|
|
21
|
+
ctl: AbortController;
|
|
22
|
+
unlink: () => void;
|
|
23
|
+
};
|
|
24
|
+
/** Waits for every task to end, at most ms; whether they all did. Tasks never reject here (callers catch their own). */
|
|
25
|
+
export declare function joinCapped(tasks: readonly Promise<unknown>[], ms: number): Promise<boolean>;
|
|
26
|
+
/** Bytes done of a total, reported as they go. */
|
|
27
|
+
export declare class Progress {
|
|
28
|
+
private readonly total;
|
|
29
|
+
private readonly fn?;
|
|
30
|
+
private done;
|
|
31
|
+
constructor(total: number, fn?: ((done: number, total: number) => void) | undefined);
|
|
32
|
+
add(n: number): void;
|
|
33
|
+
}
|
|
34
|
+
/** What waits are charged to: a pack, a large upload or a stream (uploadWait bounds each). */
|
|
35
|
+
export interface Waits {
|
|
36
|
+
waited: number;
|
|
37
|
+
throttled: boolean;
|
|
38
|
+
}
|
|
39
|
+
/** A semaphore whose waits an abort ends. */
|
|
40
|
+
export declare class Slots {
|
|
41
|
+
private free;
|
|
42
|
+
private waiters;
|
|
43
|
+
constructor(free: number);
|
|
44
|
+
acquire(signal?: AbortSignal): Promise<void>;
|
|
45
|
+
release(): void;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/direct/common.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAMnD,yCAAyC;AACzC,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,+DAA+D;AAC/D,wBAAgB,QAAQ,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAI9C;AAED,2FAA2F;AAC3F,wBAAgB,KAAK,IAAI,MAAM,CAW9B;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAkBtD;AAED,0CAA0C;AAC1C,qBAAa,QAAQ;IACnB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,EAAG,MAAM,IAAI,CAAC;IACrB,OAAO,UAAS;;CAUjB;AAED,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAoB5E;AAED,iHAAiH;AACjH,wBAAgB,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG;IAAE,GAAG,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,CAUzF;AAED,wHAAwH;AACxH,wBAAsB,UAAU,CAAC,KAAK,EAAE,SAAS,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUjG;AAED,kDAAkD;AAClD,qBAAa,QAAQ;IAGjB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;IAHtB,OAAO,CAAC,IAAI,CAAK;gBAEE,KAAK,EAAE,MAAM,EACb,EAAE,CAAC,UAAS,MAAM,SAAS,MAAM,KAAK,IAAI,aAAA;IAG7D,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;CAKrB;AAED,8FAA8F;AAC9F,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,6CAA6C;AAC7C,qBAAa,KAAK;IAEJ,OAAO,CAAC,IAAI;IADxB,OAAO,CAAC,OAAO,CAAyB;gBACpB,IAAI,EAAE,MAAM;IAE1B,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBlD,OAAO,IAAI,IAAI;CAIhB"}
|