helia-coord 1.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 (57) hide show
  1. package/.on-save.json +8 -0
  2. package/PEDIGREE.md +3 -0
  3. package/README.md +3 -0
  4. package/config/bootstrap-circuit-relays.js +48 -0
  5. package/examples/start-external.js +56 -0
  6. package/index.js +129 -0
  7. package/lib/adapters/bch-adapter.js +94 -0
  8. package/lib/adapters/encryption-adapter.js +123 -0
  9. package/lib/adapters/gist.js +42 -0
  10. package/lib/adapters/index.js +66 -0
  11. package/lib/adapters/ipfs-adapter.js +263 -0
  12. package/lib/adapters/logs-adapter.js +44 -0
  13. package/lib/adapters/pubsub-adapter/README.md +86 -0
  14. package/lib/adapters/pubsub-adapter/about-adapter.js +117 -0
  15. package/lib/adapters/pubsub-adapter/index.js +275 -0
  16. package/lib/adapters/pubsub-adapter/messaging.js +389 -0
  17. package/lib/adapters/pubsub-adapter/msg-router.js +58 -0
  18. package/lib/adapters/pubsub-adapter/resend-msg.js +58 -0
  19. package/lib/controllers/index.js +24 -0
  20. package/lib/controllers/timer-controller.js +417 -0
  21. package/lib/entities/this-node-entity.js +102 -0
  22. package/lib/use-cases/index.js +36 -0
  23. package/lib/use-cases/peer-use-cases.js +146 -0
  24. package/lib/use-cases/pubsub-use-cases.js +56 -0
  25. package/lib/use-cases/relay-use-cases.js +479 -0
  26. package/lib/use-cases/schema.js +158 -0
  27. package/lib/use-cases/this-node-use-cases.js +443 -0
  28. package/lib/util/utils.js +12 -0
  29. package/package.json +52 -0
  30. package/test/mocks/adapter-mock.js +119 -0
  31. package/test/mocks/circuit-relay-mocks.js +67 -0
  32. package/test/mocks/ipfs-mock.js +46 -0
  33. package/test/mocks/peers-mock.js +75 -0
  34. package/test/mocks/pubsub-mocks.js +37 -0
  35. package/test/mocks/thisnode-mocks.js +82 -0
  36. package/test/mocks/use-case-mocks.js +24 -0
  37. package/test/unit/adapters/bch-adapter-unit.js +96 -0
  38. package/test/unit/adapters/encryption-adapter-unit.js +129 -0
  39. package/test/unit/adapters/gist.unit.adapters.js +58 -0
  40. package/test/unit/adapters/index-adapters-unit.js +79 -0
  41. package/test/unit/adapters/ipfs-adapter-unit.js +215 -0
  42. package/test/unit/adapters/logs-adapter-unit.js +55 -0
  43. package/test/unit/adapters/pubsub/about-adapter-unit.js +129 -0
  44. package/test/unit/adapters/pubsub/messaging-adapter-unit.js +576 -0
  45. package/test/unit/adapters/pubsub/pubsub-adapter-unit.js +367 -0
  46. package/test/unit/adapters/pubsub/resend-msg-adapter-unit.js +58 -0
  47. package/test/unit/controllers/controllers-index-unit.js +30 -0
  48. package/test/unit/controllers/timer-controller-unit.js +261 -0
  49. package/test/unit/entities/this-node.unit.entity.js +157 -0
  50. package/test/unit/index-unit.js +160 -0
  51. package/test/unit/use-cases/peer.unit.use-cases.js +186 -0
  52. package/test/unit/use-cases/pubsub.unit.use-cases.js +114 -0
  53. package/test/unit/use-cases/relay-use-cases-unit.js +658 -0
  54. package/test/unit/use-cases/schema-use-case-unit.js +101 -0
  55. package/test/unit/use-cases/this-node-use-cases-unit.js +427 -0
  56. package/test/unit/use-cases/use-cases-index-unit.js +47 -0
  57. package/test/unit/util/utils-unit.js +31 -0
@@ -0,0 +1,186 @@
1
+ /*
2
+ Unit tests for the Peer Use Case library.
3
+ */
4
+
5
+ // npm libraries
6
+ import { assert } from 'chai'
7
+ import sinon from 'sinon'
8
+
9
+ // Local libraries
10
+ import PeerUseCases from '../../../lib/use-cases/peer-use-cases.js'
11
+ import ThisNodeUseCases from '../../../lib/use-cases/this-node-use-cases.js'
12
+ import AdapterMock from '../../mocks/adapter-mock.js'
13
+
14
+ const adapters = new AdapterMock()
15
+ // const mockData = require('../../mocks/peers-mock')
16
+
17
+ describe('#Use-Cases-Peer', () => {
18
+ let uut
19
+ let sandbox
20
+ let thisNode
21
+
22
+ beforeEach(async () => {
23
+ // Restore the sandbox before each test.
24
+ sandbox = sinon.createSandbox()
25
+
26
+ const thisNodeUseCases = new ThisNodeUseCases({
27
+ adapters,
28
+ statusLog: () => {
29
+ }
30
+ })
31
+ thisNode = await thisNodeUseCases.createSelf({ type: 'node.js' })
32
+ //
33
+ // uut = new RelayUseCases({
34
+ // adapters,
35
+ // controllers: {},
36
+ // statusLog: () => {}
37
+ // })
38
+
39
+ uut = new PeerUseCases({ adapters, controllers: {} })
40
+ })
41
+
42
+ afterEach(() => sandbox.restore())
43
+
44
+ describe('#constructor', () => {
45
+ it('should throw an error if adapters is not included', () => {
46
+ try {
47
+ uut = new PeerUseCases()
48
+
49
+ assert.fail('Unexpected code path')
50
+ } catch (err) {
51
+ assert.include(
52
+ err.message,
53
+ 'Must inject instance of adapters when instantiating Peer Use Cases library.'
54
+ )
55
+ }
56
+ })
57
+ })
58
+
59
+ describe('#sendPrivateMessage', () => {
60
+ it('should throw an error if peer data can not be found', async () => {
61
+ try {
62
+ const result = await uut.sendPrivateMessage(
63
+ 'fakeId',
64
+ 'messageStr',
65
+ thisNode
66
+ )
67
+ console.log('result: ', result)
68
+ } catch (err) {
69
+ assert.include(err.message, 'Data for peer')
70
+ }
71
+ })
72
+
73
+ it('should encrypt a message and add it to the peers OrbitDB', async () => {
74
+ thisNode.peerData.push({ from: 'fakeId' })
75
+ // thisNode.orbitData.push({
76
+ // ipfsId: 'fakeId',
77
+ // db: {
78
+ // add: () => {
79
+ // }
80
+ // }
81
+ // })
82
+
83
+ // Mock dependencies
84
+ // sandbox.stub(uut.adapters.encryption, 'encryptMsg')
85
+ sandbox.stub(uut, 'connectToPeer').resolves(true)
86
+
87
+ const result = await uut.sendPrivateMessage(
88
+ 'fakeId',
89
+ 'messageStr',
90
+ thisNode
91
+ )
92
+ // console.log('result: ', result)
93
+
94
+ assert.equal(result, true)
95
+ })
96
+ })
97
+
98
+ describe('#connectToPeer', () => {
99
+ it('should skip if peer is already connected', async () => {
100
+ // Test data
101
+ const peerId = 'QmbyYXKbnAmMbMGo8LRBZ58jYs58anqUzY1m4jxDmhDsjd'
102
+ thisNode.peerList = [peerId]
103
+
104
+ // Mock dependencies
105
+ sandbox.stub(uut.adapters.ipfs, 'getPeers').resolves([{ peer: peerId }])
106
+
107
+ // Connect to that peer
108
+ const result = await uut.connectToPeer(peerId, thisNode)
109
+
110
+ assert.equal(result, true)
111
+ })
112
+
113
+ it('should connect to peer through circuit relay', async () => {
114
+ // Test data
115
+ const peerId = 'QmbyYXKbnAmMbMGo8LRBZ58jYs58anqUzY1m4jxDmhDsjd'
116
+ thisNode.peerList = [peerId]
117
+ thisNode.relayData = [
118
+ {
119
+ multiaddr: '/ip4/139.162.76.54/tcp/5269/ws/p2p/QmaKzQTAtoJWYMiG5ATx41uWsMajr1kSxRdtg919s8fK77',
120
+ connected: true,
121
+ updatedAt: '2021-09-20T15:59:12.961Z',
122
+ ipfsId: 'QmaKzQTAtoJWYMiG5ATx41uWsMajr1kSxRdtg919s8fK77',
123
+ isBootstrap: false,
124
+ metrics: { aboutLatency: [] },
125
+ latencyScore: 10000
126
+ }
127
+ ]
128
+
129
+ // Mock dependencies
130
+ sandbox.stub(uut.adapters.ipfs, 'getPeers').resolves([])
131
+ sandbox.stub(uut.adapters.ipfs, 'connectToPeer').resolves(true)
132
+ thisNode.useCases = {
133
+ relays: {
134
+ sortRelays: () => thisNode.relayData
135
+ }
136
+ }
137
+
138
+ // Connect to that peer
139
+ const result = await uut.connectToPeer(peerId, thisNode)
140
+
141
+ assert.equal(result, true)
142
+ })
143
+
144
+ it('should return false if not able to connect to peer', async () => {
145
+ // Test data
146
+ const peerId = 'QmbyYXKbnAmMbMGo8LRBZ58jYs58anqUzY1m4jxDmhDsjd'
147
+ thisNode.peerList = [peerId]
148
+ thisNode.relayData = [
149
+ {
150
+ multiaddr: '/ip4/139.162.76.54/tcp/5269/ws/p2p/QmaKzQTAtoJWYMiG5ATx41uWsMajr1kSxRdtg919s8fK77',
151
+ connected: true,
152
+ updatedAt: '2021-09-20T15:59:12.961Z',
153
+ ipfsId: 'QmaKzQTAtoJWYMiG5ATx41uWsMajr1kSxRdtg919s8fK77',
154
+ isBootstrap: false,
155
+ metrics: { aboutLatency: [] },
156
+ latencyScore: 10000
157
+ }
158
+ ]
159
+
160
+ // Mock dependencies
161
+ sandbox.stub(uut.adapters.ipfs, 'getPeers').resolves([])
162
+ sandbox.stub(uut.adapters.ipfs, 'connectToPeer').resolves(false)
163
+ thisNode.useCases = {
164
+ relays: {
165
+ sortRelays: () => thisNode.relayData
166
+ }
167
+ }
168
+
169
+ // Connect to that peer
170
+ const result = await uut.connectToPeer(peerId, thisNode)
171
+
172
+ assert.equal(result, false)
173
+ })
174
+
175
+ it('should catch and throw errors', async () => {
176
+ try {
177
+ await uut.connectToPeer()
178
+
179
+ assert.fail('Unexpected code path')
180
+ } catch (err) {
181
+ // console.log(err)
182
+ assert.include(err.message, 'Cannot read')
183
+ }
184
+ })
185
+ })
186
+ })
@@ -0,0 +1,114 @@
1
+ /*
2
+ Unit tests for the Pubsub use case.
3
+ */
4
+
5
+ // npm libraries
6
+ import { assert } from 'chai'
7
+ import sinon from 'sinon'
8
+
9
+ // Local libraries
10
+ import PubsubUseCases from '../../../lib/use-cases/pubsub-use-cases.js'
11
+ import ThisNodeUseCases from '../../../lib/use-cases/this-node-use-cases.js'
12
+ import AdapterMock from '../../mocks/adapter-mock.js'
13
+
14
+ const adapters = new AdapterMock()
15
+ // const mockData = require('../../mocks/peers-mock')
16
+
17
+ describe('#pubsub-Use-Cases', () => {
18
+ let uut
19
+ let sandbox
20
+ let thisNodeUseCases
21
+
22
+ beforeEach(() => {
23
+ // Restore the sandbox before each test.
24
+ sandbox = sinon.createSandbox()
25
+
26
+ thisNodeUseCases = new ThisNodeUseCases({
27
+ adapters,
28
+ statusLog: () => {}
29
+ })
30
+
31
+ uut = new PubsubUseCases({
32
+ adapters,
33
+ thisNodeUseCases
34
+ })
35
+ })
36
+
37
+ afterEach(() => sandbox.restore())
38
+
39
+ describe('#constructor', () => {
40
+ it('should throw an error if adapters is not included', () => {
41
+ try {
42
+ uut = new PubsubUseCases()
43
+
44
+ assert.fail('Unexpected code path')
45
+ } catch (err) {
46
+ assert.include(
47
+ err.message,
48
+ 'Must inject instance of adapters when instantiating Pubsub Use Cases library.'
49
+ )
50
+ }
51
+ })
52
+
53
+ it('should throw an error if thisNodeUseCases instance is not included', () => {
54
+ try {
55
+ uut = new PubsubUseCases({
56
+ adapters: {},
57
+ controllers: {}
58
+ })
59
+
60
+ assert.fail('Unexpected code path')
61
+ } catch (err) {
62
+ assert.include(
63
+ err.message,
64
+ 'thisNode use cases required when instantiating Pubsub Use Cases library.'
65
+ )
66
+ }
67
+ })
68
+
69
+ it('should allow parent app to override coinjoin pubsub handler', () => {
70
+ const localHandler = () => {}
71
+
72
+ // Use default handler
73
+ uut = new PubsubUseCases({
74
+ adapters: {},
75
+ thisNodeUseCases
76
+ })
77
+ const normalHandleResult = uut.coinjoinPubsubHandler()
78
+ assert.equal(normalHandleResult, true)
79
+
80
+ // Replace default handler
81
+ uut = new PubsubUseCases({
82
+ adapters: {},
83
+ thisNodeUseCases,
84
+ coinjoinPubsubHandler: localHandler
85
+ })
86
+
87
+ assert.isOk(uut.coinjoinPubsubHandler)
88
+ })
89
+ })
90
+
91
+ describe('#initializePubsub', () => {
92
+ it('should subscribe to a node', async () => {
93
+ await uut.initializePubsub('fakeNode')
94
+
95
+ assert.isOk(true, 'No throwing an error is a pass')
96
+ })
97
+
98
+ it('should catch and throw an error', async () => {
99
+ try {
100
+ // Force an error
101
+ sandbox
102
+ .stub(uut.adapters.pubsub, 'subscribeToPubsubChannel')
103
+ .rejects(new Error('test error'))
104
+
105
+ await uut.initializePubsub('fakeNode')
106
+
107
+ assert.fail('Unexpected code path')
108
+ } catch (err) {
109
+ // console.log(err)
110
+ assert.include(err.message, 'test error')
111
+ }
112
+ })
113
+ })
114
+ })