autopass 2.0.0 → 2.2.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/README.md +16 -0
- package/example.mjs +1 -2
- package/index.js +24 -0
- package/package.json +19 -7
- package/schema.js +25 -0
- package/spec/db/db.json +13 -0
- package/spec/db/index.js +58 -1
- package/spec/db/messages.js +60 -16
- package/spec/hyperdispatch/dispatch.json +6 -0
- package/spec/hyperdispatch/index.js +15 -1
- package/spec/hyperdispatch/messages.js +28 -5
- package/spec/schema/index.js +28 -5
- package/spec/schema/schema.json +21 -1
package/README.md
CHANGED
|
@@ -6,6 +6,9 @@ Distributed notes/password manager
|
|
|
6
6
|
npm install autopass
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
+
> [!NOTE]
|
|
10
|
+
> Autopass needs Corestore 7, our latest major version that is backed by RocksDB for storage and atomicity.
|
|
11
|
+
|
|
9
12
|
## Usage
|
|
10
13
|
|
|
11
14
|
First choose if you wanna pair or make a new instance.
|
|
@@ -56,6 +59,10 @@ Triggered when it updates, ie something added/removed an entry
|
|
|
56
59
|
|
|
57
60
|
Get an entry.
|
|
58
61
|
|
|
62
|
+
#### `value = await pass.getFile(name)`
|
|
63
|
+
|
|
64
|
+
Get a file.
|
|
65
|
+
|
|
59
66
|
#### `stream = pass.list()`
|
|
60
67
|
|
|
61
68
|
Get all entries.
|
|
@@ -64,6 +71,11 @@ Get all entries.
|
|
|
64
71
|
|
|
65
72
|
Add new entry
|
|
66
73
|
|
|
74
|
+
#### `await pass.addFIle(name, buffer)`
|
|
75
|
+
|
|
76
|
+
Add new file
|
|
77
|
+
|
|
78
|
+
|
|
67
79
|
#### `await pass.remove(key)`
|
|
68
80
|
|
|
69
81
|
Remove an entry.
|
|
@@ -84,6 +96,10 @@ Get the local writer key.
|
|
|
84
96
|
|
|
85
97
|
Get invite to add a writer.
|
|
86
98
|
|
|
99
|
+
#### `await deleteInvite()`
|
|
100
|
+
|
|
101
|
+
Delete the current invite.
|
|
102
|
+
|
|
87
103
|
#### `await pass.ready()`
|
|
88
104
|
|
|
89
105
|
Wait for the pass to load fully
|
package/example.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Autopass from './index.js'
|
|
2
2
|
import Corestore from 'corestore'
|
|
3
|
-
|
|
3
|
+
import process from 'process'
|
|
4
4
|
const store = new Corestore('example/' + process.argv[2])
|
|
5
5
|
|
|
6
6
|
let pass = null
|
|
@@ -17,7 +17,6 @@ if (pass.base.writable) {
|
|
|
17
17
|
const inv = await pass.createInvite()
|
|
18
18
|
console.log('invite', inv)
|
|
19
19
|
}
|
|
20
|
-
|
|
21
20
|
onupdate()
|
|
22
21
|
pass.on('update', onupdate)
|
|
23
22
|
|
package/index.js
CHANGED
|
@@ -135,6 +135,10 @@ class Autopass extends ReadyResource {
|
|
|
135
135
|
await context.view.insert('@autopass/invite', data)
|
|
136
136
|
})
|
|
137
137
|
|
|
138
|
+
this.router.add('@autopass/del-invite', async (data, context) => {
|
|
139
|
+
await context.view.delete('@autopass/invite', { id: data.id })
|
|
140
|
+
})
|
|
141
|
+
|
|
138
142
|
this._boot(opts)
|
|
139
143
|
this.ready().catch(noop)
|
|
140
144
|
}
|
|
@@ -215,6 +219,14 @@ class Autopass extends ReadyResource {
|
|
|
215
219
|
return z32.encode(record.invite)
|
|
216
220
|
}
|
|
217
221
|
|
|
222
|
+
async deleteInvite () {
|
|
223
|
+
if (this.opened === false) await this.ready()
|
|
224
|
+
const existing = await this.base.view.findOne('@autopass/invite', {})
|
|
225
|
+
if (existing) {
|
|
226
|
+
await this.base.append(dispatch('@autopass/del-invite', existing))
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
218
230
|
list (opts) {
|
|
219
231
|
return this.base.view.find('@autopass/records', {})
|
|
220
232
|
}
|
|
@@ -275,6 +287,18 @@ class Autopass extends ReadyResource {
|
|
|
275
287
|
await this.base.append(dispatch('@autopass/put', { key, value }))
|
|
276
288
|
}
|
|
277
289
|
|
|
290
|
+
async addFile (key, file) {
|
|
291
|
+
await this.base.append(dispatch('@autopass/put', { key, file }))
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
async getFile (key) {
|
|
295
|
+
const data = await this.base.view.get('@autopass/records', { key })
|
|
296
|
+
if (data === null) {
|
|
297
|
+
return null
|
|
298
|
+
}
|
|
299
|
+
return data.file
|
|
300
|
+
}
|
|
301
|
+
|
|
278
302
|
async remove (key) {
|
|
279
303
|
await this.base.append(dispatch('@autopass/del', { key }))
|
|
280
304
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "autopass",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "standard && brittle test.js"
|
|
@@ -8,23 +8,35 @@
|
|
|
8
8
|
"author": "Holepunch Inc",
|
|
9
9
|
"license": "Apache-2.0",
|
|
10
10
|
"description": "",
|
|
11
|
+
"imports": {
|
|
12
|
+
"fs": {
|
|
13
|
+
"bare": "bare-fs",
|
|
14
|
+
"default": "fs"
|
|
15
|
+
},
|
|
16
|
+
"process": {
|
|
17
|
+
"bare": "bare-process",
|
|
18
|
+
"default": "process"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
11
21
|
"devDependencies": {
|
|
12
22
|
"brittle": "^3.7.0",
|
|
13
|
-
"corestore": "^6.18.4",
|
|
14
23
|
"hyperdht": "^6.20.1",
|
|
15
24
|
"standard": "^17.1.2",
|
|
16
25
|
"test-tmp": "^1.3.0"
|
|
17
26
|
},
|
|
18
27
|
"dependencies": {
|
|
19
|
-
"autobase": "^
|
|
28
|
+
"autobase": "^7.0.34",
|
|
20
29
|
"b4a": "^1.6.7",
|
|
30
|
+
"bare-fs": "^4.1.2",
|
|
31
|
+
"bare-process": "^4.2.1",
|
|
21
32
|
"blind-pairing": "^2.3.1",
|
|
22
33
|
"compact-encoding": "^2.16.0",
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
34
|
+
"corestore": "^7.0.7",
|
|
35
|
+
"hyperbee": "^2.22.2",
|
|
36
|
+
"hypercore": "^11.0.9",
|
|
37
|
+
"hyperdb": "^4.9.4",
|
|
26
38
|
"hyperdispatch": "^1.0.2",
|
|
27
|
-
"hyperschema": "^1.
|
|
39
|
+
"hyperschema": "^1.10.4",
|
|
28
40
|
"hyperswarm": "^4.8.4",
|
|
29
41
|
"ready-resource": "^1.1.1"
|
|
30
42
|
}
|
package/schema.js
CHANGED
|
@@ -17,6 +17,10 @@ template.register({
|
|
|
17
17
|
name: 'value',
|
|
18
18
|
type: 'string',
|
|
19
19
|
required: false
|
|
20
|
+
}, {
|
|
21
|
+
name: 'file',
|
|
22
|
+
type: 'buffer',
|
|
23
|
+
required: false
|
|
20
24
|
}
|
|
21
25
|
]
|
|
22
26
|
})
|
|
@@ -65,6 +69,17 @@ template.register({
|
|
|
65
69
|
}
|
|
66
70
|
]
|
|
67
71
|
})
|
|
72
|
+
|
|
73
|
+
template.register({
|
|
74
|
+
name: 'del-invite',
|
|
75
|
+
compact: false,
|
|
76
|
+
fields: [{
|
|
77
|
+
name: 'id',
|
|
78
|
+
type: 'buffer',
|
|
79
|
+
required: true
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
})
|
|
68
83
|
Hyperschema.toDisk(autopass)
|
|
69
84
|
|
|
70
85
|
const dbTemplate = HyperdbBuilder.from('./spec/schema', './spec/db')
|
|
@@ -91,6 +106,12 @@ blobs.collections.register({
|
|
|
91
106
|
key: ['key']
|
|
92
107
|
})
|
|
93
108
|
|
|
109
|
+
blobs.collections.register({
|
|
110
|
+
name: 'del-invite',
|
|
111
|
+
schema: '@autopass/del-invite',
|
|
112
|
+
key: ['id']
|
|
113
|
+
})
|
|
114
|
+
|
|
94
115
|
HyperdbBuilder.toDisk(dbTemplate)
|
|
95
116
|
|
|
96
117
|
const hyperdispatch = Hyperdispatch.from('./spec/schema', './spec/hyperdispatch')
|
|
@@ -115,4 +136,8 @@ namespace.register(({
|
|
|
115
136
|
name: 'add-invite',
|
|
116
137
|
requestType: '@autopass/invite'
|
|
117
138
|
}))
|
|
139
|
+
namespace.register(({
|
|
140
|
+
name: 'del-invite',
|
|
141
|
+
requestType: '@autopass/del-invite'
|
|
142
|
+
}))
|
|
118
143
|
Hyperdispatch.toDisk(hyperdispatch)
|
package/spec/db/db.json
CHANGED
|
@@ -53,6 +53,19 @@
|
|
|
53
53
|
"key"
|
|
54
54
|
],
|
|
55
55
|
"trigger": null
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"name": "del-invite",
|
|
59
|
+
"namespace": "autopass",
|
|
60
|
+
"id": 4,
|
|
61
|
+
"type": 1,
|
|
62
|
+
"indexes": [],
|
|
63
|
+
"schema": "@autopass/del-invite",
|
|
64
|
+
"derived": false,
|
|
65
|
+
"key": [
|
|
66
|
+
"id"
|
|
67
|
+
],
|
|
68
|
+
"trigger": null
|
|
56
69
|
}
|
|
57
70
|
]
|
|
58
71
|
}
|
package/spec/db/index.js
CHANGED
|
@@ -224,11 +224,67 @@ const collection3 = {
|
|
|
224
224
|
indexes: []
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
+
// '@autopass/del-invite' collection key
|
|
228
|
+
const collection4_key = new IndexEncoder([
|
|
229
|
+
IndexEncoder.BUFFER
|
|
230
|
+
], { prefix: 4 })
|
|
231
|
+
|
|
232
|
+
function collection4_indexify (record) {
|
|
233
|
+
const a = record.id
|
|
234
|
+
return a === undefined ? [] : [a]
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// '@autopass/del-invite' value encoding
|
|
238
|
+
const collection4_enc = getEncoding('@autopass/del-invite/hyperdb#4')
|
|
239
|
+
|
|
240
|
+
// '@autopass/del-invite' reconstruction function
|
|
241
|
+
function collection4_reconstruct (version, keyBuf, valueBuf) {
|
|
242
|
+
const key = collection4_key.decode(keyBuf)
|
|
243
|
+
setVersion(version)
|
|
244
|
+
const record = c.decode(collection4_enc, valueBuf)
|
|
245
|
+
record.id = key[0]
|
|
246
|
+
return record
|
|
247
|
+
}
|
|
248
|
+
// '@autopass/del-invite' key reconstruction function
|
|
249
|
+
function collection4_reconstruct_key (keyBuf) {
|
|
250
|
+
const key = collection4_key.decode(keyBuf)
|
|
251
|
+
return {
|
|
252
|
+
id: key[0]
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// '@autopass/del-invite'
|
|
257
|
+
const collection4 = {
|
|
258
|
+
name: '@autopass/del-invite',
|
|
259
|
+
id: 4,
|
|
260
|
+
encodeKey (record) {
|
|
261
|
+
const key = [record.id]
|
|
262
|
+
return collection4_key.encode(key)
|
|
263
|
+
},
|
|
264
|
+
encodeKeyRange ({ gt, lt, gte, lte } = {}) {
|
|
265
|
+
return collection4_key.encodeRange({
|
|
266
|
+
gt: gt ? collection4_indexify(gt) : null,
|
|
267
|
+
lt: lt ? collection4_indexify(lt) : null,
|
|
268
|
+
gte: gte ? collection4_indexify(gte) : null,
|
|
269
|
+
lte: lte ? collection4_indexify(lte) : null
|
|
270
|
+
})
|
|
271
|
+
},
|
|
272
|
+
encodeValue (version, record) {
|
|
273
|
+
setVersion(version)
|
|
274
|
+
return c.encode(collection4_enc, record)
|
|
275
|
+
},
|
|
276
|
+
trigger: null,
|
|
277
|
+
reconstruct: collection4_reconstruct,
|
|
278
|
+
reconstructKey: collection4_reconstruct_key,
|
|
279
|
+
indexes: []
|
|
280
|
+
}
|
|
281
|
+
|
|
227
282
|
const collections = [
|
|
228
283
|
collection0,
|
|
229
284
|
collection1,
|
|
230
285
|
collection2,
|
|
231
|
-
collection3
|
|
286
|
+
collection3,
|
|
287
|
+
collection4
|
|
232
288
|
]
|
|
233
289
|
|
|
234
290
|
const indexes = [
|
|
@@ -242,6 +298,7 @@ function resolveCollection (name) {
|
|
|
242
298
|
case '@autopass/invite': return collection1
|
|
243
299
|
case '@autopass/writer': return collection2
|
|
244
300
|
case '@autopass/delete': return collection3
|
|
301
|
+
case '@autopass/del-invite': return collection4
|
|
245
302
|
default: return null
|
|
246
303
|
}
|
|
247
304
|
}
|
package/spec/db/messages.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// This file is autogenerated by the hyperschema compiler
|
|
2
|
-
// Schema Version:
|
|
2
|
+
// Schema Version: 2
|
|
3
3
|
/* eslint-disable camelcase */
|
|
4
4
|
/* eslint-disable quotes */
|
|
5
5
|
|
|
6
|
-
const VERSION =
|
|
6
|
+
const VERSION = 2
|
|
7
7
|
const { c } = require('hyperschema/runtime')
|
|
8
8
|
|
|
9
9
|
// eslint-disable-next-line no-unused-vars
|
|
@@ -13,17 +13,21 @@ let version = VERSION
|
|
|
13
13
|
const encoding0 = {
|
|
14
14
|
preencode (state, m) {
|
|
15
15
|
c.string.preencode(state, m.key)
|
|
16
|
-
state.end++ // max flag is
|
|
16
|
+
state.end++ // max flag is 2 so always one byte
|
|
17
17
|
|
|
18
18
|
if (m.value) c.string.preencode(state, m.value)
|
|
19
|
+
if (version >= 2 && m.file) c.buffer.preencode(state, m.file)
|
|
19
20
|
},
|
|
20
21
|
encode (state, m) {
|
|
21
|
-
const flags =
|
|
22
|
+
const flags =
|
|
23
|
+
(m.value ? 1 : 0) |
|
|
24
|
+
((version >= 2 && m.file) ? 2 : 0)
|
|
22
25
|
|
|
23
26
|
c.string.encode(state, m.key)
|
|
24
27
|
c.uint.encode(state, flags)
|
|
25
28
|
|
|
26
29
|
if (m.value) c.string.encode(state, m.value)
|
|
30
|
+
if (version >= 2 && m.file) c.buffer.encode(state, m.file)
|
|
27
31
|
},
|
|
28
32
|
decode (state) {
|
|
29
33
|
const r0 = c.string.decode(state)
|
|
@@ -31,7 +35,8 @@ const encoding0 = {
|
|
|
31
35
|
|
|
32
36
|
return {
|
|
33
37
|
key: r0,
|
|
34
|
-
value: (flags & 1) !== 0 ? c.string.decode(state) : null
|
|
38
|
+
value: (flags & 1) !== 0 ? c.string.decode(state) : null,
|
|
39
|
+
file: (version >= 2 && (flags & 2) !== 0) ? c.buffer.decode(state) : null
|
|
35
40
|
}
|
|
36
41
|
}
|
|
37
42
|
}
|
|
@@ -99,32 +104,54 @@ const encoding3 = {
|
|
|
99
104
|
}
|
|
100
105
|
}
|
|
101
106
|
|
|
102
|
-
// @autopass/
|
|
107
|
+
// @autopass/del-invite
|
|
103
108
|
const encoding4 = {
|
|
104
109
|
preencode (state, m) {
|
|
105
|
-
state.
|
|
110
|
+
c.buffer.preencode(state, m.id)
|
|
111
|
+
},
|
|
112
|
+
encode (state, m) {
|
|
113
|
+
c.buffer.encode(state, m.id)
|
|
114
|
+
},
|
|
115
|
+
decode (state) {
|
|
116
|
+
const r0 = c.buffer.decode(state)
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
id: r0
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// @autopass/records/hyperdb#0
|
|
125
|
+
const encoding5 = {
|
|
126
|
+
preencode (state, m) {
|
|
127
|
+
state.end++ // max flag is 2 so always one byte
|
|
106
128
|
|
|
107
129
|
if (m.value) c.string.preencode(state, m.value)
|
|
130
|
+
if (version >= 2 && m.file) c.buffer.preencode(state, m.file)
|
|
108
131
|
},
|
|
109
132
|
encode (state, m) {
|
|
110
|
-
const flags =
|
|
133
|
+
const flags =
|
|
134
|
+
(m.value ? 1 : 0) |
|
|
135
|
+
((version >= 2 && m.file) ? 2 : 0)
|
|
111
136
|
|
|
112
137
|
c.uint.encode(state, flags)
|
|
113
138
|
|
|
114
139
|
if (m.value) c.string.encode(state, m.value)
|
|
140
|
+
if (version >= 2 && m.file) c.buffer.encode(state, m.file)
|
|
115
141
|
},
|
|
116
142
|
decode (state) {
|
|
117
143
|
const flags = c.uint.decode(state)
|
|
118
144
|
|
|
119
145
|
return {
|
|
120
146
|
key: null,
|
|
121
|
-
value: (flags & 1) !== 0 ? c.string.decode(state) : null
|
|
147
|
+
value: (flags & 1) !== 0 ? c.string.decode(state) : null,
|
|
148
|
+
file: (version >= 2 && (flags & 2) !== 0) ? c.buffer.decode(state) : null
|
|
122
149
|
}
|
|
123
150
|
}
|
|
124
151
|
}
|
|
125
152
|
|
|
126
153
|
// @autopass/invite/hyperdb#1
|
|
127
|
-
const
|
|
154
|
+
const encoding6 = {
|
|
128
155
|
preencode (state, m) {
|
|
129
156
|
c.buffer.preencode(state, m.invite)
|
|
130
157
|
c.buffer.preencode(state, m.publicKey)
|
|
@@ -150,7 +177,7 @@ const encoding5 = {
|
|
|
150
177
|
}
|
|
151
178
|
|
|
152
179
|
// @autopass/writer/hyperdb#2
|
|
153
|
-
const
|
|
180
|
+
const encoding7 = {
|
|
154
181
|
preencode (state, m) {
|
|
155
182
|
|
|
156
183
|
},
|
|
@@ -165,7 +192,22 @@ const encoding6 = {
|
|
|
165
192
|
}
|
|
166
193
|
|
|
167
194
|
// @autopass/delete/hyperdb#3
|
|
168
|
-
const
|
|
195
|
+
const encoding8 = encoding7
|
|
196
|
+
|
|
197
|
+
// @autopass/del-invite/hyperdb#4
|
|
198
|
+
const encoding9 = {
|
|
199
|
+
preencode (state, m) {
|
|
200
|
+
|
|
201
|
+
},
|
|
202
|
+
encode (state, m) {
|
|
203
|
+
|
|
204
|
+
},
|
|
205
|
+
decode (state) {
|
|
206
|
+
return {
|
|
207
|
+
id: null
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
169
211
|
|
|
170
212
|
function setVersion (v) {
|
|
171
213
|
version = v
|
|
@@ -193,10 +235,12 @@ function getEncoding (name) {
|
|
|
193
235
|
case '@autopass/writer': return encoding1
|
|
194
236
|
case '@autopass/delete': return encoding2
|
|
195
237
|
case '@autopass/invite': return encoding3
|
|
196
|
-
case '@autopass/
|
|
197
|
-
case '@autopass/
|
|
198
|
-
case '@autopass/
|
|
199
|
-
case '@autopass/
|
|
238
|
+
case '@autopass/del-invite': return encoding4
|
|
239
|
+
case '@autopass/records/hyperdb#0': return encoding5
|
|
240
|
+
case '@autopass/invite/hyperdb#1': return encoding6
|
|
241
|
+
case '@autopass/writer/hyperdb#2': return encoding7
|
|
242
|
+
case '@autopass/delete/hyperdb#3': return encoding8
|
|
243
|
+
case '@autopass/del-invite/hyperdb#4': return encoding9
|
|
200
244
|
default: throw new Error('Encoder not found ' + name)
|
|
201
245
|
}
|
|
202
246
|
}
|
|
@@ -13,8 +13,9 @@ class Router {
|
|
|
13
13
|
this._handler2 = null
|
|
14
14
|
this._handler3 = null
|
|
15
15
|
this._handler4 = null
|
|
16
|
+
this._handler5 = null
|
|
16
17
|
|
|
17
|
-
this._missing =
|
|
18
|
+
this._missing = 6
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
add (name, handler) {
|
|
@@ -34,6 +35,9 @@ class Router {
|
|
|
34
35
|
case '@autopass/add-invite':
|
|
35
36
|
this._handler4 = handler
|
|
36
37
|
break
|
|
38
|
+
case '@autopass/del-invite':
|
|
39
|
+
this._handler5 = handler
|
|
40
|
+
break
|
|
37
41
|
default:
|
|
38
42
|
throw new Error('Cannot register a handler for a nonexistent route: ' + name)
|
|
39
43
|
}
|
|
@@ -46,6 +50,7 @@ class Router {
|
|
|
46
50
|
assert(this._handler2 !== null, 'Missing handler for "@autopass/put"')
|
|
47
51
|
assert(this._handler3 !== null, 'Missing handler for "@autopass/del"')
|
|
48
52
|
assert(this._handler4 !== null, 'Missing handler for "@autopass/add-invite"')
|
|
53
|
+
assert(this._handler5 !== null, 'Missing handler for "@autopass/del-invite"')
|
|
49
54
|
}
|
|
50
55
|
|
|
51
56
|
async dispatch (encoded, context) {
|
|
@@ -69,6 +74,8 @@ class Router {
|
|
|
69
74
|
return this._handler3(route3.enc.decode(state), context)
|
|
70
75
|
case 4:
|
|
71
76
|
return this._handler4(route4.enc.decode(state), context)
|
|
77
|
+
case 5:
|
|
78
|
+
return this._handler5(route5.enc.decode(state), context)
|
|
72
79
|
default:
|
|
73
80
|
throw new Error('Handler not found for ID:' + id)
|
|
74
81
|
}
|
|
@@ -116,6 +123,11 @@ const route4 = {
|
|
|
116
123
|
enc: getEncoding('@autopass/invite')
|
|
117
124
|
}
|
|
118
125
|
|
|
126
|
+
const route5 = {
|
|
127
|
+
id: 5,
|
|
128
|
+
enc: getEncoding('@autopass/del-invite')
|
|
129
|
+
}
|
|
130
|
+
|
|
119
131
|
function getEncoderAndId (name) {
|
|
120
132
|
switch (name) {
|
|
121
133
|
case '@autopass/remove-writer':
|
|
@@ -128,6 +140,8 @@ function getEncoderAndId (name) {
|
|
|
128
140
|
return route3
|
|
129
141
|
case '@autopass/add-invite':
|
|
130
142
|
return route4
|
|
143
|
+
case '@autopass/del-invite':
|
|
144
|
+
return route5
|
|
131
145
|
default:
|
|
132
146
|
throw new Error('Handler not found for name: ' + name)
|
|
133
147
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// This file is autogenerated by the hyperschema compiler
|
|
2
|
-
// Schema Version:
|
|
2
|
+
// Schema Version: 2
|
|
3
3
|
/* eslint-disable camelcase */
|
|
4
4
|
/* eslint-disable quotes */
|
|
5
5
|
|
|
6
|
-
const VERSION =
|
|
6
|
+
const VERSION = 2
|
|
7
7
|
const { c } = require('hyperschema/runtime')
|
|
8
8
|
|
|
9
9
|
// eslint-disable-next-line no-unused-vars
|
|
@@ -13,17 +13,21 @@ let version = VERSION
|
|
|
13
13
|
const encoding0 = {
|
|
14
14
|
preencode (state, m) {
|
|
15
15
|
c.string.preencode(state, m.key)
|
|
16
|
-
state.end++ // max flag is
|
|
16
|
+
state.end++ // max flag is 2 so always one byte
|
|
17
17
|
|
|
18
18
|
if (m.value) c.string.preencode(state, m.value)
|
|
19
|
+
if (version >= 2 && m.file) c.buffer.preencode(state, m.file)
|
|
19
20
|
},
|
|
20
21
|
encode (state, m) {
|
|
21
|
-
const flags =
|
|
22
|
+
const flags =
|
|
23
|
+
(m.value ? 1 : 0) |
|
|
24
|
+
((version >= 2 && m.file) ? 2 : 0)
|
|
22
25
|
|
|
23
26
|
c.string.encode(state, m.key)
|
|
24
27
|
c.uint.encode(state, flags)
|
|
25
28
|
|
|
26
29
|
if (m.value) c.string.encode(state, m.value)
|
|
30
|
+
if (version >= 2 && m.file) c.buffer.encode(state, m.file)
|
|
27
31
|
},
|
|
28
32
|
decode (state) {
|
|
29
33
|
const r0 = c.string.decode(state)
|
|
@@ -31,7 +35,8 @@ const encoding0 = {
|
|
|
31
35
|
|
|
32
36
|
return {
|
|
33
37
|
key: r0,
|
|
34
|
-
value: (flags & 1) !== 0 ? c.string.decode(state) : null
|
|
38
|
+
value: (flags & 1) !== 0 ? c.string.decode(state) : null,
|
|
39
|
+
file: (version >= 2 && (flags & 2) !== 0) ? c.buffer.decode(state) : null
|
|
35
40
|
}
|
|
36
41
|
}
|
|
37
42
|
}
|
|
@@ -99,6 +104,23 @@ const encoding3 = {
|
|
|
99
104
|
}
|
|
100
105
|
}
|
|
101
106
|
|
|
107
|
+
// @autopass/del-invite
|
|
108
|
+
const encoding4 = {
|
|
109
|
+
preencode (state, m) {
|
|
110
|
+
c.buffer.preencode(state, m.id)
|
|
111
|
+
},
|
|
112
|
+
encode (state, m) {
|
|
113
|
+
c.buffer.encode(state, m.id)
|
|
114
|
+
},
|
|
115
|
+
decode (state) {
|
|
116
|
+
const r0 = c.buffer.decode(state)
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
id: r0
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
102
124
|
function setVersion (v) {
|
|
103
125
|
version = v
|
|
104
126
|
}
|
|
@@ -125,6 +147,7 @@ function getEncoding (name) {
|
|
|
125
147
|
case '@autopass/writer': return encoding1
|
|
126
148
|
case '@autopass/delete': return encoding2
|
|
127
149
|
case '@autopass/invite': return encoding3
|
|
150
|
+
case '@autopass/del-invite': return encoding4
|
|
128
151
|
default: throw new Error('Encoder not found ' + name)
|
|
129
152
|
}
|
|
130
153
|
}
|
package/spec/schema/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// This file is autogenerated by the hyperschema compiler
|
|
2
|
-
// Schema Version:
|
|
2
|
+
// Schema Version: 2
|
|
3
3
|
/* eslint-disable camelcase */
|
|
4
4
|
/* eslint-disable quotes */
|
|
5
5
|
|
|
6
|
-
const VERSION =
|
|
6
|
+
const VERSION = 2
|
|
7
7
|
const { c } = require('hyperschema/runtime')
|
|
8
8
|
|
|
9
9
|
// eslint-disable-next-line no-unused-vars
|
|
@@ -13,17 +13,21 @@ let version = VERSION
|
|
|
13
13
|
const encoding0 = {
|
|
14
14
|
preencode (state, m) {
|
|
15
15
|
c.string.preencode(state, m.key)
|
|
16
|
-
state.end++ // max flag is
|
|
16
|
+
state.end++ // max flag is 2 so always one byte
|
|
17
17
|
|
|
18
18
|
if (m.value) c.string.preencode(state, m.value)
|
|
19
|
+
if (version >= 2 && m.file) c.buffer.preencode(state, m.file)
|
|
19
20
|
},
|
|
20
21
|
encode (state, m) {
|
|
21
|
-
const flags =
|
|
22
|
+
const flags =
|
|
23
|
+
(m.value ? 1 : 0) |
|
|
24
|
+
((version >= 2 && m.file) ? 2 : 0)
|
|
22
25
|
|
|
23
26
|
c.string.encode(state, m.key)
|
|
24
27
|
c.uint.encode(state, flags)
|
|
25
28
|
|
|
26
29
|
if (m.value) c.string.encode(state, m.value)
|
|
30
|
+
if (version >= 2 && m.file) c.buffer.encode(state, m.file)
|
|
27
31
|
},
|
|
28
32
|
decode (state) {
|
|
29
33
|
const r0 = c.string.decode(state)
|
|
@@ -31,7 +35,8 @@ const encoding0 = {
|
|
|
31
35
|
|
|
32
36
|
return {
|
|
33
37
|
key: r0,
|
|
34
|
-
value: (flags & 1) !== 0 ? c.string.decode(state) : null
|
|
38
|
+
value: (flags & 1) !== 0 ? c.string.decode(state) : null,
|
|
39
|
+
file: (version >= 2 && (flags & 2) !== 0) ? c.buffer.decode(state) : null
|
|
35
40
|
}
|
|
36
41
|
}
|
|
37
42
|
}
|
|
@@ -99,6 +104,23 @@ const encoding3 = {
|
|
|
99
104
|
}
|
|
100
105
|
}
|
|
101
106
|
|
|
107
|
+
// @autopass/del-invite
|
|
108
|
+
const encoding4 = {
|
|
109
|
+
preencode (state, m) {
|
|
110
|
+
c.buffer.preencode(state, m.id)
|
|
111
|
+
},
|
|
112
|
+
encode (state, m) {
|
|
113
|
+
c.buffer.encode(state, m.id)
|
|
114
|
+
},
|
|
115
|
+
decode (state) {
|
|
116
|
+
const r0 = c.buffer.decode(state)
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
id: r0
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
102
124
|
function setVersion (v) {
|
|
103
125
|
version = v
|
|
104
126
|
}
|
|
@@ -125,6 +147,7 @@ function getEncoding (name) {
|
|
|
125
147
|
case '@autopass/writer': return encoding1
|
|
126
148
|
case '@autopass/delete': return encoding2
|
|
127
149
|
case '@autopass/invite': return encoding3
|
|
150
|
+
case '@autopass/del-invite': return encoding4
|
|
128
151
|
default: throw new Error('Encoder not found ' + name)
|
|
129
152
|
}
|
|
130
153
|
}
|
package/spec/schema/schema.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version":
|
|
2
|
+
"version": 2,
|
|
3
3
|
"schema": [
|
|
4
4
|
{
|
|
5
5
|
"name": "records",
|
|
@@ -18,6 +18,12 @@
|
|
|
18
18
|
"required": false,
|
|
19
19
|
"type": "string",
|
|
20
20
|
"version": 1
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "file",
|
|
24
|
+
"required": false,
|
|
25
|
+
"type": "buffer",
|
|
26
|
+
"version": 2
|
|
21
27
|
}
|
|
22
28
|
]
|
|
23
29
|
},
|
|
@@ -80,6 +86,20 @@
|
|
|
80
86
|
"version": 1
|
|
81
87
|
}
|
|
82
88
|
]
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"name": "del-invite",
|
|
92
|
+
"namespace": "autopass",
|
|
93
|
+
"compact": false,
|
|
94
|
+
"flagsPosition": -1,
|
|
95
|
+
"fields": [
|
|
96
|
+
{
|
|
97
|
+
"name": "id",
|
|
98
|
+
"required": true,
|
|
99
|
+
"type": "buffer",
|
|
100
|
+
"version": 1
|
|
101
|
+
}
|
|
102
|
+
]
|
|
83
103
|
}
|
|
84
104
|
]
|
|
85
105
|
}
|