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.
@@ -1,55 +1,72 @@
1
1
  // This file is autogenerated by the hyperschema compiler
2
- // Schema Version: 2
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 (state, m) {
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 (version >= 2 && m.file) c.buffer.preencode(state, m.file)
21
+ if (m.file) c.buffer.preencode(state, m.file)
20
22
  },
21
- encode (state, m) {
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 (version >= 2 && m.file) c.buffer.encode(state, m.file)
30
+ if (m.file) c.buffer.encode(state, m.file)
31
31
  },
32
- decode (state) {
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: (version >= 2 && (flags & 2) !== 0) ? c.buffer.decode(state) : null
39
+ file: (flags & 2) !== 0 ? c.buffer.decode(state) : null
40
40
  }
41
41
  }
42
42
  }
43
43
 
44
- // @autopass/writer
44
+ // @autopass/mirrors
45
45
  const encoding1 = {
46
- preencode (state, m) {
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 (state, m) {
66
+ encode(state, m) {
50
67
  c.buffer.encode(state, m.key)
51
68
  },
52
- decode (state) {
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 encoding2 = {
63
- preencode (state, m) {
79
+ const encoding3 = {
80
+ preencode(state, m) {
64
81
  c.string.preencode(state, m.key)
65
82
  },
66
- encode (state, m) {
83
+ encode(state, m) {
67
84
  c.string.encode(state, m.key)
68
85
  },
69
- decode (state) {
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 encoding3 = {
80
- preencode (state, m) {
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 (state, m) {
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 (state) {
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 encoding4 = {
109
- preencode (state, m) {
125
+ const encoding5 = {
126
+ preencode(state, m) {
110
127
  c.buffer.preencode(state, m.id)
111
128
  },
112
- encode (state, m) {
129
+ encode(state, m) {
113
130
  c.buffer.encode(state, m.id)
114
131
  },
115
- decode (state) {
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
- function setVersion (v) {
141
+ // @autopass/del-mirror
142
+ const encoding6 = encoding1
143
+
144
+ function setVersion(v) {
125
145
  version = v
126
146
  }
127
147
 
128
- function encode (name, value, v = VERSION) {
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 (name, buffer, v = VERSION) {
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 (name) {
158
+ function getEnum(name) {
139
159
  switch (name) {
140
- default: throw new Error('Enum not found ' + name)
160
+ default:
161
+ throw new Error('Enum not found ' + name)
141
162
  }
142
163
  }
143
164
 
144
- function getEncoding (name) {
165
+ function getEncoding(name) {
145
166
  switch (name) {
146
- case '@autopass/records': return encoding0
147
- case '@autopass/writer': return encoding1
148
- case '@autopass/delete': return encoding2
149
- case '@autopass/invite': return encoding3
150
- case '@autopass/del-invite': return encoding4
151
- default: throw new Error('Encoder not found ' + name)
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 (name, v = VERSION) {
186
+ function getStruct(name, v = VERSION) {
156
187
  const enc = getEncoding(name)
157
188
  return {
158
- preencode (state, m) {
189
+ preencode(state, m) {
159
190
  version = v
160
191
  enc.preencode(state, m)
161
192
  },
162
- encode (state, m) {
193
+ encode(state, m) {
163
194
  version = v
164
195
  enc.encode(state, m)
165
196
  },
166
- decode (state) {
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 = { resolveStruct, getStruct, getEnum, getEncoding, encode, decode, setVersion, version }
206
+ module.exports = {
207
+ resolveStruct,
208
+ getStruct,
209
+ getEnum,
210
+ getEncoding,
211
+ encode,
212
+ decode,
213
+ setVersion,
214
+ version
215
+ }
@@ -1,55 +1,72 @@
1
1
  // This file is autogenerated by the hyperschema compiler
2
- // Schema Version: 2
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 (state, m) {
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 (version >= 2 && m.file) c.buffer.preencode(state, m.file)
21
+ if (m.file) c.buffer.preencode(state, m.file)
20
22
  },
21
- encode (state, m) {
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 (version >= 2 && m.file) c.buffer.encode(state, m.file)
30
+ if (m.file) c.buffer.encode(state, m.file)
31
31
  },
32
- decode (state) {
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: (version >= 2 && (flags & 2) !== 0) ? c.buffer.decode(state) : null
39
+ file: (flags & 2) !== 0 ? c.buffer.decode(state) : null
40
40
  }
41
41
  }
42
42
  }
43
43
 
44
- // @autopass/writer
44
+ // @autopass/mirrors
45
45
  const encoding1 = {
46
- preencode (state, m) {
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 (state, m) {
66
+ encode(state, m) {
50
67
  c.buffer.encode(state, m.key)
51
68
  },
52
- decode (state) {
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 encoding2 = {
63
- preencode (state, m) {
79
+ const encoding3 = {
80
+ preencode(state, m) {
64
81
  c.string.preencode(state, m.key)
65
82
  },
66
- encode (state, m) {
83
+ encode(state, m) {
67
84
  c.string.encode(state, m.key)
68
85
  },
69
- decode (state) {
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 encoding3 = {
80
- preencode (state, m) {
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 (state, m) {
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 (state) {
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 encoding4 = {
109
- preencode (state, m) {
125
+ const encoding5 = {
126
+ preencode(state, m) {
110
127
  c.buffer.preencode(state, m.id)
111
128
  },
112
- encode (state, m) {
129
+ encode(state, m) {
113
130
  c.buffer.encode(state, m.id)
114
131
  },
115
- decode (state) {
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
- function setVersion (v) {
141
+ // @autopass/del-mirror
142
+ const encoding6 = encoding1
143
+
144
+ function setVersion(v) {
125
145
  version = v
126
146
  }
127
147
 
128
- function encode (name, value, v = VERSION) {
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 (name, buffer, v = VERSION) {
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 (name) {
158
+ function getEnum(name) {
139
159
  switch (name) {
140
- default: throw new Error('Enum not found ' + name)
160
+ default:
161
+ throw new Error('Enum not found ' + name)
141
162
  }
142
163
  }
143
164
 
144
- function getEncoding (name) {
165
+ function getEncoding(name) {
145
166
  switch (name) {
146
- case '@autopass/records': return encoding0
147
- case '@autopass/writer': return encoding1
148
- case '@autopass/delete': return encoding2
149
- case '@autopass/invite': return encoding3
150
- case '@autopass/del-invite': return encoding4
151
- default: throw new Error('Encoder not found ' + name)
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 (name, v = VERSION) {
186
+ function getStruct(name, v = VERSION) {
156
187
  const enc = getEncoding(name)
157
188
  return {
158
- preencode (state, m) {
189
+ preencode(state, m) {
159
190
  version = v
160
191
  enc.preencode(state, m)
161
192
  },
162
- encode (state, m) {
193
+ encode(state, m) {
163
194
  version = v
164
195
  enc.encode(state, m)
165
196
  },
166
- decode (state) {
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 = { resolveStruct, getStruct, getEnum, getEncoding, encode, decode, setVersion, version }
206
+ module.exports = {
207
+ resolveStruct,
208
+ getStruct,
209
+ getEnum,
210
+ getEncoding,
211
+ encode,
212
+ decode,
213
+ setVersion,
214
+ version
215
+ }
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": 2,
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": 2
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) t.pass('a has two members')
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) t.pass('a has two members')
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 create (t, opts) {
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 (t, inv, opts) {
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