@leofcoin/peernet 1.1.79 → 1.1.81

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 (85) hide show
  1. package/.esdoc.json +10 -10
  2. package/.gitattributes +2 -2
  3. package/.prettierrc +7 -7
  4. package/.travis.yml +27 -27
  5. package/BREAKING_CHANGES.md +34 -34
  6. package/LICENSE +21 -21
  7. package/README.md +72 -72
  8. package/deploy.js +8 -8
  9. package/exports/browser/{browser-WUe24rfW.js → browser-DQJ6xf_F.js} +3 -3
  10. package/exports/browser/browser-store.js +168 -22
  11. package/exports/browser/{client-I9x7CFr1.js → client-C0VVXIWm.js} +66 -32
  12. package/exports/browser/{peernet-DULgegxE.js → identity-CQ_ieRiz.js} +2232 -13425
  13. package/exports/browser/identity.d.ts +1 -1
  14. package/exports/browser/identity.js +1 -0
  15. package/exports/browser/{index-sw14JvKD.js → index-BeqbCwUk.js} +1 -2
  16. package/exports/browser/{index-In1Jzp-v.js → index-CEwkDK9g.js} +10 -489
  17. package/exports/browser/{messages-lzTD4EMU.js → messages-BdevLRCA.js} +167 -166
  18. package/exports/browser/peernet-DEIKLS2i.js +13220 -0
  19. package/exports/browser/peernet.d.ts +7 -7
  20. package/exports/browser/peernet.js +3 -2
  21. package/exports/identity.js +92 -0
  22. package/exports/{messages-T3M-Ff1E.js → messages-BmpgEM4y.js} +163 -163
  23. package/exports/peernet.js +189 -273
  24. package/exports/src/prompts/password.js +3 -3
  25. package/exports/store.js +9 -2
  26. package/exports/types/identity.d.ts +1 -1
  27. package/exports/types/peernet.d.ts +7 -7
  28. package/index.html +19 -19
  29. package/package.json +71 -62
  30. package/rollup.config.js +63 -63
  31. package/src/dht/dht.ts +147 -147
  32. package/src/discovery/peer-discovery.js +75 -75
  33. package/src/errors/errors.js +12 -12
  34. package/src/handlers/data.js +15 -15
  35. package/src/handlers/message.js +34 -34
  36. package/src/identity.ts +104 -104
  37. package/src/messages/chat.js +13 -13
  38. package/src/messages/data-response.js +13 -13
  39. package/src/messages/data.js +17 -17
  40. package/src/messages/dht-response.js +13 -13
  41. package/src/messages/dht.js +21 -21
  42. package/src/messages/file-link.js +17 -17
  43. package/src/messages/file.js +17 -17
  44. package/src/messages/peer-response.js +13 -13
  45. package/src/messages/peer.js +13 -13
  46. package/src/messages/peernet.js +13 -13
  47. package/src/messages/ps.js +13 -13
  48. package/src/messages/request.js +13 -13
  49. package/src/messages/response.js +13 -13
  50. package/src/messages.js +13 -13
  51. package/src/peer-info.js +9 -9
  52. package/src/peernet.ts +817 -817
  53. package/src/prompts/password/browser.js +1 -1
  54. package/src/prompts/password/node.js +6 -6
  55. package/src/proto/chat-message.proto.js +6 -6
  56. package/src/proto/data-response.proto.js +4 -4
  57. package/src/proto/data.proto.js +4 -4
  58. package/src/proto/dht-response.proto.js +4 -4
  59. package/src/proto/dht.proto.js +4 -4
  60. package/src/proto/file-link.proto.js +5 -5
  61. package/src/proto/file.proto.js +5 -5
  62. package/src/proto/peer-response.proto.js +3 -3
  63. package/src/proto/peer.proto.js +3 -3
  64. package/src/proto/peernet.proto.js +7 -7
  65. package/src/proto/ps.proto.js +4 -4
  66. package/src/proto/request.proto.js +4 -4
  67. package/src/proto/response.proto.js +3 -3
  68. package/src/types.ts +25 -25
  69. package/src/utils/utils.js +77 -77
  70. package/test/client.js +14 -14
  71. package/test/codec.js +56 -56
  72. package/test/hash.js +13 -13
  73. package/test/index.js +3 -3
  74. package/test/lastBlock.js +7 -7
  75. package/test/messages.js +26 -26
  76. package/test/peernet.js +17 -17
  77. package/test/peernet.test.js +159 -0
  78. package/test.js +62 -62
  79. package/test2.js +13 -13
  80. package/test3.js +15 -15
  81. package/test4.js +7 -7
  82. package/tsconfig.json +11 -13
  83. /package/exports/browser/{browser-AyxSBUXj.js → browser-pguCHlVu.js} +0 -0
  84. /package/exports/browser/{qr-scanner-worker.min-RaSiJc_R.js → qr-scanner-worker.min-Dy0qkKA4.js} +0 -0
  85. /package/exports/browser/{value-wzPYMxsX.js → value-C3vAp-wb.js} +0 -0
@@ -71,7 +71,7 @@ export default class Peernet {
71
71
  get selectedAccount(): string;
72
72
  get accounts(): Promise<[[name: string, externalAddress: string, internalAddress: string]]>;
73
73
  get defaultStores(): string[];
74
- selectAccount(account: string): Promise<void> | Promise<any[]>;
74
+ selectAccount(account: string): Promise<unknown>;
75
75
  addProto(name: any, proto: any): void;
76
76
  addCodec(codec: any): void;
77
77
  addStore(name: any, prefix: any, root: any, isPrivate?: boolean): Promise<void>;
@@ -131,12 +131,12 @@ export default class Peernet {
131
131
  providersFor(hash: string, store?: undefined): Promise<import("./dht/dht.js").DHTProviderMapValue>;
132
132
  get block(): {
133
133
  get: (hash: string) => Promise<any>;
134
- put: (hash: string, data: Uint8Array) => Promise<void | any[]>;
134
+ put: (hash: string, data: Uint8Array) => Promise<unknown>;
135
135
  has: (hash: string) => Promise<boolean | any[]>;
136
136
  };
137
137
  get transaction(): {
138
138
  get: (hash: string) => Promise<any>;
139
- put: (hash: string, data: Uint8Array) => Promise<void | any[]>;
139
+ put: (hash: string, data: Uint8Array) => Promise<unknown>;
140
140
  has: (hash: string) => Promise<boolean | any[]>;
141
141
  };
142
142
  requestData(hash: any, store: any): any;
@@ -153,7 +153,7 @@ export default class Peernet {
153
153
  * @param {String} hash
154
154
  * @param {Buffer} message
155
155
  */
156
- put: (hash: any, message: any) => Promise<void | any[]>;
156
+ put: (hash: any, message: any) => Promise<unknown>;
157
157
  /**
158
158
  * @param {String} hash
159
159
  * @return {Boolean}
@@ -173,7 +173,7 @@ export default class Peernet {
173
173
  * @param {String} hash
174
174
  * @param {Buffer} data
175
175
  */
176
- put: (hash: any, data: any) => Promise<void | any[]>;
176
+ put: (hash: any, data: any) => Promise<unknown>;
177
177
  /**
178
178
  * @param {String} hash
179
179
  * @return {Boolean}
@@ -193,7 +193,7 @@ export default class Peernet {
193
193
  * @param {String} hash
194
194
  * @param {Buffer} data
195
195
  */
196
- put: (hash: any, data: any) => Promise<void | any[]>;
196
+ put: (hash: any, data: any) => Promise<unknown>;
197
197
  /**
198
198
  * @param {String} hash
199
199
  * @return {Boolean}
@@ -223,7 +223,7 @@ export default class Peernet {
223
223
  * @param {Buffer} data
224
224
  * @param {String} storeName - storeName to access
225
225
  */
226
- put(hash: string, data: Uint8Array, storeName?: string | LeofcoinStorageClass): Promise<void | any[]>;
226
+ put(hash: string, data: Uint8Array, storeName?: string | LeofcoinStorageClass): Promise<unknown>;
227
227
  /**
228
228
  * @param {String} hash
229
229
  * @return {Boolean}
@@ -1,2 +1,3 @@
1
- export { P as default } from './peernet-DULgegxE.js';
2
- import './value-wzPYMxsX.js';
1
+ export { P as default } from './peernet-DEIKLS2i.js';
2
+ import './identity-CQ_ieRiz.js';
3
+ import './value-C3vAp-wb.js';
@@ -0,0 +1,92 @@
1
+ import MultiWallet from '@leofcoin/multi-wallet';
2
+ import base58 from '@vandeurenglenn/base58';
3
+ import { decrypt } from '@leofcoin/identity-utils';
4
+ import QrScanner from 'qr-scanner';
5
+ import qrcode from 'qrcode';
6
+
7
+ class Identity {
8
+ #wallet;
9
+ network;
10
+ id;
11
+ selectedAccount;
12
+ constructor(network) {
13
+ this.network = network;
14
+ }
15
+ get accounts() {
16
+ return this.getAccounts();
17
+ }
18
+ async getAccounts() {
19
+ let accounts = await globalThis.walletStore.get('accounts');
20
+ accounts = new TextDecoder().decode(accounts);
21
+ return JSON.parse(accounts);
22
+ }
23
+ async load(password) {
24
+ if (password && password.includes('.txt')) {
25
+ const { readFile } = await import('fs/promises');
26
+ try {
27
+ password = (await readFile(password)).toString();
28
+ }
29
+ catch (error) {
30
+ console.error(error);
31
+ }
32
+ }
33
+ if (!password) {
34
+ // @ts-ignore
35
+ const importee = await import('./src/prompts/password.js');
36
+ password = await importee.default();
37
+ }
38
+ const accountExists = await globalThis.accountStore.has('public');
39
+ if (accountExists) {
40
+ const pub = await globalThis.accountStore.get('public');
41
+ this.id = JSON.parse(new TextDecoder().decode(pub)).walletId;
42
+ const selected = await globalThis.walletStore.get('selected-account');
43
+ this.selectedAccount = new TextDecoder().decode(selected);
44
+ }
45
+ else {
46
+ const importee = await import(/* webpackChunkName: "generate-account" */ '@leofcoin/generate-account');
47
+ const { identity, accounts } = await importee.default(password, this.network);
48
+ await globalThis.accountStore.put('public', JSON.stringify({ walletId: identity.walletId }));
49
+ await globalThis.walletStore.put('version', String(1));
50
+ await globalThis.walletStore.put('accounts', JSON.stringify(accounts));
51
+ await globalThis.walletStore.put('selected-account', accounts[0][1]);
52
+ await globalThis.walletStore.put('identity', JSON.stringify(identity));
53
+ this.selectedAccount = accounts[0][1];
54
+ this.id = identity.walletId;
55
+ }
56
+ const identity = JSON.parse(new TextDecoder().decode(await globalThis.walletStore.get('identity')));
57
+ this.#wallet = new MultiWallet(this.network);
58
+ const multiWIF = await decrypt(password, base58.decode(identity.multiWIF));
59
+ await this.#wallet.fromMultiWif(multiWIF);
60
+ }
61
+ selectAccount(account) {
62
+ this.selectedAccount = account;
63
+ return walletStore.put('selected-account', account);
64
+ }
65
+ sign(hash) {
66
+ return this.#wallet.sign(hash.subarray(0, 32));
67
+ }
68
+ lock(password) {
69
+ this.#wallet.lock(password);
70
+ }
71
+ unlock(password) {
72
+ this.#wallet.unlock(password);
73
+ }
74
+ async export(password) {
75
+ return this.#wallet.export(password);
76
+ }
77
+ async import(password, encrypted) {
78
+ await this.#wallet.import(password, encrypted);
79
+ }
80
+ async exportQR(password) {
81
+ const exported = await this.export(password);
82
+ return globalThis.navigator
83
+ ? await qrcode.toDataURL(exported)
84
+ : await qrcode.toString(exported, { type: 'terminal' });
85
+ }
86
+ async importQR(image, password) {
87
+ const multiWIF = await QrScanner.default.scanImage(image);
88
+ return this.import(password, multiWIF);
89
+ }
90
+ }
91
+
92
+ export { Identity as default };
@@ -1,214 +1,214 @@
1
1
  import { FormatInterface } from '@leofcoin/codec-format-interface';
2
2
 
3
- var proto$b = {
4
- data: new Uint8Array(),
5
- signature: new Uint8Array(),
6
- 'from?': String(),
7
- 'to?': String(),
8
- 'id?': String()
3
+ var proto$b = {
4
+ data: new Uint8Array(),
5
+ signature: new Uint8Array(),
6
+ 'from?': String(),
7
+ 'to?': String(),
8
+ 'id?': String()
9
9
  };
10
10
 
11
- class PeernetMessage extends FormatInterface {
12
- get messageName() {
13
- return 'PeernetMessage'
14
- }
15
-
16
- constructor(buffer) {
17
- const name = 'peernet-message';
18
- super(buffer, proto$b, { name });
19
- }
11
+ class PeernetMessage extends FormatInterface {
12
+ get messageName() {
13
+ return 'PeernetMessage'
14
+ }
15
+
16
+ constructor(buffer) {
17
+ const name = 'peernet-message';
18
+ super(buffer, proto$b, { name });
19
+ }
20
20
  }
21
21
 
22
- var proto$a = {
23
- hash: String(),
24
- 'store?': String()
22
+ var proto$a = {
23
+ hash: String(),
24
+ 'store?': String()
25
25
  };
26
26
 
27
- /**
28
- * @example `
29
- new DHTMessage(hash, store)
30
- // store = optional if not set, peernet checks every store
31
- let message = new DHTMessage('hashmvbs124xcfd...', 'transaction')
32
- message = new DHTMessage('hashmvbs124xcfd...', 'block')
33
- `
34
- */
35
- class DHTMessage extends FormatInterface {
36
- get messageName() {
37
- return 'PeernetDHTMessage'
38
- }
39
-
40
- constructor(data) {
41
- const name = 'peernet-dht';
42
- super(data, proto$a, { name });
43
- }
27
+ /**
28
+ * @example `
29
+ new DHTMessage(hash, store)
30
+ // store = optional if not set, peernet checks every store
31
+ let message = new DHTMessage('hashmvbs124xcfd...', 'transaction')
32
+ message = new DHTMessage('hashmvbs124xcfd...', 'block')
33
+ `
34
+ */
35
+ class DHTMessage extends FormatInterface {
36
+ get messageName() {
37
+ return 'PeernetDHTMessage'
38
+ }
39
+
40
+ constructor(data) {
41
+ const name = 'peernet-dht';
42
+ super(data, proto$a, { name });
43
+ }
44
44
  }
45
45
 
46
- var proto$9 = {
47
- hash: String(),
48
- has: Boolean()
46
+ var proto$9 = {
47
+ hash: String(),
48
+ has: Boolean()
49
49
  };
50
50
 
51
- class DHTMessageResponse extends FormatInterface {
52
- get messageName() {
53
- return 'PeernetDHTMessageResponse'
54
- }
55
-
56
- constructor(data) {
57
- const name = 'peernet-dht-response';
58
- super(data, proto$9, { name });
59
- }
51
+ class DHTMessageResponse extends FormatInterface {
52
+ get messageName() {
53
+ return 'PeernetDHTMessageResponse'
54
+ }
55
+
56
+ constructor(data) {
57
+ const name = 'peernet-dht-response';
58
+ super(data, proto$9, { name });
59
+ }
60
60
  }
61
61
 
62
- var proto$8 = {
63
- hash: String(),
64
- 'store?': String()
62
+ var proto$8 = {
63
+ hash: String(),
64
+ 'store?': String()
65
65
  };
66
66
 
67
- /**
68
- * @extends {CodecFormat}
69
- */
70
- class DataMessage extends FormatInterface {
71
- get messageName() {
72
- return 'PeernetDataMessage'
73
- }
74
- /**
75
- * @param {Buffer|String|Object|DataMessage} data - The data needed to create the DataMessage
76
- */
77
- constructor(data) {
78
- super(data, proto$8, { name: 'peernet-data' });
79
- }
67
+ /**
68
+ * @extends {CodecFormat}
69
+ */
70
+ class DataMessage extends FormatInterface {
71
+ get messageName() {
72
+ return 'PeernetDataMessage'
73
+ }
74
+ /**
75
+ * @param {Buffer|String|Object|DataMessage} data - The data needed to create the DataMessage
76
+ */
77
+ constructor(data) {
78
+ super(data, proto$8, { name: 'peernet-data' });
79
+ }
80
80
  }
81
81
 
82
- var proto$7 = {
83
- data: new Uint8Array(),
84
- topic: new Uint8Array()
82
+ var proto$7 = {
83
+ data: new Uint8Array(),
84
+ topic: new Uint8Array()
85
85
  };
86
86
 
87
- class PsMessage extends FormatInterface {
88
- get messageName() {
89
- return 'PsMessage'
90
- }
91
-
92
- constructor(buffer) {
93
- const name = 'peernet-ps';
94
- super(buffer, proto$7, { name });
95
- }
87
+ class PsMessage extends FormatInterface {
88
+ get messageName() {
89
+ return 'PsMessage'
90
+ }
91
+
92
+ constructor(buffer) {
93
+ const name = 'peernet-ps';
94
+ super(buffer, proto$7, { name });
95
+ }
96
96
  }
97
97
 
98
- var proto$6 = {
99
- id: String()
98
+ var proto$6 = {
99
+ id: String()
100
100
  };
101
101
 
102
- class PeerMessage extends FormatInterface {
103
- get messageName() {
104
- return 'PeernetPeerMessage'
105
- }
106
-
107
- constructor(data) {
108
- const name = 'peernet-peer';
109
- super(data, proto$6, { name });
110
- }
102
+ class PeerMessage extends FormatInterface {
103
+ get messageName() {
104
+ return 'PeernetPeerMessage'
105
+ }
106
+
107
+ constructor(data) {
108
+ const name = 'peernet-peer';
109
+ super(data, proto$6, { name });
110
+ }
111
111
  }
112
112
 
113
- var proto$5 = {
114
- request: String(),
115
- 'requested?': new Uint8Array()
113
+ var proto$5 = {
114
+ request: String(),
115
+ 'requested?': new Uint8Array()
116
116
  };
117
117
 
118
- class RequestMessage extends FormatInterface {
119
- get messageName() {
120
- return 'PeernetRequestMessage'
121
- }
122
-
123
- constructor(data) {
124
- const name = 'peernet-request';
125
- super(data, proto$5, { name });
126
- }
118
+ class RequestMessage extends FormatInterface {
119
+ get messageName() {
120
+ return 'PeernetRequestMessage'
121
+ }
122
+
123
+ constructor(data) {
124
+ const name = 'peernet-request';
125
+ super(data, proto$5, { name });
126
+ }
127
127
  }
128
128
 
129
- var proto$4 = {
130
- response: {}
129
+ var proto$4 = {
130
+ response: {}
131
131
  };
132
132
 
133
- class ResponseMessage extends FormatInterface {
134
- get messageName() {
135
- return 'PeernetResponseMessage'
136
- }
137
-
138
- constructor(data) {
139
- const name = 'peernet-response';
140
- super(data, proto$4, { name });
141
- }
133
+ class ResponseMessage extends FormatInterface {
134
+ get messageName() {
135
+ return 'PeernetResponseMessage'
136
+ }
137
+
138
+ constructor(data) {
139
+ const name = 'peernet-response';
140
+ super(data, proto$4, { name });
141
+ }
142
142
  }
143
143
 
144
- var proto$3 = {
145
- id: String()
144
+ var proto$3 = {
145
+ id: String()
146
146
  };
147
147
 
148
- class PeerMessageResponse extends FormatInterface {
149
- get messageName() {
150
- return 'PeernetPeerMessageResponse'
151
- }
152
-
153
- constructor(data) {
154
- const name = 'peernet-peer-response';
155
- super(data, proto$3, { name });
156
- }
148
+ class PeerMessageResponse extends FormatInterface {
149
+ get messageName() {
150
+ return 'PeernetPeerMessageResponse'
151
+ }
152
+
153
+ constructor(data) {
154
+ const name = 'peernet-peer-response';
155
+ super(data, proto$3, { name });
156
+ }
157
157
  }
158
158
 
159
- var proto$2 = {
160
- hash: String(),
161
- data: new Uint8Array()
159
+ var proto$2 = {
160
+ hash: String(),
161
+ data: new Uint8Array()
162
162
  };
163
163
 
164
- class DataMessageResponse extends FormatInterface {
165
- get messageName() {
166
- return 'PeernetDataMessageResponse'
167
- }
168
-
169
- constructor(data) {
170
- const name = 'peernet-data-response';
171
- super(data, proto$2, { name });
172
- }
164
+ class DataMessageResponse extends FormatInterface {
165
+ get messageName() {
166
+ return 'PeernetDataMessageResponse'
167
+ }
168
+
169
+ constructor(data) {
170
+ const name = 'peernet-data-response';
171
+ super(data, proto$2, { name });
172
+ }
173
173
  }
174
174
 
175
- var proto$1 = {
176
- value: String(),
177
- author: String(),
178
- timestamp: Number(),
179
- files: [String()]
175
+ var proto$1 = {
176
+ value: String(),
177
+ author: String(),
178
+ timestamp: Number(),
179
+ files: [String()]
180
180
  };
181
181
 
182
- class ChatMessage extends FormatInterface {
183
- get messageName() {
184
- return 'ChatMessage'
185
- }
186
-
187
- constructor(buffer) {
188
- const name = 'chat-message';
189
- super(buffer, proto$1, { name });
190
- }
182
+ class ChatMessage extends FormatInterface {
183
+ get messageName() {
184
+ return 'ChatMessage'
185
+ }
186
+
187
+ constructor(buffer) {
188
+ const name = 'chat-message';
189
+ super(buffer, proto$1, { name });
190
+ }
191
191
  }
192
192
 
193
- var proto = {
194
- path: String(),
195
- 'content?': '',
196
- 'links?': []
193
+ var proto = {
194
+ path: String(),
195
+ 'content?': '',
196
+ 'links?': []
197
197
  };
198
198
 
199
- /**
200
- * @extends {CodecFormat}
201
- */
202
- class PeernetFile extends FormatInterface {
203
- get messageName() {
204
- return 'PeernetFile'
205
- }
206
- /**
207
- * @param {Buffer|String|Object|DataMessage} data - The data needed to create the DataMessage
208
- */
209
- constructor(data) {
210
- super(data, proto, { name: 'peernet-file' });
211
- }
199
+ /**
200
+ * @extends {CodecFormat}
201
+ */
202
+ class PeernetFile extends FormatInterface {
203
+ get messageName() {
204
+ return 'PeernetFile'
205
+ }
206
+ /**
207
+ * @param {Buffer|String|Object|DataMessage} data - The data needed to create the DataMessage
208
+ */
209
+ constructor(data) {
210
+ super(data, proto, { name: 'peernet-file' });
211
+ }
212
212
  }
213
213
 
214
214
  export { ChatMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PeerMessage, PeerMessageResponse, PeernetFile, PeernetMessage, PsMessage, RequestMessage, ResponseMessage };