@beyonk/tus-bunny-store 0.1.0-beta.2 → 0.1.0-beta.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAKjC,OAAO,EAAwB,MAAM,EAAE,SAAS,EAAC,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAIzD,MAAM,MAAM,OAAO,GAAG;IACpB;;OAEG;IACH,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,WAAW,CAAA;CAC9C,CAAA;AAqDD,qBAAa,UAAW,SAAQ,SAAS;;IAChC,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,WAAW,CAAA;gBAExC,OAAO,EAAE,OAAO;IAsGtB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCvC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;IAerD;;OAEG;IACG,KAAK,CACT,QAAQ,EAAE,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,QAAQ,EAChD,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IAmIZ,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BtC,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO5E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAKjC,OAAO,EAAwB,MAAM,EAAE,SAAS,EAAC,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAIzD,MAAM,MAAM,OAAO,GAAG;IACpB;;OAEG;IACH,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,WAAW,CAAA;CAC9C,CAAA;AAmED,qBAAa,UAAW,SAAQ,SAAS;;IAChC,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,WAAW,CAAA;gBAExC,OAAO,EAAE,OAAO;IAyHtB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+BvC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;IAcrD;;OAEG;IACG,KAAK,CACT,QAAQ,EAAE,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,QAAQ,EAChD,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IAiIZ,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAyBtC,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO5E"}
package/dist/index.js CHANGED
@@ -7,8 +7,14 @@ import * as BunnyStorageSDK from '@bunny.net/storage-sdk';
7
7
  const log = debug('tus-node-server:stores:bunnystore');
8
8
  /**
9
9
  * Convert a Node.js Readable stream to a Web ReadableStream
10
+ * Uses the built-in toWeb() method if available, otherwise falls back to manual conversion
10
11
  */
11
12
  function nodeStreamToWebStream(nodeStream) {
13
+ // Use built-in toWeb() method if available (Node.js 17+)
14
+ if (typeof stream.Readable.toWeb === 'function') {
15
+ return stream.Readable.toWeb(nodeStream);
16
+ }
17
+ // Fallback for older Node.js versions or edge environments
12
18
  return new ReadableStream({
13
19
  start(controller) {
14
20
  nodeStream.on('data', (chunk) => {
@@ -29,8 +35,14 @@ function nodeStreamToWebStream(nodeStream) {
29
35
  }
30
36
  /**
31
37
  * Convert a Web ReadableStream to a Node.js Readable stream
38
+ * Uses the built-in fromWeb() method if available, otherwise falls back to manual conversion
32
39
  */
33
40
  function webStreamToNodeStream(webStream) {
41
+ // Use built-in fromWeb() method if available (Node.js 17+)
42
+ if (typeof stream.Readable.fromWeb === 'function') {
43
+ return stream.Readable.fromWeb(webStream);
44
+ }
45
+ // Fallback for older Node.js versions or edge environments
34
46
  const reader = webStream.getReader();
35
47
  const nodeStream = new stream.Readable({
36
48
  async read() {
@@ -60,12 +72,6 @@ export class BunnyStore extends DataStore {
60
72
  this.storageZone = options.storageZone;
61
73
  this.extensions = ['creation', 'creation-with-upload', 'creation-defer-length'];
62
74
  }
63
- /**
64
- * Normalize path for Bunny Storage - ensure it starts with /
65
- */
66
- #normalizePath(path) {
67
- return path.startsWith('/') ? path : `/${path}`;
68
- }
69
75
  /**
70
76
  * Get the path for the metadata info file
71
77
  */
@@ -82,15 +88,18 @@ export class BunnyStore extends DataStore {
82
88
  'tus-version': TUS_RESUMABLE,
83
89
  };
84
90
  const metadataJson = JSON.stringify(metadata);
85
- const metadataStream = new stream.Readable({
86
- read() {
87
- this.push(Buffer.from(metadataJson));
88
- this.push(null);
91
+ const metadataBytes = new TextEncoder().encode(metadataJson);
92
+ // Create a Web ReadableStream directly instead of converting from Node.js stream
93
+ // This is more compatible with edge environments
94
+ const metadataStream = new ReadableStream({
95
+ start(controller) {
96
+ controller.enqueue(metadataBytes);
97
+ controller.close();
89
98
  },
90
99
  });
91
- const metadataPath = this.#normalizePath(this.#infoKey(upload.id));
100
+ const metadataPath = this.#infoKey(upload.id);
92
101
  log(`[${upload.id}] uploading metadata to path: ${metadataPath}`);
93
- await BunnyStorageSDK.file.upload(this.storageZone, metadataPath, nodeStreamToWebStream(metadataStream));
102
+ await BunnyStorageSDK.file.upload(this.storageZone, metadataPath, metadataStream);
94
103
  log(`[${upload.id}] metadata file saved`);
95
104
  }
96
105
  /**
@@ -98,15 +107,35 @@ export class BunnyStore extends DataStore {
98
107
  */
99
108
  async #getMetadata(id) {
100
109
  try {
101
- const infoPath = this.#normalizePath(this.#infoKey(id));
110
+ const infoPath = this.#infoKey(id);
102
111
  const infoFile = await BunnyStorageSDK.file.get(this.storageZone, infoPath);
103
112
  const { stream: webStream } = await infoFile.data();
104
- const nodeStream = webStreamToNodeStream(webStream);
113
+ // Read directly from Web ReadableStream instead of converting to Node.js stream
114
+ // This avoids asyncIterator issues in edge environments
115
+ const reader = webStream.getReader();
105
116
  const chunks = [];
106
- for await (const chunk of nodeStream) {
107
- chunks.push(chunk);
117
+ try {
118
+ while (true) {
119
+ const { done, value } = await reader.read();
120
+ if (done)
121
+ break;
122
+ if (value) {
123
+ chunks.push(value);
124
+ }
125
+ }
126
+ }
127
+ finally {
128
+ reader.releaseLock();
129
+ }
130
+ // Combine chunks and convert to string
131
+ const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
132
+ const combined = new Uint8Array(totalLength);
133
+ let offset = 0;
134
+ for (const chunk of chunks) {
135
+ combined.set(chunk, offset);
136
+ offset += chunk.length;
108
137
  }
109
- const metadataJson = Buffer.concat(chunks).toString('utf-8');
138
+ const metadataJson = new TextDecoder().decode(combined);
110
139
  const metadata = JSON.parse(metadataJson);
111
140
  // Reconstruct Upload object
112
141
  metadata.file = new Upload({
@@ -141,11 +170,9 @@ export class BunnyStore extends DataStore {
141
170
  if (!upload.id) {
142
171
  throw ERRORS.FILE_NOT_FOUND;
143
172
  }
144
- const filePath = this.#normalizePath(upload.id);
145
- log(`[${upload.id}] normalized file path: ${filePath}`);
146
173
  upload.storage = {
147
174
  type: 'bunny',
148
- path: filePath,
175
+ path: upload.id,
149
176
  bucket: BunnyStorageSDK.zone.name(this.storageZone),
150
177
  };
151
178
  upload.creation_date = new Date().toISOString();
@@ -158,7 +185,7 @@ export class BunnyStore extends DataStore {
158
185
  return upload;
159
186
  }
160
187
  catch (error) {
161
- log(`[BunnyStore] create error for path "${filePath}":`, error);
188
+ log(`[BunnyStore] create error for path "${upload.id}":`, error);
162
189
  if (error instanceof Error) {
163
190
  log(`[BunnyStore] error message: ${error.message}`);
164
191
  log(`[BunnyStore] error stack: ${error.stack}`);
@@ -167,14 +194,13 @@ export class BunnyStore extends DataStore {
167
194
  }
168
195
  }
169
196
  async read(file_id) {
170
- const filePath = this.#normalizePath(file_id);
171
197
  try {
172
- log(`[${file_id}] reading from path: ${filePath}`);
173
- const { stream: webStream } = await BunnyStorageSDK.file.download(this.storageZone, filePath);
198
+ log(`[${file_id}] reading from path: ${file_id}`);
199
+ const { stream: webStream } = await BunnyStorageSDK.file.download(this.storageZone, file_id);
174
200
  return webStreamToNodeStream(webStream);
175
201
  }
176
202
  catch (error) {
177
- log(`[BunnyStore] read error for path "${filePath}":`, error);
203
+ log(`[BunnyStore] read error for path "${file_id}":`, error);
178
204
  throw ERRORS.FILE_NOT_FOUND;
179
205
  }
180
206
  }
@@ -202,10 +228,9 @@ export class BunnyStore extends DataStore {
202
228
  const chunks = [];
203
229
  // If there's existing data, download it first
204
230
  if (upload.offset > 0) {
205
- const existingFilePath = this.#normalizePath(id);
206
231
  try {
207
- log(`[${id}] downloading existing file from path: ${existingFilePath}`);
208
- const existingFile = await BunnyStorageSDK.file.get(this.storageZone, existingFilePath);
232
+ log(`[${id}] downloading existing file from path: ${id}`);
233
+ const existingFile = await BunnyStorageSDK.file.get(this.storageZone, id);
209
234
  const { stream: existingWebStream } = await existingFile.data();
210
235
  const existingNodeStream = webStreamToNodeStream(existingWebStream);
211
236
  for await (const chunk of existingNodeStream) {
@@ -213,7 +238,7 @@ export class BunnyStore extends DataStore {
213
238
  }
214
239
  }
215
240
  catch (error) {
216
- log(`[${id}] error downloading existing file from path "${existingFilePath}":`, error);
241
+ log(`[${id}] error downloading existing file from path "${id}":`, error);
217
242
  // If file doesn't exist yet, that's okay for offset 0
218
243
  if (upload.offset > 0) {
219
244
  isResolved = true;
@@ -253,8 +278,7 @@ export class BunnyStore extends DataStore {
253
278
  if (upload.metadata?.contentType) {
254
279
  uploadOptions.contentType = upload.metadata.contentType;
255
280
  }
256
- const uploadFilePath = this.#normalizePath(id);
257
- await BunnyStorageSDK.file.upload(this.storageZone, uploadFilePath, nodeStreamToWebStream(combinedStream), uploadOptions);
281
+ await BunnyStorageSDK.file.upload(this.storageZone, id, nodeStreamToWebStream(combinedStream), uploadOptions);
258
282
  // Update metadata
259
283
  await this.#saveMetadata(upload);
260
284
  log(`[${id}] ${newOffset} bytes written`);
@@ -306,8 +330,7 @@ export class BunnyStore extends DataStore {
306
330
  const upload = metadata.file;
307
331
  // Get the actual file size from storage
308
332
  try {
309
- const filePath = this.#normalizePath(id);
310
- const fileInfo = await BunnyStorageSDK.file.get(this.storageZone, filePath);
333
+ const fileInfo = await BunnyStorageSDK.file.get(this.storageZone, id);
311
334
  upload.offset = fileInfo.length;
312
335
  }
313
336
  catch (error) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@beyonk/tus-bunny-store",
4
- "version": "0.1.0-beta.2",
4
+ "version": "0.1.0-beta.4",
5
5
  "description": "Bunny.net store for @tus/server",
6
6
  "main": "./dist/index.js",
7
7
  "exports": "./dist/index.js",
package/src/index.ts CHANGED
@@ -23,8 +23,15 @@ type MetadataValue = {
23
23
 
24
24
  /**
25
25
  * Convert a Node.js Readable stream to a Web ReadableStream
26
+ * Uses the built-in toWeb() method if available, otherwise falls back to manual conversion
26
27
  */
27
28
  function nodeStreamToWebStream(nodeStream: stream.Readable): ReadableStream<Uint8Array> {
29
+ // Use built-in toWeb() method if available (Node.js 17+)
30
+ if (typeof stream.Readable.toWeb === 'function') {
31
+ return stream.Readable.toWeb(nodeStream) as ReadableStream<Uint8Array>
32
+ }
33
+
34
+ // Fallback for older Node.js versions or edge environments
28
35
  return new ReadableStream({
29
36
  start(controller) {
30
37
  nodeStream.on('data', (chunk: Buffer | Uint8Array) => {
@@ -46,8 +53,15 @@ function nodeStreamToWebStream(nodeStream: stream.Readable): ReadableStream<Uint
46
53
 
47
54
  /**
48
55
  * Convert a Web ReadableStream to a Node.js Readable stream
56
+ * Uses the built-in fromWeb() method if available, otherwise falls back to manual conversion
49
57
  */
50
58
  function webStreamToNodeStream(webStream: ReadableStream<Uint8Array>): stream.Readable {
59
+ // Use built-in fromWeb() method if available (Node.js 17+)
60
+ if (typeof stream.Readable.fromWeb === 'function') {
61
+ return stream.Readable.fromWeb(webStream)
62
+ }
63
+
64
+ // Fallback for older Node.js versions or edge environments
51
65
  const reader = webStream.getReader()
52
66
  const nodeStream = new stream.Readable({
53
67
  async read() {
@@ -82,13 +96,6 @@ export class BunnyStore extends DataStore {
82
96
  this.extensions = ['creation', 'creation-with-upload', 'creation-defer-length']
83
97
  }
84
98
 
85
- /**
86
- * Normalize path for Bunny Storage - ensure it starts with /
87
- */
88
- #normalizePath(path: string): string {
89
- return path.startsWith('/') ? path : `/${path}`
90
- }
91
-
92
99
  /**
93
100
  * Get the path for the metadata info file
94
101
  */
@@ -107,19 +114,25 @@ export class BunnyStore extends DataStore {
107
114
  }
108
115
 
109
116
  const metadataJson = JSON.stringify(metadata)
110
- const metadataStream = new stream.Readable({
111
- read() {
112
- this.push(Buffer.from(metadataJson))
113
- this.push(null)
117
+ const metadataBytes = new TextEncoder().encode(metadataJson)
118
+
119
+ // Create a Web ReadableStream directly instead of converting from Node.js stream
120
+ // This is more compatible with edge environments
121
+ const metadataStream = new ReadableStream({
122
+ start(controller) {
123
+ controller.enqueue(metadataBytes)
124
+ controller.close()
114
125
  },
115
126
  })
116
127
 
117
- const metadataPath = this.#normalizePath(this.#infoKey(upload.id))
128
+
129
+
130
+ const metadataPath = this.#infoKey(upload.id)
118
131
  log(`[${upload.id}] uploading metadata to path: ${metadataPath}`)
119
132
  await BunnyStorageSDK.file.upload(
120
133
  this.storageZone,
121
134
  metadataPath,
122
- nodeStreamToWebStream(metadataStream)
135
+ metadataStream
123
136
  )
124
137
  log(`[${upload.id}] metadata file saved`)
125
138
  }
@@ -129,17 +142,37 @@ export class BunnyStore extends DataStore {
129
142
  */
130
143
  async #getMetadata(id: string): Promise<MetadataValue> {
131
144
  try {
132
- const infoPath = this.#normalizePath(this.#infoKey(id))
145
+ const infoPath = this.#infoKey(id)
133
146
  const infoFile = await BunnyStorageSDK.file.get(this.storageZone, infoPath)
134
147
  const {stream: webStream} = await infoFile.data()
135
- const nodeStream = webStreamToNodeStream(webStream)
136
-
137
- const chunks: Buffer[] = []
138
- for await (const chunk of nodeStream) {
139
- chunks.push(chunk)
148
+
149
+ // Read directly from Web ReadableStream instead of converting to Node.js stream
150
+ // This avoids asyncIterator issues in edge environments
151
+ const reader = webStream.getReader()
152
+ const chunks: Uint8Array[] = []
153
+
154
+ try {
155
+ while (true) {
156
+ const {done, value} = await reader.read()
157
+ if (done) break
158
+ if (value) {
159
+ chunks.push(value)
160
+ }
161
+ }
162
+ } finally {
163
+ reader.releaseLock()
140
164
  }
141
165
 
142
- const metadataJson = Buffer.concat(chunks).toString('utf-8')
166
+ // Combine chunks and convert to string
167
+ const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0)
168
+ const combined = new Uint8Array(totalLength)
169
+ let offset = 0
170
+ for (const chunk of chunks) {
171
+ combined.set(chunk, offset)
172
+ offset += chunk.length
173
+ }
174
+
175
+ const metadataJson = new TextDecoder().decode(combined)
143
176
  const metadata: MetadataValue = JSON.parse(metadataJson)
144
177
 
145
178
  // Reconstruct Upload object
@@ -178,12 +211,9 @@ export class BunnyStore extends DataStore {
178
211
  throw ERRORS.FILE_NOT_FOUND
179
212
  }
180
213
 
181
- const filePath = this.#normalizePath(upload.id)
182
- log(`[${upload.id}] normalized file path: ${filePath}`)
183
-
184
214
  upload.storage = {
185
215
  type: 'bunny',
186
- path: filePath,
216
+ path: upload.id,
187
217
  bucket: BunnyStorageSDK.zone.name(this.storageZone),
188
218
  }
189
219
 
@@ -197,7 +227,7 @@ export class BunnyStore extends DataStore {
197
227
  log(`[${upload.id}] upload created (metadata only, file will be created on first write)`)
198
228
  return upload
199
229
  } catch (error) {
200
- log(`[BunnyStore] create error for path "${filePath}":`, error)
230
+ log(`[BunnyStore] create error for path "${upload.id}":`, error)
201
231
  if (error instanceof Error) {
202
232
  log(`[BunnyStore] error message: ${error.message}`)
203
233
  log(`[BunnyStore] error stack: ${error.stack}`)
@@ -207,16 +237,15 @@ export class BunnyStore extends DataStore {
207
237
  }
208
238
 
209
239
  async read(file_id: string): Promise<stream.Readable> {
210
- const filePath = this.#normalizePath(file_id)
211
240
  try {
212
- log(`[${file_id}] reading from path: ${filePath}`)
241
+ log(`[${file_id}] reading from path: ${file_id}`)
213
242
  const {stream: webStream} = await BunnyStorageSDK.file.download(
214
243
  this.storageZone,
215
- filePath
244
+ file_id
216
245
  )
217
246
  return webStreamToNodeStream(webStream)
218
247
  } catch (error) {
219
- log(`[BunnyStore] read error for path "${filePath}":`, error)
248
+ log(`[BunnyStore] read error for path "${file_id}":`, error)
220
249
  throw ERRORS.FILE_NOT_FOUND
221
250
  }
222
251
  }
@@ -255,10 +284,9 @@ export class BunnyStore extends DataStore {
255
284
 
256
285
  // If there's existing data, download it first
257
286
  if (upload.offset > 0) {
258
- const existingFilePath = this.#normalizePath(id)
259
287
  try {
260
- log(`[${id}] downloading existing file from path: ${existingFilePath}`)
261
- const existingFile = await BunnyStorageSDK.file.get(this.storageZone, existingFilePath)
288
+ log(`[${id}] downloading existing file from path: ${id}`)
289
+ const existingFile = await BunnyStorageSDK.file.get(this.storageZone, id)
262
290
  const {stream: existingWebStream} = await existingFile.data()
263
291
  const existingNodeStream = webStreamToNodeStream(existingWebStream)
264
292
 
@@ -266,7 +294,7 @@ export class BunnyStore extends DataStore {
266
294
  chunks.push(chunk)
267
295
  }
268
296
  } catch (error) {
269
- log(`[${id}] error downloading existing file from path "${existingFilePath}":`, error)
297
+ log(`[${id}] error downloading existing file from path "${id}":`, error)
270
298
  // If file doesn't exist yet, that's okay for offset 0
271
299
  if (upload.offset > 0) {
272
300
  isResolved = true
@@ -311,10 +339,9 @@ export class BunnyStore extends DataStore {
311
339
  uploadOptions.contentType = upload.metadata.contentType
312
340
  }
313
341
 
314
- const uploadFilePath = this.#normalizePath(id)
315
342
  await BunnyStorageSDK.file.upload(
316
343
  this.storageZone,
317
- uploadFilePath,
344
+ id,
318
345
  nodeStreamToWebStream(combinedStream),
319
346
  uploadOptions
320
347
  )
@@ -370,8 +397,7 @@ export class BunnyStore extends DataStore {
370
397
 
371
398
  // Get the actual file size from storage
372
399
  try {
373
- const filePath = this.#normalizePath(id)
374
- const fileInfo = await BunnyStorageSDK.file.get(this.storageZone, filePath)
400
+ const fileInfo = await BunnyStorageSDK.file.get(this.storageZone, id)
375
401
  upload.offset = fileInfo.length
376
402
  } catch (error) {
377
403
  // If file doesn't exist yet, offset is 0