@session.js/blinded-session-id 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # @session.js/blinded-session-id
2
+
3
+ Utility JavaScript library with methods to work with Session's blinded Session ID.
4
+
5
+ Example of normal Session ID:
6
+ `057aeb66e45660c3bdfb7c62706f6440226af43ec13f3b6f899c1dd4db1b8fce5b`
7
+
8
+ Example of blinded Session ID:
9
+ `15d9fd3a6c3c5ddf7500b862174f205ab27164232d9b10fe31f145e61629b676e3`
10
+
11
+ Blinded IDs are used on Session SOGS to conceal identity of room's users.
12
+
13
+ ## Usage
14
+
15
+ ```ts
16
+ import { blindSessionId } from '@session.js/blinded-session-id'
17
+
18
+ await blindSessionId({
19
+ sessionId: '057aeb66e45660c3bdfb7c62706f6440226af43ec13f3b6f899c1dd4db1b8fce5b',
20
+ serverPk: 'cb4fd6199b84dc3664f0373354341a01007ecaa99a388496fe8775b9b76a253b'
21
+ }) // => 15383d0a3ba605abe3b5b7343102be3fc0026056b9812e06f6daee3be62a6a56e3
22
+ ```
23
+
24
+ ## Advanced use
25
+
26
+ - generateBlindedIds — returns legacy and modern blinded id
27
+ - generateKAs — returns legacy and modern KAs as Uint8Array
28
+ - convertToX25519Key, convertToEd25519Key — self explanatory
29
+
30
+ ## Credit
31
+
32
+ Credit to li0ard, this code was mostly taken from [https://github.com/theinfinityway/session_id/](https://github.com/theinfinityway/session_id/)
33
+
34
+ ## Made for session.js
35
+
36
+ Use Session messenger programmatically with [Session.js](https://github.com/sessionjs/client): Session bots, custom Session clients, and more.
37
+
38
+ ## Donate
39
+
40
+ [hloth.dev/donate](https://hloth.dev/donate)
@@ -0,0 +1,9 @@
1
+ export declare function crypto_sign_curve25519_pk_to_ed25519(pk: Uint8Array): Uint8Array;
2
+ export declare const convertToEd25519Key: (key: string) => string;
3
+ export declare const convertToX25519Key: (key: string) => string;
4
+ export declare const generateKAs: (sessionId: string, serverPk: string) => Uint8Array[];
5
+ export declare const generateBlindedIds: (sessionId: string, serverPk: string) => string[];
6
+ export declare const blindSessionId: ({ sessionId, serverPk }: {
7
+ sessionId: string;
8
+ serverPk: string;
9
+ }) => string;
package/dist/index.js ADDED
@@ -0,0 +1,546 @@
1
+ // Huge thanks to li0ard for this code
2
+ // CREDIT: https://github.com/theinfinityway/session_id/
3
+ /* eslint-disable prefer-const */
4
+ import { cloneDeep } from 'lodash';
5
+ import sodium from 'libsodium-wrappers-sumo';
6
+ await sodium.ready;
7
+ function gf(init) {
8
+ let i, r = new Float64Array(16);
9
+ if (init)
10
+ for (i = 0; i < init.length; i++)
11
+ r[i] = init[i];
12
+ return r;
13
+ }
14
+ function unpack25519(o, n) {
15
+ let i;
16
+ for (i = 0; i < 16; i++)
17
+ o[i] = n[2 * i] + (n[2 * i + 1] << 8);
18
+ o[15] &= 0x7fff;
19
+ }
20
+ function A(o, a, b) {
21
+ for (let i = 0; i < 16; i++)
22
+ o[i] = a[i] + b[i];
23
+ }
24
+ function Z(o, a, b) {
25
+ for (let i = 0; i < 16; i++)
26
+ o[i] = a[i] - b[i];
27
+ }
28
+ function S(o, a) {
29
+ M(o, a, a);
30
+ }
31
+ function inv25519(o, i) {
32
+ const c = gf();
33
+ let a;
34
+ for (a = 0; a < 16; a++)
35
+ c[a] = i[a];
36
+ for (a = 253; a >= 0; a--) {
37
+ S(c, c);
38
+ if (a !== 2 && a !== 4)
39
+ M(c, c, i);
40
+ }
41
+ for (a = 0; a < 16; a++)
42
+ o[a] = c[a];
43
+ }
44
+ function M(o, a, b) {
45
+ let v, c, t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3], b4 = b[4], b5 = b[5], b6 = b[6], b7 = b[7], b8 = b[8], b9 = b[9], b10 = b[10], b11 = b[11], b12 = b[12], b13 = b[13], b14 = b[14], b15 = b[15];
46
+ v = a[0];
47
+ t0 += v * b0;
48
+ t1 += v * b1;
49
+ t2 += v * b2;
50
+ t3 += v * b3;
51
+ t4 += v * b4;
52
+ t5 += v * b5;
53
+ t6 += v * b6;
54
+ t7 += v * b7;
55
+ t8 += v * b8;
56
+ t9 += v * b9;
57
+ t10 += v * b10;
58
+ t11 += v * b11;
59
+ t12 += v * b12;
60
+ t13 += v * b13;
61
+ t14 += v * b14;
62
+ t15 += v * b15;
63
+ v = a[1];
64
+ t1 += v * b0;
65
+ t2 += v * b1;
66
+ t3 += v * b2;
67
+ t4 += v * b3;
68
+ t5 += v * b4;
69
+ t6 += v * b5;
70
+ t7 += v * b6;
71
+ t8 += v * b7;
72
+ t9 += v * b8;
73
+ t10 += v * b9;
74
+ t11 += v * b10;
75
+ t12 += v * b11;
76
+ t13 += v * b12;
77
+ t14 += v * b13;
78
+ t15 += v * b14;
79
+ t16 += v * b15;
80
+ v = a[2];
81
+ t2 += v * b0;
82
+ t3 += v * b1;
83
+ t4 += v * b2;
84
+ t5 += v * b3;
85
+ t6 += v * b4;
86
+ t7 += v * b5;
87
+ t8 += v * b6;
88
+ t9 += v * b7;
89
+ t10 += v * b8;
90
+ t11 += v * b9;
91
+ t12 += v * b10;
92
+ t13 += v * b11;
93
+ t14 += v * b12;
94
+ t15 += v * b13;
95
+ t16 += v * b14;
96
+ t17 += v * b15;
97
+ v = a[3];
98
+ t3 += v * b0;
99
+ t4 += v * b1;
100
+ t5 += v * b2;
101
+ t6 += v * b3;
102
+ t7 += v * b4;
103
+ t8 += v * b5;
104
+ t9 += v * b6;
105
+ t10 += v * b7;
106
+ t11 += v * b8;
107
+ t12 += v * b9;
108
+ t13 += v * b10;
109
+ t14 += v * b11;
110
+ t15 += v * b12;
111
+ t16 += v * b13;
112
+ t17 += v * b14;
113
+ t18 += v * b15;
114
+ v = a[4];
115
+ t4 += v * b0;
116
+ t5 += v * b1;
117
+ t6 += v * b2;
118
+ t7 += v * b3;
119
+ t8 += v * b4;
120
+ t9 += v * b5;
121
+ t10 += v * b6;
122
+ t11 += v * b7;
123
+ t12 += v * b8;
124
+ t13 += v * b9;
125
+ t14 += v * b10;
126
+ t15 += v * b11;
127
+ t16 += v * b12;
128
+ t17 += v * b13;
129
+ t18 += v * b14;
130
+ t19 += v * b15;
131
+ v = a[5];
132
+ t5 += v * b0;
133
+ t6 += v * b1;
134
+ t7 += v * b2;
135
+ t8 += v * b3;
136
+ t9 += v * b4;
137
+ t10 += v * b5;
138
+ t11 += v * b6;
139
+ t12 += v * b7;
140
+ t13 += v * b8;
141
+ t14 += v * b9;
142
+ t15 += v * b10;
143
+ t16 += v * b11;
144
+ t17 += v * b12;
145
+ t18 += v * b13;
146
+ t19 += v * b14;
147
+ t20 += v * b15;
148
+ v = a[6];
149
+ t6 += v * b0;
150
+ t7 += v * b1;
151
+ t8 += v * b2;
152
+ t9 += v * b3;
153
+ t10 += v * b4;
154
+ t11 += v * b5;
155
+ t12 += v * b6;
156
+ t13 += v * b7;
157
+ t14 += v * b8;
158
+ t15 += v * b9;
159
+ t16 += v * b10;
160
+ t17 += v * b11;
161
+ t18 += v * b12;
162
+ t19 += v * b13;
163
+ t20 += v * b14;
164
+ t21 += v * b15;
165
+ v = a[7];
166
+ t7 += v * b0;
167
+ t8 += v * b1;
168
+ t9 += v * b2;
169
+ t10 += v * b3;
170
+ t11 += v * b4;
171
+ t12 += v * b5;
172
+ t13 += v * b6;
173
+ t14 += v * b7;
174
+ t15 += v * b8;
175
+ t16 += v * b9;
176
+ t17 += v * b10;
177
+ t18 += v * b11;
178
+ t19 += v * b12;
179
+ t20 += v * b13;
180
+ t21 += v * b14;
181
+ t22 += v * b15;
182
+ v = a[8];
183
+ t8 += v * b0;
184
+ t9 += v * b1;
185
+ t10 += v * b2;
186
+ t11 += v * b3;
187
+ t12 += v * b4;
188
+ t13 += v * b5;
189
+ t14 += v * b6;
190
+ t15 += v * b7;
191
+ t16 += v * b8;
192
+ t17 += v * b9;
193
+ t18 += v * b10;
194
+ t19 += v * b11;
195
+ t20 += v * b12;
196
+ t21 += v * b13;
197
+ t22 += v * b14;
198
+ t23 += v * b15;
199
+ v = a[9];
200
+ t9 += v * b0;
201
+ t10 += v * b1;
202
+ t11 += v * b2;
203
+ t12 += v * b3;
204
+ t13 += v * b4;
205
+ t14 += v * b5;
206
+ t15 += v * b6;
207
+ t16 += v * b7;
208
+ t17 += v * b8;
209
+ t18 += v * b9;
210
+ t19 += v * b10;
211
+ t20 += v * b11;
212
+ t21 += v * b12;
213
+ t22 += v * b13;
214
+ t23 += v * b14;
215
+ t24 += v * b15;
216
+ v = a[10];
217
+ t10 += v * b0;
218
+ t11 += v * b1;
219
+ t12 += v * b2;
220
+ t13 += v * b3;
221
+ t14 += v * b4;
222
+ t15 += v * b5;
223
+ t16 += v * b6;
224
+ t17 += v * b7;
225
+ t18 += v * b8;
226
+ t19 += v * b9;
227
+ t20 += v * b10;
228
+ t21 += v * b11;
229
+ t22 += v * b12;
230
+ t23 += v * b13;
231
+ t24 += v * b14;
232
+ t25 += v * b15;
233
+ v = a[11];
234
+ t11 += v * b0;
235
+ t12 += v * b1;
236
+ t13 += v * b2;
237
+ t14 += v * b3;
238
+ t15 += v * b4;
239
+ t16 += v * b5;
240
+ t17 += v * b6;
241
+ t18 += v * b7;
242
+ t19 += v * b8;
243
+ t20 += v * b9;
244
+ t21 += v * b10;
245
+ t22 += v * b11;
246
+ t23 += v * b12;
247
+ t24 += v * b13;
248
+ t25 += v * b14;
249
+ t26 += v * b15;
250
+ v = a[12];
251
+ t12 += v * b0;
252
+ t13 += v * b1;
253
+ t14 += v * b2;
254
+ t15 += v * b3;
255
+ t16 += v * b4;
256
+ t17 += v * b5;
257
+ t18 += v * b6;
258
+ t19 += v * b7;
259
+ t20 += v * b8;
260
+ t21 += v * b9;
261
+ t22 += v * b10;
262
+ t23 += v * b11;
263
+ t24 += v * b12;
264
+ t25 += v * b13;
265
+ t26 += v * b14;
266
+ t27 += v * b15;
267
+ v = a[13];
268
+ t13 += v * b0;
269
+ t14 += v * b1;
270
+ t15 += v * b2;
271
+ t16 += v * b3;
272
+ t17 += v * b4;
273
+ t18 += v * b5;
274
+ t19 += v * b6;
275
+ t20 += v * b7;
276
+ t21 += v * b8;
277
+ t22 += v * b9;
278
+ t23 += v * b10;
279
+ t24 += v * b11;
280
+ t25 += v * b12;
281
+ t26 += v * b13;
282
+ t27 += v * b14;
283
+ t28 += v * b15;
284
+ v = a[14];
285
+ t14 += v * b0;
286
+ t15 += v * b1;
287
+ t16 += v * b2;
288
+ t17 += v * b3;
289
+ t18 += v * b4;
290
+ t19 += v * b5;
291
+ t20 += v * b6;
292
+ t21 += v * b7;
293
+ t22 += v * b8;
294
+ t23 += v * b9;
295
+ t24 += v * b10;
296
+ t25 += v * b11;
297
+ t26 += v * b12;
298
+ t27 += v * b13;
299
+ t28 += v * b14;
300
+ t29 += v * b15;
301
+ v = a[15];
302
+ t15 += v * b0;
303
+ t16 += v * b1;
304
+ t17 += v * b2;
305
+ t18 += v * b3;
306
+ t19 += v * b4;
307
+ t20 += v * b5;
308
+ t21 += v * b6;
309
+ t22 += v * b7;
310
+ t23 += v * b8;
311
+ t24 += v * b9;
312
+ t25 += v * b10;
313
+ t26 += v * b11;
314
+ t27 += v * b12;
315
+ t28 += v * b13;
316
+ t29 += v * b14;
317
+ t30 += v * b15;
318
+ t0 += 38 * t16;
319
+ t1 += 38 * t17;
320
+ t2 += 38 * t18;
321
+ t3 += 38 * t19;
322
+ t4 += 38 * t20;
323
+ t5 += 38 * t21;
324
+ t6 += 38 * t22;
325
+ t7 += 38 * t23;
326
+ t8 += 38 * t24;
327
+ t9 += 38 * t25;
328
+ t10 += 38 * t26;
329
+ t11 += 38 * t27;
330
+ t12 += 38 * t28;
331
+ t13 += 38 * t29;
332
+ t14 += 38 * t30;
333
+ // t15 left as is
334
+ // first car
335
+ c = 1;
336
+ v = t0 + c + 65535;
337
+ c = Math.floor(v / 65536);
338
+ t0 = v - c * 65536;
339
+ v = t1 + c + 65535;
340
+ c = Math.floor(v / 65536);
341
+ t1 = v - c * 65536;
342
+ v = t2 + c + 65535;
343
+ c = Math.floor(v / 65536);
344
+ t2 = v - c * 65536;
345
+ v = t3 + c + 65535;
346
+ c = Math.floor(v / 65536);
347
+ t3 = v - c * 65536;
348
+ v = t4 + c + 65535;
349
+ c = Math.floor(v / 65536);
350
+ t4 = v - c * 65536;
351
+ v = t5 + c + 65535;
352
+ c = Math.floor(v / 65536);
353
+ t5 = v - c * 65536;
354
+ v = t6 + c + 65535;
355
+ c = Math.floor(v / 65536);
356
+ t6 = v - c * 65536;
357
+ v = t7 + c + 65535;
358
+ c = Math.floor(v / 65536);
359
+ t7 = v - c * 65536;
360
+ v = t8 + c + 65535;
361
+ c = Math.floor(v / 65536);
362
+ t8 = v - c * 65536;
363
+ v = t9 + c + 65535;
364
+ c = Math.floor(v / 65536);
365
+ t9 = v - c * 65536;
366
+ v = t10 + c + 65535;
367
+ c = Math.floor(v / 65536);
368
+ t10 = v - c * 65536;
369
+ v = t11 + c + 65535;
370
+ c = Math.floor(v / 65536);
371
+ t11 = v - c * 65536;
372
+ v = t12 + c + 65535;
373
+ c = Math.floor(v / 65536);
374
+ t12 = v - c * 65536;
375
+ v = t13 + c + 65535;
376
+ c = Math.floor(v / 65536);
377
+ t13 = v - c * 65536;
378
+ v = t14 + c + 65535;
379
+ c = Math.floor(v / 65536);
380
+ t14 = v - c * 65536;
381
+ v = t15 + c + 65535;
382
+ c = Math.floor(v / 65536);
383
+ t15 = v - c * 65536;
384
+ t0 += c - 1 + 37 * (c - 1);
385
+ // second car
386
+ c = 1;
387
+ v = t0 + c + 65535;
388
+ c = Math.floor(v / 65536);
389
+ t0 = v - c * 65536;
390
+ v = t1 + c + 65535;
391
+ c = Math.floor(v / 65536);
392
+ t1 = v - c * 65536;
393
+ v = t2 + c + 65535;
394
+ c = Math.floor(v / 65536);
395
+ t2 = v - c * 65536;
396
+ v = t3 + c + 65535;
397
+ c = Math.floor(v / 65536);
398
+ t3 = v - c * 65536;
399
+ v = t4 + c + 65535;
400
+ c = Math.floor(v / 65536);
401
+ t4 = v - c * 65536;
402
+ v = t5 + c + 65535;
403
+ c = Math.floor(v / 65536);
404
+ t5 = v - c * 65536;
405
+ v = t6 + c + 65535;
406
+ c = Math.floor(v / 65536);
407
+ t6 = v - c * 65536;
408
+ v = t7 + c + 65535;
409
+ c = Math.floor(v / 65536);
410
+ t7 = v - c * 65536;
411
+ v = t8 + c + 65535;
412
+ c = Math.floor(v / 65536);
413
+ t8 = v - c * 65536;
414
+ v = t9 + c + 65535;
415
+ c = Math.floor(v / 65536);
416
+ t9 = v - c * 65536;
417
+ v = t10 + c + 65535;
418
+ c = Math.floor(v / 65536);
419
+ t10 = v - c * 65536;
420
+ v = t11 + c + 65535;
421
+ c = Math.floor(v / 65536);
422
+ t11 = v - c * 65536;
423
+ v = t12 + c + 65535;
424
+ c = Math.floor(v / 65536);
425
+ t12 = v - c * 65536;
426
+ v = t13 + c + 65535;
427
+ c = Math.floor(v / 65536);
428
+ t13 = v - c * 65536;
429
+ v = t14 + c + 65535;
430
+ c = Math.floor(v / 65536);
431
+ t14 = v - c * 65536;
432
+ v = t15 + c + 65535;
433
+ c = Math.floor(v / 65536);
434
+ t15 = v - c * 65536;
435
+ t0 += c - 1 + 37 * (c - 1);
436
+ o[0] = t0;
437
+ o[1] = t1;
438
+ o[2] = t2;
439
+ o[3] = t3;
440
+ o[4] = t4;
441
+ o[5] = t5;
442
+ o[6] = t6;
443
+ o[7] = t7;
444
+ o[8] = t8;
445
+ o[9] = t9;
446
+ o[10] = t10;
447
+ o[11] = t11;
448
+ o[12] = t12;
449
+ o[13] = t13;
450
+ o[14] = t14;
451
+ o[15] = t15;
452
+ }
453
+ function car25519(o) {
454
+ let i, v, c = 1;
455
+ for (i = 0; i < 16; i++) {
456
+ v = o[i] + c + 65535;
457
+ c = Math.floor(v / 65536);
458
+ o[i] = v - c * 65536;
459
+ }
460
+ o[0] += c - 1 + 37 * (c - 1);
461
+ }
462
+ function sel25519(p, q, b) {
463
+ let t, c = ~(b - 1);
464
+ for (let i = 0; i < 16; i++) {
465
+ t = c & (p[i] ^ q[i]);
466
+ p[i] ^= t;
467
+ q[i] ^= t;
468
+ }
469
+ }
470
+ function pack25519(o, n) {
471
+ let i, j, b;
472
+ const m = gf(), t = gf();
473
+ for (i = 0; i < 16; i++)
474
+ t[i] = n[i];
475
+ car25519(t);
476
+ car25519(t);
477
+ car25519(t);
478
+ for (j = 0; j < 2; j++) {
479
+ m[0] = t[0] - 0xffed;
480
+ for (i = 1; i < 15; i++) {
481
+ m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1);
482
+ m[i - 1] &= 0xffff;
483
+ }
484
+ m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1);
485
+ b = (m[15] >> 16) & 1;
486
+ m[14] &= 0xffff;
487
+ sel25519(t, m, 1 - b);
488
+ }
489
+ for (i = 0; i < 16; i++) {
490
+ o[2 * i] = t[i] & 0xff;
491
+ o[2 * i + 1] = t[i] >> 8;
492
+ }
493
+ }
494
+ export function crypto_sign_curve25519_pk_to_ed25519(pk) {
495
+ return convertPublicKey(pk);
496
+ }
497
+ // Converts Curve25519 public key back to Ed25519 public key.
498
+ // edwardsY = (montgomeryX - 1) / (montgomeryX + 1)
499
+ function convertPublicKey(pk) {
500
+ const z = new Uint8Array(32), x = gf(), a = gf(), b = gf(), gf1 = gf([1]);
501
+ unpack25519(x, pk);
502
+ A(a, x, gf1);
503
+ Z(b, x, gf1);
504
+ inv25519(a, a);
505
+ M(a, a, b);
506
+ pack25519(z, a);
507
+ return z;
508
+ }
509
+ export const convertToEd25519Key = (key) => {
510
+ const inbin = sodium.from_hex(key);
511
+ const xEd25519Key = crypto_sign_curve25519_pk_to_ed25519(inbin);
512
+ return sodium.to_hex(xEd25519Key);
513
+ };
514
+ export const convertToX25519Key = (key) => {
515
+ const inbin = sodium.from_hex(key);
516
+ const xEd25519Key = sodium.crypto_sign_ed25519_pk_to_curve25519(inbin);
517
+ return sodium.to_hex(xEd25519Key);
518
+ };
519
+ function combineKeys(lhsKeyBytes, rhsKeyBytes) {
520
+ return sodium.crypto_scalarmult_ed25519_noclamp(lhsKeyBytes, rhsKeyBytes);
521
+ }
522
+ const generateBlindingFactor = (serverPk) => {
523
+ const hexServerPk = sodium.from_hex(serverPk);
524
+ const serverPkHash = sodium.crypto_generichash(64, hexServerPk);
525
+ return sodium.crypto_core_ed25519_scalar_reduce(serverPkHash);
526
+ };
527
+ export const generateKAs = (sessionId, serverPk) => {
528
+ const sessionIdNoPrefix = sessionId.substring(2);
529
+ const kBytes = generateBlindingFactor(serverPk);
530
+ const xEd25519Key = sodium.from_hex(convertToEd25519Key(sessionIdNoPrefix));
531
+ const kA = combineKeys(kBytes, xEd25519Key);
532
+ const kA2 = cloneDeep(kA);
533
+ kA2[31] = kA[31] ^ 0b1000_0000;
534
+ return [kA, kA2];
535
+ };
536
+ export const generateBlindedIds = (sessionId, serverPk) => {
537
+ const [kA, kA2] = generateKAs(sessionId, serverPk);
538
+ return ['15' + sodium.to_hex(kA), '15' + sodium.to_hex(kA2)];
539
+ };
540
+ export const blindSessionId = ({ sessionId, serverPk }) => {
541
+ const [kA, kA2] = generateKAs(sessionId, serverPk);
542
+ if (!(kA[31] & 0x80)) {
543
+ return '15' + sodium.to_hex(kA2);
544
+ }
545
+ return '15' + sodium.to_hex(kA);
546
+ };
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@session.js/blinded-session-id",
3
+ "version": "1.0.0",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "author": "Viktor Shchelochkov <hi@hloth.dev> (https://hloth.dev)",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/sessionjs/blinded-session-id.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/sessionjs/blinded-session-id/issues"
13
+ },
14
+ "homepage": "https://github.com/sessionjs/blinded-session-id#readme",
15
+ "description": "Utility JavaScript library with methods to work with Session's blinded Session ID",
16
+ "type": "module",
17
+ "devDependencies": {
18
+ "@types/bun": "^1.1.6",
19
+ "@types/libsodium-wrappers-sumo": "^0.7.8",
20
+ "@types/lodash": "^4.17.7"
21
+ },
22
+ "files": [
23
+ "dist/index.js",
24
+ "dist/index.d.ts"
25
+ ],
26
+ "scripts": {
27
+ "build": "rm -rf dist && tsc --project tsconfig.build.json"
28
+ },
29
+ "peerDependencies": {
30
+ "typescript": "^5.0.0"
31
+ },
32
+ "dependencies": {
33
+ "libsodium-wrappers-sumo": "^0.7.13",
34
+ "lodash": "^4.17.21"
35
+ }
36
+ }