@syncular/server-cloudflare 0.0.6-158 → 0.0.6-165

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/dist/r2.d.ts CHANGED
@@ -12,6 +12,8 @@
12
12
  export interface BlobSignUploadOptions {
13
13
  /** SHA-256 hash (for naming and checksum validation) */
14
14
  hash: string;
15
+ /** Optional tenant/partition namespace for storage lookups */
16
+ partitionId?: string;
15
17
  /** Content size in bytes */
16
18
  size: number;
17
19
  /** MIME type */
@@ -36,6 +38,8 @@ export interface BlobSignedUpload {
36
38
  export interface BlobSignDownloadOptions {
37
39
  /** SHA-256 hash */
38
40
  hash: string;
41
+ /** Optional tenant/partition namespace for storage lookups */
42
+ partitionId?: string;
39
43
  /** URL expiration in seconds */
40
44
  expiresIn: number;
41
45
  }
@@ -57,34 +61,48 @@ export interface BlobStorageAdapter {
57
61
  /**
58
62
  * Check if a blob exists in storage.
59
63
  */
60
- exists(hash: string): Promise<boolean>;
64
+ exists(hash: string, options?: {
65
+ partitionId?: string;
66
+ }): Promise<boolean>;
61
67
  /**
62
68
  * Delete a blob (for garbage collection).
63
69
  */
64
- delete(hash: string): Promise<void>;
70
+ delete(hash: string, options?: {
71
+ partitionId?: string;
72
+ }): Promise<void>;
65
73
  /**
66
74
  * Get blob metadata from storage (optional).
67
75
  */
68
- getMetadata?(hash: string): Promise<{
76
+ getMetadata?(hash: string, options?: {
77
+ partitionId?: string;
78
+ }): Promise<{
69
79
  size: number;
70
80
  mimeType?: string;
71
81
  } | null>;
72
82
  /**
73
83
  * Store blob data directly (for adapters that support direct storage).
74
84
  */
75
- put?(hash: string, data: Uint8Array, metadata?: Record<string, unknown>): Promise<void>;
85
+ put?(hash: string, data: Uint8Array, metadata?: Record<string, unknown>, options?: {
86
+ partitionId?: string;
87
+ }): Promise<void>;
76
88
  /**
77
89
  * Store blob data directly from a stream.
78
90
  */
79
- putStream?(hash: string, stream: ReadableStream<Uint8Array>, metadata?: Record<string, unknown>): Promise<void>;
91
+ putStream?(hash: string, stream: ReadableStream<Uint8Array>, metadata?: Record<string, unknown>, options?: {
92
+ partitionId?: string;
93
+ }): Promise<void>;
80
94
  /**
81
95
  * Get blob data directly (for adapters that support direct retrieval).
82
96
  */
83
- get?(hash: string): Promise<Uint8Array | null>;
97
+ get?(hash: string, options?: {
98
+ partitionId?: string;
99
+ }): Promise<Uint8Array | null>;
84
100
  /**
85
101
  * Get blob data directly as a stream.
86
102
  */
87
- getStream?(hash: string): Promise<ReadableStream<Uint8Array> | null>;
103
+ getStream?(hash: string, options?: {
104
+ partitionId?: string;
105
+ }): Promise<ReadableStream<Uint8Array> | null>;
88
106
  }
89
107
  /**
90
108
  * Token signer interface for creating/verifying upload/download tokens.
@@ -98,7 +116,14 @@ export interface BlobTokenSigner {
98
116
  */
99
117
  sign(payload: {
100
118
  hash: string;
101
- action: 'upload' | 'download';
119
+ partitionId: string;
120
+ action: 'upload';
121
+ size: number;
122
+ expiresAt: number;
123
+ } | {
124
+ hash: string;
125
+ partitionId: string;
126
+ action: 'download';
102
127
  expiresAt: number;
103
128
  }, expiresIn: number): Promise<string>;
104
129
  /**
@@ -107,7 +132,14 @@ export interface BlobTokenSigner {
107
132
  */
108
133
  verify(token: string): Promise<{
109
134
  hash: string;
110
- action: 'upload' | 'download';
135
+ partitionId: string;
136
+ action: 'upload';
137
+ size: number;
138
+ expiresAt: number;
139
+ } | {
140
+ hash: string;
141
+ partitionId: string;
142
+ action: 'download';
111
143
  expiresAt: number;
112
144
  } | null>;
113
145
  }
package/dist/r2.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"r2.d.ts","sourceRoot":"","sources":["../src/r2.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"r2.d.ts","sourceRoot":"","sources":["../src/r2.ts"],"names":[],"mappings":"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"}
package/dist/r2.js CHANGED
@@ -31,10 +31,36 @@ export function createHmacTokenSigner(secret) {
31
31
  if (sig !== expectedSig)
32
32
  return null;
33
33
  try {
34
- const data = JSON.parse(atob(dataB64));
35
- if (Date.now() > data.expiresAt)
34
+ const parsed = JSON.parse(atob(dataB64));
35
+ if (typeof parsed.hash !== 'string')
36
36
  return null;
37
- return data;
37
+ if (typeof parsed.partitionId !== 'string')
38
+ return null;
39
+ if (typeof parsed.expiresAt !== 'number')
40
+ return null;
41
+ if (Date.now() > parsed.expiresAt)
42
+ return null;
43
+ if (parsed.action === 'download') {
44
+ return {
45
+ hash: parsed.hash,
46
+ partitionId: parsed.partitionId,
47
+ action: 'download',
48
+ expiresAt: parsed.expiresAt,
49
+ };
50
+ }
51
+ if (parsed.action === 'upload' &&
52
+ typeof parsed.size === 'number' &&
53
+ Number.isFinite(parsed.size) &&
54
+ parsed.size >= 0) {
55
+ return {
56
+ hash: parsed.hash,
57
+ partitionId: parsed.partitionId,
58
+ action: 'upload',
59
+ size: parsed.size,
60
+ expiresAt: parsed.expiresAt,
61
+ };
62
+ }
63
+ return null;
38
64
  }
39
65
  catch {
40
66
  return null;
@@ -70,10 +96,14 @@ export function createR2BlobStorageAdapter(options) {
70
96
  const { bucket, keyPrefix = '', baseUrl, tokenSigner } = options;
71
97
  // Normalize base URL (remove trailing slash)
72
98
  const normalizedBaseUrl = baseUrl.replace(/\/$/, '');
73
- function getKey(hash) {
99
+ function getKey(hash, partitionId) {
74
100
  // Remove "sha256:" prefix and use hex as key
75
101
  const hex = hash.startsWith('sha256:') ? hash.slice(7) : hash;
76
- return `${keyPrefix}${hex}`;
102
+ const normalizedPartition = partitionId?.trim();
103
+ if (!normalizedPartition || normalizedPartition === 'default') {
104
+ return `${keyPrefix}${hex}`;
105
+ }
106
+ return `${keyPrefix}${encodeURIComponent(normalizedPartition)}/${hex}`;
77
107
  }
78
108
  function resolveMimeType(metadata) {
79
109
  return typeof metadata?.mimeType === 'string'
@@ -132,8 +162,8 @@ export function createR2BlobStorageAdapter(options) {
132
162
  reader.releaseLock();
133
163
  }
134
164
  }
135
- async function putStreamInternal(hash, stream, metadata) {
136
- const key = getKey(hash);
165
+ async function putStreamInternal(hash, stream, metadata, options) {
166
+ const key = getKey(hash, options?.partitionId);
137
167
  const mimeType = resolveMimeType(metadata);
138
168
  const checksum = resolveChecksum(hash, metadata);
139
169
  const contentLength = resolveContentLength(metadata);
@@ -167,8 +197,8 @@ export function createR2BlobStorageAdapter(options) {
167
197
  sha256: checksum,
168
198
  });
169
199
  }
170
- async function getStreamInternal(hash) {
171
- const key = getKey(hash);
200
+ async function getStreamInternal(hash, options) {
201
+ const key = getKey(hash, options?.partitionId);
172
202
  const object = await bucket.get(key);
173
203
  if (!object)
174
204
  return null;
@@ -177,8 +207,15 @@ export function createR2BlobStorageAdapter(options) {
177
207
  return {
178
208
  name: 'r2',
179
209
  async signUpload(opts) {
210
+ const partitionId = opts.partitionId ?? 'default';
180
211
  const expiresAt = Date.now() + opts.expiresIn * 1000;
181
- const token = await tokenSigner.sign({ hash: opts.hash, action: 'upload', expiresAt }, opts.expiresIn);
212
+ const token = await tokenSigner.sign({
213
+ hash: opts.hash,
214
+ partitionId,
215
+ action: 'upload',
216
+ size: opts.size,
217
+ expiresAt,
218
+ }, opts.expiresIn);
182
219
  // URL points to server's blob upload endpoint
183
220
  const url = `${normalizedBaseUrl}/blobs/${encodeURIComponent(opts.hash)}/upload?token=${encodeURIComponent(token)}`;
184
221
  return {
@@ -191,21 +228,22 @@ export function createR2BlobStorageAdapter(options) {
191
228
  };
192
229
  },
193
230
  async signDownload(opts) {
231
+ const partitionId = opts.partitionId ?? 'default';
194
232
  const expiresAt = Date.now() + opts.expiresIn * 1000;
195
- const token = await tokenSigner.sign({ hash: opts.hash, action: 'download', expiresAt }, opts.expiresIn);
233
+ const token = await tokenSigner.sign({ hash: opts.hash, partitionId, action: 'download', expiresAt }, opts.expiresIn);
196
234
  return `${normalizedBaseUrl}/blobs/${encodeURIComponent(opts.hash)}/download?token=${encodeURIComponent(token)}`;
197
235
  },
198
- async exists(hash) {
199
- const key = getKey(hash);
236
+ async exists(hash, options) {
237
+ const key = getKey(hash, options?.partitionId);
200
238
  const head = await bucket.head(key);
201
239
  return head !== null;
202
240
  },
203
- async delete(hash) {
204
- const key = getKey(hash);
241
+ async delete(hash, options) {
242
+ const key = getKey(hash, options?.partitionId);
205
243
  await bucket.delete(key);
206
244
  },
207
- async getMetadata(hash) {
208
- const key = getKey(hash);
245
+ async getMetadata(hash, options) {
246
+ const key = getKey(hash, options?.partitionId);
209
247
  const head = await bucket.head(key);
210
248
  if (!head)
211
249
  return null;
@@ -214,8 +252,8 @@ export function createR2BlobStorageAdapter(options) {
214
252
  mimeType: head.httpMetadata?.contentType,
215
253
  };
216
254
  },
217
- async put(hash, data, metadata) {
218
- const key = getKey(hash);
255
+ async put(hash, data, metadata, options) {
256
+ const key = getKey(hash, options?.partitionId);
219
257
  const mimeType = resolveMimeType(metadata);
220
258
  const checksum = resolveChecksum(hash, metadata);
221
259
  await bucket.put(key, data, {
@@ -225,11 +263,11 @@ export function createR2BlobStorageAdapter(options) {
225
263
  sha256: checksum,
226
264
  });
227
265
  },
228
- async putStream(hash, stream, metadata) {
229
- await putStreamInternal(hash, stream, metadata);
266
+ async putStream(hash, stream, metadata, options) {
267
+ await putStreamInternal(hash, stream, metadata, options);
230
268
  },
231
- async get(hash) {
232
- const stream = await getStreamInternal(hash);
269
+ async get(hash, options) {
270
+ const stream = await getStreamInternal(hash, options);
233
271
  if (!stream)
234
272
  return null;
235
273
  const reader = stream.getReader();
@@ -257,8 +295,8 @@ export function createR2BlobStorageAdapter(options) {
257
295
  reader.releaseLock();
258
296
  }
259
297
  },
260
- async getStream(hash) {
261
- return getStreamInternal(hash);
298
+ async getStream(hash, options) {
299
+ return getStreamInternal(hash, options);
262
300
  },
263
301
  };
264
302
  }
package/dist/r2.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"r2.js","sourceRoot":"","sources":["../src/r2.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"r2.js","sourceRoot":"","sources":["../src/r2.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syncular/server-cloudflare",
3
- "version": "0.0.6-158",
3
+ "version": "0.0.6-165",
4
4
  "description": "Cloudflare Workers adapter for the Syncular server",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Benjamin Kniffler",
package/src/r2.ts CHANGED
@@ -18,6 +18,8 @@
18
18
  export interface BlobSignUploadOptions {
19
19
  /** SHA-256 hash (for naming and checksum validation) */
20
20
  hash: string;
21
+ /** Optional tenant/partition namespace for storage lookups */
22
+ partitionId?: string;
21
23
  /** Content size in bytes */
22
24
  size: number;
23
25
  /** MIME type */
@@ -44,6 +46,8 @@ export interface BlobSignedUpload {
44
46
  export interface BlobSignDownloadOptions {
45
47
  /** SHA-256 hash */
46
48
  hash: string;
49
+ /** Optional tenant/partition namespace for storage lookups */
50
+ partitionId?: string;
47
51
  /** URL expiration in seconds */
48
52
  expiresIn: number;
49
53
  }
@@ -69,18 +73,19 @@ export interface BlobStorageAdapter {
69
73
  /**
70
74
  * Check if a blob exists in storage.
71
75
  */
72
- exists(hash: string): Promise<boolean>;
76
+ exists(hash: string, options?: { partitionId?: string }): Promise<boolean>;
73
77
 
74
78
  /**
75
79
  * Delete a blob (for garbage collection).
76
80
  */
77
- delete(hash: string): Promise<void>;
81
+ delete(hash: string, options?: { partitionId?: string }): Promise<void>;
78
82
 
79
83
  /**
80
84
  * Get blob metadata from storage (optional).
81
85
  */
82
86
  getMetadata?(
83
- hash: string
87
+ hash: string,
88
+ options?: { partitionId?: string }
84
89
  ): Promise<{ size: number; mimeType?: string } | null>;
85
90
 
86
91
  /**
@@ -89,7 +94,8 @@ export interface BlobStorageAdapter {
89
94
  put?(
90
95
  hash: string,
91
96
  data: Uint8Array,
92
- metadata?: Record<string, unknown>
97
+ metadata?: Record<string, unknown>,
98
+ options?: { partitionId?: string }
93
99
  ): Promise<void>;
94
100
 
95
101
  /**
@@ -98,18 +104,25 @@ export interface BlobStorageAdapter {
98
104
  putStream?(
99
105
  hash: string,
100
106
  stream: ReadableStream<Uint8Array>,
101
- metadata?: Record<string, unknown>
107
+ metadata?: Record<string, unknown>,
108
+ options?: { partitionId?: string }
102
109
  ): Promise<void>;
103
110
 
104
111
  /**
105
112
  * Get blob data directly (for adapters that support direct retrieval).
106
113
  */
107
- get?(hash: string): Promise<Uint8Array | null>;
114
+ get?(
115
+ hash: string,
116
+ options?: { partitionId?: string }
117
+ ): Promise<Uint8Array | null>;
108
118
 
109
119
  /**
110
120
  * Get blob data directly as a stream.
111
121
  */
112
- getStream?(hash: string): Promise<ReadableStream<Uint8Array> | null>;
122
+ getStream?(
123
+ hash: string,
124
+ options?: { partitionId?: string }
125
+ ): Promise<ReadableStream<Uint8Array> | null>;
113
126
  }
114
127
 
115
128
  /**
@@ -123,7 +136,20 @@ export interface BlobTokenSigner {
123
136
  * @returns A signed token string
124
137
  */
125
138
  sign(
126
- payload: { hash: string; action: 'upload' | 'download'; expiresAt: number },
139
+ payload:
140
+ | {
141
+ hash: string;
142
+ partitionId: string;
143
+ action: 'upload';
144
+ size: number;
145
+ expiresAt: number;
146
+ }
147
+ | {
148
+ hash: string;
149
+ partitionId: string;
150
+ action: 'download';
151
+ expiresAt: number;
152
+ },
127
153
  expiresIn: number
128
154
  ): Promise<string>;
129
155
 
@@ -131,11 +157,22 @@ export interface BlobTokenSigner {
131
157
  * Verify and decode a signed token.
132
158
  * @returns The payload if valid, null if invalid/expired
133
159
  */
134
- verify(token: string): Promise<{
135
- hash: string;
136
- action: 'upload' | 'download';
137
- expiresAt: number;
138
- } | null>;
160
+ verify(token: string): Promise<
161
+ | {
162
+ hash: string;
163
+ partitionId: string;
164
+ action: 'upload';
165
+ size: number;
166
+ expiresAt: number;
167
+ }
168
+ | {
169
+ hash: string;
170
+ partitionId: string;
171
+ action: 'download';
172
+ expiresAt: number;
173
+ }
174
+ | null
175
+ >;
139
176
  }
140
177
 
141
178
  /**
@@ -176,15 +213,37 @@ export function createHmacTokenSigner(secret: string): BlobTokenSigner {
176
213
  if (sig !== expectedSig) return null;
177
214
 
178
215
  try {
179
- const data = JSON.parse(atob(dataB64)) as {
180
- hash: string;
181
- action: 'upload' | 'download';
182
- expiresAt: number;
183
- };
216
+ const parsed = JSON.parse(atob(dataB64)) as Record<string, unknown>;
217
+ if (typeof parsed.hash !== 'string') return null;
218
+ if (typeof parsed.partitionId !== 'string') return null;
219
+ if (typeof parsed.expiresAt !== 'number') return null;
220
+ if (Date.now() > parsed.expiresAt) return null;
221
+
222
+ if (parsed.action === 'download') {
223
+ return {
224
+ hash: parsed.hash,
225
+ partitionId: parsed.partitionId,
226
+ action: 'download',
227
+ expiresAt: parsed.expiresAt,
228
+ };
229
+ }
184
230
 
185
- if (Date.now() > data.expiresAt) return null;
231
+ if (
232
+ parsed.action === 'upload' &&
233
+ typeof parsed.size === 'number' &&
234
+ Number.isFinite(parsed.size) &&
235
+ parsed.size >= 0
236
+ ) {
237
+ return {
238
+ hash: parsed.hash,
239
+ partitionId: parsed.partitionId,
240
+ action: 'upload',
241
+ size: parsed.size,
242
+ expiresAt: parsed.expiresAt,
243
+ };
244
+ }
186
245
 
187
- return data;
246
+ return null;
188
247
  } catch {
189
248
  return null;
190
249
  }
@@ -236,10 +295,14 @@ export function createR2BlobStorageAdapter(
236
295
  // Normalize base URL (remove trailing slash)
237
296
  const normalizedBaseUrl = baseUrl.replace(/\/$/, '');
238
297
 
239
- function getKey(hash: string): string {
298
+ function getKey(hash: string, partitionId?: string): string {
240
299
  // Remove "sha256:" prefix and use hex as key
241
300
  const hex = hash.startsWith('sha256:') ? hash.slice(7) : hash;
242
- return `${keyPrefix}${hex}`;
301
+ const normalizedPartition = partitionId?.trim();
302
+ if (!normalizedPartition || normalizedPartition === 'default') {
303
+ return `${keyPrefix}${hex}`;
304
+ }
305
+ return `${keyPrefix}${encodeURIComponent(normalizedPartition)}/${hex}`;
243
306
  }
244
307
 
245
308
  function resolveMimeType(metadata?: Record<string, unknown>): string {
@@ -313,9 +376,10 @@ export function createR2BlobStorageAdapter(
313
376
  async function putStreamInternal(
314
377
  hash: string,
315
378
  stream: ReadableStream<Uint8Array>,
316
- metadata?: Record<string, unknown>
379
+ metadata?: Record<string, unknown>,
380
+ options?: { partitionId?: string }
317
381
  ): Promise<void> {
318
- const key = getKey(hash);
382
+ const key = getKey(hash, options?.partitionId);
319
383
  const mimeType = resolveMimeType(metadata);
320
384
  const checksum = resolveChecksum(hash, metadata);
321
385
  const contentLength = resolveContentLength(metadata);
@@ -356,9 +420,10 @@ export function createR2BlobStorageAdapter(
356
420
  }
357
421
 
358
422
  async function getStreamInternal(
359
- hash: string
423
+ hash: string,
424
+ options?: { partitionId?: string }
360
425
  ): Promise<ReadableStream<Uint8Array> | null> {
361
- const key = getKey(hash);
426
+ const key = getKey(hash, options?.partitionId);
362
427
  const object = await bucket.get(key);
363
428
  if (!object) return null;
364
429
  return object.body as ReadableStream<Uint8Array> | null;
@@ -368,9 +433,16 @@ export function createR2BlobStorageAdapter(
368
433
  name: 'r2',
369
434
 
370
435
  async signUpload(opts: BlobSignUploadOptions): Promise<BlobSignedUpload> {
436
+ const partitionId = opts.partitionId ?? 'default';
371
437
  const expiresAt = Date.now() + opts.expiresIn * 1000;
372
438
  const token = await tokenSigner.sign(
373
- { hash: opts.hash, action: 'upload', expiresAt },
439
+ {
440
+ hash: opts.hash,
441
+ partitionId,
442
+ action: 'upload',
443
+ size: opts.size,
444
+ expiresAt,
445
+ },
374
446
  opts.expiresIn
375
447
  );
376
448
 
@@ -388,30 +460,38 @@ export function createR2BlobStorageAdapter(
388
460
  },
389
461
 
390
462
  async signDownload(opts: BlobSignDownloadOptions): Promise<string> {
463
+ const partitionId = opts.partitionId ?? 'default';
391
464
  const expiresAt = Date.now() + opts.expiresIn * 1000;
392
465
  const token = await tokenSigner.sign(
393
- { hash: opts.hash, action: 'download', expiresAt },
466
+ { hash: opts.hash, partitionId, action: 'download', expiresAt },
394
467
  opts.expiresIn
395
468
  );
396
469
 
397
470
  return `${normalizedBaseUrl}/blobs/${encodeURIComponent(opts.hash)}/download?token=${encodeURIComponent(token)}`;
398
471
  },
399
472
 
400
- async exists(hash: string): Promise<boolean> {
401
- const key = getKey(hash);
473
+ async exists(
474
+ hash: string,
475
+ options?: { partitionId?: string }
476
+ ): Promise<boolean> {
477
+ const key = getKey(hash, options?.partitionId);
402
478
  const head = await bucket.head(key);
403
479
  return head !== null;
404
480
  },
405
481
 
406
- async delete(hash: string): Promise<void> {
407
- const key = getKey(hash);
482
+ async delete(
483
+ hash: string,
484
+ options?: { partitionId?: string }
485
+ ): Promise<void> {
486
+ const key = getKey(hash, options?.partitionId);
408
487
  await bucket.delete(key);
409
488
  },
410
489
 
411
490
  async getMetadata(
412
- hash: string
491
+ hash: string,
492
+ options?: { partitionId?: string }
413
493
  ): Promise<{ size: number; mimeType?: string } | null> {
414
- const key = getKey(hash);
494
+ const key = getKey(hash, options?.partitionId);
415
495
  const head = await bucket.head(key);
416
496
  if (!head) return null;
417
497
 
@@ -424,9 +504,10 @@ export function createR2BlobStorageAdapter(
424
504
  async put(
425
505
  hash: string,
426
506
  data: Uint8Array,
427
- metadata?: Record<string, unknown>
507
+ metadata?: Record<string, unknown>,
508
+ options?: { partitionId?: string }
428
509
  ): Promise<void> {
429
- const key = getKey(hash);
510
+ const key = getKey(hash, options?.partitionId);
430
511
  const mimeType = resolveMimeType(metadata);
431
512
  const checksum = resolveChecksum(hash, metadata);
432
513
  await bucket.put(key, data, {
@@ -440,13 +521,17 @@ export function createR2BlobStorageAdapter(
440
521
  async putStream(
441
522
  hash: string,
442
523
  stream: ReadableStream<Uint8Array>,
443
- metadata?: Record<string, unknown>
524
+ metadata?: Record<string, unknown>,
525
+ options?: { partitionId?: string }
444
526
  ): Promise<void> {
445
- await putStreamInternal(hash, stream, metadata);
527
+ await putStreamInternal(hash, stream, metadata, options);
446
528
  },
447
529
 
448
- async get(hash: string): Promise<Uint8Array | null> {
449
- const stream = await getStreamInternal(hash);
530
+ async get(
531
+ hash: string,
532
+ options?: { partitionId?: string }
533
+ ): Promise<Uint8Array | null> {
534
+ const stream = await getStreamInternal(hash, options);
450
535
  if (!stream) return null;
451
536
 
452
537
  const reader = stream.getReader();
@@ -472,8 +557,11 @@ export function createR2BlobStorageAdapter(
472
557
  }
473
558
  },
474
559
 
475
- async getStream(hash: string): Promise<ReadableStream<Uint8Array> | null> {
476
- return getStreamInternal(hash);
560
+ async getStream(
561
+ hash: string,
562
+ options?: { partitionId?: string }
563
+ ): Promise<ReadableStream<Uint8Array> | null> {
564
+ return getStreamInternal(hash, options);
477
565
  },
478
566
  };
479
567
  }