@leofcoin/peernet 0.11.27 → 0.11.30

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.
@@ -729,43 +729,6 @@ class Client {
729
729
 
730
730
  }
731
731
 
732
- class LeofcoinStorageClient {
733
- constructor(name, root) {
734
- this.name = name;
735
- this.root = root;
736
- }
737
-
738
- async get(key) {
739
- try {
740
- const result = await globalThis.peernet.client.request('storage', {
741
- name: this.name,
742
- root: this.root,
743
- key,
744
- });
745
- return result
746
- } catch (e) {
747
- console.log(e);
748
- return undefined
749
- }
750
- }
751
-
752
- async put(key, value) {
753
- try {
754
- const result = await globalThis.peernet.client.request('storage', {
755
- name: this.name,
756
- root: this.root,
757
- key,
758
- value,
759
- method: 'put',
760
- });
761
- return result
762
- } catch (e) {
763
- console.log(e);
764
- return undefined
765
- }
766
- }
767
- }
768
-
769
732
  var proto$a = `
770
733
  // PeernetMessage
771
734
  message PeernetMessage {
@@ -1999,11 +1962,23 @@ class Peernet {
1999
1962
  try {
2000
1963
  const pub = await accountStore.get('public');
2001
1964
  this.id = JSON.parse(new TextDecoder().decode(pub)).walletId;
1965
+ let accounts = await walletStore.get('accounts');
1966
+ accounts = new TextDecoder().decode(accounts);
1967
+
1968
+ // fixing account issue (string while needs to be a JSON)
1969
+ // TODO: remove when on mainnet
1970
+ try {
1971
+ accounts = JSON.parse(new TextDecoder().decode(accounts));
1972
+ } catch (e) {
1973
+ accounts = [accounts.split(',')];
1974
+ }
1975
+
1976
+ this.accounts = JSON.parse(new TextDecoder().decode(accounts));
2002
1977
  } catch (e) {
2003
1978
  if (e.code === 'ERR_NOT_FOUND') {
2004
1979
  const {identity, accounts, config} = await generateAccount(this.network);
2005
1980
  walletStore.put('version', new TextEncoder().encode(1));
2006
- walletStore.put('accounts', new TextEncoder().encode(accounts));
1981
+ walletStore.put('accounts', new TextEncoder().encode(JSON.stringify(accounts)));
2007
1982
  walletStore.put('identity', new TextEncoder().encode(JSON.stringify(identity)));
2008
1983
  await accountStore.put('config', new TextEncoder().encode(JSON.stringify(config)));
2009
1984
  await accountStore.put('public', new TextEncoder().encode(JSON.stringify({walletId: identity.walletId})));
@@ -727,43 +727,6 @@ class Client {
727
727
 
728
728
  }
729
729
 
730
- class LeofcoinStorageClient {
731
- constructor(name, root) {
732
- this.name = name;
733
- this.root = root;
734
- }
735
-
736
- async get(key) {
737
- try {
738
- const result = await globalThis.peernet.client.request('storage', {
739
- name: this.name,
740
- root: this.root,
741
- key,
742
- });
743
- return result
744
- } catch (e) {
745
- console.log(e);
746
- return undefined
747
- }
748
- }
749
-
750
- async put(key, value) {
751
- try {
752
- const result = await globalThis.peernet.client.request('storage', {
753
- name: this.name,
754
- root: this.root,
755
- key,
756
- value,
757
- method: 'put',
758
- });
759
- return result
760
- } catch (e) {
761
- console.log(e);
762
- return undefined
763
- }
764
- }
765
- }
766
-
767
730
  var proto$5 = `
768
731
  // PeernetDataMessage
769
732
  message PeernetDataMessage {
@@ -1882,15 +1845,7 @@ class Peernet {
1882
1845
  const {daemon, environment} = await target();
1883
1846
  this.hasDaemon = daemon;
1884
1847
 
1885
- if (this.hasDaemon) {
1886
- const httpClient = await Promise.resolve().then(function () { return require('./client-5633ba04.js'); });
1887
- globalThis.peernet.client = await httpClient.default({
1888
- protocol: 'peernet-v0.1.0', host: '127.0.0.1', port: options.port
1889
- });
1890
- } else {
1891
- const http = await Promise.resolve().then(function () { return require('./http-997ec597.js'); });
1892
- if (environment !== 'browser') http.default(options);
1893
- }
1848
+
1894
1849
 
1895
1850
  for (const store of this.defaultStores) {
1896
1851
  await this.addStore(store, options.storePrefix, options.root);
@@ -1899,11 +1854,23 @@ class Peernet {
1899
1854
  try {
1900
1855
  const pub = await accountStore.get('public');
1901
1856
  this.id = JSON.parse(new TextDecoder().decode(pub)).walletId;
1857
+ let accounts = await walletStore.get('accounts');
1858
+ accounts = new TextDecoder().decode(accounts);
1859
+
1860
+ // fixing account issue (string while needs to be a JSON)
1861
+ // TODO: remove when on mainnet
1862
+ try {
1863
+ accounts = JSON.parse(new TextDecoder().decode(accounts));
1864
+ } catch (e) {
1865
+ accounts = [accounts.split(',')];
1866
+ }
1867
+
1868
+ this.accounts = JSON.parse(new TextDecoder().decode(accounts));
1902
1869
  } catch (e) {
1903
1870
  if (e.code === 'ERR_NOT_FOUND') {
1904
1871
  const {identity, accounts, config} = await generateAccount(this.network);
1905
1872
  walletStore.put('version', new TextEncoder().encode(1));
1906
- walletStore.put('accounts', new TextEncoder().encode(accounts));
1873
+ walletStore.put('accounts', new TextEncoder().encode(JSON.stringify(accounts)));
1907
1874
  walletStore.put('identity', new TextEncoder().encode(JSON.stringify(identity)));
1908
1875
  await accountStore.put('config', new TextEncoder().encode(JSON.stringify(config)));
1909
1876
  await accountStore.put('public', new TextEncoder().encode(JSON.stringify({walletId: identity.walletId})));
@@ -685,43 +685,6 @@ class Client {
685
685
 
686
686
  }
687
687
 
688
- class LeofcoinStorageClient {
689
- constructor(name, root) {
690
- this.name = name;
691
- this.root = root;
692
- }
693
-
694
- async get(key) {
695
- try {
696
- const result = await globalThis.peernet.client.request('storage', {
697
- name: this.name,
698
- root: this.root,
699
- key,
700
- });
701
- return result
702
- } catch (e) {
703
- console.log(e);
704
- return undefined
705
- }
706
- }
707
-
708
- async put(key, value) {
709
- try {
710
- const result = await globalThis.peernet.client.request('storage', {
711
- name: this.name,
712
- root: this.root,
713
- key,
714
- value,
715
- method: 'put',
716
- });
717
- return result
718
- } catch (e) {
719
- console.log(e);
720
- return undefined
721
- }
722
- }
723
- }
724
-
725
688
  var proto$a = `
726
689
  // PeernetMessage
727
690
  message PeernetMessage {
@@ -1955,11 +1918,23 @@ class Peernet {
1955
1918
  try {
1956
1919
  const pub = await accountStore.get('public');
1957
1920
  this.id = JSON.parse(new TextDecoder().decode(pub)).walletId;
1921
+ let accounts = await walletStore.get('accounts');
1922
+ accounts = new TextDecoder().decode(accounts);
1923
+
1924
+ // fixing account issue (string while needs to be a JSON)
1925
+ // TODO: remove when on mainnet
1926
+ try {
1927
+ accounts = JSON.parse(new TextDecoder().decode(accounts));
1928
+ } catch (e) {
1929
+ accounts = [accounts.split(',')];
1930
+ }
1931
+
1932
+ this.accounts = JSON.parse(new TextDecoder().decode(accounts));
1958
1933
  } catch (e) {
1959
1934
  if (e.code === 'ERR_NOT_FOUND') {
1960
1935
  const {identity, accounts, config} = await generateAccount(this.network);
1961
1936
  walletStore.put('version', new TextEncoder().encode(1));
1962
- walletStore.put('accounts', new TextEncoder().encode(accounts));
1937
+ walletStore.put('accounts', new TextEncoder().encode(JSON.stringify(accounts)));
1963
1938
  walletStore.put('identity', new TextEncoder().encode(JSON.stringify(identity)));
1964
1939
  await accountStore.put('config', new TextEncoder().encode(JSON.stringify(config)));
1965
1940
  await accountStore.put('public', new TextEncoder().encode(JSON.stringify({walletId: identity.walletId})));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leofcoin/peernet",
3
- "version": "0.11.27",
3
+ "version": "0.11.30",
4
4
  "description": "",
5
5
  "main": "dist/commonjs/peernet.js",
6
6
  "module": "dist/module/peernet.js",
package/src/peernet.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import '@vandeurenglenn/debug'
2
2
  import Client from './../node_modules/@leofcoin/peernet-swarm/dist/es/client.js'
3
3
  import LeofcoinStorage from '@leofcoin/storage'
4
- import LeofcoinStorageClient from './http/client/storage.js'
5
4
  import PeernetMessage from './messages/peernet-message.js'
6
5
  import DHTMessage from './messages/dht.js'
7
6
  import DHTMessageResponse from './messages/dht-response.js'
@@ -191,12 +190,24 @@ export default class Peernet {
191
190
  try {
192
191
  const pub = await accountStore.get('public')
193
192
  this.id = JSON.parse(new TextDecoder().decode(pub)).walletId
193
+ let accounts = await walletStore.get('accounts')
194
+ accounts = new TextDecoder().decode(accounts)
195
+
196
+ // fixing account issue (string while needs to be a JSON)
197
+ // TODO: remove when on mainnet
198
+ try {
199
+ accounts = JSON.parse(new TextDecoder().decode(accounts))
200
+ } catch (e) {
201
+ accounts = [accounts.split(',')]
202
+ }
203
+
204
+ this.accounts = JSON.parse(new TextDecoder().decode(accounts))
194
205
  } catch (e) {
195
206
  if (e.code === 'ERR_NOT_FOUND') {
196
207
  const wallet = {}
197
208
  const {identity, accounts, config} = await generateAccount(this.network)
198
209
  walletStore.put('version', new TextEncoder().encode(1))
199
- walletStore.put('accounts', new TextEncoder().encode(accounts))
210
+ walletStore.put('accounts', new TextEncoder().encode(JSON.stringify(accounts)))
200
211
  walletStore.put('identity', new TextEncoder().encode(JSON.stringify(identity)))
201
212
  await accountStore.put('config', new TextEncoder().encode(JSON.stringify(config)));
202
213
  await accountStore.put('public', new TextEncoder().encode(JSON.stringify({walletId: identity.walletId})));
@@ -1,321 +0,0 @@
1
- 'use strict';
2
-
3
- /* socket-request-client version 1.6.3 */
4
-
5
- class LittlePubSub {
6
- constructor(verbose = true) {
7
- this.subscribers = {};
8
- this.verbose = verbose;
9
- }
10
- subscribe(event, handler, context) {
11
- if (typeof context === 'undefined') {
12
- context = handler;
13
- }
14
- this.subscribers[event] = this.subscribers[event] || { handlers: [], value: null};
15
- this.subscribers[event].handlers.push(handler.bind(context));
16
- }
17
- unsubscribe(event, handler, context) {
18
- if (typeof context === 'undefined') {
19
- context = handler;
20
- }
21
- if (this.subscribers[event]) {
22
- const index = this.subscribers[event].handlers.indexOf(handler.bind(context));
23
- this.subscribers[event].handlers.splice(index);
24
- if (this.subscribers[event].handlers.length === 0) delete this.subscribers[event];
25
- }
26
- }
27
- publish(event, change) {
28
- if (this.subscribers[event]) {
29
- if (this.verbose || this.subscribers[event].value !== change) {
30
- this.subscribers[event].value = change;
31
- this.subscribers[event].handlers.forEach(handler => {
32
- handler(change, this.subscribers[event].value);
33
- });
34
- }
35
- }
36
- }
37
- }
38
-
39
- var clientApi = _pubsub => {
40
- const subscribe = (topic, cb) => {
41
- _pubsub.subscribe(topic, cb);
42
- };
43
- const unsubscribe = (topic, cb) => {
44
- _pubsub.unsubscribe(topic, cb);
45
- };
46
- const publish = (topic, value) => {
47
- _pubsub.publish(topic, value);
48
- };
49
- const _connectionState = (state) => {
50
- switch (state) {
51
- case 0:
52
- return 'connecting'
53
- case 1:
54
- return 'open'
55
- case 2:
56
- return 'closing'
57
- case 3:
58
- return 'closed'
59
- }
60
- };
61
- const request = (client, request) => {
62
- return new Promise((resolve, reject) => {
63
- const state = _connectionState(client.readyState);
64
- if (state !== 'open') return reject(`coudn't send request to ${client.id}, no open connection found.`)
65
- request.id = Math.random().toString(36).slice(-12);
66
- const handler = result => {
67
- if (result && result.error) return reject(result.error)
68
- resolve({result, id: request.id, handler});
69
- unsubscribe(request.id, handler);
70
- };
71
- subscribe(request.id, handler);
72
- send(client, request);
73
- });
74
- };
75
- const send = async (client, request) => {
76
- return client.send(JSON.stringify(request))
77
- };
78
- const pubsub = client => {
79
- return {
80
- publish: (topic = 'pubsub', value) => {
81
- return send(client, {url: 'pubsub', params: { topic, value }})
82
- },
83
- subscribe: (topic = 'pubsub', cb) => {
84
- subscribe(topic, cb);
85
- return send(client, {url: 'pubsub', params: { topic, subscribe: true }})
86
- },
87
- unsubscribe: (topic = 'pubsub', cb) => {
88
- unsubscribe(topic, cb);
89
- return send(client, {url: 'pubsub', params: { topic, unsubscribe: true }})
90
- },
91
- subscribers: _pubsub.subscribers
92
- }
93
- };
94
- const server = (client) => {
95
- return {
96
- uptime: async () => {
97
- try {
98
- const { result, id, handler } = await request(client, {url: 'uptime'});
99
- unsubscribe(id, handler);
100
- return result
101
- } catch (e) {
102
- throw e
103
- }
104
- },
105
- ping: async () => {
106
- try {
107
- const now = new Date().getTime();
108
- const { result, id, handler } = await request(client, {url: 'ping'});
109
- unsubscribe(id, handler);
110
- return (Number(result) - now)
111
- } catch (e) {
112
- throw e
113
- }
114
- }
115
- }
116
- };
117
- const peernet = (client) => {
118
- return {
119
- join: async (params) => {
120
- try {
121
- params.join = true;
122
- const requested = { url: 'peernet', params };
123
- const { result, id, handler } = await request(client, requested);
124
- unsubscribe(id, handler);
125
- return result
126
- } catch (e) {
127
- throw e
128
- }
129
- },
130
- leave: async (params) => {
131
- try {
132
- params.join = false;
133
- const requested = { url: 'peernet', params };
134
- const { result, id, handler } = await request(client, requested);
135
- unsubscribe(id, handler);
136
- return result
137
- } catch (e) {
138
- throw e
139
- }
140
- }
141
- }
142
- };
143
- return { send, request, pubsub, server, subscribe, unsubscribe, publish, peernet }
144
- };
145
-
146
- if (!globalThis.PubSub) globalThis.PubSub = LittlePubSub;
147
- if (!globalThis.pubsub) globalThis.pubsub = new LittlePubSub({verbose: false});
148
- const socketRequestClient = (url, protocols = 'echo-protocol', options = { retry: false }) => {
149
- const { retry } = options;
150
- const api = clientApi(pubsub);
151
- let tries = 0;
152
- const onerror = error => {
153
- if (pubsub.subscribers['error']) {
154
- pubsub.publish('error', error);
155
- } else {
156
- console.error(error);
157
- }
158
- };
159
- const onmessage = message => {
160
- const {value, url, status, id} = JSON.parse(message.data.toString());
161
- const publisher = id ? id : url;
162
- if (status === 200) {
163
- pubsub.publish(publisher, value);
164
- } else {
165
- pubsub.publish(publisher, {error: value});
166
- }
167
- };
168
- const clientConnection = client => {
169
- const startTime = new Date().getTime();
170
- return {
171
- client,
172
- request: async req => {
173
- const { result, id, handler } = await api.request(client, req);
174
- pubsub.unsubscribe(id, handler);
175
- return result
176
- },
177
- send: req => api.send(client, req),
178
- subscribe: api.subscribe,
179
- unsubscribe: api.unsubscribe,
180
- subscribers: api.subscribers,
181
- publish: api.publish,
182
- pubsub: api.pubsub(client),
183
- uptime: () => {
184
- const now = new Date().getTime();
185
- return (now - startTime)
186
- },
187
- peernet: api.peernet(client),
188
- server: api.server(client),
189
- close: exit => {
190
- client.close();
191
- }
192
- }
193
- };
194
- return new Promise((resolve, reject) => {
195
- const init = () => {
196
- let ws;
197
- if (typeof process === 'object' && !globalThis.WebSocket) {
198
- ws = require('websocket').w3cwebsocket;
199
- } else {
200
- ws = WebSocket;
201
- }
202
- const client = new ws(url, protocols);
203
- client.onmessage = onmessage;
204
- client.onerror = onerror;
205
- client.onopen = () => {
206
- tries = 0;
207
- resolve(clientConnection(client));
208
- };
209
- client.onclose = message => {
210
- tries++;
211
- if (!retry) return reject(options)
212
- if (tries > 5) {
213
- console.log(`${protocols} Client Closed`);
214
- console.error(`could not connect to - ${url}/`);
215
- return resolve(clientConnection(client))
216
- }
217
- if (message.code === 1006) {
218
- console.log('Retrying in 10 seconds');
219
- setTimeout(() => {
220
- return init();
221
- }, retry);
222
- }
223
- };
224
- };
225
- return init();
226
- });
227
- };
228
-
229
- class HttpClientApi$1 {
230
- constructor(config = {}) {
231
- if (!config.apiPath) config.apiPath = 'api';
232
-
233
- const address = `ws://${config.host}:${config.port}`;
234
-
235
- this.apiUrl = (url) => `${address}/${url}`;
236
- return (async () => {
237
- this.client = await socketRequestClient(address, config.protocol, {pubsub: config.pubsub, retry: 3000});
238
- return this
239
- })()
240
- }
241
-
242
- async get(url, obj) {
243
- const headers = {};
244
- let body = null;
245
- let method = 'GET';
246
- if (obj) {
247
- method = 'POST';
248
- headers['Content-Type'] = 'application/json';
249
- body = JSON.stringify(obj);
250
- }
251
- let response = await this.client.request(url, {headers, body, method});
252
- const type = response.headers.get('content-type').split(';')[0];
253
- if (type==='application/json') response = await response.json();
254
- return response
255
- }
256
-
257
- async put(url, obj) {
258
- const headers = {};
259
- let body = {};
260
- if (obj) {
261
- headers['Content-Type'] = 'application/json';
262
- body = JSON.stringify(obj);
263
- }
264
-
265
- let response = await fetch(this.apiUrl(url), {method: 'PUT', headers, body});
266
- const type = response.headers.get('content-type').split(';')[0];
267
- if (type==='application/json') response = await response.json();
268
- return response
269
- }
270
- }
271
-
272
- class HttpClientApi extends HttpClientApi$1 {
273
- constructor(config = {}) {
274
- config.apiPath = 'api';
275
- return (async () => {
276
- await super(config);
277
-
278
- this.properties = {
279
- wallet: 'get',
280
- version: 'get',
281
- addresses: 'get',
282
- config: 'get',
283
- account: 'get',
284
- accounts: 'get',
285
- transaction: 'any',
286
- transactions: 'get',
287
- block: 'get',
288
- blocks: 'get',
289
- };
290
- this.keys = Object.keys(this.properties);
291
- return this
292
- })()
293
- }
294
-
295
- async request(url, data) {
296
- return await this.client.request({url, params: data})
297
- }
298
-
299
- async ready() {
300
- return await this.request('ready')
301
- }
302
-
303
- async version() {
304
- return await this.request('version')
305
- }
306
-
307
- async account(index) {
308
- return await this.request('account', {index})
309
- }
310
- }
311
-
312
- var client = (config = {}) => {
313
- if (typeof config !== 'object') config = {};
314
- if (!config.protocol) config.protocol = 'peernet-v0.1.0';
315
- if (!config.port) config.port = 1000;
316
- if (!config.host) config.host = '127.0.0.1';
317
-
318
- return new HttpClientApi(config)
319
- };
320
-
321
- exports["default"] = client;
@@ -1,328 +0,0 @@
1
- 'use strict';
2
-
3
- var websocket = require('websocket');
4
- var PubSub = require('@vandeurenglenn/little-pubsub');
5
- var http$1 = require('http');
6
- var Koa = require('koa');
7
-
8
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
-
10
- var PubSub__default = /*#__PURE__*/_interopDefaultLegacy(PubSub);
11
- var Koa__default = /*#__PURE__*/_interopDefaultLegacy(Koa);
12
-
13
- var version = "0.11.25";
14
-
15
- var api$1 = {
16
- version: ({send}) => send({client: '@peernet/api/http', version}),
17
- ready: ({send}) => {
18
- if (globalThis.states.ready) send(true);
19
- else pubsub.subscribe('ready', () => send(true));
20
- },
21
- storage: async (params, {send, error}) => {
22
- console.log(params);
23
- const {name, root, key, value, method} = params;
24
- try {
25
- if (name && root) {
26
- globalThis[name] = globalThis[name] || await new LeofcoinStorage(name, root);
27
- } else {
28
- return error('Expected name & root')
29
- }
30
- if (method === 'put') {
31
- await globalThis[name].put(key, value);
32
- return send('ok')
33
- }
34
- if (method === 'remove') {
35
- await globalThis[name].remove(key, value);
36
- return send('ok')
37
- }
38
- value = await globalThis[name].get(key);
39
- return send(value)
40
- } catch (e) {
41
- return error(e)
42
- }
43
- },
44
- getConfig: async (params, {send, error}) => {
45
- try {
46
- const config = await api.getConfig(params);
47
- send(config);
48
- } catch (e) {
49
- error(e);
50
- }
51
- },
52
- setMinerConfig: async (params, {send, error}) => {
53
- try {
54
- await api.setMinerConfig(params);
55
- send('ok');
56
- } catch (e) {
57
- error(e);
58
- }
59
- },
60
- getMinerConfig: async ({send, error}) => {
61
- try {
62
- const config = await api.getMinerConfig();
63
- send(config);
64
- } catch (e) {
65
- error(e);
66
- }
67
- },
68
- wallet: async ({send}) => {
69
- const wallet = await walletStore.get();
70
- send(wallet);
71
- },
72
- addresses: async ({send, error}) => {
73
- try {
74
- const adresses = await api.addresses();
75
- send(adresses);
76
- } catch (e) {
77
- error(e);
78
- }
79
- },
80
- accountNames: async (params, {send, error}) => {
81
- try {
82
- const adresses = await api.accountNames(params.index);
83
- send(adresses);
84
- } catch (e) {
85
- error(e);
86
- }
87
- },
88
- accounts: async ({send}) => {
89
- const accounts = await accountStore.get();
90
- send(accounts);
91
- },
92
- account: async (params, {send}) => {
93
- const account = await accountStore.get(params);
94
- send(account);
95
- },
96
- balance: async (params, {send, error}) => {
97
- console.log('balance');
98
- try {
99
- console.log(await api.getBalanceForAddress(params.address));
100
- const value = await api.getBalanceForAddress(params.address);
101
- send(value);
102
- } catch (e) {
103
- console.log(e);
104
- error(e);
105
- }
106
- },
107
- balanceAfter: async (params, {send, error}) => {
108
- try {
109
- const value = await api.getBalanceForAddressAfter(params.address, params.index);
110
- send(value);
111
- } catch (e) {
112
- error(e);
113
- }
114
- },
115
- mine: async (params, {send, error}) => {
116
- api.mine(params);
117
- send('ok');
118
- },
119
- lastBlock: async ({send, error}) => {
120
- try {
121
- const value = await api.lastBlock();
122
- send(value);
123
- } catch (e) {
124
- error(e);
125
- }
126
- },
127
- };
128
-
129
- const fullLog = text => {
130
- return console.log(`${new Date()}: ${text}`)
131
- };
132
-
133
- const originIsAllowed = (requestOrigin, origin) => {
134
- // put logic here to detect whether the specified origin is allowed.
135
- if (origin && requestOrigin !== origin) return false;
136
- return true;
137
- };
138
-
139
- /**
140
- * @module socketResponse
141
- *
142
- * @param {object} connection socket connection
143
- * @param {string} route the route to handle
144
- */
145
- var socketConnection = (request, protocol, origin) => {
146
- if (origin && !originIsAllowed(request.origin, origin)) {
147
- // Make sure we only accept requests from an allowed origin
148
- request.reject();
149
- fullLog(`Connection from origin ${request.origin} rejected.`);
150
- return;
151
- }
152
- // console.log(request);
153
- const connection = request.accept(protocol, request.origin);
154
- fullLog(`Connection accepted @${protocol}`);
155
- return connection;
156
- };
157
-
158
- /**
159
- * @module socketResponse
160
- *
161
- * @param {object} connection socket connection
162
- * @param {string} url the request url
163
- */
164
- var socketResponse = (connection, url, id, customEvent) => {
165
- const send = (data = 'ok', status = 200) => connection.send(
166
- JSON.stringify({url, status, value: data, id, customEvent})
167
- );
168
- const error = data => connection.send(JSON.stringify({url, value: data}));
169
- return {
170
- connection,
171
- send,
172
- error
173
- }
174
- };
175
-
176
- if (!globalThis.PubSub) globalThis.PubSub = PubSub__default["default"];
177
- if (!globalThis.pubsub) globalThis.pubsub = new PubSub__default["default"]();
178
-
179
- const socketRequestServer = (options, routes = {}) => {
180
- // if (!routes && !routes.port && options) routes = options;
181
- // else if (!options && !routes) return console.error('no routes defined');
182
-
183
- let {httpServer, httpsServer, port, protocol, credentials, origin, pubsub } = options;
184
- if (!pubsub) pubsub = new PubSub__default["default"]({verbose: false});
185
- if (!port) port = 6000;
186
- const connections = [];
187
- let connection;
188
- const startTime = new Date().getTime();
189
- // default routes
190
- if (!routes.ping) routes.ping = (response) => response.send(new Date().getTime());
191
- if (!routes.uptime) routes.uptime = (response) => {
192
- const now = new Date().getTime();
193
- response.send(now - startTime);
194
- };
195
- if (!routes.pubsub) {
196
- routes.pubsub = (params, response) => {
197
- if (!response) {
198
- response = params;
199
- params = {};
200
- }
201
-
202
- if (!params.topic) params.topic = 'pubsub';
203
-
204
- const topic = params.topic;
205
- delete params.topic;
206
-
207
- if (params.subscribe) {
208
- pubsub.subscribe(topic, message => {
209
- response.connection.send(JSON.stringify({url: topic, status: 200, value: message}));
210
- });
211
- response.send('ok', 200);
212
- } else if (params.unsubscribe) {
213
- pubsub.unsubscribe(topic, message => {
214
- response.connection.send(JSON.stringify({url: topic, status: 200, value: message}));
215
- });
216
- for (const connection of connections) {
217
- if (connection !== response.connection) connection.send(JSON.stringify({url: topic, status: 200, value: params}));
218
- }
219
- response.send('ok', 200);
220
- }
221
- else if (params.value !== undefined)
222
- // should only be send raw to stars
223
- // for (const connection of connections) {
224
- // if (connection !== response.connection) connection.send(JSON.stringify({
225
- // url: topic, status: 200, value: params
226
- // }));
227
- // }
228
- pubsub.publish(topic, params.value);
229
- response.send('ok', 200);
230
- };
231
-
232
- }
233
- globalThis.peerMap = new Map();
234
- if (!routes.peernet) {
235
- routes.peernet = (params, response) => {
236
- if (params.join) {
237
- peerMap.set(params.peerId, params.address);
238
- response.send([...peerMap.values()]);
239
- for (const connection of connections) {
240
- if (connection !== response.connection)
241
- socketResponse(connection, 'peernet', 'peernet').send({discovered: params.address});
242
- }
243
- return
244
- }
245
- if (!params.join) {
246
- peerMap.delete(params.peerId);
247
- return response.send()
248
- }
249
- };
250
- }
251
- // if (!protocol) protocol = 'echo-protocol';
252
- if (!httpServer && !httpsServer) {
253
- const { createServer } = credentials ? require('https') : require('http');
254
- if (credentials) httpServer = createServer(credentials);
255
- else httpServer = createServer();
256
-
257
- httpServer.listen(port, () => {
258
- console.log(`listening on ${port}`);
259
- });
260
- }
261
-
262
- const socketServer = new websocket.server({
263
- httpServer,
264
- autoAcceptConnections: false
265
- });
266
-
267
- socketServer.on('request', request => {
268
-
269
- connection = socketConnection(request, protocol, origin);
270
- connections.push(connection);
271
-
272
- const routeHandler = message => {
273
- let data;
274
- if (message.type) {
275
- switch (message.type) {
276
- case 'binary':
277
- data = message.binaryData.toString();
278
- break;
279
- case 'utf8':
280
- data = message.utf8Data;
281
- break;
282
- }
283
- }
284
- const { route, params, url, id, customEvent } = JSON.parse(data);
285
- // ignore api when customEvent is defined
286
- if (customEvent) return;
287
- if (routes[url]) {
288
- if (!params) return routes[url](socketResponse(connection, url, id), connections);
289
- return routes[url](params, socketResponse(connection, url, id), connections);
290
- }
291
- else return socketResponse(connection, url, id).error(`no handler found for '${message.url}'`);
292
- };
293
-
294
- connection.on('message', routeHandler);
295
- });
296
-
297
- return {
298
- close: () => socketServer.shutDown(),
299
- connections
300
- };
301
- };
302
- var server = socketRequestServer;
303
-
304
- var http = (config = {}) => {
305
- if (typeof config !== 'object') config = {};
306
- if (!config.protocol) config.protocol = 'peernet-v0.1.0';
307
- if (!config.port) config.port = 2000;
308
- if (!config.host) config.host = '127.0.0.1';
309
-
310
- const app = new Koa__default["default"]();
311
-
312
- app.use(async (ctx) => {
313
- const url = ctx.url.split('/api/')[1];
314
- if (url === 'version') ctx.body = {client: '@peernet/api/http', version};
315
- });
316
-
317
- const httpServer = http$1.createServer(app.callback());
318
-
319
- config.httpServer = httpServer;
320
-
321
- httpServer.listen(config.port, () => {
322
- console.log(`listening on ${config.port}`);
323
- });
324
-
325
- return server(config, api$1)
326
- };
327
-
328
- exports["default"] = http;