@teepin/sdk 0.2.1 → 0.3.0-rc.1

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
@@ -1,11 +1,19 @@
1
1
  // Copyright 2026 TEEPIN Project
2
2
  // Licensed under the Apache License, Version 2.0
3
- import { errorCode, NotFoundError, ObjectChangedError, PreconditionFailedError, TeepinError } from './errors.js';
4
- import { download, downloadTo, upload, } from './transfer.js';
5
- /** The rules of uploads in parts. */
3
+ import { isStreamBody, prefixed, readUpTo, streamSource } from './direct/large.js';
4
+ import { DirectReads, ObjectFile, drain, readable } from './direct/reads.js';
5
+ import { DirectUploads } from './direct/uploads.js';
6
+ import { errorCode, NotFoundError, TeepinError } from './errors.js';
7
+ import { DEFAULT_CONCURRENCY, sha256Hex, sourceOf, } from './transfer.js';
8
+ export { ObjectFile } from './direct/reads.js';
9
+ /**
10
+ * Earlier releases' rules for uploads in parts, which partSize and computeETag use to match the ETag of an object
11
+ * uploaded in parts before the direct path. Uploads now follow the direct path's own rules (at most 3,000 parts).
12
+ */
6
13
  export const MIN_PART_SIZE = 5 * 2 ** 20;
7
14
  export const MAX_PART_SIZE = 5 * 2 ** 30;
8
15
  export const MAX_PARTS = 10000;
16
+ /** The largest object Teepin Storage holds (5 TiB). */
9
17
  export const MAX_OBJECT_SIZE = 5 * 2 ** 40;
10
18
  const bucketPath = (bucket) => `/v1/storage/buckets/${encodeURIComponent(bucket)}`;
11
19
  const uploadPath = (bucket, id) => `${bucketPath(bucket)}/uploads/${encodeURIComponent(id)}`;
@@ -51,47 +59,56 @@ function parseUpload(raw) {
51
59
  metadata: d.metadata,
52
60
  createdAt: new Date(String(d.created_at)),
53
61
  expiresAt: new Date(String(d.expires_at)),
54
- parts: (d.parts ?? []).map((p) => ({
55
- number: Number(p.part_number),
56
- size: Number(p.size_bytes),
57
- etag: unquote(String(p.etag)),
58
- uploadedAt: date(p.uploaded_at),
59
- })),
60
62
  };
61
63
  }
62
- export function quote(etag) {
63
- return etag === '*' || etag.startsWith('"') || etag.startsWith('W/"') ? etag : `"${etag}"`;
64
- }
65
64
  export function unquote(etag) {
66
65
  return etag.trim().replace(/^W\//, '').replace(/^"|"$/g, '');
67
66
  }
68
- function infoOf(response) {
69
- const size = Number(response.headers.get('Content-Length') ?? -1);
70
- const range = response.headers.get('Content-Range');
71
- const total = range ? Number(range.slice(range.lastIndexOf('/') + 1)) : size;
72
- const modified = response.headers.get('Last-Modified');
67
+ /** An object's download headers, from its details (the read session's, or statObject's). */
68
+ function directInfo(contentType, etag, size, total, lastModified) {
69
+ const t = lastModified?.getTime();
73
70
  return {
74
71
  size,
75
72
  totalSize: total,
76
- contentType: response.headers.get('Content-Type') ?? '',
77
- etag: unquote(response.headers.get('ETag') ?? ''),
78
- lastModified: modified ? new Date(modified) : undefined,
73
+ contentType: contentType || 'application/octet-stream',
74
+ etag: unquote(etag),
75
+ lastModified: t === undefined || Number.isNaN(t) ? undefined : new Date(Math.floor(t / 1000) * 1000),
79
76
  };
80
77
  }
81
78
  /**
82
- * Teepin Storage. Each method is one API call, named after the route in the
83
- * API reference (/v1/openapi.json); upload and download are the high-level
84
- * way to move data of any size.
79
+ * Teepin Storage: buckets, objects and transfers. upload and download are the
80
+ * high-level way to move data of any size.
85
81
  *
86
82
  * Every method sends your API key, so call them from a backend you control.
87
- * To let a browser download or upload one object without the key, sign a
88
- * link with presignDownload or presignUpload and hand it only that.
83
+ *
84
+ * Reads come straight from the storage network, each byte verified on this
85
+ * device before it is used (TEEPIN-STORAGE-DESIGN.md section 22.5). Writes are
86
+ * encrypted on this device and sent straight to the storage network too
87
+ * (section 22.4): small objects in packs, large ones in parts. No file byte
88
+ * passes through Teepin's API.
89
89
  */
90
90
  export class StorageService {
91
91
  client;
92
+ directReads;
93
+ uploadEngine;
92
94
  constructor(client) {
93
95
  this.client = client;
94
96
  }
97
+ /** Reads through read sessions, made on first use. */
98
+ get reads() {
99
+ return (this.directReads ??= new DirectReads(this.client));
100
+ }
101
+ /**
102
+ * The direct upload engine, made on first use: putObject's shared packs and the node entry's upload runs. Internal:
103
+ * @teepin/sdk/node gives it the disk.
104
+ */
105
+ get directUploads() {
106
+ return (this.uploadEngine ??= new DirectUploads(this.client));
107
+ }
108
+ /** Zeroes the data keys kept for reads (TeepinClient.close calls it). */
109
+ close() {
110
+ this.directReads?.close();
111
+ }
95
112
  async call(req) {
96
113
  return this.client.call(req);
97
114
  }
@@ -158,93 +175,64 @@ export class StorageService {
158
175
  } while (cursor);
159
176
  }
160
177
  /**
161
- * Uploads an object in one request (up to 5 GiB). It is retried after a
162
- * passing failure. upload handles data of any size.
178
+ * Stores an object, encrypted on this device: in a pack shared with the other putObject calls waiting at the same
179
+ * time (up to 16 MiB), or in parts straight to the storage network above that; an empty one is written by the API
180
+ * alone, with no bytes. The call returns once its object is committed. upload also takes streams.
163
181
  */
164
182
  async putObject(bucket, key, body, opts = {}) {
165
- const headers = {};
166
- if (opts.contentType)
167
- headers['Content-Type'] = opts.contentType;
168
- for (const [k, v] of Object.entries(opts.metadata ?? {}))
169
- headers[`X-Teepin-Meta-${k}`] = v;
170
- if (opts.ifMatch)
171
- headers['If-Match'] = quote(opts.ifMatch);
172
- if (opts.ifNoneMatch)
173
- headers['If-None-Match'] = '*';
174
- try {
175
- const { data } = await this.call({
176
- method: 'PUT',
177
- path: `${bucketPath(bucket)}/object`,
178
- query: { key },
179
- headers,
180
- body: () => body,
181
- mode: 'safe',
182
- transfer: true,
183
- signal: opts.signal,
184
- });
185
- return parseObject(data);
186
- }
187
- catch (err) {
188
- if (err instanceof PreconditionFailedError && opts.ifNoneMatch && retried(err)) {
189
- throw new PreconditionFailedError({
190
- statusCode: 412,
191
- code: err.code,
192
- message: `${err.message.replace(/ \(412.*$/, '')}; if this upload was retried, an earlier attempt may have stored it`,
193
- requestId: err.requestId,
194
- });
195
- }
196
- throw err;
197
- }
183
+ const up = this.directUploads;
184
+ const src = sourceOf(body);
185
+ const write = { contentType: opts.contentType, metadata: opts.metadata, ifMatch: opts.ifMatch, ifNoneMatch: opts.ifNoneMatch };
186
+ if (src.size === 0)
187
+ return up.putEmpty(bucket, key, write, opts.signal);
188
+ if (src.size > up.packObjectLimit())
189
+ return up.putLarge(bucket, key, { size: src.size, readAt: (o, n) => src.read(o, n) }, write, opts.signal);
190
+ return up.put(bucket, key, await src.read(0, src.size), write, opts.signal);
198
191
  }
199
192
  /** An object's details without its bytes. */
200
193
  async statObject(bucket, key, signal) {
201
194
  return parseObject((await this.call({ method: 'GET', path: `${bucketPath(bucket)}/object`, query: { key }, signal })).data);
202
195
  }
203
- /** An object's download headers without its bytes. */
196
+ /** An object's download headers without its bytes, built from statObject. */
204
197
  async headObject(bucket, key, signal) {
205
- const { response } = await this.client.send({ method: 'HEAD', path: `${bucketPath(bucket)}/object/content`, query: { key }, signal });
206
- return infoOf(response);
198
+ const obj = await this.statObject(bucket, key, signal);
199
+ const modified = Number.isNaN(obj.updatedAt.getTime()) ? obj.uploadedAt : obj.updatedAt;
200
+ return directInfo(obj.contentType, obj.etag, obj.size, obj.size, modified);
207
201
  }
208
- /** Streams an object's bytes, or one range. Resolves to null when ifNoneMatch matched. */
202
+ /**
203
+ * Streams an object's bytes, or one range. Resolves to null when ifNoneMatch matched.
204
+ *
205
+ * The bytes come from the storage network, each verified before the body yields it (a whole read's SHA-256 as its
206
+ * last bytes arrive: ChecksumMismatchError), and ifNoneMatch asks the object's details first, so a match signs and
207
+ * bills nothing. Read the body to its end or cancel it: that frees the read and zeroes its copy of the data key.
208
+ */
209
209
  async getObject(bucket, key, opts = {}) {
210
- const headers = {};
211
- if (opts.range) {
212
- headers['Range'] = `bytes=${opts.range.start}-${opts.range.end ?? ''}`;
213
- // A changed object then answers the whole object (200), not 206.
214
- if (opts.ifMatch)
215
- headers['If-Range'] = quote(opts.ifMatch);
210
+ if (opts.ifNoneMatch) {
211
+ const obj = await this.statObject(bucket, key, opts.signal);
212
+ if (obj.etag && obj.etag === unquote(opts.ifNoneMatch))
213
+ return null;
216
214
  }
217
- if (opts.ifNoneMatch)
218
- headers['If-None-Match'] = quote(opts.ifNoneMatch);
219
- const { response } = await this.client.send({
220
- method: 'GET',
221
- path: `${bucketPath(bucket)}/object/content`,
222
- query: { key },
223
- headers,
224
- transfer: true,
225
- signal: opts.signal,
226
- });
227
- if (response.status === 304) {
228
- await response.body?.cancel();
229
- return null;
230
- }
231
- const info = infoOf(response);
232
- if (opts.ifMatch && (info.etag !== unquote(opts.ifMatch) || (opts.range && response.status !== 206))) {
233
- await response.body?.cancel();
234
- throw new ObjectChangedError();
235
- }
236
- const body = response.body ?? new Response(new Uint8Array()).body;
215
+ const reads = this.reads;
216
+ const { session: s, dek, a, b, ranged } = await reads.get(bucket, key, opts.range?.start ?? 0, opts.range?.end, opts.ifMatch ?? '', opts.signal);
217
+ const body = readable((signal) => reads.body(s, dek, a, b, !ranged, signal), opts.signal, () => dek?.fill(0));
237
218
  return {
238
- ...info,
219
+ ...directInfo(s.contentType, s.etag, b - a, s.size, s.uploadedAt),
239
220
  body,
240
- bytes: async () => new Uint8Array(await new Response(body).arrayBuffer()),
241
- text: async () => new Response(body).text(),
221
+ bytes: () => drain(body),
222
+ text: async () => new TextDecoder().decode(await drain(body)),
242
223
  };
243
224
  }
244
- /** Deletes an object. */
245
- async deleteObject(bucket, key, signal) {
225
+ /**
226
+ * Deletes an object; with ifMatch, only if it still has that ETag (PreconditionFailedError otherwise). An AbortSignal
227
+ * in place of the options is taken as before.
228
+ */
229
+ async deleteObject(bucket, key, opts = {}) {
230
+ const { ifMatch, signal } = opts instanceof AbortSignal ? { ifMatch: undefined, signal: opts } : opts;
231
+ const headers = {};
232
+ if (ifMatch)
233
+ headers['If-Match'] = ifMatch === '*' ? '*' : `"${unquote(ifMatch)}"`;
246
234
  try {
247
- await this.call({ method: 'DELETE', path: `${bucketPath(bucket)}/object`, query: { key }, signal });
235
+ await this.call({ method: 'DELETE', path: `${bucketPath(bucket)}/object`, query: { key }, headers, signal });
248
236
  }
249
237
  catch (err) {
250
238
  // An earlier attempt deleted it.
@@ -296,97 +284,59 @@ export class StorageService {
296
284
  /**
297
285
  * Copies srcBucket/srcKey (any bucket of the project) to bucket/key. The
298
286
  * bytes are read and written again, so a copy is billed as a download as
299
- * well as the stored copy.
287
+ * well as the stored copy. The conditions are on the destination.
288
+ *
289
+ * The copy is made on this device (section 23.6): the object is read (every
290
+ * byte verified) and uploaded anew, packed or in parts, streamed under the
291
+ * upload's memory bound. It keeps the source's content type and metadata.
300
292
  */
301
293
  async copyObject(bucket, key, srcBucket, srcKey, opts = {}) {
302
- const headers = {};
303
- if (opts.ifMatch)
304
- headers['If-Match'] = quote(opts.ifMatch);
305
- if (opts.ifNoneMatch)
306
- headers['If-None-Match'] = '*';
307
- const { data } = await this.call({
308
- method: 'POST',
309
- path: `${bucketPath(bucket)}/object/copy`,
310
- json: { source_bucket: srcBucket, source_key: srcKey, key },
311
- headers,
312
- mode: 'safe',
313
- transfer: true,
314
- signal: opts.signal,
315
- });
316
- return parseObject(data);
317
- }
318
- /** Signs a link that downloads one object: up to 24 hours (default 15 minutes). */
319
- async presignDownload(bucket, key, opts = {}) {
320
- const { data } = await this.call({
321
- method: 'POST',
322
- path: `${bucketPath(bucket)}/object/download-url`,
323
- query: { key, ttl_seconds: opts.expiresIn, disposition: opts.attachment ? 'attachment' : undefined },
324
- mode: 'safe',
325
- signal: opts.signal,
326
- });
327
- return { url: this.client.absolute(data.url), expiresAt: new Date(data.expires_at) };
294
+ const up = this.directUploads;
295
+ const src = await this.statObject(srcBucket, srcKey, opts.signal);
296
+ const write = { contentType: src.contentType, metadata: src.metadata, ifMatch: opts.ifMatch, ifNoneMatch: opts.ifNoneMatch };
297
+ if (src.size === 0)
298
+ return up.putEmpty(bucket, key, write, opts.signal);
299
+ // Pinned to the version stated: a source replaced meanwhile is ObjectChangedError, never a mix. A direct object
300
+ // always has an ETag, so one missing is refused, never copied unpinned (profile 1's N-2).
301
+ if (!src.etag)
302
+ throw new TeepinError(`copying ${srcKey}: the source has no ETag to pin the copy to`);
303
+ const r = await this.getObject(srcBucket, srcKey, { ifMatch: src.etag, signal: opts.signal });
304
+ if (!r)
305
+ throw new TeepinError(`copying ${srcKey}: no answer`);
306
+ if (src.size <= up.packObjectLimit())
307
+ return up.put(bucket, key, await r.bytes(), write, opts.signal);
308
+ const source = streamSource(r.body);
309
+ try {
310
+ return await up.putStream(bucket, key, source, { ...write, expectedSize: src.size }, opts.signal);
311
+ }
312
+ finally {
313
+ await source.release();
314
+ }
328
315
  }
329
- /** Signs a link a browser can upload one object to, once: up to 1 hour (default 15 minutes), at most maxBytes (default 5 GiB). */
330
- async presignUpload(bucket, key, opts = {}) {
316
+ /**
317
+ * Makes a share link to an object that exists now: a console page anyone holding it can open with no sign-in, to
318
+ * preview or save the object, until it expires. It opens whatever is at the key when it is opened, and stops opening
319
+ * when the object is deleted or the account's stored data is on hold. The link carries its own credential, so share
320
+ * it only with those who may read the object. openLink opens one in code.
321
+ */
322
+ async createLink(bucket, key, opts = {}) {
323
+ const ttl = opts.expiresIn;
324
+ if (ttl !== undefined && !(Number.isInteger(ttl) && ttl > 0))
325
+ throw new TeepinError(`expiresIn must be a whole number of seconds, 1 or more (got ${ttl})`);
331
326
  const { data } = await this.call({
332
327
  method: 'POST',
333
- path: `${bucketPath(bucket)}/object/upload-url`,
334
- query: { key, ttl_seconds: opts.expiresIn, max_bytes: opts.maxBytes, content_type: opts.contentType },
328
+ path: `${bucketPath(bucket)}/object/link`,
329
+ json: { key, ttl_seconds: ttl, disposition: opts.disposition },
335
330
  mode: 'safe',
336
331
  signal: opts.signal,
337
332
  });
338
- return {
339
- url: this.client.absolute(data.url),
340
- method: data.method,
341
- headers: data.headers ?? {},
342
- maxBytes: data.max_bytes,
343
- expiresAt: new Date(data.expires_at),
344
- };
345
- }
346
- /** Starts an upload in parts. upload does all of it for you. */
347
- async createUpload(bucket, key, opts = {}) {
348
- const { data } = await this.call({
349
- method: 'POST',
350
- path: `${bucketPath(bucket)}/uploads`,
351
- json: { key, content_type: opts.contentType || undefined, metadata: opts.metadata },
352
- mode: 'unsent',
353
- signal: opts.signal,
354
- });
355
- return parseUpload(data);
356
- }
357
- /** Sends part number (1 to 10000) of an upload; sending a number again replaces it. */
358
- async uploadPart(bucket, uploadId, number, data, signal) {
359
- const { data: p } = await this.call({
360
- method: 'PUT',
361
- path: `${uploadPath(bucket, uploadId)}/parts/${number}`,
362
- body: () => data,
363
- mode: 'safe',
364
- transfer: true,
365
- signal,
366
- });
367
- return { number: Number(p.part_number), size: Number(p.size_bytes), etag: unquote(String(p.etag)), uploadedAt: date(p.uploaded_at) };
368
- }
369
- /** An upload and the parts received so far, in order. */
370
- async listParts(bucket, uploadId, signal) {
371
- return parseUpload((await this.call({ method: 'GET', path: `${uploadPath(bucket, uploadId)}/parts`, signal })).data);
333
+ return { url: String(data?.url ?? ''), expiresAt: new Date(String(data?.expires_at ?? '')) };
372
334
  }
373
335
  /** A bucket's open uploads under prefix, oldest first. */
374
336
  async listUploads(bucket, prefix = '', signal) {
375
337
  const { data } = await this.call({ method: 'GET', path: `${bucketPath(bucket)}/uploads`, query: { prefix }, signal });
376
338
  return (data.uploads ?? []).map(parseUpload);
377
339
  }
378
- /** Assembles the parts named, in ascending order, into the object. */
379
- async completeUpload(bucket, uploadId, parts, signal) {
380
- const { data } = await this.call({
381
- method: 'POST',
382
- path: `${uploadPath(bucket, uploadId)}/complete`,
383
- json: { parts: parts.map((p) => ({ part_number: p.number, etag: p.etag })) },
384
- mode: 'unsent',
385
- transfer: true,
386
- signal,
387
- });
388
- return parseObject(data);
389
- }
390
340
  /** Cancels an upload and drops its parts. */
391
341
  async abortUpload(bucket, uploadId, signal) {
392
342
  try {
@@ -398,24 +348,104 @@ export class StorageService {
398
348
  }
399
349
  }
400
350
  /**
401
- * Stores data at bucket/key: in one request up to 16 MiB, in parallel parts
402
- * above that. Each part is retried on its own, and the stored object's
403
- * ETag is checked against the bytes sent.
351
+ * Stores data at bucket/key, encrypted on this device: packed (shared with putObject's calls) up to 16 MiB, in
352
+ * parallel parts straight to the storage network above that, and a stream of unknown size read a part ahead and sent
353
+ * as it is read (its parts held in memory: at most (concurrency + 3) of them). Each part is retried on its own.
404
354
  *
405
355
  * ```ts
406
356
  * await teepin.storage.upload('my-bucket', 'videos/a.mp4', file, { onProgress: (done, total) => {} });
407
357
  * ```
408
358
  */
409
- upload(bucket, key, body, opts) {
410
- return upload(this, bucket, key, body, opts);
359
+ async upload(bucket, key, body, opts = {}) {
360
+ const up = this.directUploads;
361
+ const lim = up.packObjectLimit();
362
+ const one = async (data, contentType) => {
363
+ const write = { contentType, metadata: opts.metadata };
364
+ const obj = data.length ? await up.put(bucket, key, data, write, opts.signal) : await up.putEmpty(bucket, key, write, opts.signal);
365
+ opts.onProgress?.(data.length, data.length);
366
+ return obj;
367
+ };
368
+ if (isStreamBody(body)) {
369
+ const inner = streamSource(body);
370
+ // What fits in a pack goes as one object; the first read is handed on, and dropped once its bytes are taken.
371
+ const head = await readUpTo(inner, lim + 1, opts.signal).catch(async (err) => {
372
+ await inner.release(err);
373
+ throw err;
374
+ });
375
+ if (head.length <= lim) {
376
+ await inner.release();
377
+ return one(head, opts.contentType);
378
+ }
379
+ const source = prefixed(head, inner);
380
+ try {
381
+ return await up.putStream(bucket, key, source, {
382
+ contentType: opts.contentType,
383
+ metadata: opts.metadata,
384
+ partSize: opts.partSize,
385
+ expectedSize: opts.expectedSize,
386
+ concurrency: opts.concurrency,
387
+ onProgress: opts.onProgress,
388
+ }, opts.signal);
389
+ }
390
+ finally {
391
+ await source.release();
392
+ }
393
+ }
394
+ const src = sourceOf(body);
395
+ const contentType = opts.contentType || src.type;
396
+ if (src.size > MAX_OBJECT_SIZE)
397
+ throw new TeepinError(`${src.size} bytes is over the 5 TiB an object may hold`);
398
+ if (src.size > lim) {
399
+ return up.putLarge(bucket, key, { size: src.size, readAt: (o, n) => src.read(o, n) }, { contentType, metadata: opts.metadata, partSize: opts.partSize, onProgress: opts.onProgress }, opts.signal);
400
+ }
401
+ return one(await src.read(0, src.size), contentType);
411
402
  }
412
- /** Downloads an object into memory, large ones as parallel ranges, checked against its SHA-256. */
413
- download(bucket, key, opts) {
414
- return download(this, bucket, key, opts);
403
+ /**
404
+ * Downloads an object into memory, as parallel ranges: the storage network's read windows, every byte verified before
405
+ * it is written, and the whole object checked against its SHA-256 (a mismatch is tried once more before
406
+ * ChecksumMismatchError).
407
+ */
408
+ async download(bucket, key, opts = {}) {
409
+ let data = new Uint8Array(0);
410
+ const object = await this.reads.download(bucket, key, (obj) => {
411
+ data = new Uint8Array(obj.size);
412
+ return {
413
+ write: (offset, chunk) => {
414
+ data.set(chunk, offset);
415
+ },
416
+ sha256: (size) => sha256Hex(data.subarray(0, size)),
417
+ };
418
+ }, this.downloadParams(opts));
419
+ return { object, data };
420
+ }
421
+ /**
422
+ * Downloads an object into sink (a file, in @teepin/sdk/node), as parallel ranges pinned to one version. Every byte is
423
+ * verified before it is written (the whole object's SHA-256 too, when it is read in one range).
424
+ */
425
+ downloadTo(bucket, key, sink, opts = {}) {
426
+ return this.reads.download(bucket, key, () => ({ write: (offset, chunk) => sink.write(offset, chunk) }), this.downloadParams(opts));
427
+ }
428
+ /**
429
+ * Opens an object for reading at any offset: read(offset, length), size, info and close(). Reading straight on
430
+ * fetches a window at a time (64 MiB on the storage network) with the next prefetch windows ahead, so up to
431
+ * prefetch + 2 windows are held in memory; a read somewhere else fetches only what it needs. Every byte is verified
432
+ * before it is read, and every window comes from the version first opened: ObjectChangedError if the object is
433
+ * replaced while it is read. Close it when done: that zeroes its copy of the data key.
434
+ */
435
+ async openObject(bucket, key, opts = {}) {
436
+ const reads = this.reads;
437
+ const { session: s, dek, block, align } = await reads.openFile(bucket, key, opts.signal);
438
+ const info = directInfo(s.contentType, s.etag, s.size, s.size, s.uploadedAt);
439
+ return new ObjectFile((a, b, signal) => reads.fetch(s, dek, a, b, signal), s.size, block, align, info, opts.prefetch ?? 2, () => dek?.fill(0), opts.signal);
415
440
  }
416
- /** Downloads an object into sink (a file, in @teepin/sdk/node), as parallel ranges pinned to one version. */
417
- downloadTo(bucket, key, sink, opts) {
418
- return downloadTo(this, bucket, key, sink, opts);
441
+ downloadParams(opts) {
442
+ return {
443
+ partSize: opts.partSize ?? 0,
444
+ concurrency: opts.concurrency && opts.concurrency > 0 ? opts.concurrency : DEFAULT_CONCURRENCY,
445
+ onProgress: opts.onProgress,
446
+ verify: !opts.skipVerify,
447
+ signal: opts.signal,
448
+ };
419
449
  }
420
450
  }
421
451
  //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"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"}