signify-ts 0.1.1 → 0.2.1
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 +96 -47
- package/dist/buffer-polyfill.d.ts +1 -0
- package/dist/exports.d.ts +40 -0
- package/dist/index.d.ts +4 -3
- package/dist/keri/app/aiding.d.ts +138 -0
- package/dist/keri/app/clienting.d.ts +182 -0
- package/dist/keri/app/contacting.d.ts +93 -0
- package/dist/keri/app/controller.d.ts +49 -0
- package/dist/keri/app/coring.d.ts +121 -0
- package/dist/keri/app/credentialing.d.ts +245 -0
- package/dist/keri/app/escrowing.d.ts +19 -0
- package/dist/keri/app/exchanging.d.ts +60 -0
- package/dist/keri/app/grouping.d.ts +44 -0
- package/dist/keri/app/habery.d.ts +48 -47
- package/dist/keri/app/notifying.d.ts +34 -0
- package/dist/keri/core/authing.d.ts +10 -9
- package/dist/keri/core/bexter.d.ts +7 -0
- package/dist/keri/core/cigar.d.ts +8 -8
- package/dist/keri/core/cipher.d.ts +5 -5
- package/dist/keri/core/core.d.ts +59 -53
- package/dist/keri/core/counter.d.ts +43 -43
- package/dist/keri/core/decrypter.d.ts +10 -10
- package/dist/keri/core/diger.d.ts +21 -21
- package/dist/keri/core/encrypter.d.ts +9 -9
- package/dist/keri/core/eventing.d.ts +54 -21
- package/dist/keri/core/httping.d.ts +44 -34
- package/dist/keri/core/indexer.d.ts +98 -88
- package/dist/keri/core/keeping.d.ts +103 -1
- package/dist/keri/core/kering.d.ts +5 -5
- package/dist/keri/core/manager.d.ts +174 -172
- package/dist/keri/core/matter.d.ts +116 -69
- package/dist/keri/core/number.d.ts +7 -6
- package/dist/keri/core/pather.d.ts +7 -0
- package/dist/keri/core/prefixer.d.ts +15 -15
- package/dist/keri/core/saider.d.ts +23 -23
- package/dist/keri/core/salter.d.ts +23 -23
- package/dist/keri/core/seqner.d.ts +15 -0
- package/dist/keri/core/serder.d.ts +31 -23
- package/dist/keri/core/siger.d.ts +18 -18
- package/dist/keri/core/signer.d.ts +34 -34
- package/dist/keri/core/tholder.d.ts +29 -14
- package/dist/keri/core/utils.d.ts +20 -15
- package/dist/keri/core/vdring.d.ts +16 -0
- package/dist/keri/core/verfer.d.ts +13 -12
- package/dist/keri/end/ending.d.ts +13 -13
- package/dist/math.d.ts +1 -0
- package/dist/ready.d.ts +1 -0
- package/dist/signify-ts.cjs +7842 -0
- package/dist/signify-ts.cjs.development.js +6369 -256
- package/dist/signify-ts.cjs.development.js.map +1 -1
- package/dist/signify-ts.cjs.map +7 -0
- package/dist/signify-ts.cjs.production.min.js +1 -1
- package/dist/signify-ts.cjs.production.min.js.map +1 -1
- package/dist/signify-ts.esm.js +6205 -229
- package/dist/signify-ts.esm.js.map +1 -1
- package/dist/signify-ts.mjs +7818 -0
- package/dist/signify-ts.mjs.map +7 -0
- package/package.json +49 -49
- package/src/buffer-polyfill.ts +5 -0
- package/src/exports.ts +44 -0
- package/src/index.ts +4 -5
- package/src/keri/app/aiding.ts +493 -0
- package/src/keri/app/clienting.ts +492 -0
- package/src/keri/app/contacting.ts +188 -0
- package/src/keri/app/controller.ts +372 -0
- package/src/keri/app/coring.ts +225 -0
- package/src/keri/app/credentialing.ts +841 -0
- package/src/keri/app/escrowing.ts +34 -0
- package/src/keri/app/exchanging.ts +220 -0
- package/src/keri/app/grouping.ts +90 -0
- package/src/keri/app/habery.ts +118 -85
- package/src/keri/app/notifying.ts +69 -0
- package/src/keri/core/authing.ts +73 -85
- package/src/keri/core/bexter.ts +138 -0
- package/src/keri/core/cigar.ts +10 -11
- package/src/keri/core/cipher.ts +23 -14
- package/src/keri/core/core.ts +223 -81
- package/src/keri/core/counter.ts +182 -116
- package/src/keri/core/decrypter.ts +48 -34
- package/src/keri/core/diger.ts +23 -22
- package/src/keri/core/encrypter.ts +37 -27
- package/src/keri/core/eventing.ts +468 -106
- package/src/keri/core/httping.ts +151 -105
- package/src/keri/core/indexer.ts +313 -211
- package/src/keri/core/keeping.ts +679 -3
- package/src/keri/core/kering.ts +4 -6
- package/src/keri/core/manager.ts +660 -499
- package/src/keri/core/matter.ts +382 -148
- package/src/keri/core/number.ts +56 -11
- package/src/keri/core/pather.ts +98 -0
- package/src/keri/core/prefixer.ts +122 -101
- package/src/keri/core/saider.ts +104 -76
- package/src/keri/core/salter.ts +71 -40
- package/src/keri/core/seqner.ts +46 -0
- package/src/keri/core/serder.ts +102 -38
- package/src/keri/core/siger.ts +19 -18
- package/src/keri/core/signer.ts +73 -53
- package/src/keri/core/tholder.ts +196 -30
- package/src/keri/core/utils.ts +121 -50
- package/src/keri/core/vdring.ts +94 -0
- package/src/keri/core/verfer.ts +22 -9
- package/src/keri/end/ending.ts +111 -101
- package/src/math.ts +3 -0
- package/src/ready.ts +5 -0
- package/dist/keri/app/accountant.d.ts +0 -10
- package/dist/keri/app/apping.d.ts +0 -1
- package/dist/keri/app/client.d.ts +0 -7
- package/dist/keri/app/signify.d.ts +0 -6
- package/src/keri/app/accountant.ts +0 -35
- package/src/keri/app/apping.ts +0 -12
- package/src/keri/app/client.ts +0 -30
- package/src/keri/app/signify.ts +0 -12
- package/src/keri/app/tsconfig.json +0 -100
- package/src/keri/core/tsconfig.json +0 -100
- package/src/keri/end/tsconfig.json +0 -100
|
@@ -1,219 +1,581 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import {
|
|
2
|
+
b,
|
|
3
|
+
concat,
|
|
4
|
+
Dict,
|
|
5
|
+
Ident,
|
|
6
|
+
Ilks,
|
|
7
|
+
Serials,
|
|
8
|
+
versify,
|
|
9
|
+
Version,
|
|
10
|
+
Versionage,
|
|
11
|
+
} from './core';
|
|
12
|
+
import { Tholder } from './tholder';
|
|
13
|
+
import { CesrNumber } from './number';
|
|
14
|
+
import { Prefixer } from './prefixer';
|
|
15
|
+
import { Serder } from './serder';
|
|
16
|
+
import { MtrDex, NonTransDex } from './matter';
|
|
17
|
+
import { Saider } from './saider';
|
|
18
|
+
import { Siger } from './siger';
|
|
19
|
+
import { Cigar } from './cigar';
|
|
20
|
+
import { Counter, CtrDex } from './counter';
|
|
21
|
+
import { Seqner } from './seqner';
|
|
22
|
+
|
|
23
|
+
const MaxIntThold = 2 ** 32 - 1;
|
|
24
|
+
|
|
25
|
+
export interface RotateArgs {
|
|
26
|
+
pre?: string;
|
|
27
|
+
keys: Array<string>;
|
|
28
|
+
dig?: string;
|
|
29
|
+
ilk?: string;
|
|
30
|
+
sn?: number;
|
|
31
|
+
isith?: number | string | Array<string>;
|
|
32
|
+
ndigs?: Array<string>;
|
|
33
|
+
nsith?: number | string | Array<string>;
|
|
34
|
+
toad?: number;
|
|
35
|
+
wits?: Array<string>;
|
|
36
|
+
cuts?: Array<string>;
|
|
37
|
+
adds?: Array<string>;
|
|
38
|
+
cnfg?: Array<string>;
|
|
39
|
+
data?: Array<object>;
|
|
40
|
+
version?: Version;
|
|
41
|
+
kind?: Serials;
|
|
42
|
+
size?: number;
|
|
43
|
+
intive?: boolean;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function rotate({
|
|
47
|
+
pre = undefined,
|
|
48
|
+
keys,
|
|
49
|
+
dig = undefined,
|
|
50
|
+
ilk = Ilks.rot,
|
|
51
|
+
sn = 1,
|
|
52
|
+
isith = undefined,
|
|
53
|
+
ndigs = undefined,
|
|
54
|
+
nsith = undefined,
|
|
55
|
+
wits = undefined,
|
|
56
|
+
cuts = undefined,
|
|
57
|
+
adds = undefined,
|
|
58
|
+
toad = undefined,
|
|
59
|
+
data = undefined,
|
|
60
|
+
version = undefined,
|
|
61
|
+
kind = undefined,
|
|
62
|
+
intive = true,
|
|
63
|
+
}: RotateArgs) {
|
|
64
|
+
const vs = versify(Ident.KERI, version, kind, 0);
|
|
65
|
+
const _ilk = ilk;
|
|
66
|
+
if (_ilk != Ilks.rot && _ilk != Ilks.drt) {
|
|
67
|
+
throw new Error(`Invalid ilk = ${ilk} for rot or drt.`);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const sner = Number(sn);
|
|
71
|
+
if (sner < 1) {
|
|
72
|
+
throw new Error(`Invalid sn = 0x${sner.toString()} for rot or drt.`);
|
|
73
|
+
}
|
|
74
|
+
let _isit: number;
|
|
75
|
+
|
|
76
|
+
if (isith == undefined) {
|
|
77
|
+
_isit = Math.max(1, Math.ceil(keys.length / 2));
|
|
78
|
+
} else {
|
|
79
|
+
_isit = isith as number;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const tholder = new Tholder({ sith: _isit });
|
|
83
|
+
if (tholder.num != undefined && tholder.num < 1) {
|
|
84
|
+
throw new Error(`Invalid sith = ${tholder.num} less than 1.`);
|
|
85
|
+
}
|
|
86
|
+
if (tholder.size > keys.length) {
|
|
87
|
+
throw new Error(`Invalid sith = ${tholder.num} for keys = ${keys}`);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
let _ndigs: Array<string>;
|
|
91
|
+
|
|
92
|
+
if (ndigs === undefined) {
|
|
93
|
+
_ndigs = [];
|
|
94
|
+
} else {
|
|
95
|
+
_ndigs = ndigs;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
let _nsith;
|
|
99
|
+
if (nsith === undefined) {
|
|
100
|
+
_nsith = Math.max(1, Math.ceil(_ndigs.length / 2));
|
|
101
|
+
} else {
|
|
102
|
+
_nsith = nsith;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const ntholder = new Tholder({ sith: _nsith });
|
|
106
|
+
if (ntholder.num != undefined && ntholder.num < 1) {
|
|
107
|
+
throw new Error(`Invalid sith = ${ntholder.num} less than 1.`);
|
|
108
|
+
}
|
|
109
|
+
if (ntholder.size > _ndigs.length) {
|
|
110
|
+
throw new Error(`Invalid sith = ${ntholder.num} for ndigs = ${ndigs}`);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
let _wits: Array<string>;
|
|
114
|
+
if (wits === undefined) {
|
|
115
|
+
_wits = [];
|
|
116
|
+
} else {
|
|
117
|
+
_wits = wits;
|
|
118
|
+
}
|
|
119
|
+
const witset = new Set(_wits);
|
|
120
|
+
if (witset.size != _wits.length) {
|
|
121
|
+
throw new Error(`Invalid wits = ${wits}, has duplicates.`);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
let _cuts: Array<string>;
|
|
125
|
+
if (cuts === undefined) {
|
|
126
|
+
_cuts = [];
|
|
127
|
+
} else {
|
|
128
|
+
_cuts = cuts;
|
|
129
|
+
}
|
|
130
|
+
const cutset = new Set(_cuts);
|
|
131
|
+
if (cutset.size != _cuts.length) {
|
|
132
|
+
throw new Error(`Invalid cuts = ${cuts}, has duplicates.`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
let _adds: Array<string>;
|
|
136
|
+
if (adds === undefined) {
|
|
137
|
+
_adds = [];
|
|
138
|
+
} else {
|
|
139
|
+
_adds = adds;
|
|
140
|
+
}
|
|
141
|
+
const addset = new Set(_adds);
|
|
142
|
+
|
|
143
|
+
//non empty intersection of witset and addset
|
|
144
|
+
const witaddset = new Set([...witset].filter((x) => addset.has(x)));
|
|
145
|
+
if (witaddset.size > 0) {
|
|
146
|
+
throw new Error(
|
|
147
|
+
`Invalid member combination among wits = ${wits}, and adds = ${adds}.`
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// non empty intersection of cutset and addset
|
|
152
|
+
const cutaddset = new Set([...cutset].filter((x) => addset.has(x)));
|
|
153
|
+
if (cutaddset.size > 0) {
|
|
154
|
+
throw new Error(
|
|
155
|
+
`Invalid member combination among cuts = ${cuts}, and adds = ${adds}.`
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const newitsetdiff = new Set(_wits);
|
|
160
|
+
_cuts.forEach(function (v) {
|
|
161
|
+
newitsetdiff.delete(v);
|
|
162
|
+
});
|
|
163
|
+
const newitset = new Set(
|
|
164
|
+
(function* () {
|
|
165
|
+
yield* newitsetdiff;
|
|
166
|
+
yield* addset;
|
|
167
|
+
})()
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
if (newitset.size != witset.size - cutset.size + addset.size) {
|
|
171
|
+
throw new Error(
|
|
172
|
+
`Invalid member combination among wits = ${wits}, cuts = ${cuts}, and adds = ${adds}.`
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
let _toad: number;
|
|
177
|
+
|
|
178
|
+
if (toad === undefined) {
|
|
179
|
+
if (newitset.size == 0) {
|
|
180
|
+
_toad = 0;
|
|
181
|
+
} else {
|
|
182
|
+
_toad = ample(newitset.size);
|
|
183
|
+
}
|
|
184
|
+
} else {
|
|
185
|
+
_toad = toad;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (newitset.size > 0) {
|
|
189
|
+
if (_toad < 1 || _toad > newitset.size) {
|
|
190
|
+
throw new Error(`Invalid toad = ${_toad} for wit = ${wits}`);
|
|
191
|
+
}
|
|
192
|
+
} else {
|
|
193
|
+
if (_toad != 0) {
|
|
194
|
+
throw new Error(`Invalid toad = ${_toad} for wit = ${wits}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const _ked = {
|
|
198
|
+
v: vs,
|
|
199
|
+
t: _ilk,
|
|
200
|
+
d: '',
|
|
201
|
+
i: pre,
|
|
202
|
+
s: sner.toString(16),
|
|
203
|
+
p: dig,
|
|
204
|
+
kt:
|
|
205
|
+
tholder.num &&
|
|
206
|
+
intive &&
|
|
207
|
+
tholder.num !== undefined &&
|
|
208
|
+
tholder.num <= MaxIntThold
|
|
209
|
+
? tholder.num.toString(16)
|
|
210
|
+
: tholder.sith,
|
|
211
|
+
k: keys,
|
|
212
|
+
nt:
|
|
213
|
+
ntholder.num &&
|
|
214
|
+
intive &&
|
|
215
|
+
ntholder.num !== undefined &&
|
|
216
|
+
ntholder.num <= MaxIntThold
|
|
217
|
+
? ntholder.num.toString(16)
|
|
218
|
+
: ntholder.sith,
|
|
219
|
+
n: _ndigs,
|
|
220
|
+
bt:
|
|
221
|
+
_toad && intive && _toad !== undefined && _toad <= MaxIntThold
|
|
222
|
+
? _toad
|
|
223
|
+
: _toad.toString(16),
|
|
224
|
+
br: cuts,
|
|
225
|
+
ba: adds,
|
|
226
|
+
a: data != undefined ? data : [],
|
|
227
|
+
};
|
|
228
|
+
const [, ked] = Saider.saidify(_ked);
|
|
229
|
+
return new Serder(ked);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export function ample(n: number, f?: number, weak = true) {
|
|
233
|
+
n = Math.max(0, n); // no negatives
|
|
234
|
+
let f1;
|
|
16
235
|
if (f == undefined) {
|
|
17
|
-
f1 = Math.max(1, Math.floor(Math.max(0, n - 1) / 3))
|
|
236
|
+
f1 = Math.max(1, Math.floor(Math.max(0, n - 1) / 3)); // least floor f subject to n >= 3*f+1
|
|
18
237
|
|
|
19
|
-
|
|
20
|
-
if (weak) {
|
|
21
|
-
|
|
238
|
+
const f2 = Math.max(1, Math.ceil(Math.max(0, n - 1) / 3)); // most Math.ceil f subject to n >= 3*f+1
|
|
239
|
+
if (weak) {
|
|
240
|
+
// try both fs to see which one has lowest m
|
|
241
|
+
return Math.min(
|
|
242
|
+
n,
|
|
243
|
+
Math.ceil((n + f1 + 1) / 2),
|
|
244
|
+
Math.ceil((n + f2 + 1) / 2)
|
|
245
|
+
);
|
|
22
246
|
} else {
|
|
23
|
-
return Math.min(
|
|
247
|
+
return Math.min(
|
|
248
|
+
n,
|
|
249
|
+
Math.max(0, n - f1, Math.ceil((n + f1 + 1) / 2))
|
|
250
|
+
);
|
|
24
251
|
}
|
|
25
252
|
} else {
|
|
26
|
-
f = Math.max(0, f)
|
|
27
|
-
|
|
28
|
-
|
|
253
|
+
f = Math.max(0, f);
|
|
254
|
+
const m1 = Math.ceil((n + f + 1) / 2);
|
|
255
|
+
const m2 = Math.max(0, n - f);
|
|
29
256
|
if (m2 < m1 && n > 0) {
|
|
30
|
-
throw new Error(`Invalid f=${f} is too big for n=${n}.`)
|
|
257
|
+
throw new Error(`Invalid f=${f} is too big for n=${n}.`);
|
|
31
258
|
}
|
|
32
259
|
if (weak) {
|
|
33
|
-
return Math.min(n, m1, m2)
|
|
260
|
+
return Math.min(n, m1, m2);
|
|
34
261
|
} else {
|
|
35
|
-
return Math.min(n, Math.max(m1, m2))
|
|
262
|
+
return Math.min(n, Math.max(m1, m2));
|
|
36
263
|
}
|
|
37
264
|
}
|
|
38
265
|
}
|
|
39
266
|
|
|
40
267
|
export interface InceptArgs {
|
|
41
|
-
keys: Array<string
|
|
42
|
-
isith?: number | string | Array<string
|
|
43
|
-
ndigs?: Array<string
|
|
44
|
-
nsith?: number | string | Array<string
|
|
45
|
-
toad?: number | string
|
|
46
|
-
wits?: Array<string
|
|
47
|
-
cnfg?: Array<string
|
|
48
|
-
data?: Array<object
|
|
49
|
-
version?: Version
|
|
50
|
-
kind?: Serials
|
|
51
|
-
code?: string
|
|
52
|
-
intive?: boolean
|
|
53
|
-
delpre?: string
|
|
268
|
+
keys: Array<string>;
|
|
269
|
+
isith?: number | string | Array<string>;
|
|
270
|
+
ndigs?: Array<string>;
|
|
271
|
+
nsith?: number | string | Array<string>;
|
|
272
|
+
toad?: number | string;
|
|
273
|
+
wits?: Array<string>;
|
|
274
|
+
cnfg?: Array<string>;
|
|
275
|
+
data?: Array<object>;
|
|
276
|
+
version?: Version;
|
|
277
|
+
kind?: Serials;
|
|
278
|
+
code?: string;
|
|
279
|
+
intive?: boolean;
|
|
280
|
+
delpre?: string;
|
|
54
281
|
}
|
|
55
282
|
|
|
56
|
-
export function incept({
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
283
|
+
export function incept({
|
|
284
|
+
keys,
|
|
285
|
+
isith,
|
|
286
|
+
ndigs,
|
|
287
|
+
nsith,
|
|
288
|
+
toad,
|
|
289
|
+
wits,
|
|
290
|
+
cnfg,
|
|
291
|
+
data,
|
|
292
|
+
version = Versionage,
|
|
293
|
+
kind = Serials.JSON,
|
|
294
|
+
code,
|
|
295
|
+
intive = false,
|
|
296
|
+
delpre,
|
|
297
|
+
}: InceptArgs) {
|
|
298
|
+
const vs = versify(Ident.KERI, version, kind, 0);
|
|
299
|
+
const ilk = delpre == undefined ? Ilks.icp : Ilks.dip;
|
|
300
|
+
const sner = new CesrNumber({}, 0);
|
|
63
301
|
|
|
64
302
|
if (isith == undefined) {
|
|
65
|
-
isith = Math.max(1, Math.ceil(keys.length / 2))
|
|
303
|
+
isith = Math.max(1, Math.ceil(keys.length / 2));
|
|
66
304
|
}
|
|
67
305
|
|
|
68
|
-
|
|
306
|
+
const tholder = new Tholder({ sith: isith });
|
|
69
307
|
if (tholder.num != undefined && tholder.num < 1) {
|
|
70
|
-
throw new Error(`Invalid sith = ${tholder.num} less than 1.`)
|
|
308
|
+
throw new Error(`Invalid sith = ${tholder.num} less than 1.`);
|
|
71
309
|
}
|
|
72
310
|
if (tholder.size > keys.length) {
|
|
73
|
-
throw new Error(`Invalid sith = ${tholder.num} for keys ${keys}`)
|
|
311
|
+
throw new Error(`Invalid sith = ${tholder.num} for keys ${keys}`);
|
|
74
312
|
}
|
|
75
313
|
|
|
76
314
|
if (ndigs == undefined) {
|
|
77
|
-
ndigs = new Array<string>()
|
|
315
|
+
ndigs = new Array<string>();
|
|
78
316
|
}
|
|
79
317
|
|
|
80
318
|
if (nsith == undefined) {
|
|
81
|
-
nsith = Math.max(0, Math.ceil(ndigs.length / 2))
|
|
319
|
+
nsith = Math.max(0, Math.ceil(ndigs.length / 2));
|
|
82
320
|
}
|
|
83
321
|
|
|
84
|
-
|
|
322
|
+
const ntholder = new Tholder({ sith: nsith });
|
|
85
323
|
if (ntholder.num != undefined && ntholder.num < 0) {
|
|
86
|
-
throw new Error(`Invalid nsith = ${ntholder.num} less than 0.`)
|
|
324
|
+
throw new Error(`Invalid nsith = ${ntholder.num} less than 0.`);
|
|
87
325
|
}
|
|
88
326
|
if (ntholder.size > keys.length) {
|
|
89
|
-
throw new Error(`Invalid nsith = ${ntholder.num} for keys ${ndigs}`)
|
|
327
|
+
throw new Error(`Invalid nsith = ${ntholder.num} for keys ${ndigs}`);
|
|
90
328
|
}
|
|
91
329
|
|
|
92
|
-
wits = wits == undefined ? [] : wits
|
|
330
|
+
wits = wits == undefined ? [] : wits;
|
|
93
331
|
if (new Set(wits).size != wits.length) {
|
|
94
|
-
throw new Error(`Invalid wits = ${wits}, has duplicates.`)
|
|
332
|
+
throw new Error(`Invalid wits = ${wits}, has duplicates.`);
|
|
95
333
|
}
|
|
96
334
|
|
|
97
335
|
if (toad == undefined) {
|
|
98
336
|
if (wits.length == 0) {
|
|
99
|
-
toad = 0
|
|
337
|
+
toad = 0;
|
|
100
338
|
} else {
|
|
101
|
-
toad = ample(wits.length)
|
|
339
|
+
toad = ample(wits.length);
|
|
102
340
|
}
|
|
103
341
|
}
|
|
104
342
|
|
|
105
|
-
|
|
343
|
+
const toader = new CesrNumber({}, toad);
|
|
106
344
|
if (wits.length > 0) {
|
|
107
345
|
if (toader.num < 1 || toader.num > wits.length) {
|
|
108
|
-
throw new Error(`Invalid toad = ${toader.num} for wits = ${wits}`)
|
|
346
|
+
throw new Error(`Invalid toad = ${toader.num} for wits = ${wits}`);
|
|
109
347
|
}
|
|
110
348
|
} else {
|
|
111
349
|
if (toader.num != 0) {
|
|
112
|
-
throw new Error(`Invalid toad = ${toader.num} for wits = ${wits}`)
|
|
350
|
+
throw new Error(`Invalid toad = ${toader.num} for wits = ${wits}`);
|
|
113
351
|
}
|
|
114
352
|
}
|
|
115
353
|
|
|
116
|
-
cnfg = cnfg == undefined ? new Array<string>() : cnfg
|
|
117
|
-
data = data == undefined ? new Array<object>() : data
|
|
354
|
+
cnfg = cnfg == undefined ? new Array<string>() : cnfg;
|
|
355
|
+
data = data == undefined ? new Array<object>() : data;
|
|
118
356
|
|
|
119
357
|
let ked = {
|
|
120
358
|
v: vs,
|
|
121
359
|
t: ilk,
|
|
122
|
-
d:
|
|
123
|
-
i:
|
|
360
|
+
d: '',
|
|
361
|
+
i: '',
|
|
124
362
|
s: sner.numh,
|
|
125
|
-
kt:
|
|
363
|
+
kt: intive && tholder.num != undefined ? tholder.num : tholder.sith,
|
|
126
364
|
k: keys,
|
|
127
|
-
nt:
|
|
365
|
+
nt: intive && tholder.num != undefined ? ntholder.num : ntholder.sith,
|
|
128
366
|
n: ndigs,
|
|
129
367
|
bt: intive ? toader.num : toader.numh,
|
|
130
368
|
b: wits,
|
|
131
369
|
c: cnfg,
|
|
132
|
-
a: data
|
|
133
|
-
} as Dict<any
|
|
370
|
+
a: data,
|
|
371
|
+
} as Dict<any>;
|
|
134
372
|
|
|
135
373
|
if (delpre != undefined) {
|
|
136
|
-
ked[
|
|
374
|
+
ked['di'] = delpre;
|
|
137
375
|
if (code == undefined) {
|
|
138
|
-
code = MtrDex.Blake3_256
|
|
376
|
+
code = MtrDex.Blake3_256;
|
|
139
377
|
}
|
|
140
378
|
}
|
|
141
379
|
|
|
142
|
-
let prefixer
|
|
380
|
+
let prefixer;
|
|
143
381
|
if (delpre == undefined && code == undefined && keys.length == 1) {
|
|
144
|
-
prefixer = new Prefixer({qb64: keys[0]})
|
|
382
|
+
prefixer = new Prefixer({ qb64: keys[0] });
|
|
145
383
|
if (prefixer.digestive) {
|
|
146
|
-
throw new Error(
|
|
384
|
+
throw new Error(
|
|
385
|
+
`Invalid code, digestive=${prefixer.code}, must be derived from ked.`
|
|
386
|
+
);
|
|
147
387
|
}
|
|
148
388
|
} else {
|
|
149
|
-
prefixer = new Prefixer({code: code}, ked)
|
|
389
|
+
prefixer = new Prefixer({ code: code }, ked);
|
|
150
390
|
if (delpre != undefined) {
|
|
151
|
-
if(!prefixer.digestive) {
|
|
152
|
-
throw new Error(
|
|
391
|
+
if (!prefixer.digestive) {
|
|
392
|
+
throw new Error(
|
|
393
|
+
`Invalid derivation code = ${prefixer.code} for delegation. Must be digestive`
|
|
394
|
+
);
|
|
153
395
|
}
|
|
154
396
|
}
|
|
155
397
|
}
|
|
156
398
|
|
|
157
|
-
ked[
|
|
399
|
+
ked['i'] = prefixer.qb64;
|
|
158
400
|
if (prefixer.digestive) {
|
|
159
|
-
ked[
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
[, ked] = Saider.saidify(ked)
|
|
401
|
+
ked['d'] = prefixer.qb64;
|
|
402
|
+
} else {
|
|
403
|
+
[, ked] = Saider.saidify(ked);
|
|
163
404
|
}
|
|
164
405
|
|
|
165
|
-
return new Serder(ked)
|
|
406
|
+
return new Serder(ked);
|
|
166
407
|
}
|
|
167
408
|
|
|
168
|
-
export function messagize(
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
409
|
+
export function messagize(
|
|
410
|
+
serder: Serder,
|
|
411
|
+
sigers?: Array<Siger>,
|
|
412
|
+
seal?: any,
|
|
413
|
+
wigers?: Array<Cigar>,
|
|
414
|
+
cigars?: Array<Cigar>,
|
|
415
|
+
pipelined: boolean = false
|
|
416
|
+
): Uint8Array {
|
|
417
|
+
let msg = new Uint8Array(b(serder.raw));
|
|
418
|
+
let atc = new Uint8Array();
|
|
172
419
|
|
|
173
420
|
if (sigers == undefined && wigers == undefined && cigars == undefined) {
|
|
174
|
-
throw new Error(
|
|
421
|
+
throw new Error(
|
|
422
|
+
`Missing attached signatures on message = ${serder.ked}.`
|
|
423
|
+
);
|
|
175
424
|
}
|
|
176
425
|
|
|
177
426
|
if (sigers != undefined) {
|
|
178
427
|
if (seal != undefined) {
|
|
179
|
-
|
|
428
|
+
if (seal[0] == 'SealEvent') {
|
|
429
|
+
atc = concat(
|
|
430
|
+
atc,
|
|
431
|
+
new Counter({ code: CtrDex.TransIdxSigGroups, count: 1 })
|
|
432
|
+
.qb64b
|
|
433
|
+
);
|
|
434
|
+
atc = concat(atc, new TextEncoder().encode(seal[1].i));
|
|
435
|
+
atc = concat(
|
|
436
|
+
atc,
|
|
437
|
+
new Seqner({ sn: parseInt(seal[1].s) }).qb64b
|
|
438
|
+
);
|
|
439
|
+
atc = concat(atc, new TextEncoder().encode(seal[1].d));
|
|
440
|
+
} else if (seal[0] == 'SealLast') {
|
|
441
|
+
atc = concat(
|
|
442
|
+
atc,
|
|
443
|
+
new Counter({
|
|
444
|
+
code: CtrDex.TransLastIdxSigGroups,
|
|
445
|
+
count: 1,
|
|
446
|
+
}).qb64b
|
|
447
|
+
);
|
|
448
|
+
atc = concat(atc, new TextEncoder().encode(seal[1].i));
|
|
449
|
+
}
|
|
180
450
|
}
|
|
181
451
|
|
|
182
|
-
atc = concat(
|
|
452
|
+
atc = concat(
|
|
453
|
+
atc,
|
|
454
|
+
new Counter({
|
|
455
|
+
code: CtrDex.ControllerIdxSigs,
|
|
456
|
+
count: sigers.length,
|
|
457
|
+
}).qb64b
|
|
458
|
+
);
|
|
183
459
|
sigers.forEach((siger) => {
|
|
184
|
-
atc = concat(atc, siger.qb64b)
|
|
185
|
-
})
|
|
460
|
+
atc = concat(atc, siger.qb64b);
|
|
461
|
+
});
|
|
186
462
|
}
|
|
187
463
|
|
|
188
464
|
if (wigers != undefined) {
|
|
189
|
-
atc = concat(
|
|
465
|
+
atc = concat(
|
|
466
|
+
atc,
|
|
467
|
+
new Counter({
|
|
468
|
+
code: CtrDex.ControllerIdxSigs,
|
|
469
|
+
count: wigers.length,
|
|
470
|
+
}).qb64b
|
|
471
|
+
);
|
|
190
472
|
|
|
191
473
|
wigers.forEach((wiger) => {
|
|
192
474
|
if (wiger.verfer && !(wiger.verfer.code in NonTransDex)) {
|
|
193
|
-
throw new Error(
|
|
475
|
+
throw new Error(
|
|
476
|
+
`Attempt to use tranferable prefix=${wiger.verfer.qb64} for receipt.`
|
|
477
|
+
);
|
|
194
478
|
}
|
|
195
|
-
atc = concat(atc, wiger.qb64b)
|
|
196
|
-
})
|
|
479
|
+
atc = concat(atc, wiger.qb64b);
|
|
480
|
+
});
|
|
197
481
|
}
|
|
198
482
|
|
|
199
483
|
if (cigars != undefined) {
|
|
200
|
-
atc = concat(
|
|
484
|
+
atc = concat(
|
|
485
|
+
atc,
|
|
486
|
+
new Counter({
|
|
487
|
+
code: CtrDex.ControllerIdxSigs,
|
|
488
|
+
count: cigars.length,
|
|
489
|
+
}).qb64b
|
|
490
|
+
);
|
|
201
491
|
|
|
202
492
|
cigars.forEach((cigar) => {
|
|
203
493
|
if (cigar.verfer && !(cigar.verfer.code in NonTransDex)) {
|
|
204
|
-
throw new Error(
|
|
494
|
+
throw new Error(
|
|
495
|
+
`Attempt to use tranferable prefix=${cigar.verfer.qb64} for receipt.`
|
|
496
|
+
);
|
|
205
497
|
}
|
|
206
|
-
atc = concat(atc, cigar.qb64b)
|
|
207
|
-
})
|
|
498
|
+
atc = concat(atc, cigar.qb64b);
|
|
499
|
+
});
|
|
208
500
|
}
|
|
209
501
|
|
|
210
502
|
if (pipelined) {
|
|
211
503
|
if (atc.length % 4 != 0) {
|
|
212
|
-
throw new Error(
|
|
504
|
+
throw new Error(
|
|
505
|
+
`Invalid attachments size=${atc.length}, nonintegral quadlets.`
|
|
506
|
+
);
|
|
213
507
|
}
|
|
214
|
-
msg = concat(
|
|
508
|
+
msg = concat(
|
|
509
|
+
msg,
|
|
510
|
+
new Counter({
|
|
511
|
+
code: CtrDex.AttachedMaterialQuadlets,
|
|
512
|
+
count: Math.floor(atc.length / 4),
|
|
513
|
+
}).qb64b
|
|
514
|
+
);
|
|
215
515
|
}
|
|
216
|
-
msg = concat(msg, atc)
|
|
516
|
+
msg = concat(msg, atc);
|
|
517
|
+
return msg;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
interface InteractArgs {
|
|
521
|
+
pre: string;
|
|
522
|
+
dig: string;
|
|
523
|
+
sn: number;
|
|
524
|
+
data: Array<any>;
|
|
525
|
+
version: Version | undefined;
|
|
526
|
+
kind: Serials | undefined;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
export function interact(args: InteractArgs): Serder {
|
|
530
|
+
let { pre, dig, sn, data, version, kind } = args;
|
|
531
|
+
const vs = versify(Ident.KERI, version, kind, 0);
|
|
532
|
+
const ilk = Ilks.ixn;
|
|
533
|
+
const sner = new CesrNumber({}, sn);
|
|
217
534
|
|
|
218
|
-
|
|
219
|
-
}
|
|
535
|
+
if (sner.num < 1) {
|
|
536
|
+
throw new Error(`Invalid sn = 0x${sner.numh} for ixn.`);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
data = data == undefined ? new Array<any>() : data;
|
|
540
|
+
|
|
541
|
+
let ked = {
|
|
542
|
+
v: vs,
|
|
543
|
+
t: ilk,
|
|
544
|
+
d: '',
|
|
545
|
+
i: pre,
|
|
546
|
+
s: sner.numh,
|
|
547
|
+
p: dig,
|
|
548
|
+
a: data,
|
|
549
|
+
} as Dict<any>;
|
|
550
|
+
|
|
551
|
+
[, ked] = Saider.saidify(ked);
|
|
552
|
+
|
|
553
|
+
return new Serder(ked);
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
export function reply(
|
|
557
|
+
route: string = '',
|
|
558
|
+
data: any | undefined,
|
|
559
|
+
stamp: string | undefined,
|
|
560
|
+
version: Version | undefined,
|
|
561
|
+
kind: Serials = Serials.JSON
|
|
562
|
+
) {
|
|
563
|
+
const vs = versify(Ident.KERI, version, kind, 0);
|
|
564
|
+
if (data == undefined) {
|
|
565
|
+
data = {};
|
|
566
|
+
}
|
|
567
|
+
const _sad = {
|
|
568
|
+
v: vs,
|
|
569
|
+
t: Ilks.rpy,
|
|
570
|
+
d: '',
|
|
571
|
+
dt: stamp ?? new Date().toISOString().replace('Z', '000+00:00'),
|
|
572
|
+
r: route,
|
|
573
|
+
a: data,
|
|
574
|
+
};
|
|
575
|
+
const [, sad] = Saider.saidify(_sad);
|
|
576
|
+
const saider = new Saider({ qb64: sad['d'] });
|
|
577
|
+
|
|
578
|
+
if (!saider.verify(sad, true, true, kind, 'd'))
|
|
579
|
+
throw new Error(`Invalid said = ${saider.qb64} for reply msg=${sad}.`);
|
|
580
|
+
return new Serder(sad);
|
|
581
|
+
}
|