@teepin/sdk 0.2.0 → 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 +181 -396
  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 +8 -5
@@ -2,13 +2,22 @@
2
2
  // Copyright 2026 TEEPIN Project
3
3
  // Licensed under the Apache License, Version 2.0
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.StorageService = exports.unquote = exports.quote = exports.parseObject = exports.MAX_OBJECT_SIZE = exports.MAX_PARTS = exports.MAX_PART_SIZE = exports.MIN_PART_SIZE = void 0;
5
+ exports.StorageService = exports.unquote = exports.parseObject = exports.MAX_OBJECT_SIZE = exports.MAX_PARTS = exports.MAX_PART_SIZE = exports.MIN_PART_SIZE = exports.ObjectFile = void 0;
6
+ const large_js_1 = require("./direct/large.js");
7
+ const reads_js_1 = require("./direct/reads.js");
8
+ const uploads_js_1 = require("./direct/uploads.js");
6
9
  const errors_js_1 = require("./errors.js");
7
10
  const transfer_js_1 = require("./transfer.js");
8
- /** The rules of uploads in parts. */
11
+ var reads_js_2 = require("./direct/reads.js");
12
+ Object.defineProperty(exports, "ObjectFile", { enumerable: true, get: function () { return reads_js_2.ObjectFile; } });
13
+ /**
14
+ * Earlier releases' rules for uploads in parts, which partSize and computeETag use to match the ETag of an object
15
+ * uploaded in parts before the direct path. Uploads now follow the direct path's own rules (at most 3,000 parts).
16
+ */
9
17
  exports.MIN_PART_SIZE = 5 * 2 ** 20;
10
18
  exports.MAX_PART_SIZE = 5 * 2 ** 30;
11
19
  exports.MAX_PARTS = 10000;
20
+ /** The largest object Teepin Storage holds (5 TiB). */
12
21
  exports.MAX_OBJECT_SIZE = 5 * 2 ** 40;
13
22
  const bucketPath = (bucket) => `/v1/storage/buckets/${encodeURIComponent(bucket)}`;
14
23
  const uploadPath = (bucket, id) => `${bucketPath(bucket)}/uploads/${encodeURIComponent(id)}`;
@@ -55,49 +64,57 @@ function parseUpload(raw) {
55
64
  metadata: d.metadata,
56
65
  createdAt: new Date(String(d.created_at)),
57
66
  expiresAt: new Date(String(d.expires_at)),
58
- parts: (d.parts ?? []).map((p) => ({
59
- number: Number(p.part_number),
60
- size: Number(p.size_bytes),
61
- etag: unquote(String(p.etag)),
62
- uploadedAt: date(p.uploaded_at),
63
- })),
64
67
  };
65
68
  }
66
- function quote(etag) {
67
- return etag === '*' || etag.startsWith('"') || etag.startsWith('W/"') ? etag : `"${etag}"`;
68
- }
69
- exports.quote = quote;
70
69
  function unquote(etag) {
71
70
  return etag.trim().replace(/^W\//, '').replace(/^"|"$/g, '');
72
71
  }
73
72
  exports.unquote = unquote;
74
- function infoOf(response) {
75
- const size = Number(response.headers.get('Content-Length') ?? -1);
76
- const range = response.headers.get('Content-Range');
77
- const total = range ? Number(range.slice(range.lastIndexOf('/') + 1)) : size;
78
- const modified = response.headers.get('Last-Modified');
73
+ /** An object's download headers, from its details (the read session's, or statObject's). */
74
+ function directInfo(contentType, etag, size, total, lastModified) {
75
+ const t = lastModified?.getTime();
79
76
  return {
80
77
  size,
81
78
  totalSize: total,
82
- contentType: response.headers.get('Content-Type') ?? '',
83
- etag: unquote(response.headers.get('ETag') ?? ''),
84
- lastModified: modified ? new Date(modified) : undefined,
79
+ contentType: contentType || 'application/octet-stream',
80
+ etag: unquote(etag),
81
+ lastModified: t === undefined || Number.isNaN(t) ? undefined : new Date(Math.floor(t / 1000) * 1000),
85
82
  };
86
83
  }
87
84
  /**
88
- * Teepin Storage. Each method is one API call, named after the route in the
89
- * API reference (/v1/openapi.json); upload and download are the high-level
90
- * way to move data of any size.
85
+ * Teepin Storage: buckets, objects and transfers. upload and download are the
86
+ * high-level way to move data of any size.
91
87
  *
92
88
  * Every method sends your API key, so call them from a backend you control.
93
- * To let a browser download or upload one object without the key, sign a
94
- * link with presignDownload or presignUpload and hand it only that.
89
+ *
90
+ * Reads come straight from the storage network, each byte verified on this
91
+ * device before it is used (TEEPIN-STORAGE-DESIGN.md section 22.5). Writes are
92
+ * encrypted on this device and sent straight to the storage network too
93
+ * (section 22.4): small objects in packs, large ones in parts. No file byte
94
+ * passes through Teepin's API.
95
95
  */
96
96
  class StorageService {
97
97
  client;
98
+ directReads;
99
+ uploadEngine;
98
100
  constructor(client) {
99
101
  this.client = client;
100
102
  }
103
+ /** Reads through read sessions, made on first use. */
104
+ get reads() {
105
+ return (this.directReads ??= new reads_js_1.DirectReads(this.client));
106
+ }
107
+ /**
108
+ * The direct upload engine, made on first use: putObject's shared packs and the node entry's upload runs. Internal:
109
+ * @teepin/sdk/node gives it the disk.
110
+ */
111
+ get directUploads() {
112
+ return (this.uploadEngine ??= new uploads_js_1.DirectUploads(this.client));
113
+ }
114
+ /** Zeroes the data keys kept for reads (TeepinClient.close calls it). */
115
+ close() {
116
+ this.directReads?.close();
117
+ }
101
118
  async call(req) {
102
119
  return this.client.call(req);
103
120
  }
@@ -164,93 +181,64 @@ class StorageService {
164
181
  } while (cursor);
165
182
  }
166
183
  /**
167
- * Uploads an object in one request (up to 5 GiB). It is retried after a
168
- * passing failure. upload handles data of any size.
184
+ * Stores an object, encrypted on this device: in a pack shared with the other putObject calls waiting at the same
185
+ * time (up to 16 MiB), or in parts straight to the storage network above that; an empty one is written by the API
186
+ * alone, with no bytes. The call returns once its object is committed. upload also takes streams.
169
187
  */
170
188
  async putObject(bucket, key, body, opts = {}) {
171
- const headers = {};
172
- if (opts.contentType)
173
- headers['Content-Type'] = opts.contentType;
174
- for (const [k, v] of Object.entries(opts.metadata ?? {}))
175
- headers[`X-Teepin-Meta-${k}`] = v;
176
- if (opts.ifMatch)
177
- headers['If-Match'] = quote(opts.ifMatch);
178
- if (opts.ifNoneMatch)
179
- headers['If-None-Match'] = '*';
180
- try {
181
- const { data } = await this.call({
182
- method: 'PUT',
183
- path: `${bucketPath(bucket)}/object`,
184
- query: { key },
185
- headers,
186
- body: () => body,
187
- mode: 'safe',
188
- transfer: true,
189
- signal: opts.signal,
190
- });
191
- return parseObject(data);
192
- }
193
- catch (err) {
194
- if (err instanceof errors_js_1.PreconditionFailedError && opts.ifNoneMatch && retried(err)) {
195
- throw new errors_js_1.PreconditionFailedError({
196
- statusCode: 412,
197
- code: err.code,
198
- message: `${err.message.replace(/ \(412.*$/, '')}; if this upload was retried, an earlier attempt may have stored it`,
199
- requestId: err.requestId,
200
- });
201
- }
202
- throw err;
203
- }
189
+ const up = this.directUploads;
190
+ const src = (0, transfer_js_1.sourceOf)(body);
191
+ const write = { contentType: opts.contentType, metadata: opts.metadata, ifMatch: opts.ifMatch, ifNoneMatch: opts.ifNoneMatch };
192
+ if (src.size === 0)
193
+ return up.putEmpty(bucket, key, write, opts.signal);
194
+ if (src.size > up.packObjectLimit())
195
+ return up.putLarge(bucket, key, { size: src.size, readAt: (o, n) => src.read(o, n) }, write, opts.signal);
196
+ return up.put(bucket, key, await src.read(0, src.size), write, opts.signal);
204
197
  }
205
198
  /** An object's details without its bytes. */
206
199
  async statObject(bucket, key, signal) {
207
200
  return parseObject((await this.call({ method: 'GET', path: `${bucketPath(bucket)}/object`, query: { key }, signal })).data);
208
201
  }
209
- /** An object's download headers without its bytes. */
202
+ /** An object's download headers without its bytes, built from statObject. */
210
203
  async headObject(bucket, key, signal) {
211
- const { response } = await this.client.send({ method: 'HEAD', path: `${bucketPath(bucket)}/object/content`, query: { key }, signal });
212
- return infoOf(response);
204
+ const obj = await this.statObject(bucket, key, signal);
205
+ const modified = Number.isNaN(obj.updatedAt.getTime()) ? obj.uploadedAt : obj.updatedAt;
206
+ return directInfo(obj.contentType, obj.etag, obj.size, obj.size, modified);
213
207
  }
214
- /** Streams an object's bytes, or one range. Resolves to null when ifNoneMatch matched. */
208
+ /**
209
+ * Streams an object's bytes, or one range. Resolves to null when ifNoneMatch matched.
210
+ *
211
+ * The bytes come from the storage network, each verified before the body yields it (a whole read's SHA-256 as its
212
+ * last bytes arrive: ChecksumMismatchError), and ifNoneMatch asks the object's details first, so a match signs and
213
+ * bills nothing. Read the body to its end or cancel it: that frees the read and zeroes its copy of the data key.
214
+ */
215
215
  async getObject(bucket, key, opts = {}) {
216
- const headers = {};
217
- if (opts.range) {
218
- headers['Range'] = `bytes=${opts.range.start}-${opts.range.end ?? ''}`;
219
- // A changed object then answers the whole object (200), not 206.
220
- if (opts.ifMatch)
221
- headers['If-Range'] = quote(opts.ifMatch);
216
+ if (opts.ifNoneMatch) {
217
+ const obj = await this.statObject(bucket, key, opts.signal);
218
+ if (obj.etag && obj.etag === unquote(opts.ifNoneMatch))
219
+ return null;
222
220
  }
223
- if (opts.ifNoneMatch)
224
- headers['If-None-Match'] = quote(opts.ifNoneMatch);
225
- const { response } = await this.client.send({
226
- method: 'GET',
227
- path: `${bucketPath(bucket)}/object/content`,
228
- query: { key },
229
- headers,
230
- transfer: true,
231
- signal: opts.signal,
232
- });
233
- if (response.status === 304) {
234
- await response.body?.cancel();
235
- return null;
236
- }
237
- const info = infoOf(response);
238
- if (opts.ifMatch && (info.etag !== unquote(opts.ifMatch) || (opts.range && response.status !== 206))) {
239
- await response.body?.cancel();
240
- throw new errors_js_1.ObjectChangedError();
241
- }
242
- const body = response.body ?? new Response(new Uint8Array()).body;
221
+ const reads = this.reads;
222
+ const { session: s, dek, a, b, ranged } = await reads.get(bucket, key, opts.range?.start ?? 0, opts.range?.end, opts.ifMatch ?? '', opts.signal);
223
+ const body = (0, reads_js_1.readable)((signal) => reads.body(s, dek, a, b, !ranged, signal), opts.signal, () => dek?.fill(0));
243
224
  return {
244
- ...info,
225
+ ...directInfo(s.contentType, s.etag, b - a, s.size, s.uploadedAt),
245
226
  body,
246
- bytes: async () => new Uint8Array(await new Response(body).arrayBuffer()),
247
- text: async () => new Response(body).text(),
227
+ bytes: () => (0, reads_js_1.drain)(body),
228
+ text: async () => new TextDecoder().decode(await (0, reads_js_1.drain)(body)),
248
229
  };
249
230
  }
250
- /** Deletes an object. */
251
- async deleteObject(bucket, key, signal) {
231
+ /**
232
+ * Deletes an object; with ifMatch, only if it still has that ETag (PreconditionFailedError otherwise). An AbortSignal
233
+ * in place of the options is taken as before.
234
+ */
235
+ async deleteObject(bucket, key, opts = {}) {
236
+ const { ifMatch, signal } = opts instanceof AbortSignal ? { ifMatch: undefined, signal: opts } : opts;
237
+ const headers = {};
238
+ if (ifMatch)
239
+ headers['If-Match'] = ifMatch === '*' ? '*' : `"${unquote(ifMatch)}"`;
252
240
  try {
253
- await this.call({ method: 'DELETE', path: `${bucketPath(bucket)}/object`, query: { key }, signal });
241
+ await this.call({ method: 'DELETE', path: `${bucketPath(bucket)}/object`, query: { key }, headers, signal });
254
242
  }
255
243
  catch (err) {
256
244
  // An earlier attempt deleted it.
@@ -302,97 +290,59 @@ class StorageService {
302
290
  /**
303
291
  * Copies srcBucket/srcKey (any bucket of the project) to bucket/key. The
304
292
  * bytes are read and written again, so a copy is billed as a download as
305
- * well as the stored copy.
293
+ * well as the stored copy. The conditions are on the destination.
294
+ *
295
+ * The copy is made on this device (section 23.6): the object is read (every
296
+ * byte verified) and uploaded anew, packed or in parts, streamed under the
297
+ * upload's memory bound. It keeps the source's content type and metadata.
306
298
  */
307
299
  async copyObject(bucket, key, srcBucket, srcKey, opts = {}) {
308
- const headers = {};
309
- if (opts.ifMatch)
310
- headers['If-Match'] = quote(opts.ifMatch);
311
- if (opts.ifNoneMatch)
312
- headers['If-None-Match'] = '*';
313
- const { data } = await this.call({
314
- method: 'POST',
315
- path: `${bucketPath(bucket)}/object/copy`,
316
- json: { source_bucket: srcBucket, source_key: srcKey, key },
317
- headers,
318
- mode: 'safe',
319
- transfer: true,
320
- signal: opts.signal,
321
- });
322
- return parseObject(data);
323
- }
324
- /** Signs a link that downloads one object: up to 24 hours (default 15 minutes). */
325
- async presignDownload(bucket, key, opts = {}) {
326
- const { data } = await this.call({
327
- method: 'POST',
328
- path: `${bucketPath(bucket)}/object/download-url`,
329
- query: { key, ttl_seconds: opts.expiresIn, disposition: opts.attachment ? 'attachment' : undefined },
330
- mode: 'safe',
331
- signal: opts.signal,
332
- });
333
- return { url: this.client.absolute(data.url), expiresAt: new Date(data.expires_at) };
300
+ const up = this.directUploads;
301
+ const src = await this.statObject(srcBucket, srcKey, opts.signal);
302
+ const write = { contentType: src.contentType, metadata: src.metadata, ifMatch: opts.ifMatch, ifNoneMatch: opts.ifNoneMatch };
303
+ if (src.size === 0)
304
+ return up.putEmpty(bucket, key, write, opts.signal);
305
+ // Pinned to the version stated: a source replaced meanwhile is ObjectChangedError, never a mix. A direct object
306
+ // always has an ETag, so one missing is refused, never copied unpinned (profile 1's N-2).
307
+ if (!src.etag)
308
+ throw new errors_js_1.TeepinError(`copying ${srcKey}: the source has no ETag to pin the copy to`);
309
+ const r = await this.getObject(srcBucket, srcKey, { ifMatch: src.etag, signal: opts.signal });
310
+ if (!r)
311
+ throw new errors_js_1.TeepinError(`copying ${srcKey}: no answer`);
312
+ if (src.size <= up.packObjectLimit())
313
+ return up.put(bucket, key, await r.bytes(), write, opts.signal);
314
+ const source = (0, large_js_1.streamSource)(r.body);
315
+ try {
316
+ return await up.putStream(bucket, key, source, { ...write, expectedSize: src.size }, opts.signal);
317
+ }
318
+ finally {
319
+ await source.release();
320
+ }
334
321
  }
335
- /** Signs a link a browser can upload one object to, once: up to 1 hour (default 15 minutes), at most maxBytes (default 5 GiB). */
336
- async presignUpload(bucket, key, opts = {}) {
322
+ /**
323
+ * Makes a share link to an object that exists now: a console page anyone holding it can open with no sign-in, to
324
+ * preview or save the object, until it expires. It opens whatever is at the key when it is opened, and stops opening
325
+ * when the object is deleted or the account's stored data is on hold. The link carries its own credential, so share
326
+ * it only with those who may read the object. openLink opens one in code.
327
+ */
328
+ async createLink(bucket, key, opts = {}) {
329
+ const ttl = opts.expiresIn;
330
+ if (ttl !== undefined && !(Number.isInteger(ttl) && ttl > 0))
331
+ throw new errors_js_1.TeepinError(`expiresIn must be a whole number of seconds, 1 or more (got ${ttl})`);
337
332
  const { data } = await this.call({
338
333
  method: 'POST',
339
- path: `${bucketPath(bucket)}/object/upload-url`,
340
- query: { key, ttl_seconds: opts.expiresIn, max_bytes: opts.maxBytes, content_type: opts.contentType },
334
+ path: `${bucketPath(bucket)}/object/link`,
335
+ json: { key, ttl_seconds: ttl, disposition: opts.disposition },
341
336
  mode: 'safe',
342
337
  signal: opts.signal,
343
338
  });
344
- return {
345
- url: this.client.absolute(data.url),
346
- method: data.method,
347
- headers: data.headers ?? {},
348
- maxBytes: data.max_bytes,
349
- expiresAt: new Date(data.expires_at),
350
- };
351
- }
352
- /** Starts an upload in parts. upload does all of it for you. */
353
- async createUpload(bucket, key, opts = {}) {
354
- const { data } = await this.call({
355
- method: 'POST',
356
- path: `${bucketPath(bucket)}/uploads`,
357
- json: { key, content_type: opts.contentType || undefined, metadata: opts.metadata },
358
- mode: 'unsent',
359
- signal: opts.signal,
360
- });
361
- return parseUpload(data);
362
- }
363
- /** Sends part number (1 to 10000) of an upload; sending a number again replaces it. */
364
- async uploadPart(bucket, uploadId, number, data, signal) {
365
- const { data: p } = await this.call({
366
- method: 'PUT',
367
- path: `${uploadPath(bucket, uploadId)}/parts/${number}`,
368
- body: () => data,
369
- mode: 'safe',
370
- transfer: true,
371
- signal,
372
- });
373
- return { number: Number(p.part_number), size: Number(p.size_bytes), etag: unquote(String(p.etag)), uploadedAt: date(p.uploaded_at) };
374
- }
375
- /** An upload and the parts received so far, in order. */
376
- async listParts(bucket, uploadId, signal) {
377
- return parseUpload((await this.call({ method: 'GET', path: `${uploadPath(bucket, uploadId)}/parts`, signal })).data);
339
+ return { url: String(data?.url ?? ''), expiresAt: new Date(String(data?.expires_at ?? '')) };
378
340
  }
379
341
  /** A bucket's open uploads under prefix, oldest first. */
380
342
  async listUploads(bucket, prefix = '', signal) {
381
343
  const { data } = await this.call({ method: 'GET', path: `${bucketPath(bucket)}/uploads`, query: { prefix }, signal });
382
344
  return (data.uploads ?? []).map(parseUpload);
383
345
  }
384
- /** Assembles the parts named, in ascending order, into the object. */
385
- async completeUpload(bucket, uploadId, parts, signal) {
386
- const { data } = await this.call({
387
- method: 'POST',
388
- path: `${uploadPath(bucket, uploadId)}/complete`,
389
- json: { parts: parts.map((p) => ({ part_number: p.number, etag: p.etag })) },
390
- mode: 'unsent',
391
- transfer: true,
392
- signal,
393
- });
394
- return parseObject(data);
395
- }
396
346
  /** Cancels an upload and drops its parts. */
397
347
  async abortUpload(bucket, uploadId, signal) {
398
348
  try {
@@ -404,24 +354,104 @@ class StorageService {
404
354
  }
405
355
  }
406
356
  /**
407
- * Stores data at bucket/key: in one request up to 16 MiB, in parallel parts
408
- * above that. Each part is retried on its own, and the stored object's
409
- * ETag is checked against the bytes sent.
357
+ * Stores data at bucket/key, encrypted on this device: packed (shared with putObject's calls) up to 16 MiB, in
358
+ * parallel parts straight to the storage network above that, and a stream of unknown size read a part ahead and sent
359
+ * as it is read (its parts held in memory: at most (concurrency + 3) of them). Each part is retried on its own.
410
360
  *
411
361
  * ```ts
412
362
  * await teepin.storage.upload('my-bucket', 'videos/a.mp4', file, { onProgress: (done, total) => {} });
413
363
  * ```
414
364
  */
415
- upload(bucket, key, body, opts) {
416
- return (0, transfer_js_1.upload)(this, bucket, key, body, opts);
365
+ async upload(bucket, key, body, opts = {}) {
366
+ const up = this.directUploads;
367
+ const lim = up.packObjectLimit();
368
+ const one = async (data, contentType) => {
369
+ const write = { contentType, metadata: opts.metadata };
370
+ const obj = data.length ? await up.put(bucket, key, data, write, opts.signal) : await up.putEmpty(bucket, key, write, opts.signal);
371
+ opts.onProgress?.(data.length, data.length);
372
+ return obj;
373
+ };
374
+ if ((0, large_js_1.isStreamBody)(body)) {
375
+ const inner = (0, large_js_1.streamSource)(body);
376
+ // What fits in a pack goes as one object; the first read is handed on, and dropped once its bytes are taken.
377
+ const head = await (0, large_js_1.readUpTo)(inner, lim + 1, opts.signal).catch(async (err) => {
378
+ await inner.release(err);
379
+ throw err;
380
+ });
381
+ if (head.length <= lim) {
382
+ await inner.release();
383
+ return one(head, opts.contentType);
384
+ }
385
+ const source = (0, large_js_1.prefixed)(head, inner);
386
+ try {
387
+ return await up.putStream(bucket, key, source, {
388
+ contentType: opts.contentType,
389
+ metadata: opts.metadata,
390
+ partSize: opts.partSize,
391
+ expectedSize: opts.expectedSize,
392
+ concurrency: opts.concurrency,
393
+ onProgress: opts.onProgress,
394
+ }, opts.signal);
395
+ }
396
+ finally {
397
+ await source.release();
398
+ }
399
+ }
400
+ const src = (0, transfer_js_1.sourceOf)(body);
401
+ const contentType = opts.contentType || src.type;
402
+ if (src.size > exports.MAX_OBJECT_SIZE)
403
+ throw new errors_js_1.TeepinError(`${src.size} bytes is over the 5 TiB an object may hold`);
404
+ if (src.size > lim) {
405
+ 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);
406
+ }
407
+ return one(await src.read(0, src.size), contentType);
417
408
  }
418
- /** Downloads an object into memory, large ones as parallel ranges, checked against its SHA-256. */
419
- download(bucket, key, opts) {
420
- return (0, transfer_js_1.download)(this, bucket, key, opts);
409
+ /**
410
+ * Downloads an object into memory, as parallel ranges: the storage network's read windows, every byte verified before
411
+ * it is written, and the whole object checked against its SHA-256 (a mismatch is tried once more before
412
+ * ChecksumMismatchError).
413
+ */
414
+ async download(bucket, key, opts = {}) {
415
+ let data = new Uint8Array(0);
416
+ const object = await this.reads.download(bucket, key, (obj) => {
417
+ data = new Uint8Array(obj.size);
418
+ return {
419
+ write: (offset, chunk) => {
420
+ data.set(chunk, offset);
421
+ },
422
+ sha256: (size) => (0, transfer_js_1.sha256Hex)(data.subarray(0, size)),
423
+ };
424
+ }, this.downloadParams(opts));
425
+ return { object, data };
426
+ }
427
+ /**
428
+ * Downloads an object into sink (a file, in @teepin/sdk/node), as parallel ranges pinned to one version. Every byte is
429
+ * verified before it is written (the whole object's SHA-256 too, when it is read in one range).
430
+ */
431
+ downloadTo(bucket, key, sink, opts = {}) {
432
+ return this.reads.download(bucket, key, () => ({ write: (offset, chunk) => sink.write(offset, chunk) }), this.downloadParams(opts));
433
+ }
434
+ /**
435
+ * Opens an object for reading at any offset: read(offset, length), size, info and close(). Reading straight on
436
+ * fetches a window at a time (64 MiB on the storage network) with the next prefetch windows ahead, so up to
437
+ * prefetch + 2 windows are held in memory; a read somewhere else fetches only what it needs. Every byte is verified
438
+ * before it is read, and every window comes from the version first opened: ObjectChangedError if the object is
439
+ * replaced while it is read. Close it when done: that zeroes its copy of the data key.
440
+ */
441
+ async openObject(bucket, key, opts = {}) {
442
+ const reads = this.reads;
443
+ const { session: s, dek, block, align } = await reads.openFile(bucket, key, opts.signal);
444
+ const info = directInfo(s.contentType, s.etag, s.size, s.size, s.uploadedAt);
445
+ return new reads_js_1.ObjectFile((a, b, signal) => reads.fetch(s, dek, a, b, signal), s.size, block, align, info, opts.prefetch ?? 2, () => dek?.fill(0), opts.signal);
421
446
  }
422
- /** Downloads an object into sink (a file, in @teepin/sdk/node), as parallel ranges pinned to one version. */
423
- downloadTo(bucket, key, sink, opts) {
424
- return (0, transfer_js_1.downloadTo)(this, bucket, key, sink, opts);
447
+ downloadParams(opts) {
448
+ return {
449
+ partSize: opts.partSize ?? 0,
450
+ concurrency: opts.concurrency && opts.concurrency > 0 ? opts.concurrency : transfer_js_1.DEFAULT_CONCURRENCY,
451
+ onProgress: opts.onProgress,
452
+ verify: !opts.skipVerify,
453
+ signal: opts.signal,
454
+ };
425
455
  }
426
456
  }
427
457
  exports.StorageService = StorageService;
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,iDAAiD;;;AAGjD,2CAAiH;AACjH,+CAQuB;AAwJvB,qCAAqC;AACxB,QAAA,aAAa,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAC5B,QAAA,aAAa,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAC5B,QAAA,SAAS,GAAG,KAAM,CAAC;AACnB,QAAA,eAAe,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAE3C,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,uBAAuB,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;AAC3F,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAU,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;AAE7G,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAEnE,8FAA8F;AAC9F,MAAM,OAAO,GAAG,CAAC,GAAY,EAAE,EAAE,CAAC,GAAG,YAAY,uBAAW,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAExF,SAAgB,WAAW,CAAC,GAAY;IACtC,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC;QAC/B,WAAW,EAAE,CAAC,CAAC,YAAkC;QACjD,QAAQ,EAAE,CAAC,CAAC,QAA8C;QAC1D,cAAc,EAAE,CAAC,CAAC,eAAqC;QACvD,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACnC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC1B,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACzC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACzC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;KAChC,CAAC;AACJ,CAAC;AAjBD,kCAiBC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;QACxC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;QACtC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACzC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACvB,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QAClB,WAAW,EAAG,CAAC,CAAC,YAAuB,IAAI,SAAS;QACpD,QAAQ,EAAE,CAAC,CAAC,QAA8C;QAC1D,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACzC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACzC,KAAK,EAAE,CAAE,CAAC,CAAC,KAAmC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;YAC7B,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;YAC1B,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7B,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;SAChC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,SAAgB,KAAK,CAAC,IAAY;IAChC,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC;AAC7F,CAAC;AAFD,sBAEC;AAED,SAAgB,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC/D,CAAC;AAFD,0BAEC;AAED,SAAS,MAAM,CAAC,QAAkB;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACvD,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE;QACvD,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjD,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;KACxD,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAa,cAAc;IACJ;IAArB,YAAqB,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAErC,KAAK,CAAC,IAAI,CAAI,GAAY;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAI,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,oDAAoD;IACpD,KAAK,CAAC,OAAO,CAAC,MAAoB;QAChC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAA0B,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/G,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9G,CAAC;IAED,qFAAqF;IACrF,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,MAAoB;QACnD,IAAI;YACF,OAAO,WAAW,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACnI;QAAC,OAAO,GAAG,EAAE;YACZ,sDAAsD;YACtD,IAAI,IAAA,qBAAS,EAAC,GAAG,CAAC,KAAK,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5F,MAAM,GAAG,CAAC;SACX;IACH,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,WAAW,CAAC,MAAoB;QACpC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAyB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,CAAC;QACjH,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,+CAA+C;IAC/C,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,MAAoB;QAChD,OAAO,WAAW,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChG,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,MAAoB;QACnD,IAAI;YACF,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;SACvE;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,CAAC,IAAA,qBAAS,EAAC,GAAG,CAAC,KAAK,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;gBAAE,MAAM,GAAG,CAAC;SACzE;IACH,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,OAA2B,EAAE;QAC7D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAA2E;YACzG,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU;YACrC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YACjG,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,CAAC;IACtI,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,CAAC,OAAO,CAAC,MAAc,EAAE,MAAM,GAAG,EAAE,EAAE,MAAoB;QAC9D,IAAI,MAA0B,CAAC;QAC/B,GAAG;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACxE,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO;gBAAE,MAAM,GAAG,CAAC;YAC1C,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;SAC1B,QAAQ,MAAM,EAAE;IACnB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,GAAW,EAAE,IAAmD,EAAE,OAAyB,EAAE;QAC3H,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACjE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;YAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAC5F,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC;QACrD,IAAI;YACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;gBAC/B,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS;gBACpC,KAAK,EAAE,EAAE,GAAG,EAAE;gBACd,OAAO;gBACP,IAAI,EAAE,GAAG,EAAE,CAAC,IAAgB;gBAC5B,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YACH,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;SAC1B;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,YAAY,mCAAuB,IAAI,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC9E,MAAM,IAAI,mCAAuB,CAAC;oBAChC,UAAU,EAAE,GAAG;oBACf,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,qEAAqE;oBACrH,SAAS,EAAE,GAAG,CAAC,SAAS;iBACzB,CAAC,CAAC;aACJ;YACD,MAAM,GAAG,CAAC;SACX;IACH,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,GAAW,EAAE,MAAoB;QAChE,OAAO,WAAW,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9H,CAAC;IAED,sDAAsD;IACtD,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,GAAW,EAAE,MAAoB;QAChE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACtI,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,0FAA0F;IAC1F,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,GAAW,EAAE,OAAyB,EAAE;QACtE,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,CAAC,OAAO,CAAC,GAAG,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC;YACvE,iEAAiE;YACjE,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC7D;QACD,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAC1C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,iBAAiB;YAC5C,KAAK,EAAE,EAAE,GAAG,EAAE;YACd,OAAO;YACP,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3B,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;SACb;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE;YACpG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAC9B,MAAM,IAAI,8BAAkB,EAAE,CAAC;SAChC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,IAAI,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,IAAK,CAAC;QACnE,OAAO;YACL,GAAG,IAAI;YACP,IAAI;YACJ,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACzE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;SAC5C,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,GAAW,EAAE,MAAoB;QAClE,IAAI;YACF,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;SACrG;QAAC,OAAO,GAAG,EAAE;YACZ,iCAAiC;YACjC,IAAI,CAAC,CAAC,GAAG,YAAY,yBAAa,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;gBAAE,MAAM,GAAG,CAAC;SACnG;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,MAAc,EAAE,IAAc,EAAE,MAAoB;QACtE,MAAM,GAAG,GAAiB,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE;YAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAgF;gBAC9G,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,iBAAiB;gBAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE;gBACvC,IAAI,EAAE,MAAM;gBACZ,MAAM;aACP,CAAC,CAAC;YACH,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YAC1C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;SACtG;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,uIAAuI;IACvI,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,IAAY,EAAE,EAAU,EAAE,OAAwD,EAAE;QACrH,IAAI;YACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;gBAC/B,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,gBAAgB;gBAC3C,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;gBAChD,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YACH,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;SAC1B;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,IAAA,qBAAS,EAAC,GAAG,CAAC,KAAK,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;gBACzD,qEAAqE;gBACrE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC/E,IAAI,KAAK;oBAAE,OAAO,KAAK,CAAC;aACzB;YACD,MAAM,GAAG,CAAC;SACX;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU,CACd,MAAc,EACd,GAAW,EACX,SAAiB,EACjB,MAAc,EACd,OAA0E,EAAE;QAE5E,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC;QACrD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YAC/B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc;YACzC,IAAI,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE;YAC3D,OAAO;YACP,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,mFAAmF;IACnF,KAAK,CAAC,eAAe,CAAC,MAAc,EAAE,GAAW,EAAE,OAA2E,EAAE;QAC9H,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAsC;YACpE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,sBAAsB;YACjD,KAAK,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE;YACpG,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;IACvF,CAAC;IAED,kIAAkI;IAClI,KAAK,CAAC,aAAa,CACjB,MAAc,EACd,GAAW,EACX,OAA8F,EAAE;QAEhG,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAA0G;YACxI,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,oBAAoB;YAC/C,KAAK,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE;YACrG,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;YAC3B,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;SACrC,CAAC;IACJ,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,GAAW,EAAE,OAA0F,EAAE;QAC1I,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YAC/B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU;YACrC,IAAI,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACnF,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,uFAAuF;IACvF,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,QAAgB,EAAE,MAAc,EAAE,IAAuB,EAAE,MAAoB;QAC9G,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAA0B;YAC3D,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,MAAM,EAAE;YACvD,IAAI,EAAE,GAAG,EAAE,CAAC,IAAgB;YAC5B,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI;YACd,MAAM;SACP,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;IACvI,CAAC;IAED,yDAAyD;IACzD,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,QAAgB,EAAE,MAAoB;QACpE,OAAO,WAAW,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvH,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,MAAM,GAAG,EAAE,EAAE,MAAoB;QACjE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAyB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9I,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,sEAAsE;IACtE,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,QAAgB,EAAE,KAAyC,EAAE,MAAoB;QACpH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YAC/B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW;YAChD,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;YAC5E,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,MAAM;SACP,CAAC,CAAC;QACH,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,QAAgB,EAAE,MAAoB;QACtE,IAAI;YACF,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;SACnF;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,CAAC,IAAA,qBAAS,EAAC,GAAG,CAAC,KAAK,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;gBAAE,MAAM,GAAG,CAAC;SACzE;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAc,EAAE,GAAW,EAAE,IAAgB,EAAE,IAAoB;QACxE,OAAO,IAAA,oBAAM,EAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,mGAAmG;IACnG,QAAQ,CAAC,MAAc,EAAE,GAAW,EAAE,IAAsB;QAC1D,OAAO,IAAA,sBAAQ,EAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,6GAA6G;IAC7G,UAAU,CAAC,MAAc,EAAE,GAAW,EAAE,IAAkB,EAAE,IAAsB;QAChF,OAAO,IAAA,wBAAU,EAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACnD,CAAC;CACF;AAxVD,wCAwVC"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"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"}