signify-ts 0.2.0 → 0.3.0-dev.e31e78d

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 (129) hide show
  1. package/README.md +104 -34
  2. package/dist/exports.d.ts +40 -40
  3. package/dist/exports.js +40 -0
  4. package/dist/index.d.ts +2 -3
  5. package/dist/index.js +3 -8
  6. package/dist/keri/app/aiding.d.ts +54 -18
  7. package/{src/keri/app/aiding.ts → dist/keri/app/aiding.js} +130 -236
  8. package/dist/keri/app/clienting.d.ts +59 -22
  9. package/{src/keri/app/clienting.ts → dist/keri/app/clienting.js} +146 -235
  10. package/dist/keri/app/contacting.d.ts +30 -23
  11. package/{src/keri/app/contacting.ts → dist/keri/app/contacting.js} +26 -63
  12. package/dist/keri/app/controller.d.ts +49 -6
  13. package/{src/keri/app/controller.ts → dist/keri/app/controller.js} +80 -186
  14. package/dist/keri/app/coring.d.ts +134 -25
  15. package/{src/keri/app/coring.ts → dist/keri/app/coring.js} +83 -56
  16. package/dist/keri/app/credentialing.d.ts +191 -67
  17. package/dist/keri/app/credentialing.js +540 -0
  18. package/dist/keri/app/delegating.d.ts +18 -0
  19. package/dist/keri/app/delegating.js +24 -0
  20. package/dist/keri/app/escrowing.d.ts +5 -3
  21. package/{src/keri/app/escrowing.ts → dist/keri/app/escrowing.js} +3 -9
  22. package/dist/keri/app/exchanging.d.ts +243 -11
  23. package/dist/keri/app/exchanging.js +242 -0
  24. package/dist/keri/app/grouping.d.ts +11 -9
  25. package/{src/keri/app/grouping.ts → dist/keri/app/grouping.js} +10 -29
  26. package/dist/keri/app/habery.d.ts +2 -2
  27. package/dist/keri/app/habery.js +117 -0
  28. package/dist/keri/app/notifying.d.ts +2 -2
  29. package/{src/keri/app/notifying.ts → dist/keri/app/notifying.js} +7 -17
  30. package/dist/keri/core/authing.d.ts +2 -2
  31. package/{src/keri/core/authing.ts → dist/keri/core/authing.js} +26 -42
  32. package/dist/keri/core/base64.d.ts +2 -0
  33. package/dist/keri/core/base64.js +16 -0
  34. package/dist/keri/core/bexter.d.ts +1 -1
  35. package/{src/keri/core/bexter.ts → dist/keri/core/bexter.js} +18 -32
  36. package/dist/keri/core/cigar.d.ts +2 -2
  37. package/dist/keri/core/cigar.js +13 -0
  38. package/dist/keri/core/cipher.d.ts +1 -1
  39. package/{src/keri/core/cipher.ts → dist/keri/core/cipher.js} +10 -19
  40. package/dist/keri/core/core.d.ts +117 -9
  41. package/dist/keri/core/core.js +385 -0
  42. package/dist/keri/core/counter.d.ts +2 -2
  43. package/dist/keri/core/counter.js +221 -0
  44. package/dist/keri/core/decrypter.d.ts +4 -4
  45. package/{src/keri/core/decrypter.ts → dist/keri/core/decrypter.js} +23 -40
  46. package/dist/keri/core/diger.d.ts +3 -3
  47. package/{src/keri/core/diger.ts → dist/keri/core/diger.js} +18 -33
  48. package/dist/keri/core/encrypter.d.ts +2 -2
  49. package/{src/keri/core/encrypter.ts → dist/keri/core/encrypter.js} +18 -38
  50. package/dist/keri/core/eventing.d.ts +6 -6
  51. package/dist/keri/core/eventing.js +383 -0
  52. package/dist/keri/core/httping.d.ts +11 -4
  53. package/{src/keri/core/httping.ts → dist/keri/core/httping.js} +36 -101
  54. package/dist/keri/core/indexer.d.ts +1 -1
  55. package/dist/keri/core/indexer.js +407 -0
  56. package/dist/keri/core/keeping.d.ts +113 -46
  57. package/dist/keri/core/keeping.js +347 -0
  58. package/{src/keri/core/kering.ts → dist/keri/core/kering.js} +1 -3
  59. package/dist/keri/core/keyState.d.ts +98 -0
  60. package/dist/keri/core/manager.d.ts +147 -12
  61. package/dist/keri/core/manager.js +880 -0
  62. package/dist/keri/core/matter.d.ts +1 -1
  63. package/dist/keri/core/matter.js +460 -0
  64. package/dist/keri/core/number.d.ts +2 -2
  65. package/{src/keri/core/number.ts → dist/keri/core/number.js} +26 -32
  66. package/dist/keri/core/pather.d.ts +2 -2
  67. package/{src/keri/core/pather.ts → dist/keri/core/pather.js} +12 -27
  68. package/dist/keri/core/prefixer.d.ts +10 -10
  69. package/dist/keri/core/prefixer.js +182 -0
  70. package/dist/keri/core/saider.d.ts +2 -12
  71. package/dist/keri/core/saider.js +107 -0
  72. package/dist/keri/core/salter.d.ts +44 -9
  73. package/dist/keri/core/salter.js +110 -0
  74. package/dist/keri/core/seqner.d.ts +1 -1
  75. package/{src/keri/core/seqner.ts → dist/keri/core/seqner.js} +20 -21
  76. package/dist/keri/core/serder.d.ts +25 -12
  77. package/dist/keri/core/serder.js +133 -0
  78. package/dist/keri/core/siger.d.ts +2 -2
  79. package/{src/keri/core/siger.ts → dist/keri/core/siger.js} +4 -14
  80. package/dist/keri/core/signer.d.ts +4 -4
  81. package/dist/keri/core/signer.js +84 -0
  82. package/{src/keri/core/tholder.ts → dist/keri/core/tholder.js} +69 -94
  83. package/dist/keri/core/utils.d.ts +1 -1
  84. package/{src/keri/core/utils.ts → dist/keri/core/utils.js} +30 -60
  85. package/dist/keri/core/vdring.d.ts +2 -2
  86. package/dist/keri/core/vdring.js +61 -0
  87. package/dist/keri/core/verfer.d.ts +2 -6
  88. package/dist/keri/core/verfer.js +37 -0
  89. package/dist/keri/end/ending.d.ts +10 -8
  90. package/dist/keri/end/ending.js +136 -0
  91. package/{src/ready.ts → dist/ready.js} +1 -2
  92. package/dist/types/keria-api-schema.d.ts +1158 -0
  93. package/dist/types/keria-api-schema.js +34 -0
  94. package/package.json +53 -52
  95. package/dist/math.d.ts +0 -1
  96. package/dist/signify-ts.cjs +0 -7835
  97. package/dist/signify-ts.cjs.development.js +0 -9501
  98. package/dist/signify-ts.cjs.development.js.map +0 -1
  99. package/dist/signify-ts.cjs.map +0 -7
  100. package/dist/signify-ts.cjs.production.min.js +0 -2
  101. package/dist/signify-ts.cjs.production.min.js.map +0 -1
  102. package/dist/signify-ts.esm.js +0 -9345
  103. package/dist/signify-ts.esm.js.map +0 -1
  104. package/dist/signify-ts.mjs +0 -7811
  105. package/dist/signify-ts.mjs.map +0 -7
  106. package/src/buffer-polyfill.ts +0 -5
  107. package/src/exports.ts +0 -44
  108. package/src/index.ts +0 -4
  109. package/src/keri/app/credentialing.ts +0 -820
  110. package/src/keri/app/exchanging.ts +0 -220
  111. package/src/keri/app/habery.ts +0 -185
  112. package/src/keri/core/cigar.ts +0 -18
  113. package/src/keri/core/core.ts +0 -326
  114. package/src/keri/core/counter.ts +0 -273
  115. package/src/keri/core/eventing.ts +0 -581
  116. package/src/keri/core/indexer.ts +0 -509
  117. package/src/keri/core/keeping.ts +0 -684
  118. package/src/keri/core/manager.ts +0 -1183
  119. package/src/keri/core/matter.ts +0 -521
  120. package/src/keri/core/prefixer.ts +0 -233
  121. package/src/keri/core/saider.ts +0 -186
  122. package/src/keri/core/salter.ts +0 -120
  123. package/src/keri/core/serder.ts +0 -163
  124. package/src/keri/core/signer.ts +0 -133
  125. package/src/keri/core/vdring.ts +0 -94
  126. package/src/keri/core/verfer.ts +0 -47
  127. package/src/keri/end/ending.ts +0 -170
  128. package/src/math.ts +0 -3
  129. /package/dist/{buffer-polyfill.d.ts → keri/core/keyState.js} +0 -0
@@ -0,0 +1,383 @@
1
+ import { b, concat, Protocols, Ilks, Serials, versify, Vrsn_1_0, } from "./core.js";
2
+ import { Tholder } from "./tholder.js";
3
+ import { CesrNumber } from "./number.js";
4
+ import { Prefixer } from "./prefixer.js";
5
+ import { Serder } from "./serder.js";
6
+ import { MtrDex, NonTransDex } from "./matter.js";
7
+ import { Saider } from "./saider.js";
8
+ import { Counter, CtrDex } from "./counter.js";
9
+ import { Seqner } from "./seqner.js";
10
+ const MaxIntThold = 2 ** 32 - 1;
11
+ export function rotate({ pre = undefined, keys, dig = undefined, ilk = Ilks.rot, sn = 1, isith = undefined, ndigs = undefined, nsith = undefined, wits = undefined, cuts = [], adds = [], toad = undefined, data = undefined, version = undefined, kind = undefined, intive = true, }) {
12
+ const vs = versify(Protocols.KERI, version, kind, 0);
13
+ const _ilk = ilk;
14
+ if (_ilk != Ilks.rot && _ilk != Ilks.drt) {
15
+ throw new Error(`Invalid ilk = ${ilk} for rot or drt.`);
16
+ }
17
+ const sner = new CesrNumber({}, sn);
18
+ if (sner.num < 1) {
19
+ throw new Error(`Invalid sn = 0x${sner.numh} for rot or drt.`);
20
+ }
21
+ let _isit;
22
+ if (isith == undefined) {
23
+ _isit = Math.max(1, Math.ceil(keys.length / 2));
24
+ }
25
+ else {
26
+ _isit = isith; // TODO this type as number does not make sense when isith is a string containing weighted thresholds
27
+ }
28
+ const tholder = new Tholder({ sith: _isit });
29
+ if (tholder.num != undefined && tholder.num < 1) {
30
+ throw new Error(`Invalid sith = ${tholder.num} less than 1.`);
31
+ }
32
+ if (tholder.size > keys.length) {
33
+ // TODO this error should say that the threshold has not been met
34
+ throw new Error(`Invalid sith = ${tholder.num} for keys = ${keys}`);
35
+ }
36
+ let _ndigs;
37
+ if (ndigs === undefined) {
38
+ _ndigs = [];
39
+ }
40
+ else {
41
+ _ndigs = ndigs;
42
+ }
43
+ let _nsith;
44
+ if (nsith === undefined) {
45
+ _nsith = Math.max(1, Math.ceil(_ndigs.length / 2));
46
+ }
47
+ else {
48
+ _nsith = nsith;
49
+ }
50
+ const ntholder = new Tholder({ sith: _nsith });
51
+ if (ntholder.num != undefined && ntholder.num < 1) {
52
+ throw new Error(`Invalid sith = ${ntholder.num} less than 1.`);
53
+ }
54
+ if (ntholder.size > _ndigs.length) {
55
+ // TODO this error should say that the threshold has not been met
56
+ throw new Error(`Signing threshold failure: ${keys.length} number of signers not equal to or greater than sith = ${tholder.size} for keys = ${keys}`);
57
+ }
58
+ let _wits;
59
+ if (wits === undefined) {
60
+ _wits = [];
61
+ }
62
+ else {
63
+ _wits = wits;
64
+ }
65
+ const witset = new Set(_wits);
66
+ if (witset.size != _wits.length) {
67
+ throw new Error(`Invalid wits = ${wits}, has duplicates.`);
68
+ }
69
+ const cutset = new Set(cuts);
70
+ if (cutset.size != cuts.length) {
71
+ throw new Error(`Invalid cuts = ${cuts}, has duplicates.`);
72
+ }
73
+ const addset = new Set(adds);
74
+ if (addset.size != adds.length) {
75
+ throw new Error(`Invalid adds = ${adds}, has duplicates.`);
76
+ }
77
+ //non empty intersection of witset and addset
78
+ const witaddset = new Set([...witset].filter((x) => addset.has(x)));
79
+ if (witaddset.size > 0) {
80
+ throw new Error(`Invalid member combination among wits = ${wits}, and adds = ${adds}.`);
81
+ }
82
+ // non empty intersection of cutset and addset
83
+ const cutaddset = new Set([...cutset].filter((x) => addset.has(x)));
84
+ if (cutaddset.size > 0) {
85
+ throw new Error(`Invalid member combination among cuts = ${cuts}, and adds = ${adds}.`);
86
+ }
87
+ const newitsetdiff = new Set(_wits);
88
+ cuts.forEach(function (v) {
89
+ newitsetdiff.delete(v);
90
+ });
91
+ const newitset = new Set((function* () {
92
+ yield* newitsetdiff;
93
+ yield* addset;
94
+ })());
95
+ if (newitset.size != witset.size - cutset.size + addset.size) {
96
+ throw new Error(`Invalid member combination among wits = ${wits}, cuts = ${cuts}, and adds = ${adds}.`);
97
+ }
98
+ let _toad;
99
+ if (toad === undefined) {
100
+ if (newitset.size == 0) {
101
+ _toad = 0;
102
+ }
103
+ else {
104
+ _toad = ample(newitset.size);
105
+ }
106
+ }
107
+ else {
108
+ _toad = toad;
109
+ }
110
+ if (newitset.size > 0) {
111
+ if (_toad < 1 || _toad > newitset.size) {
112
+ throw new Error(`Invalid toad = ${_toad} for wit = ${wits}`);
113
+ }
114
+ }
115
+ else {
116
+ if (_toad != 0) {
117
+ throw new Error(`Invalid toad = ${_toad} for wit = ${wits}`);
118
+ }
119
+ }
120
+ const _sad = {
121
+ v: vs,
122
+ t: _ilk,
123
+ d: '',
124
+ i: pre,
125
+ s: sner.numh,
126
+ p: dig,
127
+ kt: tholder.num &&
128
+ intive &&
129
+ tholder.num !== undefined &&
130
+ tholder.num <= MaxIntThold
131
+ ? tholder.num.toString(16)
132
+ : tholder.sith,
133
+ k: keys,
134
+ nt: ntholder.num &&
135
+ intive &&
136
+ ntholder.num !== undefined &&
137
+ ntholder.num <= MaxIntThold
138
+ ? ntholder.num.toString(16)
139
+ : ntholder.sith,
140
+ n: _ndigs,
141
+ bt: _toad && intive && _toad !== undefined && _toad <= MaxIntThold
142
+ ? _toad
143
+ : _toad.toString(16),
144
+ br: cuts,
145
+ ba: adds,
146
+ a: data != undefined ? data : [],
147
+ };
148
+ const [, sad] = Saider.saidify(_sad);
149
+ return new Serder(sad);
150
+ }
151
+ export function ample(n, f, weak = true) {
152
+ n = Math.max(0, n); // no negatives
153
+ let f1;
154
+ if (f == undefined) {
155
+ f1 = Math.max(1, Math.floor(Math.max(0, n - 1) / 3)); // least floor f subject to n >= 3*f+1
156
+ const f2 = Math.max(1, Math.ceil(Math.max(0, n - 1) / 3)); // most Math.ceil f subject to n >= 3*f+1
157
+ if (weak) {
158
+ // try both fs to see which one has lowest m
159
+ return Math.min(n, Math.ceil((n + f1 + 1) / 2), Math.ceil((n + f2 + 1) / 2));
160
+ }
161
+ else {
162
+ return Math.min(n, Math.max(0, n - f1, Math.ceil((n + f1 + 1) / 2)));
163
+ }
164
+ }
165
+ else {
166
+ f = Math.max(0, f);
167
+ const m1 = Math.ceil((n + f + 1) / 2);
168
+ const m2 = Math.max(0, n - f);
169
+ if (m2 < m1 && n > 0) {
170
+ throw new Error(`Invalid f=${f} is too big for n=${n}.`);
171
+ }
172
+ if (weak) {
173
+ return Math.min(n, m1, m2);
174
+ }
175
+ else {
176
+ return Math.min(n, Math.max(m1, m2));
177
+ }
178
+ }
179
+ }
180
+ export function incept({ keys, isith, ndigs, nsith, toad, wits, cnfg, data, version = Vrsn_1_0, kind = Serials.JSON, code, intive = false, delpre, }) {
181
+ const vs = versify(Protocols.KERI, version, kind, 0);
182
+ const ilk = delpre == undefined ? Ilks.icp : Ilks.dip;
183
+ const sner = new CesrNumber({}, 0);
184
+ if (isith == undefined) {
185
+ isith = Math.max(1, Math.ceil(keys.length / 2));
186
+ }
187
+ const tholder = new Tholder({ sith: isith });
188
+ if (tholder.num != undefined && tholder.num < 1) {
189
+ throw new Error(`Invalid sith = ${tholder.num} less than 1.`);
190
+ }
191
+ if (tholder.size > keys.length) {
192
+ throw new Error(`Invalid sith = ${tholder.num} for keys ${keys}`);
193
+ }
194
+ if (ndigs == undefined) {
195
+ ndigs = new Array();
196
+ }
197
+ if (nsith == undefined) {
198
+ nsith = Math.max(0, Math.ceil(ndigs.length / 2));
199
+ }
200
+ const ntholder = new Tholder({ sith: nsith });
201
+ if (ntholder.num != undefined && ntholder.num < 0) {
202
+ throw new Error(`Invalid nsith = ${ntholder.num} less than 0.`);
203
+ }
204
+ if (ntholder.size > keys.length) {
205
+ throw new Error(`Invalid nsith = ${ntholder.num} for keys ${ndigs}`);
206
+ }
207
+ wits = wits == undefined ? [] : wits;
208
+ if (new Set(wits).size != wits.length) {
209
+ throw new Error(`Invalid wits = ${wits}, has duplicates.`);
210
+ }
211
+ if (toad == undefined) {
212
+ if (wits.length == 0) {
213
+ toad = 0;
214
+ }
215
+ else {
216
+ toad = ample(wits.length);
217
+ }
218
+ }
219
+ const toader = new CesrNumber({}, toad);
220
+ if (wits.length > 0) {
221
+ if (toader.num < 1 || toader.num > wits.length) {
222
+ throw new Error(`Invalid toad = ${toader.num} for wits = ${wits}`);
223
+ }
224
+ }
225
+ else {
226
+ if (toader.num != 0) {
227
+ throw new Error(`Invalid toad = ${toader.num} for wits = ${wits}`);
228
+ }
229
+ }
230
+ cnfg = cnfg == undefined ? new Array() : cnfg;
231
+ data = data == undefined ? new Array() : data;
232
+ let sad = {
233
+ v: vs,
234
+ t: ilk,
235
+ d: '',
236
+ i: '',
237
+ s: sner.numh,
238
+ kt: intive && tholder.num != undefined ? tholder.num : tholder.sith,
239
+ k: keys,
240
+ nt: intive && tholder.num != undefined ? ntholder.num : ntholder.sith,
241
+ n: ndigs,
242
+ bt: intive ? toader.num : toader.numh,
243
+ b: wits,
244
+ c: cnfg,
245
+ a: data,
246
+ };
247
+ if (delpre != undefined) {
248
+ sad['di'] = delpre;
249
+ if (code == undefined) {
250
+ code = MtrDex.Blake3_256;
251
+ }
252
+ }
253
+ let prefixer;
254
+ if (delpre == undefined && code == undefined && keys.length == 1) {
255
+ prefixer = new Prefixer({ qb64: keys[0] });
256
+ if (prefixer.digestive) {
257
+ throw new Error(`Invalid code, digestive=${prefixer.code}, must be derived from ked.`);
258
+ }
259
+ }
260
+ else {
261
+ prefixer = new Prefixer({ code: code }, sad);
262
+ if (delpre != undefined) {
263
+ if (!prefixer.digestive) {
264
+ throw new Error(`Invalid derivation code = ${prefixer.code} for delegation. Must be digestive`);
265
+ }
266
+ }
267
+ }
268
+ sad['i'] = prefixer.qb64;
269
+ if (prefixer.digestive) {
270
+ sad['d'] = prefixer.qb64;
271
+ }
272
+ else {
273
+ [, sad] = Saider.saidify(sad);
274
+ }
275
+ return new Serder(sad);
276
+ }
277
+ export function messagize(serder, sigers, seal, wigers, cigars, pipelined = false) {
278
+ let msg = new Uint8Array(b(serder.raw));
279
+ let atc = new Uint8Array();
280
+ if (sigers == undefined && wigers == undefined && cigars == undefined) {
281
+ throw new Error(`Missing attached signatures on message = ${serder.sad}.`);
282
+ }
283
+ if (sigers != undefined) {
284
+ if (seal != undefined) {
285
+ if (seal[0] == 'SealEvent') {
286
+ atc = concat(atc, new Counter({ code: CtrDex.TransIdxSigGroups, count: 1 })
287
+ .qb64b);
288
+ atc = concat(atc, new TextEncoder().encode(seal[1].i));
289
+ atc = concat(atc, new Seqner({ sn: parseInt(seal[1].s) }).qb64b);
290
+ atc = concat(atc, new TextEncoder().encode(seal[1].d));
291
+ }
292
+ else if (seal[0] == 'SealLast') {
293
+ atc = concat(atc, new Counter({
294
+ code: CtrDex.TransLastIdxSigGroups,
295
+ count: 1,
296
+ }).qb64b);
297
+ atc = concat(atc, new TextEncoder().encode(seal[1].i));
298
+ }
299
+ }
300
+ atc = concat(atc, new Counter({
301
+ code: CtrDex.ControllerIdxSigs,
302
+ count: sigers.length,
303
+ }).qb64b);
304
+ sigers.forEach((siger) => {
305
+ atc = concat(atc, siger.qb64b);
306
+ });
307
+ }
308
+ if (wigers != undefined) {
309
+ atc = concat(atc, new Counter({
310
+ code: CtrDex.ControllerIdxSigs,
311
+ count: wigers.length,
312
+ }).qb64b);
313
+ wigers.forEach((wiger) => {
314
+ if (wiger.verfer && !(wiger.verfer.code in NonTransDex)) {
315
+ throw new Error(`Attempt to use tranferable prefix=${wiger.verfer.qb64} for receipt.`);
316
+ }
317
+ atc = concat(atc, wiger.qb64b);
318
+ });
319
+ }
320
+ if (cigars != undefined) {
321
+ atc = concat(atc, new Counter({
322
+ code: CtrDex.ControllerIdxSigs,
323
+ count: cigars.length,
324
+ }).qb64b);
325
+ cigars.forEach((cigar) => {
326
+ if (cigar.verfer && !(cigar.verfer.code in NonTransDex)) {
327
+ throw new Error(`Attempt to use tranferable prefix=${cigar.verfer.qb64} for receipt.`);
328
+ }
329
+ atc = concat(atc, cigar.qb64b);
330
+ });
331
+ }
332
+ if (pipelined) {
333
+ if (atc.length % 4 != 0) {
334
+ throw new Error(`Invalid attachments size=${atc.length}, nonintegral quadlets.`);
335
+ }
336
+ msg = concat(msg, new Counter({
337
+ code: CtrDex.AttachedMaterialQuadlets,
338
+ count: Math.floor(atc.length / 4),
339
+ }).qb64b);
340
+ }
341
+ msg = concat(msg, atc);
342
+ return msg;
343
+ }
344
+ export function interact(args) {
345
+ let { pre, dig, sn, data, version, kind } = args;
346
+ const vs = versify(Protocols.KERI, version, kind, 0);
347
+ const ilk = Ilks.ixn;
348
+ const sner = new CesrNumber({}, sn);
349
+ if (sner.num < 1) {
350
+ throw new Error(`Invalid sn = 0x${sner.numh} for ixn.`);
351
+ }
352
+ data = data == undefined ? new Array() : data;
353
+ let sad = {
354
+ v: vs,
355
+ t: ilk,
356
+ d: '',
357
+ i: pre,
358
+ s: sner.numh,
359
+ p: dig,
360
+ a: data,
361
+ };
362
+ [, sad] = Saider.saidify(sad);
363
+ return new Serder(sad);
364
+ }
365
+ export function reply(route = '', data, stamp, version, kind = Serials.JSON) {
366
+ const vs = versify(Protocols.KERI, version, kind, 0);
367
+ if (data == undefined) {
368
+ data = {};
369
+ }
370
+ const _sad = {
371
+ v: vs,
372
+ t: Ilks.rpy,
373
+ d: '',
374
+ dt: stamp !== null && stamp !== void 0 ? stamp : new Date().toISOString().replace('Z', '000+00:00'),
375
+ r: route,
376
+ a: data,
377
+ };
378
+ const [, sad] = Saider.saidify(_sad);
379
+ const saider = new Saider({ qb64: sad['d'] });
380
+ if (!saider.verify(sad, true, true, kind, 'd'))
381
+ throw new Error(`Invalid said = ${saider.qb64} for reply msg=${sad}.`);
382
+ return new Serder(sad);
383
+ }
@@ -1,6 +1,8 @@
1
- import { Signer } from './signer';
2
- import { Cigar } from './cigar';
3
- import { Siger } from './siger';
1
+ import { Signer } from './signer.ts';
2
+ import { Cigar } from './cigar.ts';
3
+ import { Siger } from './siger.ts';
4
+ export declare const HEADER_SIG_INPUT: string;
5
+ export declare const HEADER_SIG_TIME: string;
4
6
  export declare function normalize(header: string): string;
5
7
  export interface SiginputArgs {
6
8
  name: string;
@@ -14,7 +16,12 @@ export interface SiginputArgs {
14
16
  keyid?: string;
15
17
  context?: string;
16
18
  }
17
- export declare function siginput(signer: Signer, { name, method, path, headers, fields, expires, nonce, alg, keyid, context, }: SiginputArgs): [Map<string, string>, Siger | Cigar];
19
+ /**
20
+ * Generates, serializes, and signs a Signature-Input HTTP header value as a structured header
21
+ * @param signer
22
+ * @param sigInputArgs
23
+ */
24
+ export declare function siginput(signer: Signer, sigInputArgs: SiginputArgs): [Map<string, string>, Siger | Cigar];
18
25
  export declare class Unqualified {
19
26
  private readonly _raw;
20
27
  constructor(raw: Uint8Array);
@@ -1,53 +1,21 @@
1
- import {
2
- serializeDictionary,
3
- Dictionary,
4
- parseDictionary,
5
- Item,
6
- Parameters,
7
- } from 'structured-headers';
8
- import { Signer } from './signer';
9
- import { b } from './core';
10
- import { Cigar } from './cigar';
11
- import { nowUTC } from './utils';
12
- import { Siger } from './siger';
13
- import Base64 from 'urlsafe-base64';
14
- import { Buffer } from 'buffer';
15
-
16
- export function normalize(header: string) {
1
+ import { serializeDictionary, parseDictionary, } from 'structured-headers';
2
+ import { b } from "./core.js";
3
+ import { nowUTC } from "./utils.js";
4
+ import { encodeBase64Url } from "./base64.js";
5
+ export const HEADER_SIG_INPUT = normalize('Signature-Input');
6
+ export const HEADER_SIG_TIME = normalize('Signify-Timestamp');
7
+ export function normalize(header) {
17
8
  return header.trim();
18
9
  }
19
-
20
- export interface SiginputArgs {
21
- name: string;
22
- method: string;
23
- path: string;
24
- headers: Headers;
25
- fields: Array<string>;
26
- expires?: number;
27
- nonce?: string;
28
- alg?: string;
29
- keyid?: string;
30
- context?: string;
31
- }
32
-
33
- export function siginput(
34
- signer: Signer,
35
- {
36
- name,
37
- method,
38
- path,
39
- headers,
40
- fields,
41
- expires,
42
- nonce,
43
- alg,
44
- keyid,
45
- context,
46
- }: SiginputArgs
47
- ): [Map<string, string>, Siger | Cigar] {
48
- const items = new Array<string>();
49
- const ifields = new Array<[string, Map<string, string>]>();
50
-
10
+ /**
11
+ * Generates, serializes, and signs a Signature-Input HTTP header value as a structured header
12
+ * @param signer
13
+ * @param sigInputArgs
14
+ */
15
+ export function siginput(signer, sigInputArgs) {
16
+ const { name, method, path, headers, fields, expires, nonce, alg, keyid, context, } = sigInputArgs;
17
+ const items = new Array();
18
+ const ifields = new Array();
51
19
  fields.forEach((field) => {
52
20
  if (field.startsWith('@')) {
53
21
  switch (field) {
@@ -60,19 +28,18 @@ export function siginput(
60
28
  ifields.push([field, new Map()]);
61
29
  break;
62
30
  }
63
- } else {
64
- if (!headers.has(field)) return;
65
-
31
+ }
32
+ else {
33
+ if (!headers.has(field))
34
+ return;
66
35
  ifields.push([field, new Map()]);
67
- const value = normalize(headers.get(field)!);
36
+ const value = normalize(headers.get(field));
68
37
  items.push(`"${field}": ${value}`);
69
38
  }
70
39
  });
71
-
72
- const nameParams = new Map<string, string | number>();
40
+ const nameParams = new Map();
73
41
  const now = Math.floor(nowUTC().getTime() / 1000);
74
42
  nameParams.set('created', now);
75
-
76
43
  const values = [
77
44
  `(${ifields.map((field) => field[0]).join(' ')})`,
78
45
  `created=${now}`,
@@ -98,90 +65,61 @@ export function siginput(
98
65
  nameParams.set('alg', alg);
99
66
  }
100
67
  const sid = new Map([[name, [ifields, nameParams]]]);
101
-
102
68
  const params = values.join(';');
103
69
  items.push(`"@signature-params: ${params}"`);
104
-
105
70
  const ser = items.join('\n');
106
71
  const sig = signer.sign(b(ser));
107
-
108
72
  return [
109
- new Map<string, string>([
110
- ['Signature-Input', `${serializeDictionary(sid as Dictionary)}`],
73
+ new Map([
74
+ [HEADER_SIG_INPUT, `${serializeDictionary(sid)}`],
111
75
  ]),
112
76
  sig,
113
77
  ];
114
78
  }
115
-
116
79
  export class Unqualified {
117
- private readonly _raw: Uint8Array;
118
-
119
- constructor(raw: Uint8Array) {
80
+ constructor(raw) {
120
81
  this._raw = raw;
121
82
  }
122
-
123
- get qb64(): string {
124
- return Base64.encode(Buffer.from(this._raw));
83
+ get qb64() {
84
+ return encodeBase64Url(this._raw);
125
85
  }
126
-
127
- get qb64b(): Uint8Array {
86
+ get qb64b() {
128
87
  return b(this.qb64);
129
88
  }
130
89
  }
131
-
132
90
  export class Inputage {
133
- public name: any;
134
- public fields: any;
135
- public created: any;
136
- public expires: any;
137
- public nonce: any;
138
- public alg: any;
139
- public keyid: any;
140
- public context: any;
141
91
  }
142
-
143
- export function desiginput(value: string): Array<Inputage> {
92
+ export function desiginput(value) {
144
93
  const sid = parseDictionary(value);
145
- const siginputs = new Array<Inputage>();
146
-
94
+ const siginputs = new Array();
147
95
  sid.forEach((value, key) => {
148
96
  const siginput = new Inputage();
149
97
  siginput.name = key;
150
- let list: Item[];
98
+ let list;
151
99
  let params;
152
- [list, params] = value as [Item[], Parameters];
100
+ [list, params] = value;
153
101
  siginput.fields = list.map((item) => item[0]);
154
-
155
102
  if (!params.has('created')) {
156
- throw new Error(
157
- 'missing required `created` field from signature input'
158
- );
103
+ throw new Error('missing required `created` field from signature input');
159
104
  }
160
105
  siginput.created = params.get('created');
161
-
162
106
  if (params.has('expires')) {
163
107
  siginput.expires = params.get('expires');
164
108
  }
165
-
166
109
  if (params.has('nonce')) {
167
110
  siginput.nonce = params.get('nonce');
168
111
  }
169
-
170
112
  if (params.has('alg')) {
171
113
  siginput.alg = params.get('alg');
172
114
  }
173
-
174
115
  if (params.has('keyid')) {
175
116
  siginput.keyid = params.get('keyid');
176
117
  }
177
-
178
118
  if (params.has('context')) {
179
119
  siginput.context = params.get('context');
180
120
  }
181
-
182
121
  siginputs.push(siginput);
183
122
  });
184
-
185
123
  return siginputs;
186
124
  }
187
125
  /** Parse start, end and total from HTTP Content-Range header value
@@ -189,21 +127,18 @@ export function desiginput(value: string): Array<Inputage> {
189
127
  * @param {string} typ - type of range, e.g. "aids"
190
128
  * @returns {start: number, end: number, total: number} - object with start, end and total properties
191
129
  */
192
- export function parseRangeHeaders(
193
- header: string | null,
194
- typ: string
195
- ): { start: number; end: number; total: number } {
130
+ export function parseRangeHeaders(header, typ) {
196
131
  if (header !== null) {
197
132
  const data = header.replace(`${typ} `, '');
198
133
  const values = data.split('/');
199
134
  const rng = values[0].split('-');
200
-
201
135
  return {
202
136
  start: parseInt(rng[0]),
203
137
  end: parseInt(rng[1]),
204
138
  total: parseInt(values[1]),
205
139
  };
206
- } else {
140
+ }
141
+ else {
207
142
  return { start: 0, end: 0, total: 0 };
208
143
  }
209
144
  }
@@ -92,7 +92,7 @@ export declare class Indexer {
92
92
  get index(): number;
93
93
  get ondex(): number | undefined;
94
94
  get qb64(): string;
95
- get qb64b(): Uint8Array;
95
+ get qb64b(): Uint8Array<ArrayBufferLike>;
96
96
  private _infil;
97
97
  _exfil(qb64: string): void;
98
98
  }