braid-blob 0.0.23 → 0.0.24

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.
@@ -0,0 +1,9 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npm test:*)"
5
+ ],
6
+ "deny": [],
7
+ "ask": []
8
+ }
9
+ }
package/index.js CHANGED
@@ -209,6 +209,36 @@ function create_braid_blob() {
209
209
  return result
210
210
  }
211
211
 
212
+ braid_blob.delete = async (key, options = {}) => {
213
+ // Handle URL case - make a remote DELETE request
214
+ if (key instanceof URL) {
215
+ options.my_abort = new AbortController()
216
+ if (options.signal) {
217
+ options.signal.addEventListener('abort', () =>
218
+ options.my_abort.abort())
219
+ }
220
+
221
+ var params = {
222
+ method: 'DELETE',
223
+ signal: options.my_abort.signal
224
+ }
225
+ for (var x of ['headers', 'peer'])
226
+ if (options[x] != null) params[x] = options[x]
227
+
228
+ return await braid_fetch(key.href, params)
229
+ }
230
+
231
+ await braid_blob.init()
232
+
233
+ // Delete the file from the database
234
+ await braid_blob.db.delete(key)
235
+
236
+ // TODO: notify subscribers of deletion once we have a protocol for that
237
+ // For now, just clean up the subscriptions
238
+ if (braid_blob.key_to_subs[key])
239
+ delete braid_blob.key_to_subs[key]
240
+ }
241
+
212
242
  braid_blob.serve = async (req, res, options = {}) => {
213
243
  await braid_blob.init()
214
244
 
@@ -292,7 +322,7 @@ function create_braid_blob() {
292
322
  res.setHeader("Version", version_to_header(event != null ? [event] : []))
293
323
  res.end('')
294
324
  } else if (req.method === 'DELETE') {
295
- await braid_blob.db.delete(options.key)
325
+ await braid_blob.delete(options.key)
296
326
  res.statusCode = 204 // No Content
297
327
  res.end('')
298
328
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "braid-blob",
3
- "version": "0.0.23",
3
+ "version": "0.0.24",
4
4
  "description": "Library for collaborative blobs over http using braid.",
5
5
  "author": "Braid Working Group",
6
6
  "repository": "braid-org/braid-blob",
package/test/tests.js CHANGED
@@ -381,6 +381,102 @@ runTest(
381
381
  '204'
382
382
  )
383
383
 
384
+ runTest(
385
+ "test braid_blob.delete() directly",
386
+ async () => {
387
+ var r1 = await braid_fetch(`/eval`, {
388
+ method: 'POST',
389
+ body: `void (async () => {
390
+ var test_id = 'test-db-' + Math.random().toString(36).slice(2)
391
+ var db_folder = __dirname + '/' + test_id + '-db'
392
+ var meta_folder = __dirname + '/' + test_id + '-meta'
393
+
394
+ var bb = braid_blob.create_braid_blob()
395
+ bb.db_folder = db_folder
396
+ bb.meta_folder = meta_folder
397
+
398
+ try {
399
+ // Put a file
400
+ await bb.put('/test-file', Buffer.from('hello'))
401
+
402
+ // Verify it exists
403
+ var result = await bb.get('/test-file')
404
+ if (!result || !result.body) {
405
+ res.end('error: file not found after put')
406
+ return
407
+ }
408
+
409
+ // Delete it
410
+ await bb.delete('/test-file')
411
+
412
+ // Verify it's gone
413
+ var result2 = await bb.get('/test-file')
414
+ if (result2) {
415
+ res.end('error: file still exists after delete')
416
+ return
417
+ }
418
+
419
+ res.end('true')
420
+ } catch (e) {
421
+ res.end('error: ' + e.message)
422
+ } finally {
423
+ await require('fs').promises.rm(db_folder, { recursive: true, force: true })
424
+ await require('fs').promises.rm(meta_folder, { recursive: true, force: true })
425
+ }
426
+ })()`
427
+ })
428
+ return await r1.text()
429
+ },
430
+ 'true'
431
+ )
432
+
433
+ runTest(
434
+ "test braid_blob.delete() cleans up subscriptions",
435
+ async () => {
436
+ var r1 = await braid_fetch(`/eval`, {
437
+ method: 'POST',
438
+ body: `void (async () => {
439
+ var test_id = 'test-db-' + Math.random().toString(36).slice(2)
440
+ var db_folder = __dirname + '/' + test_id + '-db'
441
+ var meta_folder = __dirname + '/' + test_id + '-meta'
442
+
443
+ var bb = braid_blob.create_braid_blob()
444
+ bb.db_folder = db_folder
445
+ bb.meta_folder = meta_folder
446
+
447
+ try {
448
+ // Put a file
449
+ await bb.put('/test-file', Buffer.from('hello'))
450
+
451
+ // Subscribe to it
452
+ var got_update = false
453
+ await bb.get('/test-file', {
454
+ subscribe: (update) => { got_update = true }
455
+ })
456
+
457
+ // Verify subscription exists
458
+ var has_sub_before = !!bb.key_to_subs['/test-file']
459
+
460
+ // Delete it
461
+ await bb.delete('/test-file')
462
+
463
+ // Verify subscription is cleaned up
464
+ var has_sub_after = !!bb.key_to_subs['/test-file']
465
+
466
+ res.end('' + (has_sub_before && !has_sub_after))
467
+ } catch (e) {
468
+ res.end('error: ' + e.message)
469
+ } finally {
470
+ await require('fs').promises.rm(db_folder, { recursive: true, force: true })
471
+ await require('fs').promises.rm(meta_folder, { recursive: true, force: true })
472
+ }
473
+ })()`
474
+ })
475
+ return await r1.text()
476
+ },
477
+ 'true'
478
+ )
479
+
384
480
  runTest(
385
481
  "test that subscribe returns current-version header",
386
482
  async () => {