@leofcoin/peernet 2.0.0 → 3.1.0

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 (124) hide show
  1. package/README.md +45 -0
  2. package/docs/automatic-transport.md +37 -0
  3. package/exports/browser/{client-CAC7RVMf.js → client-DKKzPSlb.js} +252 -76
  4. package/exports/browser/{messages-Dw86z0zq.js → messages-DCePyqKC.js} +1 -1
  5. package/exports/browser/{peernet-B2jRhqGI.js → peernet-DjddqiXc.js} +460 -18
  6. package/exports/browser/peernet.js +1 -1
  7. package/exports/peernet.js +445 -3
  8. package/exports/types/archive.d.ts +69 -0
  9. package/exports/types/peernet.d.ts +7 -1
  10. package/package.json +9 -5
  11. package/.esdoc.json +0 -10
  12. package/.gitattributes +0 -2
  13. package/.github/workflows/release.yml +0 -34
  14. package/.prettierrc +0 -7
  15. package/.travis.yml +0 -27
  16. package/BREAKING_CHANGES.md +0 -35
  17. package/deploy.js +0 -8
  18. package/exports/browser/browser-D-r0O9Qn.js +0 -53
  19. package/exports/browser/browser-DvU1xNFS.js +0 -147
  20. package/exports/browser/browser-_hiyXwPp.js +0 -147
  21. package/exports/browser/client-86Tnax66.js +0 -2224
  22. package/exports/browser/client-BFxJts6j.js +0 -2224
  23. package/exports/browser/client-BVhUamQG.js +0 -2200
  24. package/exports/browser/client-BzvWzzLv.js +0 -2224
  25. package/exports/browser/client-C9GBz2Tf.js +0 -2224
  26. package/exports/browser/client-CQzuu6At.js +0 -2224
  27. package/exports/browser/client-CVkFejdx.js +0 -2224
  28. package/exports/browser/client-Cj_UUO8W.js +0 -2224
  29. package/exports/browser/client-CrGaeBjj.js +0 -2224
  30. package/exports/browser/client-DDC8C510.js +0 -2224
  31. package/exports/browser/client-ERocgKET.js +0 -2224
  32. package/exports/browser/client-a8rws3cu.js +0 -2224
  33. package/exports/browser/identity-CYVPDmkf.js +0 -8402
  34. package/exports/browser/identity-ChyyZSve.js +0 -8397
  35. package/exports/browser/index-BD0Anx7_.js +0 -37
  36. package/exports/browser/index-Bxr5Iztg.js +0 -37
  37. package/exports/browser/messages-BFCmg6Vb.js +0 -212
  38. package/exports/browser/messages-BHIC2mQu.js +0 -212
  39. package/exports/browser/messages-CimzJ4wr.js +0 -210
  40. package/exports/browser/messages-Cjoa_LGO.js +0 -210
  41. package/exports/browser/messages-D7JxkkDW.js +0 -212
  42. package/exports/browser/messages-DH0tgNM9.js +0 -207
  43. package/exports/browser/messages-DVHcNvs_.js +0 -212
  44. package/exports/browser/messages-DqL_g2qw.js +0 -210
  45. package/exports/browser/messages-UKnuelZ7.js +0 -207
  46. package/exports/browser/messages-XgZZUMma.js +0 -212
  47. package/exports/browser/messages-kfFyctPL.js +0 -210
  48. package/exports/browser/messages-psROnfRi.js +0 -212
  49. package/exports/browser/peernet-B9VL4Xwe.js +0 -9522
  50. package/exports/browser/peernet-C-HNdrcd.js +0 -9528
  51. package/exports/browser/peernet-C4rOvyyU.js +0 -9661
  52. package/exports/browser/peernet-Ca1iM2tN.js +0 -9336
  53. package/exports/browser/peernet-CbI0-jFn.js +0 -9651
  54. package/exports/browser/peernet-CtHScDyh.js +0 -9524
  55. package/exports/browser/peernet-DfuxUK3u.js +0 -9525
  56. package/exports/browser/peernet-DiEcNDLD.js +0 -9655
  57. package/exports/browser/peernet-DtuRXOzP.js +0 -9653
  58. package/exports/browser/peernet-r_9IyzTe.js +0 -9336
  59. package/exports/browser/peernet-rcD5XL1y.js +0 -9590
  60. package/exports/browser/peernet-rw8HJGOz.js +0 -9597
  61. package/exports/messages-CHKVVTVE.js +0 -204
  62. package/exports/messages-DaUtFfBh.js +0 -207
  63. package/index.html +0 -19
  64. package/rollup.config.js +0 -143
  65. package/src/dht/dht.ts +0 -142
  66. package/src/discovery/peer-discovery.js +0 -75
  67. package/src/errors/errors.js +0 -12
  68. package/src/file-transfer.ts +0 -194
  69. package/src/handlers/data.js +0 -15
  70. package/src/handlers/message.js +0 -34
  71. package/src/identity.ts +0 -172
  72. package/src/messages/chat.ts +0 -13
  73. package/src/messages/data-response.ts +0 -13
  74. package/src/messages/data.ts +0 -17
  75. package/src/messages/dht-response.ts +0 -13
  76. package/src/messages/dht.ts +0 -21
  77. package/src/messages/file-link.ts +0 -17
  78. package/src/messages/file.ts +0 -17
  79. package/src/messages/peer-response.ts +0 -13
  80. package/src/messages/peer.ts +0 -13
  81. package/src/messages/peernet.ts +0 -13
  82. package/src/messages/ps.ts +0 -13
  83. package/src/messages/request.ts +0 -13
  84. package/src/messages/response.ts +0 -13
  85. package/src/messages.js +0 -12
  86. package/src/peer-info.js +0 -9
  87. package/src/peernet.ts +0 -1113
  88. package/src/prompts/password/browser.js +0 -1
  89. package/src/prompts/password/node.js +0 -6
  90. package/src/prompts/password.js +0 -1
  91. package/src/proto/chat-message.proto.js +0 -6
  92. package/src/proto/data-response.proto.js +0 -4
  93. package/src/proto/data.proto.js +0 -4
  94. package/src/proto/dht-response.proto.js +0 -4
  95. package/src/proto/dht.proto.js +0 -4
  96. package/src/proto/file-link.proto.js +0 -5
  97. package/src/proto/file.proto.js +0 -10
  98. package/src/proto/peer-response.proto.js +0 -3
  99. package/src/proto/peer.proto.js +0 -3
  100. package/src/proto/peernet.proto.js +0 -7
  101. package/src/proto/ps.proto.js +0 -4
  102. package/src/proto/request.proto.js +0 -4
  103. package/src/proto/response.proto.js +0 -3
  104. package/src/types.ts +0 -25
  105. package/src/utils/utils.js +0 -77
  106. package/test/all.js +0 -5
  107. package/test/client.js +0 -15
  108. package/test/codec.js +0 -56
  109. package/test/file-transfer.test.js +0 -81
  110. package/test/fresh-empty-store.js +0 -15
  111. package/test/hash.js +0 -14
  112. package/test/index.js +0 -6
  113. package/test/lastBlock.js +0 -7
  114. package/test/messages.js +0 -26
  115. package/test/peer-data-exchange.test.js +0 -52
  116. package/test/peer-file-exchange.test.js +0 -78
  117. package/test/peernet.js +0 -17
  118. package/test/peernet.test.js +0 -477
  119. package/test-output.log +0 -84
  120. package/test.js +0 -63
  121. package/test2.js +0 -13
  122. package/test3.js +0 -16
  123. package/test4.js +0 -7
  124. package/tsconfig.json +0 -13
@@ -1,204 +0,0 @@
1
- import { FormatInterface } from '@leofcoin/codec-format-interface';
2
-
3
- var proto$b = {
4
- data: new Uint8Array(),
5
- signature: new Uint8Array(),
6
- 'from?': String(),
7
- 'to?': String(),
8
- 'id?': String()
9
- };
10
-
11
- class PeernetMessage extends FormatInterface {
12
- get messageName() {
13
- return 'PeernetMessage';
14
- }
15
- constructor(buffer) {
16
- const name = 'peernet-message';
17
- super(buffer, proto$b, { name });
18
- }
19
- }
20
-
21
- var proto$a = {
22
- hash: String(),
23
- 'store?': String()
24
- };
25
-
26
- /**
27
- * @example `
28
- new DHTMessage(hash, store)
29
- // store = optional if not set, peernet checks every store
30
- let message = new DHTMessage('hashmvbs124xcfd...', 'transaction')
31
- message = new DHTMessage('hashmvbs124xcfd...', 'block')
32
- `
33
- */
34
- class DHTMessage extends FormatInterface {
35
- get messageName() {
36
- return 'PeernetDHTMessage';
37
- }
38
- constructor(data) {
39
- const name = 'peernet-dht';
40
- super(data, proto$a, { name });
41
- }
42
- }
43
-
44
- var proto$9 = {
45
- hash: String(),
46
- has: Boolean()
47
- };
48
-
49
- class DHTMessageResponse extends FormatInterface {
50
- get messageName() {
51
- return 'PeernetDHTMessageResponse';
52
- }
53
- constructor(data) {
54
- const name = 'peernet-dht-response';
55
- super(data, proto$9, { name });
56
- }
57
- }
58
-
59
- var proto$8 = {
60
- hash: String(),
61
- 'store?': String()
62
- };
63
-
64
- /**
65
- * @extends {CodecFormat}
66
- */
67
- class DataMessage extends FormatInterface {
68
- get messageName() {
69
- return 'PeernetDataMessage';
70
- }
71
- /**
72
- * @param {Buffer|String|Object|DataMessage} data - The data needed to create the DataMessage
73
- */
74
- constructor(data) {
75
- super(data, proto$8, { name: 'peernet-data' });
76
- }
77
- }
78
-
79
- var proto$7 = {
80
- data: new Uint8Array(),
81
- topic: new Uint8Array()
82
- };
83
-
84
- class PsMessage extends FormatInterface {
85
- get messageName() {
86
- return 'PsMessage';
87
- }
88
- constructor(buffer) {
89
- const name = 'peernet-ps';
90
- super(buffer, proto$7, { name });
91
- }
92
- }
93
-
94
- var proto$6 = {
95
- id: String()
96
- };
97
-
98
- class PeerMessage extends FormatInterface {
99
- get messageName() {
100
- return 'PeernetPeerMessage';
101
- }
102
- constructor(data) {
103
- const name = 'peernet-peer';
104
- super(data, proto$6, { name });
105
- }
106
- }
107
-
108
- var proto$5 = {
109
- request: String(),
110
- 'requested?': new Uint8Array()
111
- };
112
-
113
- class RequestMessage extends FormatInterface {
114
- get messageName() {
115
- return 'PeernetRequestMessage';
116
- }
117
- constructor(data) {
118
- const name = 'peernet-request';
119
- super(data, proto$5, { name });
120
- }
121
- }
122
-
123
- var proto$4 = {
124
- response: new Uint8Array()
125
- };
126
-
127
- class ResponseMessage extends FormatInterface {
128
- get messageName() {
129
- return 'PeernetResponseMessage';
130
- }
131
- constructor(data) {
132
- const name = 'peernet-response';
133
- super(data, proto$4, { name });
134
- }
135
- }
136
-
137
- var proto$3 = {
138
- id: String()
139
- };
140
-
141
- class PeerMessageResponse extends FormatInterface {
142
- get messageName() {
143
- return 'PeernetPeerMessageResponse';
144
- }
145
- constructor(data) {
146
- const name = 'peernet-peer-response';
147
- super(data, proto$3, { name });
148
- }
149
- }
150
-
151
- var proto$2 = {
152
- hash: String(),
153
- data: new Uint8Array()
154
- };
155
-
156
- class DataMessageResponse extends FormatInterface {
157
- get messageName() {
158
- return 'PeernetDataMessageResponse';
159
- }
160
- constructor(data) {
161
- const name = 'peernet-data-response';
162
- super(data, proto$2, { name });
163
- }
164
- }
165
-
166
- var proto$1 = {
167
- value: new Uint8Array(),
168
- author: new Uint8Array(),
169
- timestamp: Number(),
170
- files: [new Uint8Array()]
171
- };
172
-
173
- class ChatMessage extends FormatInterface {
174
- get messageName() {
175
- return 'ChatMessage';
176
- }
177
- constructor(buffer) {
178
- const name = 'chat-message';
179
- super(buffer, proto$1, { name });
180
- }
181
- }
182
-
183
- var proto = {
184
- path: String(),
185
- 'content?': new Uint8Array(),
186
- 'links?': []
187
- };
188
-
189
- /**
190
- * @extends {CodecFormat}
191
- */
192
- class PeernetFile extends FormatInterface {
193
- get messageName() {
194
- return 'PeernetFile';
195
- }
196
- /**
197
- * @param {Buffer|String|Object|DataMessage} data - The data needed to create the DataMessage
198
- */
199
- constructor(data) {
200
- super(data, proto, { name: 'peernet-file' });
201
- }
202
- }
203
-
204
- export { ChatMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PeerMessage, PeerMessageResponse, PeernetFile, PeernetMessage, PsMessage, RequestMessage, ResponseMessage };
@@ -1,207 +0,0 @@
1
- import { FormatInterface } from '@leofcoin/codec-format-interface';
2
-
3
- var proto$b = {
4
- data: new Uint8Array(),
5
- signature: new Uint8Array(),
6
- 'from?': String(),
7
- 'to?': String(),
8
- 'id?': String()
9
- };
10
-
11
- class PeernetMessage extends FormatInterface {
12
- get messageName() {
13
- return 'PeernetMessage';
14
- }
15
- constructor(buffer) {
16
- const name = 'peernet-message';
17
- super(buffer, proto$b, { name });
18
- }
19
- }
20
-
21
- var proto$a = {
22
- hash: String(),
23
- 'store?': String()
24
- };
25
-
26
- /**
27
- * @example `
28
- new DHTMessage(hash, store)
29
- // store = optional if not set, peernet checks every store
30
- let message = new DHTMessage('hashmvbs124xcfd...', 'transaction')
31
- message = new DHTMessage('hashmvbs124xcfd...', 'block')
32
- `
33
- */
34
- class DHTMessage extends FormatInterface {
35
- get messageName() {
36
- return 'PeernetDHTMessage';
37
- }
38
- constructor(data) {
39
- const name = 'peernet-dht';
40
- super(data, proto$a, { name });
41
- }
42
- }
43
-
44
- var proto$9 = {
45
- hash: String(),
46
- has: Boolean()
47
- };
48
-
49
- class DHTMessageResponse extends FormatInterface {
50
- get messageName() {
51
- return 'PeernetDHTMessageResponse';
52
- }
53
- constructor(data) {
54
- const name = 'peernet-dht-response';
55
- super(data, proto$9, { name });
56
- }
57
- }
58
-
59
- var proto$8 = {
60
- hash: String(),
61
- 'store?': String()
62
- };
63
-
64
- /**
65
- * @extends {CodecFormat}
66
- */
67
- class DataMessage extends FormatInterface {
68
- get messageName() {
69
- return 'PeernetDataMessage';
70
- }
71
- /**
72
- * @param {Buffer|String|Object|DataMessage} data - The data needed to create the DataMessage
73
- */
74
- constructor(data) {
75
- super(data, proto$8, { name: 'peernet-data' });
76
- }
77
- }
78
-
79
- var proto$7 = {
80
- data: new Uint8Array(),
81
- topic: new Uint8Array()
82
- };
83
-
84
- class PsMessage extends FormatInterface {
85
- get messageName() {
86
- return 'PsMessage';
87
- }
88
- constructor(buffer) {
89
- const name = 'peernet-ps';
90
- super(buffer, proto$7, { name });
91
- }
92
- }
93
-
94
- var proto$6 = {
95
- id: String()
96
- };
97
-
98
- class PeerMessage extends FormatInterface {
99
- get messageName() {
100
- return 'PeernetPeerMessage';
101
- }
102
- constructor(data) {
103
- const name = 'peernet-peer';
104
- super(data, proto$6, { name });
105
- }
106
- }
107
-
108
- var proto$5 = {
109
- request: String(),
110
- 'requested?': new Uint8Array()
111
- };
112
-
113
- class RequestMessage extends FormatInterface {
114
- get messageName() {
115
- return 'PeernetRequestMessage';
116
- }
117
- constructor(data) {
118
- const name = 'peernet-request';
119
- super(data, proto$5, { name });
120
- }
121
- }
122
-
123
- var proto$4 = {
124
- response: new Uint8Array()
125
- };
126
-
127
- class ResponseMessage extends FormatInterface {
128
- get messageName() {
129
- return 'PeernetResponseMessage';
130
- }
131
- constructor(data) {
132
- const name = 'peernet-response';
133
- super(data, proto$4, { name });
134
- }
135
- }
136
-
137
- var proto$3 = {
138
- id: String()
139
- };
140
-
141
- class PeerMessageResponse extends FormatInterface {
142
- get messageName() {
143
- return 'PeernetPeerMessageResponse';
144
- }
145
- constructor(data) {
146
- const name = 'peernet-peer-response';
147
- super(data, proto$3, { name });
148
- }
149
- }
150
-
151
- var proto$2 = {
152
- hash: String(),
153
- data: new Uint8Array()
154
- };
155
-
156
- class DataMessageResponse extends FormatInterface {
157
- get messageName() {
158
- return 'PeernetDataMessageResponse';
159
- }
160
- constructor(data) {
161
- const name = 'peernet-data-response';
162
- super(data, proto$2, { name });
163
- }
164
- }
165
-
166
- var proto$1 = {
167
- value: new Uint8Array(),
168
- author: new Uint8Array(),
169
- timestamp: Number(),
170
- files: [new Uint8Array()]
171
- };
172
-
173
- class ChatMessage extends FormatInterface {
174
- get messageName() {
175
- return 'ChatMessage';
176
- }
177
- constructor(buffer) {
178
- const name = 'chat-message';
179
- super(buffer, proto$1, { name });
180
- }
181
- }
182
-
183
- var proto = {
184
- path: String(),
185
- 'content?': new Uint8Array(),
186
- 'links?': [],
187
- 'size?': Number(),
188
- 'chunkSize?': Number(),
189
- 'chunked?': Boolean()
190
- };
191
-
192
- /**
193
- * @extends {CodecFormat}
194
- */
195
- class PeernetFile extends FormatInterface {
196
- get messageName() {
197
- return 'PeernetFile';
198
- }
199
- /**
200
- * @param {Buffer|String|Object|DataMessage} data - The data needed to create the DataMessage
201
- */
202
- constructor(data) {
203
- super(data, proto, { name: 'peernet-file' });
204
- }
205
- }
206
-
207
- export { ChatMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PeerMessage, PeerMessageResponse, PeernetFile, PeernetMessage, PsMessage, RequestMessage, ResponseMessage };
package/index.html DELETED
@@ -1,19 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en" dir="ltr">
3
- <head>
4
- <meta charset="utf-8">
5
- <title></title>
6
- </head>
7
- <body>
8
- <!-- <script src="./dist/browser/peernet.js">
9
- </script> -->
10
-
11
- <script type="module">
12
- import './exports/browser/peernet.js';
13
- (async () => {
14
- const peernet = await new Peernet({network: 'leofcoin:peach', networkVersion: 'peach'})
15
- peernet.addRequestHandler('lastBlock', () => new peernet.protos['peernet-response']({response: new TextEncoder().encode(100)}))
16
- })()
17
- </script>
18
- </body>
19
- </html>
package/rollup.config.js DELETED
@@ -1,143 +0,0 @@
1
- import resolve from '@rollup/plugin-node-resolve'
2
- import commonjs from '@rollup/plugin-commonjs'
3
- import json from '@rollup/plugin-json'
4
- import wasm from '@rollup/plugin-wasm'
5
- import { readdir, readFile, writeFile } from 'node:fs/promises'
6
- import { extname, relative, sep } from 'node:path'
7
- import { rimrafSync } from 'rimraf'
8
- import typescript from '@rollup/plugin-typescript'
9
-
10
- const toPosix = (value) => value.split(sep).join('/')
11
-
12
- const walk = async (dir) => {
13
- const entries = await readdir(dir, { withFileTypes: true })
14
- const files = []
15
-
16
- for (const entry of entries) {
17
- const fullPath = `${dir}/${entry.name}`
18
- if (entry.isDirectory()) {
19
- files.push(...(await walk(fullPath)))
20
- continue
21
- }
22
- files.push(fullPath)
23
- }
24
-
25
- return files
26
- }
27
-
28
- const isHashedChunk = (runtimePath) => /-[A-Za-z0-9_-]{8,}\.js$/.test(runtimePath)
29
-
30
- const isPromptImport = (id) =>
31
- id === './prompts/password.js' || id === './src/prompts/password.js' || id.endsWith('/src/prompts/password.js')
32
-
33
- const runtimeFirstExports = ({ exportsDir = 'exports', declarationsDir = 'exports/types' } = {}) => ({
34
- name: 'runtime-first-exports',
35
- writeBundle: async () => {
36
- const runtimeFiles = (await walk(exportsDir))
37
- .map((file) => toPosix(relative(exportsDir, file)))
38
- .filter((file) => extname(file) === '.js')
39
- .filter((file) => !file.startsWith('types/'))
40
- .filter((file) => !isHashedChunk(file))
41
- .sort((a, b) => a.localeCompare(b))
42
-
43
- const declarationFiles = (await walk(declarationsDir))
44
- .map((file) => toPosix(relative(declarationsDir, file)))
45
- .filter((file) => extname(file) === '.ts' && file.endsWith('.d.ts'))
46
-
47
- const declarationByRuntime = new Map(declarationFiles.map((file) => [file.slice(0, -'.d.ts'.length), file]))
48
-
49
- const declarationAliases = {
50
- 'prompts/password': 'prompts/password/node',
51
- 'browser/prompts/password': 'prompts/password/browser',
52
- 'browser/peernet': 'peernet',
53
- 'browser/identity': 'identity'
54
- }
55
-
56
- const packageExports = {
57
- '.': { import: './exports/peernet.js', types: './exports/types/peernet.d.ts' },
58
- './browser': { import: './exports/browser/peernet.js', types: './exports/types/peernet.d.ts' },
59
- './browser.js': { import: './exports/browser/peernet.js', types: './exports/types/peernet.d.ts' },
60
- './node': { import: './exports/prompts/password.js', types: './exports/types/prompts/password/node.d.ts' },
61
- './node.js': { import: './exports/prompts/password.js', types: './exports/types/prompts/password/node.d.ts' }
62
- }
63
-
64
- for (const runtimeFile of runtimeFiles) {
65
- const runtimeKey = runtimeFile.slice(0, -'.js'.length)
66
- const exportKey = `./${runtimeKey}`
67
- const exportJsKey = `./${runtimeKey}.js`
68
- const importPath = `./${exportsDir}/${runtimeFile}`
69
- const declarationKey = declarationAliases[runtimeKey] || runtimeKey
70
- const declarationPath = declarationByRuntime.get(declarationKey)
71
- const typesPath = declarationPath ? `./${declarationsDir}/${declarationPath}` : undefined
72
-
73
- packageExports[exportKey] = typesPath ? { import: importPath, types: typesPath } : { import: importPath }
74
- packageExports[exportJsKey] = typesPath ? { import: importPath, types: typesPath } : { import: importPath }
75
- }
76
-
77
- const packageJson = JSON.parse(await readFile('./package.json', 'utf8'))
78
- packageJson.exports = packageExports
79
- await writeFile('./package.json', `${JSON.stringify(packageJson, null, ' ')}\n`)
80
- }
81
- })
82
-
83
- rimrafSync('./exports/**')
84
-
85
- export default [
86
- {
87
- input: ['./src/peernet.ts', './src/identity.ts', './node_modules/@leofcoin/storage/exports/browser-store.js'],
88
- output: {
89
- format: 'es',
90
- dir: 'exports/browser',
91
- chunkFileNames: (chunkInfo) =>
92
- chunkInfo.name === 'prompts/password' ? 'prompts/password.js' : '[name]-[hash].js',
93
- manualChunks: (id) => (id.endsWith('/src/prompts/password.js') ? 'prompts/password' : undefined)
94
- },
95
- plugins: [
96
- json(),
97
- wasm(),
98
- resolve({
99
- browser: true,
100
- preferBuiltins: false,
101
- mainFields: ['browser', 'module', 'main']
102
- }),
103
- commonjs({
104
- mainFields: ['browser', 'module', 'main']
105
- }),
106
-
107
- typescript({ compilerOptions: { outDir: 'exports/browser', declaration: false } })
108
- ]
109
- },
110
- {
111
- input: ['./src/peernet.ts', './src/identity.ts', './node_modules/@leofcoin/storage/exports/store.js'],
112
- output: {
113
- format: 'es',
114
- dir: 'exports',
115
- paths: (id) => (isPromptImport(id) ? './prompts/password.js' : id)
116
- },
117
- plugins: [
118
- typescript({
119
- compilerOptions: {
120
- outDir: 'exports',
121
- declarationDir: 'exports/types'
122
- }
123
- })
124
- ],
125
- external: (id) =>
126
- isPromptImport(id) || id === './prompts/password/browser.js' || id === './prompts/password/node.js'
127
- },
128
- {
129
- input: ['./src/prompts/password/browser.js'],
130
- output: {
131
- format: 'es',
132
- file: 'exports/browser/prompts/password.js'
133
- }
134
- },
135
- {
136
- input: ['./src/prompts/password/node.js'],
137
- output: {
138
- format: 'es',
139
- file: 'exports/prompts/password.js'
140
- },
141
- plugins: [runtimeFirstExports()]
142
- }
143
- ]
package/src/dht/dht.ts DELETED
@@ -1,142 +0,0 @@
1
- export declare type DHTProvider = {
2
- address: string
3
- id: string
4
- }
5
-
6
- export declare type DHTProviderDistanceResult = {
7
- provider: DHTProvider
8
- /**
9
- * distance on earth between peers in km
10
- */
11
- distance: number
12
- }
13
-
14
- export declare type DHTProviderMapValue = { [index: string]: DHTProvider }
15
-
16
- declare type Coordinates = {
17
- longitude: number
18
- latitude: number
19
- }
20
-
21
- /**
22
- * Keep history of fetched address and ptr
23
- * @property {Object} address
24
- * @property {Object} ptr
25
- */
26
- const lastFetched = {
27
- address: {
28
- value: undefined,
29
- timestamp: 0
30
- },
31
- ptr: {
32
- value: undefined,
33
- timestamp: 0
34
- }
35
- }
36
-
37
- const fetchedCoordinates = {}
38
-
39
- export const getAddress = async () => {
40
- const { address } = lastFetched
41
- if (!address) {
42
- const value = await fetch('https://icanhazip.com/')
43
- address.value = await value.text()
44
- address.timestamp = Math.round(new Date().getTime() / 1000)
45
- lastFetched.address = address
46
- }
47
-
48
- return address.value
49
- }
50
-
51
- const degreesToRadians = (degrees) => {
52
- return (degrees * Math.PI) / 180
53
- }
54
-
55
- const distanceInKmBetweenEarthCoordinates = (lat1, lon1, lat2, lon2) => {
56
- const earthRadiusKm = 6371
57
-
58
- const dLat = degreesToRadians(lat2 - lat1)
59
- const dLon = degreesToRadians(lon2 - lon1)
60
-
61
- lat1 = degreesToRadians(lat1)
62
- lat2 = degreesToRadians(lat2)
63
- const a =
64
- Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2)
65
- const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
66
- return earthRadiusKm * c
67
- }
68
-
69
- export default class DhtEarth {
70
- providerMap: Map<string, DHTProviderMapValue> = new Map()
71
-
72
- async getCoordinates(address: string): Promise<Coordinates> {
73
- if (!fetchedCoordinates[address]) {
74
- const request = `https://whereis.leofcoin.org/?ip=${address}`
75
- let response = await fetch(request)
76
- const { lat, lon } = (await response.json()) as { lat: number; lon: number }
77
- fetchedCoordinates[address] = { latitude: lat, longitude: lon }
78
- }
79
- return fetchedCoordinates[address]
80
- }
81
-
82
- /**
83
- * @param {Object} peer
84
- * @param {Object} provider
85
- * @return {Object} {provider, distance}
86
- */
87
- async getDistance(
88
- peer: { latitude: number; longitude: number },
89
- provider: DHTProvider
90
- ): Promise<DHTProviderDistanceResult> {
91
- const { latitude, longitude } = await this.getCoordinates(provider.address)
92
- return {
93
- provider,
94
- distance: distanceInKmBetweenEarthCoordinates(peer.latitude, peer.longitude, latitude, longitude)
95
- }
96
- }
97
-
98
- async closestPeer(providers: Array<any>): Promise<DHTProvider> {
99
- let all = []
100
- const address = await getAddress()
101
- const peerLoc = await this.getCoordinates(address)
102
-
103
- for (const provider of providers) {
104
- if (!provider.address || provider.address === '127.0.0.1' || provider.address === '::1')
105
- all.push({ provider, distance: 0 })
106
- else all.push(this.getDistance(peerLoc, provider))
107
- }
108
-
109
- // todo queue
110
- all = await Promise.all(all)
111
- all = all.sort((previous, current) => previous.distance - current.distance)
112
- return all[0].provider
113
- }
114
-
115
- hasProvider(hash: string): boolean {
116
- return this.providerMap.has(hash)
117
- }
118
-
119
- providersFor(hash: string): DHTProviderMapValue {
120
- let providers: DHTProviderMapValue
121
- if (this.providerMap.has(hash)) providers = this.providerMap.get(hash)
122
- return providers
123
- }
124
-
125
- addProvider(provider: DHTProvider, hash: string) {
126
- if (!provider.address) provider.address = '127.0.0.1'
127
- let providers: DHTProviderMapValue = {}
128
- if (this.providerMap.has(hash)) {
129
- providers = this.providerMap.get(hash)
130
- }
131
- providers[provider.id] = provider
132
- this.providerMap.set(hash, providers)
133
- }
134
-
135
- removeProvider(id: string, hash: string) {
136
- if (this.providerMap.has(hash)) {
137
- const providers = this.providerMap.get(hash)
138
- delete providers[id]
139
- this.providerMap.set(hash, providers)
140
- }
141
- }
142
- }