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.
Files changed (115) hide show
  1. package/README.md +96 -47
  2. package/dist/buffer-polyfill.d.ts +1 -0
  3. package/dist/exports.d.ts +40 -0
  4. package/dist/index.d.ts +4 -3
  5. package/dist/keri/app/aiding.d.ts +138 -0
  6. package/dist/keri/app/clienting.d.ts +182 -0
  7. package/dist/keri/app/contacting.d.ts +93 -0
  8. package/dist/keri/app/controller.d.ts +49 -0
  9. package/dist/keri/app/coring.d.ts +121 -0
  10. package/dist/keri/app/credentialing.d.ts +245 -0
  11. package/dist/keri/app/escrowing.d.ts +19 -0
  12. package/dist/keri/app/exchanging.d.ts +60 -0
  13. package/dist/keri/app/grouping.d.ts +44 -0
  14. package/dist/keri/app/habery.d.ts +48 -47
  15. package/dist/keri/app/notifying.d.ts +34 -0
  16. package/dist/keri/core/authing.d.ts +10 -9
  17. package/dist/keri/core/bexter.d.ts +7 -0
  18. package/dist/keri/core/cigar.d.ts +8 -8
  19. package/dist/keri/core/cipher.d.ts +5 -5
  20. package/dist/keri/core/core.d.ts +59 -53
  21. package/dist/keri/core/counter.d.ts +43 -43
  22. package/dist/keri/core/decrypter.d.ts +10 -10
  23. package/dist/keri/core/diger.d.ts +21 -21
  24. package/dist/keri/core/encrypter.d.ts +9 -9
  25. package/dist/keri/core/eventing.d.ts +54 -21
  26. package/dist/keri/core/httping.d.ts +44 -34
  27. package/dist/keri/core/indexer.d.ts +98 -88
  28. package/dist/keri/core/keeping.d.ts +103 -1
  29. package/dist/keri/core/kering.d.ts +5 -5
  30. package/dist/keri/core/manager.d.ts +174 -172
  31. package/dist/keri/core/matter.d.ts +116 -69
  32. package/dist/keri/core/number.d.ts +7 -6
  33. package/dist/keri/core/pather.d.ts +7 -0
  34. package/dist/keri/core/prefixer.d.ts +15 -15
  35. package/dist/keri/core/saider.d.ts +23 -23
  36. package/dist/keri/core/salter.d.ts +23 -23
  37. package/dist/keri/core/seqner.d.ts +15 -0
  38. package/dist/keri/core/serder.d.ts +31 -23
  39. package/dist/keri/core/siger.d.ts +18 -18
  40. package/dist/keri/core/signer.d.ts +34 -34
  41. package/dist/keri/core/tholder.d.ts +29 -14
  42. package/dist/keri/core/utils.d.ts +20 -15
  43. package/dist/keri/core/vdring.d.ts +16 -0
  44. package/dist/keri/core/verfer.d.ts +13 -12
  45. package/dist/keri/end/ending.d.ts +13 -13
  46. package/dist/math.d.ts +1 -0
  47. package/dist/ready.d.ts +1 -0
  48. package/dist/signify-ts.cjs +7842 -0
  49. package/dist/signify-ts.cjs.development.js +6369 -256
  50. package/dist/signify-ts.cjs.development.js.map +1 -1
  51. package/dist/signify-ts.cjs.map +7 -0
  52. package/dist/signify-ts.cjs.production.min.js +1 -1
  53. package/dist/signify-ts.cjs.production.min.js.map +1 -1
  54. package/dist/signify-ts.esm.js +6205 -229
  55. package/dist/signify-ts.esm.js.map +1 -1
  56. package/dist/signify-ts.mjs +7818 -0
  57. package/dist/signify-ts.mjs.map +7 -0
  58. package/package.json +49 -49
  59. package/src/buffer-polyfill.ts +5 -0
  60. package/src/exports.ts +44 -0
  61. package/src/index.ts +4 -5
  62. package/src/keri/app/aiding.ts +493 -0
  63. package/src/keri/app/clienting.ts +492 -0
  64. package/src/keri/app/contacting.ts +188 -0
  65. package/src/keri/app/controller.ts +372 -0
  66. package/src/keri/app/coring.ts +225 -0
  67. package/src/keri/app/credentialing.ts +841 -0
  68. package/src/keri/app/escrowing.ts +34 -0
  69. package/src/keri/app/exchanging.ts +220 -0
  70. package/src/keri/app/grouping.ts +90 -0
  71. package/src/keri/app/habery.ts +118 -85
  72. package/src/keri/app/notifying.ts +69 -0
  73. package/src/keri/core/authing.ts +73 -85
  74. package/src/keri/core/bexter.ts +138 -0
  75. package/src/keri/core/cigar.ts +10 -11
  76. package/src/keri/core/cipher.ts +23 -14
  77. package/src/keri/core/core.ts +223 -81
  78. package/src/keri/core/counter.ts +182 -116
  79. package/src/keri/core/decrypter.ts +48 -34
  80. package/src/keri/core/diger.ts +23 -22
  81. package/src/keri/core/encrypter.ts +37 -27
  82. package/src/keri/core/eventing.ts +468 -106
  83. package/src/keri/core/httping.ts +151 -105
  84. package/src/keri/core/indexer.ts +313 -211
  85. package/src/keri/core/keeping.ts +679 -3
  86. package/src/keri/core/kering.ts +4 -6
  87. package/src/keri/core/manager.ts +660 -499
  88. package/src/keri/core/matter.ts +382 -148
  89. package/src/keri/core/number.ts +56 -11
  90. package/src/keri/core/pather.ts +98 -0
  91. package/src/keri/core/prefixer.ts +122 -101
  92. package/src/keri/core/saider.ts +104 -76
  93. package/src/keri/core/salter.ts +71 -40
  94. package/src/keri/core/seqner.ts +46 -0
  95. package/src/keri/core/serder.ts +102 -38
  96. package/src/keri/core/siger.ts +19 -18
  97. package/src/keri/core/signer.ts +73 -53
  98. package/src/keri/core/tholder.ts +196 -30
  99. package/src/keri/core/utils.ts +121 -50
  100. package/src/keri/core/vdring.ts +94 -0
  101. package/src/keri/core/verfer.ts +22 -9
  102. package/src/keri/end/ending.ts +111 -101
  103. package/src/math.ts +3 -0
  104. package/src/ready.ts +5 -0
  105. package/dist/keri/app/accountant.d.ts +0 -10
  106. package/dist/keri/app/apping.d.ts +0 -1
  107. package/dist/keri/app/client.d.ts +0 -7
  108. package/dist/keri/app/signify.d.ts +0 -6
  109. package/src/keri/app/accountant.ts +0 -35
  110. package/src/keri/app/apping.ts +0 -12
  111. package/src/keri/app/client.ts +0 -30
  112. package/src/keri/app/signify.ts +0 -12
  113. package/src/keri/app/tsconfig.json +0 -100
  114. package/src/keri/core/tsconfig.json +0 -100
  115. package/src/keri/end/tsconfig.json +0 -100
@@ -1,219 +1,581 @@
1
- import {b, concat, Dict, Ident, Ilks, Serials, versify, Version, Versionage} from "./core";
2
- import {Tholder} from "./tholder";
3
- import {PNumber} from "./number";
4
- import {Prefixer} from "./prefixer";
5
- import {Serder} from "./serder";
6
- import {MtrDex, NonTransDex} from "./matter";
7
- import {Saider} from "./saider";
8
- import {Siger} from "./siger";
9
- import {Cigar} from "./cigar";
10
- import {Counter, CtrDex} from "./counter";
11
-
12
-
13
- function ample(n: number, f?: number, weak = true) {
14
- n = Math.max(0, n) // no negatives
15
- let f1
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)) // least floor f subject to n >= 3*f+1
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
- let f2 = Math.max(1, Math.ceil(Math.max(0, n - 1) / 3)) // most Math.ceil f subject to n >= 3*f+1
20
- if (weak) { // try both fs to see which one has lowest m
21
- return Math.min(n, Math.ceil((n + f1 + 1) / 2), Math.ceil((n + f2 + 1) / 2))
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(n, Math.max(0, n - f1, Math.ceil((n + f1 + 1) / 2)))
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
- let m1 = Math.ceil((n + f + 1) / 2)
28
- let m2 = Math.max(0, n - f)
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({keys, isith, ndigs, nsith, toad, wits, cnfg, data, version=Versionage, kind=Serials.JSON, code,
57
- intive = false, delpre}: InceptArgs) {
58
-
59
-
60
- let vs = versify(Ident.KERI, version, kind, 0)
61
- let ilk = delpre == undefined ? Ilks.icp : Ilks.dip
62
- let sner = new PNumber(0)
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
- let tholder = new Tholder(isith)
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
- let ntholder = new Tholder(nsith)
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
- let toader = new PNumber(toad)
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: (intive && tholder.num != undefined) ? tholder.num : tholder.sith,
363
+ kt: intive && tholder.num != undefined ? tholder.num : tholder.sith,
126
364
  k: keys,
127
- nt: (intive && tholder.num != undefined) ? ntholder.num: ntholder.sith,
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["di"] = delpre
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(`Invalid code, digestive=${prefixer.code}, must be derived from ked.`)
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(`Invalid derivation code = ${prefixer.code} for delegation. Must be digestive`)
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["i"] = prefixer.qb64
399
+ ked['i'] = prefixer.qb64;
158
400
  if (prefixer.digestive) {
159
- ked["d"] = prefixer.qb64
160
- }
161
- else {
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(serder: Serder, sigers?: Array<Siger>, seal?: any, wigers?:Array<Cigar>, cigars?:Array<Cigar>,
169
- pipelined:boolean = false): Uint8Array {
170
- let msg = new Uint8Array(b(serder.raw))
171
- let atc = new Uint8Array()
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(`Missing attached signatures on message = ${serder.ked}.`)
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
- throw new Error(`Index sig group seals not yet supported`)
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(atc, new Counter({code: CtrDex.ControllerIdxSigs, count: sigers.length}).qb64b)
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(atc, new Counter({code: CtrDex.ControllerIdxSigs, count: wigers.length}).qb64b)
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(`Attempt to use tranferable prefix=${wiger.verfer.qb64} for receipt.`)
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(atc, new Counter({code: CtrDex.ControllerIdxSigs, count: cigars.length}).qb64b)
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(`Attempt to use tranferable prefix=${cigar.verfer.qb64} for receipt.`)
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(`Invalid attachments size=${atc.length}, nonintegral quadlets.`)
504
+ throw new Error(
505
+ `Invalid attachments size=${atc.length}, nonintegral quadlets.`
506
+ );
213
507
  }
214
- msg = concat(msg, new Counter({code: CtrDex.AttachedMaterialQuadlets, count: (Math.floor(atc.length / 4))}).qb64b)
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
- return msg
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
+ }