@arcblock/did-connect-js 4.0.0-beta.9 → 4.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/dist/authenticator/wallet.d.ts +32 -1
- package/dist/authenticator/wallet.d.ts.map +1 -1
- package/dist/authenticator/wallet.js +18 -16
- package/dist/authenticator/wallet.js.map +1 -1
- package/dist/handlers/base.js +1 -1
- package/dist/handlers/base.js.map +1 -1
- package/dist/handlers/util.d.ts.map +1 -1
- package/dist/handlers/util.js +19 -27
- package/dist/handlers/util.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/schema/claims.d.ts +7 -13
- package/dist/schema/claims.d.ts.map +1 -1
- package/dist/schema/claims.js +188 -167
- package/dist/schema/claims.js.map +1 -1
- package/dist/schema/index.d.ts +2 -5
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +87 -47
- package/dist/schema/index.js.map +1 -1
- package/dist/utils/helpers.d.ts +19 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +77 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/sealed-box.d.ts +18 -0
- package/dist/utils/sealed-box.d.ts.map +1 -0
- package/dist/utils/sealed-box.js +45 -0
- package/dist/utils/sealed-box.js.map +1 -0
- package/package.json +15 -14
package/dist/schema/index.js
CHANGED
|
@@ -1,49 +1,89 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { vDID, vValidate } from '@arcblock/validator';
|
|
2
|
+
import * as v from 'valibot';
|
|
2
3
|
import createClaimsSchema from './claims.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
4
|
+
const isHttpUrl = (s) => {
|
|
5
|
+
try {
|
|
6
|
+
const url = new URL(s);
|
|
7
|
+
return ['http:', 'https:'].includes(url.protocol);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const chainInfoSchema = v.pipe(v.object({
|
|
14
|
+
type: v.optional(v.picklist(['arcblock', 'ethereum', 'solona']), 'arcblock'),
|
|
15
|
+
id: v.optional(v.any()),
|
|
16
|
+
host: v.optional(v.any()),
|
|
17
|
+
}), v.rawTransform(({ dataset, addIssue, NEVER }) => {
|
|
18
|
+
const obj = dataset.value;
|
|
19
|
+
let typeSchema;
|
|
20
|
+
switch (obj.type) {
|
|
21
|
+
case 'arcblock':
|
|
22
|
+
typeSchema = v.object({
|
|
23
|
+
type: v.literal('arcblock'),
|
|
24
|
+
id: v.optional(v.string(), 'none'),
|
|
25
|
+
host: v.optional(v.pipe(v.string(), v.check((s) => s === 'none' || isHttpUrl(s), 'must be a valid uri with a scheme matching the http|https pattern')), 'none'),
|
|
26
|
+
});
|
|
27
|
+
break;
|
|
28
|
+
case 'ethereum':
|
|
29
|
+
typeSchema = v.object({
|
|
30
|
+
type: v.literal('ethereum'),
|
|
31
|
+
id: v.pipe(v.string(), v.regex(/^[0-9]+$/, 'fails to match the numbers pattern')),
|
|
32
|
+
host: v.optional(v.string()),
|
|
33
|
+
});
|
|
34
|
+
break;
|
|
35
|
+
case 'solona':
|
|
36
|
+
typeSchema = v.object({
|
|
37
|
+
type: v.literal('solona'),
|
|
38
|
+
id: v.pipe(v.string(), v.regex(/^[0-9]+$/, 'fails to match the numbers pattern')),
|
|
39
|
+
host: v.optional(v.string()),
|
|
40
|
+
});
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
const result = v.safeParse(typeSchema, obj);
|
|
44
|
+
if (!result.success) {
|
|
45
|
+
for (const issue of result.issues) {
|
|
46
|
+
addIssue({ message: issue.message, path: issue.path });
|
|
47
|
+
}
|
|
48
|
+
return NEVER;
|
|
49
|
+
}
|
|
50
|
+
const output = {};
|
|
51
|
+
for (const [k, val] of Object.entries(result.output)) {
|
|
52
|
+
if (val !== undefined)
|
|
53
|
+
output[k] = val;
|
|
54
|
+
}
|
|
55
|
+
return output;
|
|
56
|
+
}));
|
|
57
|
+
// appInfo uses stripUnknown: false — use looseObject to preserve unknown keys
|
|
58
|
+
const appInfoSchema = v.looseObject({
|
|
59
|
+
name: v.string(),
|
|
60
|
+
description: v.string(),
|
|
61
|
+
icon: v.pipe(v.string(), v.check(isHttpUrl, 'Must be a valid HTTP/HTTPS URL')),
|
|
62
|
+
link: v.optional(v.pipe(v.string(), v.check(isHttpUrl, 'Must be a valid HTTP/HTTPS URL'))),
|
|
63
|
+
path: v.optional(v.pipe(v.string(), v.check(isHttpUrl, 'Must be a valid HTTP/HTTPS URL')), 'https://abtwallet.io/i/'),
|
|
64
|
+
publisher: v.optional(vDID()),
|
|
65
|
+
updateSubEndpoint: v.optional(v.boolean()),
|
|
66
|
+
subscriptionEndpoint: v.optional(v.string()),
|
|
67
|
+
nodeDid: v.optional(vDID()),
|
|
68
|
+
agentDid: v.optional(vDID()),
|
|
69
|
+
});
|
|
70
|
+
/** Wrapper that gives each schema .validate() and .validateAsync() methods (Joi-compat). */
|
|
71
|
+
function withValidate(schema) {
|
|
72
|
+
return Object.assign(schema, {
|
|
73
|
+
validate: (data) => {
|
|
74
|
+
const { value, error } = vValidate(schema, data);
|
|
75
|
+
// Add toString() so String(error) returns the message (Joi compat)
|
|
76
|
+
if (error)
|
|
77
|
+
error.toString = () => error.message;
|
|
78
|
+
return { value, error };
|
|
79
|
+
},
|
|
80
|
+
validateAsync: (data) => {
|
|
81
|
+
const { value, error } = vValidate(schema, data);
|
|
82
|
+
return error ? Promise.reject(new Error(error.message)) : Promise.resolve(value);
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
export const chainInfo = withValidate(chainInfoSchema);
|
|
87
|
+
export const appInfo = withValidate(appInfoSchema);
|
|
88
|
+
export const claims = createClaimsSchema(chainInfoSchema);
|
|
49
89
|
//# sourceMappingURL=index.js.map
|
package/dist/schema/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Pick specified keys from an object. */
|
|
2
|
+
export declare function pick<T extends Record<string, any>>(obj: T, keys: string[]): Partial<T>;
|
|
3
|
+
/** Return a shallow copy of the object without the specified keys. */
|
|
4
|
+
export declare function omit<T extends Record<string, any>>(obj: T, keys: string[]): Partial<T>;
|
|
5
|
+
/** Deep-equal comparison for plain objects, arrays, and primitives. */
|
|
6
|
+
export declare function isEqual(a: unknown, b: unknown): boolean;
|
|
7
|
+
/** Check whether a value is a plain object (not null, array, Date, etc.). */
|
|
8
|
+
export declare function isPlainObject(value: unknown): value is Record<string, any>;
|
|
9
|
+
/** Random integer in [min, max] (inclusive on both ends, same as lodash/random). */
|
|
10
|
+
export declare function random(min: number, max: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* Deep clone that preserves functions (unlike structuredClone which throws
|
|
13
|
+
* DataCloneError on functions). Used for claim step arrays that contain
|
|
14
|
+
* callback functions.
|
|
15
|
+
*/
|
|
16
|
+
export declare function cloneDeep<T>(value: T): T;
|
|
17
|
+
/** Fisher-Yates shuffle — returns a new array, does not mutate the input. */
|
|
18
|
+
export declare function shuffle<T>(arr: T[]): T[];
|
|
19
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAMtF;AAED,sEAAsE;AACtE,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAMtF;AAED,uEAAuE;AACvE,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAkBvD;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAI1E;AAED,oFAAoF;AACpF,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAQxC;AAED,6EAA6E;AAC7E,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAOxC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/** Pick specified keys from an object. */
|
|
2
|
+
export function pick(obj, keys) {
|
|
3
|
+
const result = {};
|
|
4
|
+
for (const k of keys) {
|
|
5
|
+
if (k in obj)
|
|
6
|
+
result[k] = obj[k];
|
|
7
|
+
}
|
|
8
|
+
return result;
|
|
9
|
+
}
|
|
10
|
+
/** Return a shallow copy of the object without the specified keys. */
|
|
11
|
+
export function omit(obj, keys) {
|
|
12
|
+
const result = {};
|
|
13
|
+
for (const k of Object.keys(obj)) {
|
|
14
|
+
if (!keys.includes(k))
|
|
15
|
+
result[k] = obj[k];
|
|
16
|
+
}
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
/** Deep-equal comparison for plain objects, arrays, and primitives. */
|
|
20
|
+
export function isEqual(a, b) {
|
|
21
|
+
if (a === b)
|
|
22
|
+
return true;
|
|
23
|
+
if (a == null || b == null)
|
|
24
|
+
return false;
|
|
25
|
+
if (typeof a !== typeof b)
|
|
26
|
+
return false;
|
|
27
|
+
if (Array.isArray(a)) {
|
|
28
|
+
if (!Array.isArray(b) || a.length !== b.length)
|
|
29
|
+
return false;
|
|
30
|
+
return a.every((v, i) => isEqual(v, b[i]));
|
|
31
|
+
}
|
|
32
|
+
if (typeof a === 'object') {
|
|
33
|
+
const ka = Object.keys(a);
|
|
34
|
+
const kb = Object.keys(b);
|
|
35
|
+
if (ka.length !== kb.length)
|
|
36
|
+
return false;
|
|
37
|
+
return ka.every((k) => isEqual(a[k], b[k]));
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
/** Check whether a value is a plain object (not null, array, Date, etc.). */
|
|
42
|
+
export function isPlainObject(value) {
|
|
43
|
+
if (value == null || typeof value !== 'object')
|
|
44
|
+
return false;
|
|
45
|
+
const proto = Object.getPrototypeOf(value);
|
|
46
|
+
return proto === Object.prototype || proto === null;
|
|
47
|
+
}
|
|
48
|
+
/** Random integer in [min, max] (inclusive on both ends, same as lodash/random). */
|
|
49
|
+
export function random(min, max) {
|
|
50
|
+
return min + Math.floor(Math.random() * (max - min + 1));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Deep clone that preserves functions (unlike structuredClone which throws
|
|
54
|
+
* DataCloneError on functions). Used for claim step arrays that contain
|
|
55
|
+
* callback functions.
|
|
56
|
+
*/
|
|
57
|
+
export function cloneDeep(value) {
|
|
58
|
+
if (value === null || typeof value !== 'object')
|
|
59
|
+
return value;
|
|
60
|
+
if (Array.isArray(value))
|
|
61
|
+
return value.map((item) => cloneDeep(item));
|
|
62
|
+
const result = {};
|
|
63
|
+
for (const key of Object.keys(value)) {
|
|
64
|
+
result[key] = cloneDeep(value[key]);
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
/** Fisher-Yates shuffle — returns a new array, does not mutate the input. */
|
|
69
|
+
export function shuffle(arr) {
|
|
70
|
+
const a = [...arr];
|
|
71
|
+
for (let i = a.length - 1; i > 0; i--) {
|
|
72
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
73
|
+
[a[i], a[j]] = [a[j], a[i]];
|
|
74
|
+
}
|
|
75
|
+
return a;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NaCl sealed box implementation using @noble/* libraries.
|
|
3
|
+
*
|
|
4
|
+
* Wire-compatible with libsodium crypto_box_seal / tweetnacl-sealedbox-js.
|
|
5
|
+
* Protocol: ephPk(32) || xsalsa20poly1305(key, nonce, message)
|
|
6
|
+
* where key = HSalsa20(x25519(ephSk, recipientPk), zero_16)
|
|
7
|
+
* nonce = BLAKE2b(ephPk || recipientPk, 24)
|
|
8
|
+
*/
|
|
9
|
+
/** Encrypt a message for a recipient's x25519 public key (anonymous sender). */
|
|
10
|
+
export declare function seal(message: Uint8Array, recipientPk: Uint8Array): Uint8Array;
|
|
11
|
+
/** Decrypt a sealed box with the recipient's keypair. */
|
|
12
|
+
export declare function open(sealed: Uint8Array, recipientPk: Uint8Array, recipientSk: Uint8Array): Uint8Array;
|
|
13
|
+
/** Generate an x25519 keypair (for tests or key generation). */
|
|
14
|
+
export declare function boxKeyPair(): {
|
|
15
|
+
publicKey: Uint8Array;
|
|
16
|
+
secretKey: Uint8Array;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=sealed-box.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sealed-box.d.ts","sourceRoot":"","sources":["../../src/utils/sealed-box.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkBH,gFAAgF;AAChF,wBAAgB,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,GAAG,UAAU,CAO7E;AAED,yDAAyD;AACzD,wBAAgB,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,GAAG,UAAU,CAMrG;AAED,gEAAgE;AAChE,wBAAgB,UAAU,IAAI;IAAE,SAAS,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,UAAU,CAAA;CAAE,CAI7E"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NaCl sealed box implementation using @noble/* libraries.
|
|
3
|
+
*
|
|
4
|
+
* Wire-compatible with libsodium crypto_box_seal / tweetnacl-sealedbox-js.
|
|
5
|
+
* Protocol: ephPk(32) || xsalsa20poly1305(key, nonce, message)
|
|
6
|
+
* where key = HSalsa20(x25519(ephSk, recipientPk), zero_16)
|
|
7
|
+
* nonce = BLAKE2b(ephPk || recipientPk, 24)
|
|
8
|
+
*/
|
|
9
|
+
import { hsalsa, xsalsa20poly1305 } from '@noble/ciphers/salsa.js';
|
|
10
|
+
import { x25519 } from '@noble/curves/ed25519.js';
|
|
11
|
+
import { blake2b } from '@noble/hashes/blake2.js';
|
|
12
|
+
import { concatBytes } from '@noble/hashes/utils.js';
|
|
13
|
+
const SIGMA = new Uint32Array([0x61707865, 0x3320646e, 0x79622d32, 0x6b206574]);
|
|
14
|
+
/** NaCl crypto_box_beforenm: HSalsa20(shared_secret, zero_16) → 32-byte symmetric key */
|
|
15
|
+
function cryptoBoxBeforenm(sharedSecret) {
|
|
16
|
+
const k = new Uint32Array(sharedSecret.buffer, sharedSecret.byteOffset, 8);
|
|
17
|
+
const i = new Uint32Array(4);
|
|
18
|
+
const out = new Uint32Array(8);
|
|
19
|
+
hsalsa(SIGMA, k, i, out);
|
|
20
|
+
return new Uint8Array(out.buffer);
|
|
21
|
+
}
|
|
22
|
+
/** Encrypt a message for a recipient's x25519 public key (anonymous sender). */
|
|
23
|
+
export function seal(message, recipientPk) {
|
|
24
|
+
const ephSk = x25519.utils.randomSecretKey();
|
|
25
|
+
const ephPk = x25519.getPublicKey(ephSk);
|
|
26
|
+
const nonce = blake2b(concatBytes(ephPk, recipientPk), { dkLen: 24 });
|
|
27
|
+
const key = cryptoBoxBeforenm(x25519.getSharedSecret(ephSk, recipientPk));
|
|
28
|
+
const encrypted = xsalsa20poly1305(key, nonce).encrypt(message);
|
|
29
|
+
return concatBytes(ephPk, encrypted);
|
|
30
|
+
}
|
|
31
|
+
/** Decrypt a sealed box with the recipient's keypair. */
|
|
32
|
+
export function open(sealed, recipientPk, recipientSk) {
|
|
33
|
+
const ephPk = sealed.subarray(0, 32);
|
|
34
|
+
const ciphertext = sealed.subarray(32);
|
|
35
|
+
const nonce = blake2b(concatBytes(ephPk, recipientPk), { dkLen: 24 });
|
|
36
|
+
const key = cryptoBoxBeforenm(x25519.getSharedSecret(recipientSk, ephPk));
|
|
37
|
+
return xsalsa20poly1305(key, nonce).decrypt(ciphertext);
|
|
38
|
+
}
|
|
39
|
+
/** Generate an x25519 keypair (for tests or key generation). */
|
|
40
|
+
export function boxKeyPair() {
|
|
41
|
+
const secretKey = x25519.utils.randomSecretKey();
|
|
42
|
+
const publicKey = x25519.getPublicKey(secretKey);
|
|
43
|
+
return { publicKey, secretKey };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=sealed-box.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sealed-box.js","sourceRoot":"","sources":["../../src/utils/sealed-box.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;AAEhF,yFAAyF;AACzF,SAAS,iBAAiB,CAAC,YAAwB;IACjD,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACzB,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,IAAI,CAAC,OAAmB,EAAE,WAAuB;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACtE,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,OAAO,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,IAAI,CAAC,MAAkB,EAAE,WAAuB,EAAE,WAAuB;IACvF,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACtE,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1E,OAAO,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC1D,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,UAAU;IACxB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACjD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arcblock/did-connect-js",
|
|
3
|
-
"version": "4.0.0
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Server-side DID Connect protocol — WalletAuthenticator, WalletHandlers, framework adapters",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -20,27 +20,28 @@
|
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@arcblock/did": "^1.
|
|
24
|
-
"@arcblock/jwt": "^1.
|
|
25
|
-
"@arcblock/validator": "^1.
|
|
26
|
-
"@ocap/
|
|
27
|
-
"@ocap/
|
|
28
|
-
"@ocap/
|
|
29
|
-
"@ocap/wallet": "^1.29.23",
|
|
23
|
+
"@arcblock/did": "^1.30.2",
|
|
24
|
+
"@arcblock/jwt": "^1.30.2",
|
|
25
|
+
"@arcblock/validator": "^1.30.2",
|
|
26
|
+
"@ocap/mcrypto": "^1.30.2",
|
|
27
|
+
"@ocap/util": "^1.30.2",
|
|
28
|
+
"@ocap/wallet": "^1.30.2",
|
|
30
29
|
"debug": "^4.4.3",
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
30
|
+
"@noble/ciphers": "^2.2.0",
|
|
31
|
+
"@noble/curves": "^2.2.0",
|
|
32
|
+
"@noble/hashes": "^2.2.0",
|
|
33
|
+
"fast-json-stable-stringify": "^2.1.0",
|
|
34
|
+
"valibot": "^1.3.1",
|
|
35
|
+
"@arcblock/did-connect-core": "^4.0.0"
|
|
35
36
|
},
|
|
36
37
|
"devDependencies": {
|
|
37
38
|
"@arcblock/did-agent-storage-memory": "^1.8.0",
|
|
38
39
|
"@arcblock/did-connect-storage-memory": "^1.8.0",
|
|
40
|
+
"@ocap/client": "^1.30.2",
|
|
39
41
|
"@types/body-parser": "^1.19.6",
|
|
40
42
|
"@types/cookie-parser": "^1.4.10",
|
|
41
43
|
"@types/debug": "^4.1.12",
|
|
42
44
|
"@types/express": "^5.0.6",
|
|
43
|
-
"@types/json-stable-stringify": "^1.0.36",
|
|
44
45
|
"@types/lodash": "^4.17.13",
|
|
45
46
|
"@types/node": "^25.5.0",
|
|
46
47
|
"@types/pify": "^6.1.0",
|
|
@@ -49,8 +50,8 @@
|
|
|
49
50
|
"cookie-parser": "^1.4.7",
|
|
50
51
|
"express": "^5.2.1",
|
|
51
52
|
"hono": "^4.7.0",
|
|
53
|
+
"lodash": "^4.17.23",
|
|
52
54
|
"pify": "^6.1.0",
|
|
53
|
-
"tweetnacl": "^1.0.3",
|
|
54
55
|
"vitest": "^4.1.1"
|
|
55
56
|
},
|
|
56
57
|
"files": [
|