autopass 2.2.1 → 3.0.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.
- package/.gitattributes +1 -0
- package/.github/workflows/test-node.yml +7 -7
- package/.prettierrc +1 -0
- package/README.md +26 -15
- package/example.mjs +1 -1
- package/index.js +97 -43
- package/package.json +23 -19
- package/schema.js +108 -52
- package/spec/db/db.json +31 -19
- package/spec/db/index.js +197 -83
- package/spec/db/messages.js +127 -82
- package/spec/hyperdispatch/dispatch.json +16 -3
- package/spec/hyperdispatch/index.js +128 -38
- package/spec/hyperdispatch/messages.js +84 -44
- package/spec/schema/index.js +84 -44
- package/spec/schema/schema.json +31 -3
- package/test.js +58 -7
|
@@ -1,55 +1,72 @@
|
|
|
1
1
|
// This file is autogenerated by the hyperschema compiler
|
|
2
|
-
// Schema Version:
|
|
2
|
+
// Schema Version: 1
|
|
3
3
|
/* eslint-disable camelcase */
|
|
4
4
|
/* eslint-disable quotes */
|
|
5
|
+
/* eslint-disable space-before-function-paren */
|
|
5
6
|
|
|
6
|
-
const VERSION = 2
|
|
7
7
|
const { c } = require('hyperschema/runtime')
|
|
8
8
|
|
|
9
|
+
const VERSION = 1
|
|
10
|
+
|
|
9
11
|
// eslint-disable-next-line no-unused-vars
|
|
10
12
|
let version = VERSION
|
|
11
13
|
|
|
12
14
|
// @autopass/records
|
|
13
15
|
const encoding0 = {
|
|
14
|
-
preencode
|
|
16
|
+
preencode(state, m) {
|
|
15
17
|
c.string.preencode(state, m.key)
|
|
16
18
|
state.end++ // max flag is 2 so always one byte
|
|
17
19
|
|
|
18
20
|
if (m.value) c.string.preencode(state, m.value)
|
|
19
|
-
if (
|
|
21
|
+
if (m.file) c.buffer.preencode(state, m.file)
|
|
20
22
|
},
|
|
21
|
-
encode
|
|
22
|
-
const flags =
|
|
23
|
-
(m.value ? 1 : 0) |
|
|
24
|
-
((version >= 2 && m.file) ? 2 : 0)
|
|
23
|
+
encode(state, m) {
|
|
24
|
+
const flags = (m.value ? 1 : 0) | (m.file ? 2 : 0)
|
|
25
25
|
|
|
26
26
|
c.string.encode(state, m.key)
|
|
27
27
|
c.uint.encode(state, flags)
|
|
28
28
|
|
|
29
29
|
if (m.value) c.string.encode(state, m.value)
|
|
30
|
-
if (
|
|
30
|
+
if (m.file) c.buffer.encode(state, m.file)
|
|
31
31
|
},
|
|
32
|
-
decode
|
|
32
|
+
decode(state) {
|
|
33
33
|
const r0 = c.string.decode(state)
|
|
34
34
|
const flags = c.uint.decode(state)
|
|
35
35
|
|
|
36
36
|
return {
|
|
37
37
|
key: r0,
|
|
38
38
|
value: (flags & 1) !== 0 ? c.string.decode(state) : null,
|
|
39
|
-
file: (
|
|
39
|
+
file: (flags & 2) !== 0 ? c.buffer.decode(state) : null
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
// @autopass/
|
|
44
|
+
// @autopass/mirrors
|
|
45
45
|
const encoding1 = {
|
|
46
|
-
preencode
|
|
46
|
+
preencode(state, m) {
|
|
47
|
+
c.fixed32.preencode(state, m.key)
|
|
48
|
+
},
|
|
49
|
+
encode(state, m) {
|
|
50
|
+
c.fixed32.encode(state, m.key)
|
|
51
|
+
},
|
|
52
|
+
decode(state) {
|
|
53
|
+
const r0 = c.fixed32.decode(state)
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
key: r0
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// @autopass/writer
|
|
62
|
+
const encoding2 = {
|
|
63
|
+
preencode(state, m) {
|
|
47
64
|
c.buffer.preencode(state, m.key)
|
|
48
65
|
},
|
|
49
|
-
encode
|
|
66
|
+
encode(state, m) {
|
|
50
67
|
c.buffer.encode(state, m.key)
|
|
51
68
|
},
|
|
52
|
-
decode
|
|
69
|
+
decode(state) {
|
|
53
70
|
const r0 = c.buffer.decode(state)
|
|
54
71
|
|
|
55
72
|
return {
|
|
@@ -59,14 +76,14 @@ const encoding1 = {
|
|
|
59
76
|
}
|
|
60
77
|
|
|
61
78
|
// @autopass/delete
|
|
62
|
-
const
|
|
63
|
-
preencode
|
|
79
|
+
const encoding3 = {
|
|
80
|
+
preencode(state, m) {
|
|
64
81
|
c.string.preencode(state, m.key)
|
|
65
82
|
},
|
|
66
|
-
encode
|
|
83
|
+
encode(state, m) {
|
|
67
84
|
c.string.encode(state, m.key)
|
|
68
85
|
},
|
|
69
|
-
decode
|
|
86
|
+
decode(state) {
|
|
70
87
|
const r0 = c.string.decode(state)
|
|
71
88
|
|
|
72
89
|
return {
|
|
@@ -76,20 +93,20 @@ const encoding2 = {
|
|
|
76
93
|
}
|
|
77
94
|
|
|
78
95
|
// @autopass/invite
|
|
79
|
-
const
|
|
80
|
-
preencode
|
|
96
|
+
const encoding4 = {
|
|
97
|
+
preencode(state, m) {
|
|
81
98
|
c.buffer.preencode(state, m.id)
|
|
82
99
|
c.buffer.preencode(state, m.invite)
|
|
83
100
|
c.buffer.preencode(state, m.publicKey)
|
|
84
101
|
c.int.preencode(state, m.expires)
|
|
85
102
|
},
|
|
86
|
-
encode
|
|
103
|
+
encode(state, m) {
|
|
87
104
|
c.buffer.encode(state, m.id)
|
|
88
105
|
c.buffer.encode(state, m.invite)
|
|
89
106
|
c.buffer.encode(state, m.publicKey)
|
|
90
107
|
c.int.encode(state, m.expires)
|
|
91
108
|
},
|
|
92
|
-
decode
|
|
109
|
+
decode(state) {
|
|
93
110
|
const r0 = c.buffer.decode(state)
|
|
94
111
|
const r1 = c.buffer.decode(state)
|
|
95
112
|
const r2 = c.buffer.decode(state)
|
|
@@ -105,14 +122,14 @@ const encoding3 = {
|
|
|
105
122
|
}
|
|
106
123
|
|
|
107
124
|
// @autopass/del-invite
|
|
108
|
-
const
|
|
109
|
-
preencode
|
|
125
|
+
const encoding5 = {
|
|
126
|
+
preencode(state, m) {
|
|
110
127
|
c.buffer.preencode(state, m.id)
|
|
111
128
|
},
|
|
112
|
-
encode
|
|
129
|
+
encode(state, m) {
|
|
113
130
|
c.buffer.encode(state, m.id)
|
|
114
131
|
},
|
|
115
|
-
decode
|
|
132
|
+
decode(state) {
|
|
116
133
|
const r0 = c.buffer.decode(state)
|
|
117
134
|
|
|
118
135
|
return {
|
|
@@ -121,49 +138,63 @@ const encoding4 = {
|
|
|
121
138
|
}
|
|
122
139
|
}
|
|
123
140
|
|
|
124
|
-
|
|
141
|
+
// @autopass/del-mirror
|
|
142
|
+
const encoding6 = encoding1
|
|
143
|
+
|
|
144
|
+
function setVersion(v) {
|
|
125
145
|
version = v
|
|
126
146
|
}
|
|
127
147
|
|
|
128
|
-
function encode
|
|
148
|
+
function encode(name, value, v = VERSION) {
|
|
129
149
|
version = v
|
|
130
150
|
return c.encode(getEncoding(name), value)
|
|
131
151
|
}
|
|
132
152
|
|
|
133
|
-
function decode
|
|
153
|
+
function decode(name, buffer, v = VERSION) {
|
|
134
154
|
version = v
|
|
135
155
|
return c.decode(getEncoding(name), buffer)
|
|
136
156
|
}
|
|
137
157
|
|
|
138
|
-
function getEnum
|
|
158
|
+
function getEnum(name) {
|
|
139
159
|
switch (name) {
|
|
140
|
-
default:
|
|
160
|
+
default:
|
|
161
|
+
throw new Error('Enum not found ' + name)
|
|
141
162
|
}
|
|
142
163
|
}
|
|
143
164
|
|
|
144
|
-
function getEncoding
|
|
165
|
+
function getEncoding(name) {
|
|
145
166
|
switch (name) {
|
|
146
|
-
case '@autopass/records':
|
|
147
|
-
|
|
148
|
-
case '@autopass/
|
|
149
|
-
|
|
150
|
-
case '@autopass/
|
|
151
|
-
|
|
167
|
+
case '@autopass/records':
|
|
168
|
+
return encoding0
|
|
169
|
+
case '@autopass/mirrors':
|
|
170
|
+
return encoding1
|
|
171
|
+
case '@autopass/writer':
|
|
172
|
+
return encoding2
|
|
173
|
+
case '@autopass/delete':
|
|
174
|
+
return encoding3
|
|
175
|
+
case '@autopass/invite':
|
|
176
|
+
return encoding4
|
|
177
|
+
case '@autopass/del-invite':
|
|
178
|
+
return encoding5
|
|
179
|
+
case '@autopass/del-mirror':
|
|
180
|
+
return encoding6
|
|
181
|
+
default:
|
|
182
|
+
throw new Error('Encoder not found ' + name)
|
|
152
183
|
}
|
|
153
184
|
}
|
|
154
185
|
|
|
155
|
-
function getStruct
|
|
186
|
+
function getStruct(name, v = VERSION) {
|
|
156
187
|
const enc = getEncoding(name)
|
|
157
188
|
return {
|
|
158
|
-
preencode
|
|
189
|
+
preencode(state, m) {
|
|
159
190
|
version = v
|
|
160
191
|
enc.preencode(state, m)
|
|
161
192
|
},
|
|
162
|
-
encode
|
|
193
|
+
encode(state, m) {
|
|
163
194
|
version = v
|
|
164
195
|
enc.encode(state, m)
|
|
165
196
|
},
|
|
166
|
-
decode
|
|
197
|
+
decode(state) {
|
|
167
198
|
version = v
|
|
168
199
|
return enc.decode(state)
|
|
169
200
|
}
|
|
@@ -172,4 +203,13 @@ function getStruct (name, v = VERSION) {
|
|
|
172
203
|
|
|
173
204
|
const resolveStruct = getStruct // compat
|
|
174
205
|
|
|
175
|
-
module.exports = {
|
|
206
|
+
module.exports = {
|
|
207
|
+
resolveStruct,
|
|
208
|
+
getStruct,
|
|
209
|
+
getEnum,
|
|
210
|
+
getEncoding,
|
|
211
|
+
encode,
|
|
212
|
+
decode,
|
|
213
|
+
setVersion,
|
|
214
|
+
version
|
|
215
|
+
}
|
package/spec/schema/index.js
CHANGED
|
@@ -1,55 +1,72 @@
|
|
|
1
1
|
// This file is autogenerated by the hyperschema compiler
|
|
2
|
-
// Schema Version:
|
|
2
|
+
// Schema Version: 1
|
|
3
3
|
/* eslint-disable camelcase */
|
|
4
4
|
/* eslint-disable quotes */
|
|
5
|
+
/* eslint-disable space-before-function-paren */
|
|
5
6
|
|
|
6
|
-
const VERSION = 2
|
|
7
7
|
const { c } = require('hyperschema/runtime')
|
|
8
8
|
|
|
9
|
+
const VERSION = 1
|
|
10
|
+
|
|
9
11
|
// eslint-disable-next-line no-unused-vars
|
|
10
12
|
let version = VERSION
|
|
11
13
|
|
|
12
14
|
// @autopass/records
|
|
13
15
|
const encoding0 = {
|
|
14
|
-
preencode
|
|
16
|
+
preencode(state, m) {
|
|
15
17
|
c.string.preencode(state, m.key)
|
|
16
18
|
state.end++ // max flag is 2 so always one byte
|
|
17
19
|
|
|
18
20
|
if (m.value) c.string.preencode(state, m.value)
|
|
19
|
-
if (
|
|
21
|
+
if (m.file) c.buffer.preencode(state, m.file)
|
|
20
22
|
},
|
|
21
|
-
encode
|
|
22
|
-
const flags =
|
|
23
|
-
(m.value ? 1 : 0) |
|
|
24
|
-
((version >= 2 && m.file) ? 2 : 0)
|
|
23
|
+
encode(state, m) {
|
|
24
|
+
const flags = (m.value ? 1 : 0) | (m.file ? 2 : 0)
|
|
25
25
|
|
|
26
26
|
c.string.encode(state, m.key)
|
|
27
27
|
c.uint.encode(state, flags)
|
|
28
28
|
|
|
29
29
|
if (m.value) c.string.encode(state, m.value)
|
|
30
|
-
if (
|
|
30
|
+
if (m.file) c.buffer.encode(state, m.file)
|
|
31
31
|
},
|
|
32
|
-
decode
|
|
32
|
+
decode(state) {
|
|
33
33
|
const r0 = c.string.decode(state)
|
|
34
34
|
const flags = c.uint.decode(state)
|
|
35
35
|
|
|
36
36
|
return {
|
|
37
37
|
key: r0,
|
|
38
38
|
value: (flags & 1) !== 0 ? c.string.decode(state) : null,
|
|
39
|
-
file: (
|
|
39
|
+
file: (flags & 2) !== 0 ? c.buffer.decode(state) : null
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
// @autopass/
|
|
44
|
+
// @autopass/mirrors
|
|
45
45
|
const encoding1 = {
|
|
46
|
-
preencode
|
|
46
|
+
preencode(state, m) {
|
|
47
|
+
c.fixed32.preencode(state, m.key)
|
|
48
|
+
},
|
|
49
|
+
encode(state, m) {
|
|
50
|
+
c.fixed32.encode(state, m.key)
|
|
51
|
+
},
|
|
52
|
+
decode(state) {
|
|
53
|
+
const r0 = c.fixed32.decode(state)
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
key: r0
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// @autopass/writer
|
|
62
|
+
const encoding2 = {
|
|
63
|
+
preencode(state, m) {
|
|
47
64
|
c.buffer.preencode(state, m.key)
|
|
48
65
|
},
|
|
49
|
-
encode
|
|
66
|
+
encode(state, m) {
|
|
50
67
|
c.buffer.encode(state, m.key)
|
|
51
68
|
},
|
|
52
|
-
decode
|
|
69
|
+
decode(state) {
|
|
53
70
|
const r0 = c.buffer.decode(state)
|
|
54
71
|
|
|
55
72
|
return {
|
|
@@ -59,14 +76,14 @@ const encoding1 = {
|
|
|
59
76
|
}
|
|
60
77
|
|
|
61
78
|
// @autopass/delete
|
|
62
|
-
const
|
|
63
|
-
preencode
|
|
79
|
+
const encoding3 = {
|
|
80
|
+
preencode(state, m) {
|
|
64
81
|
c.string.preencode(state, m.key)
|
|
65
82
|
},
|
|
66
|
-
encode
|
|
83
|
+
encode(state, m) {
|
|
67
84
|
c.string.encode(state, m.key)
|
|
68
85
|
},
|
|
69
|
-
decode
|
|
86
|
+
decode(state) {
|
|
70
87
|
const r0 = c.string.decode(state)
|
|
71
88
|
|
|
72
89
|
return {
|
|
@@ -76,20 +93,20 @@ const encoding2 = {
|
|
|
76
93
|
}
|
|
77
94
|
|
|
78
95
|
// @autopass/invite
|
|
79
|
-
const
|
|
80
|
-
preencode
|
|
96
|
+
const encoding4 = {
|
|
97
|
+
preencode(state, m) {
|
|
81
98
|
c.buffer.preencode(state, m.id)
|
|
82
99
|
c.buffer.preencode(state, m.invite)
|
|
83
100
|
c.buffer.preencode(state, m.publicKey)
|
|
84
101
|
c.int.preencode(state, m.expires)
|
|
85
102
|
},
|
|
86
|
-
encode
|
|
103
|
+
encode(state, m) {
|
|
87
104
|
c.buffer.encode(state, m.id)
|
|
88
105
|
c.buffer.encode(state, m.invite)
|
|
89
106
|
c.buffer.encode(state, m.publicKey)
|
|
90
107
|
c.int.encode(state, m.expires)
|
|
91
108
|
},
|
|
92
|
-
decode
|
|
109
|
+
decode(state) {
|
|
93
110
|
const r0 = c.buffer.decode(state)
|
|
94
111
|
const r1 = c.buffer.decode(state)
|
|
95
112
|
const r2 = c.buffer.decode(state)
|
|
@@ -105,14 +122,14 @@ const encoding3 = {
|
|
|
105
122
|
}
|
|
106
123
|
|
|
107
124
|
// @autopass/del-invite
|
|
108
|
-
const
|
|
109
|
-
preencode
|
|
125
|
+
const encoding5 = {
|
|
126
|
+
preencode(state, m) {
|
|
110
127
|
c.buffer.preencode(state, m.id)
|
|
111
128
|
},
|
|
112
|
-
encode
|
|
129
|
+
encode(state, m) {
|
|
113
130
|
c.buffer.encode(state, m.id)
|
|
114
131
|
},
|
|
115
|
-
decode
|
|
132
|
+
decode(state) {
|
|
116
133
|
const r0 = c.buffer.decode(state)
|
|
117
134
|
|
|
118
135
|
return {
|
|
@@ -121,49 +138,63 @@ const encoding4 = {
|
|
|
121
138
|
}
|
|
122
139
|
}
|
|
123
140
|
|
|
124
|
-
|
|
141
|
+
// @autopass/del-mirror
|
|
142
|
+
const encoding6 = encoding1
|
|
143
|
+
|
|
144
|
+
function setVersion(v) {
|
|
125
145
|
version = v
|
|
126
146
|
}
|
|
127
147
|
|
|
128
|
-
function encode
|
|
148
|
+
function encode(name, value, v = VERSION) {
|
|
129
149
|
version = v
|
|
130
150
|
return c.encode(getEncoding(name), value)
|
|
131
151
|
}
|
|
132
152
|
|
|
133
|
-
function decode
|
|
153
|
+
function decode(name, buffer, v = VERSION) {
|
|
134
154
|
version = v
|
|
135
155
|
return c.decode(getEncoding(name), buffer)
|
|
136
156
|
}
|
|
137
157
|
|
|
138
|
-
function getEnum
|
|
158
|
+
function getEnum(name) {
|
|
139
159
|
switch (name) {
|
|
140
|
-
default:
|
|
160
|
+
default:
|
|
161
|
+
throw new Error('Enum not found ' + name)
|
|
141
162
|
}
|
|
142
163
|
}
|
|
143
164
|
|
|
144
|
-
function getEncoding
|
|
165
|
+
function getEncoding(name) {
|
|
145
166
|
switch (name) {
|
|
146
|
-
case '@autopass/records':
|
|
147
|
-
|
|
148
|
-
case '@autopass/
|
|
149
|
-
|
|
150
|
-
case '@autopass/
|
|
151
|
-
|
|
167
|
+
case '@autopass/records':
|
|
168
|
+
return encoding0
|
|
169
|
+
case '@autopass/mirrors':
|
|
170
|
+
return encoding1
|
|
171
|
+
case '@autopass/writer':
|
|
172
|
+
return encoding2
|
|
173
|
+
case '@autopass/delete':
|
|
174
|
+
return encoding3
|
|
175
|
+
case '@autopass/invite':
|
|
176
|
+
return encoding4
|
|
177
|
+
case '@autopass/del-invite':
|
|
178
|
+
return encoding5
|
|
179
|
+
case '@autopass/del-mirror':
|
|
180
|
+
return encoding6
|
|
181
|
+
default:
|
|
182
|
+
throw new Error('Encoder not found ' + name)
|
|
152
183
|
}
|
|
153
184
|
}
|
|
154
185
|
|
|
155
|
-
function getStruct
|
|
186
|
+
function getStruct(name, v = VERSION) {
|
|
156
187
|
const enc = getEncoding(name)
|
|
157
188
|
return {
|
|
158
|
-
preencode
|
|
189
|
+
preencode(state, m) {
|
|
159
190
|
version = v
|
|
160
191
|
enc.preencode(state, m)
|
|
161
192
|
},
|
|
162
|
-
encode
|
|
193
|
+
encode(state, m) {
|
|
163
194
|
version = v
|
|
164
195
|
enc.encode(state, m)
|
|
165
196
|
},
|
|
166
|
-
decode
|
|
197
|
+
decode(state) {
|
|
167
198
|
version = v
|
|
168
199
|
return enc.decode(state)
|
|
169
200
|
}
|
|
@@ -172,4 +203,13 @@ function getStruct (name, v = VERSION) {
|
|
|
172
203
|
|
|
173
204
|
const resolveStruct = getStruct // compat
|
|
174
205
|
|
|
175
|
-
module.exports = {
|
|
206
|
+
module.exports = {
|
|
207
|
+
resolveStruct,
|
|
208
|
+
getStruct,
|
|
209
|
+
getEnum,
|
|
210
|
+
getEncoding,
|
|
211
|
+
encode,
|
|
212
|
+
decode,
|
|
213
|
+
setVersion,
|
|
214
|
+
version
|
|
215
|
+
}
|
package/spec/schema/schema.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version":
|
|
2
|
+
"version": 1,
|
|
3
3
|
"schema": [
|
|
4
4
|
{
|
|
5
5
|
"name": "records",
|
|
@@ -23,7 +23,21 @@
|
|
|
23
23
|
"name": "file",
|
|
24
24
|
"required": false,
|
|
25
25
|
"type": "buffer",
|
|
26
|
-
"version":
|
|
26
|
+
"version": 1
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "mirrors",
|
|
32
|
+
"namespace": "autopass",
|
|
33
|
+
"compact": false,
|
|
34
|
+
"flagsPosition": -1,
|
|
35
|
+
"fields": [
|
|
36
|
+
{
|
|
37
|
+
"name": "key",
|
|
38
|
+
"required": true,
|
|
39
|
+
"type": "fixed32",
|
|
40
|
+
"version": 1
|
|
27
41
|
}
|
|
28
42
|
]
|
|
29
43
|
},
|
|
@@ -100,6 +114,20 @@
|
|
|
100
114
|
"version": 1
|
|
101
115
|
}
|
|
102
116
|
]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"name": "del-mirror",
|
|
120
|
+
"namespace": "autopass",
|
|
121
|
+
"compact": false,
|
|
122
|
+
"flagsPosition": -1,
|
|
123
|
+
"fields": [
|
|
124
|
+
{
|
|
125
|
+
"name": "key",
|
|
126
|
+
"required": true,
|
|
127
|
+
"type": "fixed32",
|
|
128
|
+
"version": 1
|
|
129
|
+
}
|
|
130
|
+
]
|
|
103
131
|
}
|
|
104
132
|
]
|
|
105
|
-
}
|
|
133
|
+
}
|
package/test.js
CHANGED
|
@@ -10,7 +10,7 @@ test('basic', async function (t) {
|
|
|
10
10
|
await a.add('hello', 'world')
|
|
11
11
|
|
|
12
12
|
t.ok(a.base.encryptionKey)
|
|
13
|
-
t.is(await a.get('hello'), 'world')
|
|
13
|
+
t.is((await a.get('hello')).value, 'world')
|
|
14
14
|
|
|
15
15
|
await a.close()
|
|
16
16
|
})
|
|
@@ -23,11 +23,13 @@ test('invites', async function (t) {
|
|
|
23
23
|
const a = await create(t, { bootstrap: tn.bootstrap })
|
|
24
24
|
t.teardown(() => {
|
|
25
25
|
a.close()
|
|
26
|
-
a.removeListener('update', onUpdate)
|
|
27
26
|
})
|
|
28
27
|
|
|
29
28
|
const onUpdate = function () {
|
|
30
|
-
if (a.base.system.members === 2)
|
|
29
|
+
if (a.base.system.members === 2) {
|
|
30
|
+
t.pass('a has two members')
|
|
31
|
+
a.removeListener('update', onUpdate)
|
|
32
|
+
}
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
a.on('update', onUpdate)
|
|
@@ -53,11 +55,13 @@ test('invites', async function (t) {
|
|
|
53
55
|
const a = await create(t, { bootstrap: tn.bootstrap })
|
|
54
56
|
t.teardown(() => {
|
|
55
57
|
a.close()
|
|
56
|
-
a.removeListener('update', updateListener) // Remove the listener in teardown
|
|
57
58
|
})
|
|
58
59
|
|
|
59
60
|
const updateListener = function () {
|
|
60
|
-
if (a.base.system.members === 2)
|
|
61
|
+
if (a.base.system.members === 2) {
|
|
62
|
+
t.pass('a has two members')
|
|
63
|
+
a.removeListener('update', updateListener) // Remove the listener in teardown
|
|
64
|
+
}
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
a.on('update', updateListener)
|
|
@@ -75,14 +79,61 @@ test('invites', async function (t) {
|
|
|
75
79
|
})
|
|
76
80
|
})
|
|
77
81
|
|
|
78
|
-
async function
|
|
82
|
+
test('suspend and resume', async function (t) {
|
|
83
|
+
t.plan(3)
|
|
84
|
+
|
|
85
|
+
const tn = await testnet(2, t)
|
|
86
|
+
|
|
87
|
+
const a = await create(t, { bootstrap: tn.bootstrap })
|
|
88
|
+
const inv = await a.createInvite()
|
|
89
|
+
t.teardown(() => a.close())
|
|
90
|
+
|
|
91
|
+
const p = await pair(t, inv, { bootstrap: tn.bootstrap })
|
|
92
|
+
const b = await p.finished()
|
|
93
|
+
await b.ready()
|
|
94
|
+
t.teardown(() => b.close())
|
|
95
|
+
|
|
96
|
+
await new Promise((resolve) => {
|
|
97
|
+
const check = () => {
|
|
98
|
+
if (a.swarm.peers.size > 0 && b.swarm.peers.size > 0) {
|
|
99
|
+
resolve()
|
|
100
|
+
} else {
|
|
101
|
+
setTimeout(check, 100)
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
check()
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
t.ok(a.swarm.peers.size > 0, 'a has peers before suspend')
|
|
108
|
+
|
|
109
|
+
await a.suspend()
|
|
110
|
+
|
|
111
|
+
t.is(a.swarm.peers.size, 0, 'a has 0 peers after suspend')
|
|
112
|
+
|
|
113
|
+
await a.resume()
|
|
114
|
+
|
|
115
|
+
await new Promise((resolve) => {
|
|
116
|
+
const check = () => {
|
|
117
|
+
if (a.swarm.peers.size > 0) {
|
|
118
|
+
resolve()
|
|
119
|
+
} else {
|
|
120
|
+
setTimeout(check, 100)
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
check()
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
t.ok(a.swarm.peers.size > 0, 'a has peers after resume')
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
async function create(t, opts) {
|
|
79
130
|
const dir = await tmp(t)
|
|
80
131
|
const a = new Autopass(new Corestore(dir), opts)
|
|
81
132
|
await a.ready()
|
|
82
133
|
return a
|
|
83
134
|
}
|
|
84
135
|
|
|
85
|
-
async function pair
|
|
136
|
+
async function pair(t, inv, opts) {
|
|
86
137
|
const dir = await tmp(t)
|
|
87
138
|
const a = Autopass.pair(new Corestore(dir), inv, opts)
|
|
88
139
|
return a
|