@leofcoin/peernet 1.2.5 → 1.2.7

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 (40) hide show
  1. package/exports/browser/{client-CniXCEmO.js → client-AodRTAgI.js} +1 -1
  2. package/exports/browser/{messages-hNQTVVEb.js → messages-Dy2W05lC.js} +1 -1
  3. package/exports/browser/{peernet-BNgO-BZL.js → peernet-Cmg8trCq.js} +70 -53
  4. package/exports/browser/peernet.js +1 -1
  5. package/exports/peernet.js +69 -52
  6. package/exports/types/peernet.d.ts +37 -2
  7. package/package.json +225 -7
  8. package/rollup.config.js +7 -1
  9. package/src/messages.js +0 -1
  10. package/src/peernet.ts +77 -59
  11. package/test/peernet.test.js +44 -0
  12. package/exports/browser/dht/dht.d.ts +0 -38
  13. package/exports/browser/discovery/peer-discovery.d.ts +0 -7
  14. package/exports/browser/errors/errors.d.ts +0 -3
  15. package/exports/browser/handlers/data.d.ts +0 -2
  16. package/exports/browser/handlers/message.d.ts +0 -30
  17. package/exports/browser/identity.d.ts +0 -19
  18. package/exports/browser/messages/data.d.ts +0 -10
  19. package/exports/browser/messages/file-link.d.ts +0 -10
  20. package/exports/browser/messages/file.d.ts +0 -10
  21. package/exports/browser/messages.d.ts +0 -12
  22. package/exports/browser/peer-info.d.ts +0 -4
  23. package/exports/browser/peernet.d.ts +0 -266
  24. package/exports/browser/prompts/password/browser.d.ts +0 -2
  25. package/exports/browser/prompts/password/node.d.ts +0 -2
  26. package/exports/browser/proto/chat-message.proto.d.ts +0 -7
  27. package/exports/browser/proto/data-response.proto.d.ts +0 -5
  28. package/exports/browser/proto/data.proto.d.ts +0 -5
  29. package/exports/browser/proto/dht-response.proto.d.ts +0 -5
  30. package/exports/browser/proto/dht.proto.d.ts +0 -5
  31. package/exports/browser/proto/file-link.proto.d.ts +0 -6
  32. package/exports/browser/proto/file.proto.d.ts +0 -6
  33. package/exports/browser/proto/peer-response.proto.d.ts +0 -4
  34. package/exports/browser/proto/peer.proto.d.ts +0 -4
  35. package/exports/browser/proto/peernet.proto.d.ts +0 -8
  36. package/exports/browser/proto/ps.proto.d.ts +0 -5
  37. package/exports/browser/proto/request.proto.d.ts +0 -5
  38. package/exports/browser/proto/response.proto.d.ts +0 -4
  39. package/exports/browser/types.d.ts +0 -15
  40. package/exports/browser/utils/utils.d.ts +0 -7
@@ -1,4 +1,4 @@
1
- import { L as LittlePubSub, d as deflate_1, i as inflate_1, c as createDebugger } from './peernet-BNgO-BZL.js';
1
+ import { L as LittlePubSub, d as deflate_1, i as inflate_1, c as createDebugger } from './peernet-Cmg8trCq.js';
2
2
  import './identity-nIyW_Xm8.js';
3
3
  import './value-C3vAp-wb.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { F as FormatInterface } from './peernet-BNgO-BZL.js';
1
+ import { F as FormatInterface } from './peernet-Cmg8trCq.js';
2
2
  import './identity-nIyW_Xm8.js';
3
3
  import './value-C3vAp-wb.js';
4
4
 
@@ -8318,7 +8318,7 @@ class Peernet {
8318
8318
  return this.identity.accounts;
8319
8319
  }
8320
8320
  get defaultStores() {
8321
- return ['account', 'wallet', 'block', 'transaction', 'chain', 'data', 'message'];
8321
+ return ['account', 'wallet', 'block', 'transaction', 'chain', 'data', 'message', 'share'];
8322
8322
  }
8323
8323
  selectAccount(account) {
8324
8324
  return this.identity.selectAccount(account);
@@ -8331,7 +8331,12 @@ class Peernet {
8331
8331
  return utils.addCodec(codec);
8332
8332
  }
8333
8333
  async addStore(name, prefix, root, isPrivate = true) {
8334
- if (name === 'block' || name === 'transaction' || name === 'chain' || name === 'data' || name === 'message')
8334
+ if (name === 'block' ||
8335
+ name === 'transaction' ||
8336
+ name === 'chain' ||
8337
+ name === 'data' ||
8338
+ name === 'message' ||
8339
+ name === 'share')
8335
8340
  isPrivate = false;
8336
8341
  let Storage;
8337
8342
  this.hasDaemon ? (Storage = LeofcoinStorageClient) : (Storage = LeofcoinStorage);
@@ -8378,9 +8383,7 @@ class Peernet {
8378
8383
  await getAddress();
8379
8384
  this.storePrefix = options.storePrefix;
8380
8385
  this.root = options.root;
8381
- const { RequestMessage, ResponseMessage, PeerMessage, PeerMessageResponse, PeernetMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PsMessage, ChatMessage, PeernetFile
8382
- // FolderMessageResponse
8383
- } = await import(/* webpackChunkName: "messages" */ './messages-hNQTVVEb.js');
8386
+ const { RequestMessage, ResponseMessage, PeerMessage, PeerMessageResponse, PeernetMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PsMessage, ChatMessage, PeernetFile } = await import(/* webpackChunkName: "messages" */ './messages-Dy2W05lC.js');
8384
8387
  /**
8385
8388
  * proto Object containing protos
8386
8389
  * @type {Object}
@@ -8414,58 +8417,11 @@ class Peernet {
8414
8417
  await this.identity.load(password);
8415
8418
  this._peerHandler = new PeerDiscovery(this.id);
8416
8419
  this.peerId = this.id;
8417
- // this.addRequestHandler('handshake', () => {
8418
- // return new peernet.protos['peernet-response']({
8419
- // response: { peerId: this.id }
8420
- // })
8421
- // })
8422
- // pubsub.subscribe('peer:discovered', async (peer) => {
8423
- // // console.log(peer);
8424
- // if (this.requestProtos['version'] && !peer.version) {
8425
- // let data = await new globalThis.peernet.protos['peernet-request']({
8426
- // request: 'version'
8427
- // })
8428
- // let node = await globalThis.peernet.prepareMessage(data)
8429
- // let response = await peer.request(node.encoded)
8430
- // response = await new globalThis.peernet.protos['peernet-response'](new Uint8Array(Object.values(response)))
8431
- // peer.version = response.decoded.response.version
8432
- // }
8433
- // if (!peer.peerId) {
8434
- // let data = await new globalThis.peernet.protos['peernet-request']({
8435
- // request: 'handshake'
8436
- // })
8437
- // let node = await globalThis.peernet.prepareMessage(data)
8438
- // let response = await peer.request(node.encoded)
8439
- // response = await new globalThis.peernet.protos['peernet-response'](new Uint8Array(Object.values(response)))
8440
- // // todo: response.decoded should be the response and not response.peerId
8441
- // // todo: ignore above and remove discover completly
8442
- // response.decoded.response.peerId
8443
- // }
8444
- // this.connections[peer.peerId] = peer
8445
- // pubsub.publish('peer:connected', peer)
8446
- // todo: cleanup discovered
8447
- // })
8448
- // pubsub.subscribe('peer:left', this.#peerLeft.bind(this))
8449
8420
  /**
8450
8421
  * converts data -> message -> proto
8451
8422
  * @see DataHandler
8452
8423
  */
8453
8424
  pubsub.subscribe('peer:data', dataHandler);
8454
- // // todo: remove below, already handles in the swarm
8455
- // if (globalThis.navigator) {
8456
- // globalThis.addEventListener('beforeunload', async () => this.client.close())
8457
- // } else {
8458
- // process.on('SIGTERM', async () => {
8459
- // process.stdin.resume()
8460
- // try {
8461
- // await this.client.close()
8462
- // } catch (error) {
8463
- // // @ts-ignore
8464
- // await this.client.close()
8465
- // }
8466
- // process.exit()
8467
- // })
8468
- // }
8469
8425
  if (this.autoStart)
8470
8426
  await this.start();
8471
8427
  return this;
@@ -8474,7 +8430,7 @@ class Peernet {
8474
8430
  if (this.#starting || this.#started)
8475
8431
  return;
8476
8432
  this.#starting = true;
8477
- const importee = await import('./client-CniXCEmO.js');
8433
+ const importee = await import('./client-AodRTAgI.js');
8478
8434
  /**
8479
8435
  * @access public
8480
8436
  * @type {PeernetClient}
@@ -8574,6 +8530,8 @@ class Peernet {
8574
8530
  if (!this._inMemoryBroadcasts)
8575
8531
  this._inMemoryBroadcasts = new Map();
8576
8532
  this._inMemoryBroadcasts.set(hash, encoded);
8533
+ // Persist to share store
8534
+ await shareStore.put(hash, encoded);
8577
8535
  await this.publish('broadcast', { hash, from: this.id });
8578
8536
  return hash;
8579
8537
  }
@@ -8897,6 +8855,65 @@ class Peernet {
8897
8855
  has: async (hash) => await dataStore.has(hash)
8898
8856
  };
8899
8857
  }
8858
+ get share() {
8859
+ return {
8860
+ /**
8861
+ * Get content for given share hash
8862
+ *
8863
+ * @todo Add peer permission checking to validate if requesting peer has access
8864
+ *
8865
+ * @param {String} hash
8866
+ */
8867
+ get: async (hash) => {
8868
+ debug(`get share ${hash}`);
8869
+ const data = await shareStore.has(hash);
8870
+ if (data)
8871
+ return await shareStore.get(hash);
8872
+ return undefined;
8873
+ },
8874
+ /**
8875
+ * put share content
8876
+ *
8877
+ * @param {String} hash
8878
+ * @param {Buffer} data
8879
+ */
8880
+ put: async (hash, data) => await shareStore.put(hash, data),
8881
+ /**
8882
+ * @param {String} hash
8883
+ * @return {Boolean}
8884
+ */
8885
+ has: async (hash) => await shareStore.has(hash),
8886
+ /**
8887
+ * Put folder content
8888
+ *
8889
+ * @param {Array} files
8890
+ */
8891
+ putFolder: async (files) => {
8892
+ const links = [];
8893
+ for (const file of files) {
8894
+ const fileNode = await new globalThis.peernet.protos['peernet-file'](file);
8895
+ const hash = await fileNode.hash;
8896
+ await dataStore.put(hash, fileNode.encoded);
8897
+ links.push({ hash, path: file.path });
8898
+ }
8899
+ const node = await new globalThis.peernet.protos['peernet-file']({
8900
+ path: '/',
8901
+ links
8902
+ });
8903
+ const hash = await node.hash;
8904
+ await dataStore.put(hash, node.encoded);
8905
+ return hash;
8906
+ }
8907
+ };
8908
+ }
8909
+ /**
8910
+ * Get all shared hashes
8911
+ *
8912
+ * @returns {Promise<string[]>} Array of all shared hashes
8913
+ */
8914
+ async allSharedHashes() {
8915
+ return await shareStore.keys();
8916
+ }
8900
8917
  async addFolder(files) {
8901
8918
  const links = [];
8902
8919
  for (const file of files) {
@@ -1,3 +1,3 @@
1
- export { P as default } from './peernet-BNgO-BZL.js';
1
+ export { P as default } from './peernet-Cmg8trCq.js';
2
2
  import './identity-nIyW_Xm8.js';
3
3
  import './value-C3vAp-wb.js';
@@ -386,7 +386,7 @@ class Peernet {
386
386
  return this.identity.accounts;
387
387
  }
388
388
  get defaultStores() {
389
- return ['account', 'wallet', 'block', 'transaction', 'chain', 'data', 'message'];
389
+ return ['account', 'wallet', 'block', 'transaction', 'chain', 'data', 'message', 'share'];
390
390
  }
391
391
  selectAccount(account) {
392
392
  return this.identity.selectAccount(account);
@@ -399,7 +399,12 @@ class Peernet {
399
399
  return utils.addCodec(codec);
400
400
  }
401
401
  async addStore(name, prefix, root, isPrivate = true) {
402
- if (name === 'block' || name === 'transaction' || name === 'chain' || name === 'data' || name === 'message')
402
+ if (name === 'block' ||
403
+ name === 'transaction' ||
404
+ name === 'chain' ||
405
+ name === 'data' ||
406
+ name === 'message' ||
407
+ name === 'share')
403
408
  isPrivate = false;
404
409
  let Storage;
405
410
  this.hasDaemon ? (Storage = LeofcoinStorageClient) : (Storage = LeofcoinStorage);
@@ -446,9 +451,7 @@ class Peernet {
446
451
  await getAddress();
447
452
  this.storePrefix = options.storePrefix;
448
453
  this.root = options.root;
449
- const { RequestMessage, ResponseMessage, PeerMessage, PeerMessageResponse, PeernetMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PsMessage, ChatMessage, PeernetFile
450
- // FolderMessageResponse
451
- } = await import(/* webpackChunkName: "messages" */ './messages-C9lYBAhD.js');
454
+ const { RequestMessage, ResponseMessage, PeerMessage, PeerMessageResponse, PeernetMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PsMessage, ChatMessage, PeernetFile } = await import(/* webpackChunkName: "messages" */ './messages-C9lYBAhD.js');
452
455
  /**
453
456
  * proto Object containing protos
454
457
  * @type {Object}
@@ -482,58 +485,11 @@ class Peernet {
482
485
  await this.identity.load(password);
483
486
  this._peerHandler = new PeerDiscovery(this.id);
484
487
  this.peerId = this.id;
485
- // this.addRequestHandler('handshake', () => {
486
- // return new peernet.protos['peernet-response']({
487
- // response: { peerId: this.id }
488
- // })
489
- // })
490
- // pubsub.subscribe('peer:discovered', async (peer) => {
491
- // // console.log(peer);
492
- // if (this.requestProtos['version'] && !peer.version) {
493
- // let data = await new globalThis.peernet.protos['peernet-request']({
494
- // request: 'version'
495
- // })
496
- // let node = await globalThis.peernet.prepareMessage(data)
497
- // let response = await peer.request(node.encoded)
498
- // response = await new globalThis.peernet.protos['peernet-response'](new Uint8Array(Object.values(response)))
499
- // peer.version = response.decoded.response.version
500
- // }
501
- // if (!peer.peerId) {
502
- // let data = await new globalThis.peernet.protos['peernet-request']({
503
- // request: 'handshake'
504
- // })
505
- // let node = await globalThis.peernet.prepareMessage(data)
506
- // let response = await peer.request(node.encoded)
507
- // response = await new globalThis.peernet.protos['peernet-response'](new Uint8Array(Object.values(response)))
508
- // // todo: response.decoded should be the response and not response.peerId
509
- // // todo: ignore above and remove discover completly
510
- // response.decoded.response.peerId
511
- // }
512
- // this.connections[peer.peerId] = peer
513
- // pubsub.publish('peer:connected', peer)
514
- // todo: cleanup discovered
515
- // })
516
- // pubsub.subscribe('peer:left', this.#peerLeft.bind(this))
517
488
  /**
518
489
  * converts data -> message -> proto
519
490
  * @see DataHandler
520
491
  */
521
492
  pubsub.subscribe('peer:data', dataHandler);
522
- // // todo: remove below, already handles in the swarm
523
- // if (globalThis.navigator) {
524
- // globalThis.addEventListener('beforeunload', async () => this.client.close())
525
- // } else {
526
- // process.on('SIGTERM', async () => {
527
- // process.stdin.resume()
528
- // try {
529
- // await this.client.close()
530
- // } catch (error) {
531
- // // @ts-ignore
532
- // await this.client.close()
533
- // }
534
- // process.exit()
535
- // })
536
- // }
537
493
  if (this.autoStart)
538
494
  await this.start();
539
495
  return this;
@@ -642,6 +598,8 @@ class Peernet {
642
598
  if (!this._inMemoryBroadcasts)
643
599
  this._inMemoryBroadcasts = new Map();
644
600
  this._inMemoryBroadcasts.set(hash, encoded);
601
+ // Persist to share store
602
+ await shareStore.put(hash, encoded);
645
603
  await this.publish('broadcast', { hash, from: this.id });
646
604
  return hash;
647
605
  }
@@ -965,6 +923,65 @@ class Peernet {
965
923
  has: async (hash) => await dataStore.has(hash)
966
924
  };
967
925
  }
926
+ get share() {
927
+ return {
928
+ /**
929
+ * Get content for given share hash
930
+ *
931
+ * @todo Add peer permission checking to validate if requesting peer has access
932
+ *
933
+ * @param {String} hash
934
+ */
935
+ get: async (hash) => {
936
+ debug(`get share ${hash}`);
937
+ const data = await shareStore.has(hash);
938
+ if (data)
939
+ return await shareStore.get(hash);
940
+ return undefined;
941
+ },
942
+ /**
943
+ * put share content
944
+ *
945
+ * @param {String} hash
946
+ * @param {Buffer} data
947
+ */
948
+ put: async (hash, data) => await shareStore.put(hash, data),
949
+ /**
950
+ * @param {String} hash
951
+ * @return {Boolean}
952
+ */
953
+ has: async (hash) => await shareStore.has(hash),
954
+ /**
955
+ * Put folder content
956
+ *
957
+ * @param {Array} files
958
+ */
959
+ putFolder: async (files) => {
960
+ const links = [];
961
+ for (const file of files) {
962
+ const fileNode = await new globalThis.peernet.protos['peernet-file'](file);
963
+ const hash = await fileNode.hash;
964
+ await dataStore.put(hash, fileNode.encoded);
965
+ links.push({ hash, path: file.path });
966
+ }
967
+ const node = await new globalThis.peernet.protos['peernet-file']({
968
+ path: '/',
969
+ links
970
+ });
971
+ const hash = await node.hash;
972
+ await dataStore.put(hash, node.encoded);
973
+ return hash;
974
+ }
975
+ };
976
+ }
977
+ /**
978
+ * Get all shared hashes
979
+ *
980
+ * @returns {Promise<string[]>} Array of all shared hashes
981
+ */
982
+ async allSharedHashes() {
983
+ return await shareStore.keys();
984
+ }
968
985
  async addFolder(files) {
969
986
  const links = [];
970
987
  for (const file of files) {
@@ -1,4 +1,4 @@
1
- import PubSub from '@vandeurenglenn/little-pubsub';
1
+ import PubSub, { Handler } from '@vandeurenglenn/little-pubsub';
2
2
  import PeerDiscovery from './discovery/peer-discovery.js';
3
3
  import DHT from './dht/dht.js';
4
4
  import MessageHandler from './handlers/message.js';
@@ -16,6 +16,7 @@ declare global {
16
16
  var dataStore: LeofcoinStorageClass;
17
17
  var walletStore: LeofcoinStorageClass;
18
18
  var chainStore: LeofcoinStorageClass;
19
+ var shareStore: LeofcoinStorageClass;
19
20
  }
20
21
  /**
21
22
  * @access public
@@ -220,6 +221,40 @@ export default class Peernet {
220
221
  */
221
222
  has: (hash: any) => Promise<boolean | any[]>;
222
223
  };
224
+ get share(): {
225
+ /**
226
+ * Get content for given share hash
227
+ *
228
+ * @todo Add peer permission checking to validate if requesting peer has access
229
+ *
230
+ * @param {String} hash
231
+ */
232
+ get: (hash: any) => Promise<any>;
233
+ /**
234
+ * put share content
235
+ *
236
+ * @param {String} hash
237
+ * @param {Buffer} data
238
+ */
239
+ put: (hash: any, data: any) => Promise<unknown>;
240
+ /**
241
+ * @param {String} hash
242
+ * @return {Boolean}
243
+ */
244
+ has: (hash: any) => Promise<boolean | any[]>;
245
+ /**
246
+ * Put folder content
247
+ *
248
+ * @param {Array} files
249
+ */
250
+ putFolder: (files: any) => Promise<any>;
251
+ };
252
+ /**
253
+ * Get all shared hashes
254
+ *
255
+ * @returns {Promise<string[]>} Array of all shared hashes
256
+ */
257
+ allSharedHashes(): Promise<string[]>;
223
258
  addFolder(files: any): Promise<any>;
224
259
  ls(hash: any, options: any): Promise<any[]>;
225
260
  cat(hash: any, options: any): Promise<any>;
@@ -260,7 +295,7 @@ export default class Peernet {
260
295
  * @param {String} topic
261
296
  * @param {Method} cb
262
297
  */
263
- subscribe(topic: string, callback: Function): Promise<void>;
298
+ subscribe(topic: string, callback: Handler): Promise<void>;
264
299
  removePeer(peer: any): Promise<void>;
265
300
  get Buffer(): BufferConstructor;
266
301
  }