@0xsequence/wallet-wdk 3.0.0-beta.14 → 3.0.0-beta.16
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +24 -0
- package/dist/dbs/auth-keys.d.ts +3 -1
- package/dist/dbs/auth-keys.d.ts.map +1 -1
- package/dist/dbs/auth-keys.js +16 -4
- package/dist/env.d.ts +22 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +30 -0
- package/dist/identity/signer.d.ts +4 -3
- package/dist/identity/signer.d.ts.map +1 -1
- package/dist/identity/signer.js +11 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/sequence/cron.d.ts +3 -0
- package/dist/sequence/cron.d.ts.map +1 -1
- package/dist/sequence/cron.js +72 -39
- package/dist/sequence/handlers/authcode-pkce.d.ts +2 -1
- package/dist/sequence/handlers/authcode-pkce.d.ts.map +1 -1
- package/dist/sequence/handlers/authcode-pkce.js +4 -4
- package/dist/sequence/handlers/authcode.d.ts +4 -1
- package/dist/sequence/handlers/authcode.d.ts.map +1 -1
- package/dist/sequence/handlers/authcode.js +23 -6
- package/dist/sequence/handlers/identity.d.ts +3 -1
- package/dist/sequence/handlers/identity.d.ts.map +1 -1
- package/dist/sequence/handlers/identity.js +14 -7
- package/dist/sequence/handlers/otp.d.ts +2 -1
- package/dist/sequence/handlers/otp.d.ts.map +1 -1
- package/dist/sequence/handlers/otp.js +2 -2
- package/dist/sequence/handlers/passkeys.d.ts +5 -3
- package/dist/sequence/handlers/passkeys.d.ts.map +1 -1
- package/dist/sequence/handlers/passkeys.js +7 -4
- package/dist/sequence/index.d.ts +2 -0
- package/dist/sequence/index.d.ts.map +1 -1
- package/dist/sequence/index.js +1 -0
- package/dist/sequence/manager.d.ts +65 -55
- package/dist/sequence/manager.d.ts.map +1 -1
- package/dist/sequence/manager.js +75 -16
- package/dist/sequence/passkeys-provider.d.ts +24 -0
- package/dist/sequence/passkeys-provider.d.ts.map +1 -0
- package/dist/sequence/passkeys-provider.js +15 -0
- package/dist/sequence/wallets.d.ts +1 -0
- package/dist/sequence/wallets.d.ts.map +1 -1
- package/dist/sequence/wallets.js +15 -4
- package/package.json +6 -6
- package/src/dbs/auth-keys.ts +19 -5
- package/src/env.ts +58 -0
- package/src/identity/signer.ts +10 -4
- package/src/index.ts +1 -0
- package/src/sequence/cron.ts +75 -42
- package/src/sequence/handlers/authcode-pkce.ts +5 -3
- package/src/sequence/handlers/authcode.ts +26 -5
- package/src/sequence/handlers/identity.ts +17 -7
- package/src/sequence/handlers/otp.ts +3 -2
- package/src/sequence/handlers/passkeys.ts +12 -12
- package/src/sequence/index.ts +2 -0
- package/src/sequence/manager.ts +165 -13
- package/src/sequence/passkeys-provider.ts +55 -0
- package/src/sequence/wallets.ts +20 -5
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @0xsequence/wallet-wdk
|
|
2
2
|
|
|
3
|
+
## 3.0.0-beta.16
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- ethauth support
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
- @0xsequence/guard@3.0.0-beta.16
|
|
10
|
+
- @0xsequence/identity-instrument@3.0.0-beta.16
|
|
11
|
+
- @0xsequence/relayer@3.0.0-beta.16
|
|
12
|
+
- @0xsequence/wallet-core@3.0.0-beta.16
|
|
13
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.16
|
|
14
|
+
|
|
15
|
+
## 3.0.0-beta.15
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- New chains, minor fixes
|
|
20
|
+
- Updated dependencies
|
|
21
|
+
- @0xsequence/guard@3.0.0-beta.15
|
|
22
|
+
- @0xsequence/identity-instrument@3.0.0-beta.15
|
|
23
|
+
- @0xsequence/relayer@3.0.0-beta.15
|
|
24
|
+
- @0xsequence/wallet-core@3.0.0-beta.15
|
|
25
|
+
- @0xsequence/wallet-primitives@3.0.0-beta.15
|
|
26
|
+
|
|
3
27
|
## 3.0.0-beta.14
|
|
4
28
|
|
|
5
29
|
### Patch Changes
|
package/dist/dbs/auth-keys.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Generic } from './generic.js';
|
|
2
|
+
import type { WdkEnv } from '../env.js';
|
|
2
3
|
export type AuthKey = {
|
|
3
4
|
address: string;
|
|
4
5
|
privateKey: CryptoKey;
|
|
@@ -6,8 +7,9 @@ export type AuthKey = {
|
|
|
6
7
|
expiresAt: Date;
|
|
7
8
|
};
|
|
8
9
|
export declare class AuthKeys extends Generic<AuthKey, 'address'> {
|
|
10
|
+
private readonly env?;
|
|
9
11
|
private expirationTimers;
|
|
10
|
-
constructor(dbName?: string);
|
|
12
|
+
constructor(dbName?: string, env?: WdkEnv | undefined);
|
|
11
13
|
handleOpenDB(): Promise<void>;
|
|
12
14
|
set(item: AuthKey): Promise<AuthKey['address']>;
|
|
13
15
|
del(address: AuthKey['address']): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-keys.d.ts","sourceRoot":"","sources":["../../src/dbs/auth-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAa,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"auth-keys.d.ts","sourceRoot":"","sources":["../../src/dbs/auth-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAa,MAAM,cAAc,CAAA;AAEjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAIvC,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,SAAS,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,IAAI,CAAA;CAChB,CAAA;AAED,qBAAa,QAAS,SAAQ,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC;IAKrD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;IAJvB,OAAO,CAAC,gBAAgB,CAAmD;gBAGzE,MAAM,GAAE,MAA6B,EACpB,GAAG,CAAC,EAAE,MAAM,YAAA;IAiBzB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7B,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAU/C,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAU,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IA2C9E,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAOlC,kBAAkB;IAoBhC,OAAO,CAAC,eAAe;CAUxB"}
|
package/dist/dbs/auth-keys.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Generic } from './generic.js';
|
|
2
2
|
const TABLE_NAME = 'auth-keys';
|
|
3
3
|
export class AuthKeys extends Generic {
|
|
4
|
+
env;
|
|
4
5
|
expirationTimers = new Map();
|
|
5
|
-
constructor(dbName = 'sequence-auth-keys') {
|
|
6
|
+
constructor(dbName = 'sequence-auth-keys', env) {
|
|
6
7
|
super(dbName, TABLE_NAME, 'address', [
|
|
7
8
|
(db, _tx, _event) => {
|
|
8
9
|
if (!db.objectStoreNames.contains(TABLE_NAME)) {
|
|
@@ -11,6 +12,7 @@ export class AuthKeys extends Generic {
|
|
|
11
12
|
}
|
|
12
13
|
},
|
|
13
14
|
]);
|
|
15
|
+
this.env = env;
|
|
14
16
|
}
|
|
15
17
|
async handleOpenDB() {
|
|
16
18
|
const authKeys = await this.list();
|
|
@@ -44,7 +46,10 @@ export class AuthKeys extends Generic {
|
|
|
44
46
|
return result;
|
|
45
47
|
}
|
|
46
48
|
else if (attempt < 2) {
|
|
47
|
-
|
|
49
|
+
const setTimeoutFn = this.env?.timers?.setTimeout ?? globalThis.setTimeout;
|
|
50
|
+
if (setTimeoutFn) {
|
|
51
|
+
await new Promise((resolve) => setTimeoutFn(resolve, 50));
|
|
52
|
+
}
|
|
48
53
|
return this.getBySigner(signer, attempt + 1);
|
|
49
54
|
}
|
|
50
55
|
else {
|
|
@@ -81,7 +86,11 @@ export class AuthKeys extends Generic {
|
|
|
81
86
|
await this.del(authKey.address.toLowerCase());
|
|
82
87
|
return;
|
|
83
88
|
}
|
|
84
|
-
const
|
|
89
|
+
const setTimeoutFn = this.env?.timers?.setTimeout ?? globalThis.setTimeout;
|
|
90
|
+
if (!setTimeoutFn) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const timer = setTimeoutFn(() => {
|
|
85
94
|
console.log('removing expired auth key', authKey);
|
|
86
95
|
this.del(authKey.address.toLowerCase());
|
|
87
96
|
}, delay);
|
|
@@ -90,7 +99,10 @@ export class AuthKeys extends Generic {
|
|
|
90
99
|
clearExpiration(address) {
|
|
91
100
|
const timer = this.expirationTimers.get(address.toLowerCase());
|
|
92
101
|
if (timer) {
|
|
93
|
-
|
|
102
|
+
const clearTimeoutFn = this.env?.timers?.clearTimeout ?? globalThis.clearTimeout;
|
|
103
|
+
if (clearTimeoutFn) {
|
|
104
|
+
clearTimeoutFn(timer);
|
|
105
|
+
}
|
|
94
106
|
this.expirationTimers.delete(address.toLowerCase());
|
|
95
107
|
}
|
|
96
108
|
}
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CoreEnv } from '@0xsequence/wallet-core';
|
|
2
|
+
export type TimersLike = {
|
|
3
|
+
setTimeout: typeof setTimeout;
|
|
4
|
+
clearTimeout: typeof clearTimeout;
|
|
5
|
+
setInterval: typeof setInterval;
|
|
6
|
+
clearInterval: typeof clearInterval;
|
|
7
|
+
};
|
|
8
|
+
export type LockManagerLike = {
|
|
9
|
+
request: (name: string, callback: (lock: Lock | null) => Promise<void> | void) => Promise<void>;
|
|
10
|
+
};
|
|
11
|
+
export type NavigationLike = {
|
|
12
|
+
getPathname: () => string;
|
|
13
|
+
redirect: (url: string) => void;
|
|
14
|
+
};
|
|
15
|
+
export type WdkEnv = CoreEnv & {
|
|
16
|
+
timers?: TimersLike;
|
|
17
|
+
locks?: LockManagerLike;
|
|
18
|
+
navigation?: NavigationLike;
|
|
19
|
+
urlSearchParams?: typeof URLSearchParams;
|
|
20
|
+
};
|
|
21
|
+
export declare function resolveWdkEnv(env?: WdkEnv): WdkEnv;
|
|
22
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAGtD,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,OAAO,UAAU,CAAA;IAC7B,YAAY,EAAE,OAAO,YAAY,CAAA;IACjC,WAAW,EAAE,OAAO,WAAW,CAAA;IAC/B,aAAa,EAAE,OAAO,aAAa,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAChG,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,MAAM,MAAM,CAAA;IACzB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG;IAC7B,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,UAAU,CAAC,EAAE,cAAc,CAAA;IAC3B,eAAe,CAAC,EAAE,OAAO,eAAe,CAAA;CACzC,CAAA;AAED,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CA+BlD"}
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { resolveCoreEnv } from '@0xsequence/wallet-core';
|
|
2
|
+
export function resolveWdkEnv(env) {
|
|
3
|
+
const core = resolveCoreEnv(env);
|
|
4
|
+
const globalObj = globalThis;
|
|
5
|
+
const windowObj = typeof window !== 'undefined' ? window : (globalObj.window ?? {});
|
|
6
|
+
const location = windowObj.location ?? globalObj.location;
|
|
7
|
+
return {
|
|
8
|
+
...core,
|
|
9
|
+
timers: env?.timers ??
|
|
10
|
+
(typeof globalObj.setTimeout === 'function'
|
|
11
|
+
? {
|
|
12
|
+
setTimeout: globalObj.setTimeout.bind(globalObj),
|
|
13
|
+
clearTimeout: globalObj.clearTimeout.bind(globalObj),
|
|
14
|
+
setInterval: globalObj.setInterval.bind(globalObj),
|
|
15
|
+
clearInterval: globalObj.clearInterval.bind(globalObj),
|
|
16
|
+
}
|
|
17
|
+
: undefined),
|
|
18
|
+
locks: env?.locks ?? globalObj.navigator?.locks ?? windowObj.navigator?.locks,
|
|
19
|
+
navigation: env?.navigation ??
|
|
20
|
+
(location
|
|
21
|
+
? {
|
|
22
|
+
getPathname: () => location.pathname,
|
|
23
|
+
redirect: (url) => {
|
|
24
|
+
location.href = url;
|
|
25
|
+
},
|
|
26
|
+
}
|
|
27
|
+
: undefined),
|
|
28
|
+
urlSearchParams: env?.urlSearchParams ?? globalObj.URLSearchParams ?? windowObj.URLSearchParams,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { Address, Bytes } from 'ox';
|
|
2
|
-
import { Signers, State } from '@0xsequence/wallet-core';
|
|
2
|
+
import { Signers, State, type CryptoLike } from '@0xsequence/wallet-core';
|
|
3
3
|
import { IdentityInstrument } from '@0xsequence/identity-instrument';
|
|
4
4
|
import { AuthKey } from '../dbs/auth-keys.js';
|
|
5
5
|
import { Payload, Signature as SequenceSignature } from '@0xsequence/wallet-primitives';
|
|
6
6
|
import * as Identity from '@0xsequence/identity-instrument';
|
|
7
|
-
export declare function toIdentityAuthKey(authKey: AuthKey): Identity.AuthKey;
|
|
7
|
+
export declare function toIdentityAuthKey(authKey: AuthKey, crypto?: CryptoLike): Identity.AuthKey;
|
|
8
8
|
export declare class IdentitySigner implements Signers.Signer {
|
|
9
9
|
readonly identityInstrument: IdentityInstrument;
|
|
10
10
|
readonly authKey: AuthKey;
|
|
11
|
-
|
|
11
|
+
private readonly crypto?;
|
|
12
|
+
constructor(identityInstrument: IdentityInstrument, authKey: AuthKey, crypto?: CryptoLike | undefined);
|
|
12
13
|
get address(): Address.Address;
|
|
13
14
|
sign(wallet: Address.Address, chainId: number, payload: Payload.Parented): Promise<SequenceSignature.SignatureOfSignerLeaf>;
|
|
14
15
|
signDigest(digest: Bytes.Bytes): Promise<SequenceSignature.SignatureOfSignerLeafHash>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/identity/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAkB,KAAK,EAAmB,MAAM,IAAI,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/identity/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAkB,KAAK,EAAmB,MAAM,IAAI,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAW,MAAM,iCAAiC,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,SAAS,IAAI,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACvF,OAAO,KAAK,QAAQ,MAAM,iCAAiC,CAAA;AAE3D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC,OAAO,CAsBzF;AAED,qBAAa,cAAe,YAAW,OAAO,CAAC,MAAM;IAEjD,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB;IAC/C,QAAQ,CAAC,OAAO,EAAE,OAAO;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAFf,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,OAAO,EACR,MAAM,CAAC,EAAE,UAAU,YAAA;IAGtC,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,CAK7B;IAEK,IAAI,CACR,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,CAAC,QAAQ,GACxB,OAAO,CAAC,iBAAiB,CAAC,qBAAqB,CAAC;IAK7C,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC,yBAAyB,CAAC;IASrF,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAoBjG"}
|
package/dist/identity/signer.js
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { Address, Signature, Hex } from 'ox';
|
|
2
2
|
import { Payload } from '@0xsequence/wallet-primitives';
|
|
3
3
|
import * as Identity from '@0xsequence/identity-instrument';
|
|
4
|
-
export function toIdentityAuthKey(authKey) {
|
|
4
|
+
export function toIdentityAuthKey(authKey, crypto) {
|
|
5
|
+
const globalObj = globalThis;
|
|
6
|
+
const resolvedCrypto = crypto ?? globalObj.window?.crypto ?? globalObj.crypto;
|
|
7
|
+
if (!resolvedCrypto?.subtle) {
|
|
8
|
+
throw new Error('crypto.subtle is not available');
|
|
9
|
+
}
|
|
5
10
|
return {
|
|
6
11
|
address: authKey.address,
|
|
7
12
|
keyType: Identity.KeyType.WebCrypto_Secp256r1,
|
|
8
13
|
signer: authKey.identitySigner,
|
|
9
14
|
async sign(digest) {
|
|
10
|
-
const authKeySignature = await
|
|
15
|
+
const authKeySignature = await resolvedCrypto.subtle.sign({
|
|
11
16
|
name: 'ECDSA',
|
|
12
17
|
hash: 'SHA-256',
|
|
13
18
|
}, authKey.privateKey, new Uint8Array(digest));
|
|
@@ -18,9 +23,11 @@ export function toIdentityAuthKey(authKey) {
|
|
|
18
23
|
export class IdentitySigner {
|
|
19
24
|
identityInstrument;
|
|
20
25
|
authKey;
|
|
21
|
-
|
|
26
|
+
crypto;
|
|
27
|
+
constructor(identityInstrument, authKey, crypto) {
|
|
22
28
|
this.identityInstrument = identityInstrument;
|
|
23
29
|
this.authKey = authKey;
|
|
30
|
+
this.crypto = crypto;
|
|
24
31
|
}
|
|
25
32
|
get address() {
|
|
26
33
|
if (!Address.validate(this.authKey.identitySigner)) {
|
|
@@ -33,7 +40,7 @@ export class IdentitySigner {
|
|
|
33
40
|
return this.signDigest(payloadHash);
|
|
34
41
|
}
|
|
35
42
|
async signDigest(digest) {
|
|
36
|
-
const sigHex = await this.identityInstrument.sign(toIdentityAuthKey(this.authKey), digest);
|
|
43
|
+
const sigHex = await this.identityInstrument.sign(toIdentityAuthKey(this.authKey, this.crypto), digest);
|
|
37
44
|
const sig = Signature.fromHex(sigHex);
|
|
38
45
|
return {
|
|
39
46
|
type: 'hash',
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AAChD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AAChD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,cAAc,UAAU,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/sequence/cron.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare class Cron {
|
|
|
10
10
|
private readonly STORAGE_KEY;
|
|
11
11
|
private isStopping;
|
|
12
12
|
private currentCheckJobsPromise;
|
|
13
|
+
private readonly env;
|
|
13
14
|
/**
|
|
14
15
|
* Initializes the Cron scheduler and starts the periodic job checker.
|
|
15
16
|
* @param shared Shared context for modules and logging.
|
|
@@ -48,6 +49,7 @@ export declare class Cron {
|
|
|
48
49
|
* Uses a lock to prevent concurrent execution.
|
|
49
50
|
*/
|
|
50
51
|
private checkJobs;
|
|
52
|
+
private runJobs;
|
|
51
53
|
/**
|
|
52
54
|
* Loads the persisted last run times for jobs from localStorage.
|
|
53
55
|
* @returns Map of job IDs to their last run times.
|
|
@@ -57,5 +59,6 @@ export declare class Cron {
|
|
|
57
59
|
* Persists the current last run times of all jobs to localStorage.
|
|
58
60
|
*/
|
|
59
61
|
private syncWithStorage;
|
|
62
|
+
private isAbortError;
|
|
60
63
|
}
|
|
61
64
|
//# sourceMappingURL=cron.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/sequence/cron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AASrC;;;GAGG;AACH,qBAAa,IAAI;
|
|
1
|
+
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/sequence/cron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AASrC;;;GAGG;AACH,qBAAa,IAAI;IAYH,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXnC,OAAO,CAAC,IAAI,CAAkC;IAC9C,OAAO,CAAC,aAAa,CAAC,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;IACnD,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,uBAAuB,CAAmC;IAClE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IAEnC;;;OAGG;gBAC0B,MAAM,EAAE,MAAM;IAK3C;;;OAGG;IACH,OAAO,CAAC,KAAK;IAUb;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBlC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAStE;;;OAGG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM;IAIxB;;;;OAIG;YACW,SAAS;YA6BT,OAAO;IAkCrB;;;OAGG;YACW,eAAe;IAU7B;;OAEG;YACW,eAAe;IAU7B,OAAO,CAAC,YAAY;CAOrB"}
|
package/dist/sequence/cron.js
CHANGED
|
@@ -9,12 +9,14 @@ export class Cron {
|
|
|
9
9
|
STORAGE_KEY = 'sequence-cron-jobs';
|
|
10
10
|
isStopping = false;
|
|
11
11
|
currentCheckJobsPromise = Promise.resolve();
|
|
12
|
+
env;
|
|
12
13
|
/**
|
|
13
14
|
* Initializes the Cron scheduler and starts the periodic job checker.
|
|
14
15
|
* @param shared Shared context for modules and logging.
|
|
15
16
|
*/
|
|
16
17
|
constructor(shared) {
|
|
17
18
|
this.shared = shared;
|
|
19
|
+
this.env = shared.env;
|
|
18
20
|
this.start();
|
|
19
21
|
}
|
|
20
22
|
/**
|
|
@@ -25,7 +27,11 @@ export class Cron {
|
|
|
25
27
|
if (this.isStopping)
|
|
26
28
|
return;
|
|
27
29
|
this.executeCheckJobsChain();
|
|
28
|
-
|
|
30
|
+
const setIntervalFn = this.env.timers?.setInterval ?? globalThis.setInterval;
|
|
31
|
+
if (!setIntervalFn) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
this.checkInterval = setIntervalFn(() => this.executeCheckJobsChain(), 60 * 1000);
|
|
29
35
|
}
|
|
30
36
|
/**
|
|
31
37
|
* Chains job checks to ensure sequential execution.
|
|
@@ -47,7 +53,10 @@ export class Cron {
|
|
|
47
53
|
async stop() {
|
|
48
54
|
this.isStopping = true;
|
|
49
55
|
if (this.checkInterval) {
|
|
50
|
-
|
|
56
|
+
const clearIntervalFn = this.env.timers?.clearInterval ?? globalThis.clearInterval;
|
|
57
|
+
if (clearIntervalFn) {
|
|
58
|
+
clearIntervalFn(this.checkInterval);
|
|
59
|
+
}
|
|
51
60
|
this.checkInterval = undefined;
|
|
52
61
|
this.shared.modules.logger.log('Cron: Interval cleared.');
|
|
53
62
|
}
|
|
@@ -88,46 +97,24 @@ export class Cron {
|
|
|
88
97
|
return;
|
|
89
98
|
}
|
|
90
99
|
try {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
if (!lock) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
const now = Date.now();
|
|
99
|
-
const storage = await this.getStorageState();
|
|
100
|
-
for (const [id, job] of this.jobs) {
|
|
100
|
+
const locks = this.env.locks ?? globalThis.navigator?.locks;
|
|
101
|
+
if (locks?.request) {
|
|
102
|
+
await locks.request('sequence-cron-jobs', async (lock) => {
|
|
101
103
|
if (this.isStopping) {
|
|
102
|
-
|
|
104
|
+
return;
|
|
103
105
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if (timeSinceLastRun >= job.interval) {
|
|
107
|
-
try {
|
|
108
|
-
await job.handler();
|
|
109
|
-
if (!this.isStopping) {
|
|
110
|
-
job.lastRun = now;
|
|
111
|
-
storage.set(id, { lastRun: now });
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
catch (error) {
|
|
115
|
-
if (error instanceof DOMException && error.name === 'AbortError') {
|
|
116
|
-
this.shared.modules.logger.log(`Cron: Job ${id} was aborted.`);
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
console.error(`Cron job ${id} failed:`, error);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
106
|
+
if (!lock) {
|
|
107
|
+
return;
|
|
122
108
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
109
|
+
await this.runJobs();
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
await this.runJobs();
|
|
114
|
+
}
|
|
128
115
|
}
|
|
129
116
|
catch (error) {
|
|
130
|
-
if (error
|
|
117
|
+
if (this.isAbortError(error)) {
|
|
131
118
|
this.shared.modules.logger.log('Cron: navigator.locks.request was aborted.');
|
|
132
119
|
}
|
|
133
120
|
else {
|
|
@@ -135,6 +122,37 @@ export class Cron {
|
|
|
135
122
|
}
|
|
136
123
|
}
|
|
137
124
|
}
|
|
125
|
+
async runJobs() {
|
|
126
|
+
const now = Date.now();
|
|
127
|
+
const storage = await this.getStorageState();
|
|
128
|
+
for (const [id, job] of this.jobs) {
|
|
129
|
+
if (this.isStopping) {
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
const lastRun = storage.get(id)?.lastRun ?? job.lastRun;
|
|
133
|
+
const timeSinceLastRun = now - lastRun;
|
|
134
|
+
if (timeSinceLastRun >= job.interval) {
|
|
135
|
+
try {
|
|
136
|
+
await job.handler();
|
|
137
|
+
if (!this.isStopping) {
|
|
138
|
+
job.lastRun = now;
|
|
139
|
+
storage.set(id, { lastRun: now });
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
if (this.isAbortError(error)) {
|
|
144
|
+
this.shared.modules.logger.log(`Cron: Job ${id} was aborted.`);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
console.error(`Cron job ${id} failed:`, error);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (!this.isStopping) {
|
|
153
|
+
await this.syncWithStorage();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
138
156
|
/**
|
|
139
157
|
* Loads the persisted last run times for jobs from localStorage.
|
|
140
158
|
* @returns Map of job IDs to their last run times.
|
|
@@ -142,7 +160,11 @@ export class Cron {
|
|
|
142
160
|
async getStorageState() {
|
|
143
161
|
if (this.isStopping)
|
|
144
162
|
return new Map();
|
|
145
|
-
const
|
|
163
|
+
const storage = this.env.storage;
|
|
164
|
+
if (!storage) {
|
|
165
|
+
return new Map();
|
|
166
|
+
}
|
|
167
|
+
const state = storage.getItem(this.STORAGE_KEY);
|
|
146
168
|
return new Map(state ? JSON.parse(state) : []);
|
|
147
169
|
}
|
|
148
170
|
/**
|
|
@@ -151,7 +173,18 @@ export class Cron {
|
|
|
151
173
|
async syncWithStorage() {
|
|
152
174
|
if (this.isStopping)
|
|
153
175
|
return;
|
|
176
|
+
const storage = this.env.storage;
|
|
177
|
+
if (!storage) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
154
180
|
const state = Array.from(this.jobs.entries()).map(([id, job]) => [id, { lastRun: job.lastRun }]);
|
|
155
|
-
|
|
181
|
+
storage.setItem(this.STORAGE_KEY, JSON.stringify(state));
|
|
182
|
+
}
|
|
183
|
+
isAbortError(error) {
|
|
184
|
+
const domException = globalThis.DOMException;
|
|
185
|
+
if (domException && error instanceof domException) {
|
|
186
|
+
return error.name === 'AbortError';
|
|
187
|
+
}
|
|
188
|
+
return error?.name === 'AbortError';
|
|
156
189
|
}
|
|
157
190
|
}
|
|
@@ -4,8 +4,9 @@ import { Signatures } from '../signatures.js';
|
|
|
4
4
|
import * as Identity from '@0xsequence/identity-instrument';
|
|
5
5
|
import { IdentitySigner } from '../../identity/signer.js';
|
|
6
6
|
import { AuthCodeHandler } from './authcode.js';
|
|
7
|
+
import type { WdkEnv } from '../../env.js';
|
|
7
8
|
export declare class AuthCodePkceHandler extends AuthCodeHandler implements Handler {
|
|
8
|
-
constructor(signupKind: 'google-pkce' | `custom-${string}`, issuer: string, oauthUrl: string, audience: string, nitro: Identity.IdentityInstrument, signatures: Signatures, commitments: Db.AuthCommitments, authKeys: Db.AuthKeys);
|
|
9
|
+
constructor(signupKind: 'google-pkce' | `custom-${string}`, issuer: string, oauthUrl: string, audience: string, nitro: Identity.IdentityInstrument, signatures: Signatures, commitments: Db.AuthCommitments, authKeys: Db.AuthKeys, env?: WdkEnv);
|
|
9
10
|
commitAuth(target: string, isSignUp: boolean, state?: string, signer?: string): Promise<string>;
|
|
10
11
|
completeAuth(commitment: Db.AuthCommitment, code: string): Promise<[IdentitySigner, {
|
|
11
12
|
[key: string]: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authcode-pkce.d.ts","sourceRoot":"","sources":["../../../src/sequence/handlers/authcode-pkce.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"authcode-pkce.d.ts","sourceRoot":"","sources":["../../../src/sequence/handlers/authcode-pkce.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,qBAAa,mBAAoB,SAAQ,eAAgB,YAAW,OAAO;gBAEvE,UAAU,EAAE,aAAa,GAAG,UAAU,MAAM,EAAE,EAC9C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,QAAQ,CAAC,kBAAkB,EAClC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,EAAE,CAAC,eAAe,EAC/B,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACrB,GAAG,CAAC,EAAE,MAAM;IAKD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAkC7E,YAAY,CACvB,UAAU,EAAE,EAAE,CAAC,cAAc,EAC7B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;CAWxD"}
|
|
@@ -2,8 +2,8 @@ import { Hex, Bytes } from 'ox';
|
|
|
2
2
|
import * as Identity from '@0xsequence/identity-instrument';
|
|
3
3
|
import { AuthCodeHandler } from './authcode.js';
|
|
4
4
|
export class AuthCodePkceHandler extends AuthCodeHandler {
|
|
5
|
-
constructor(signupKind, issuer, oauthUrl, audience, nitro, signatures, commitments, authKeys) {
|
|
6
|
-
super(signupKind, issuer, oauthUrl, audience, nitro, signatures, commitments, authKeys);
|
|
5
|
+
constructor(signupKind, issuer, oauthUrl, audience, nitro, signatures, commitments, authKeys, env) {
|
|
6
|
+
super(signupKind, issuer, oauthUrl, audience, nitro, signatures, commitments, authKeys, env);
|
|
7
7
|
}
|
|
8
8
|
async commitAuth(target, isSignUp, state, signer) {
|
|
9
9
|
let challenge = new Identity.AuthCodePkceChallenge(this.issuer, this.audience, this.redirectUri);
|
|
@@ -23,7 +23,7 @@ export class AuthCodePkceHandler extends AuthCodeHandler {
|
|
|
23
23
|
metadata: {},
|
|
24
24
|
isSignUp,
|
|
25
25
|
});
|
|
26
|
-
const searchParams =
|
|
26
|
+
const searchParams = this.serializeQuery({
|
|
27
27
|
code_challenge: codeChallenge,
|
|
28
28
|
code_challenge_method: 'S256',
|
|
29
29
|
client_id: this.audience,
|
|
@@ -33,7 +33,7 @@ export class AuthCodePkceHandler extends AuthCodeHandler {
|
|
|
33
33
|
scope: 'openid profile email',
|
|
34
34
|
state,
|
|
35
35
|
});
|
|
36
|
-
return `${this.oauthUrl}?${searchParams
|
|
36
|
+
return `${this.oauthUrl}?${searchParams}`;
|
|
37
37
|
}
|
|
38
38
|
async completeAuth(commitment, code) {
|
|
39
39
|
const challenge = new Identity.AuthCodePkceChallenge('', '', '');
|
|
@@ -6,6 +6,7 @@ import * as Identity from '@0xsequence/identity-instrument';
|
|
|
6
6
|
import { SignerUnavailable, SignerReady, SignerActionable, BaseSignatureRequest } from '../types/signature-request.js';
|
|
7
7
|
import { IdentitySigner } from '../../identity/signer.js';
|
|
8
8
|
import { IdentityHandler } from './identity.js';
|
|
9
|
+
import type { WdkEnv } from '../../env.js';
|
|
9
10
|
export declare class AuthCodeHandler extends IdentityHandler implements Handler {
|
|
10
11
|
readonly signupKind: 'apple' | 'google-pkce' | `custom-${string}`;
|
|
11
12
|
readonly issuer: string;
|
|
@@ -13,7 +14,7 @@ export declare class AuthCodeHandler extends IdentityHandler implements Handler
|
|
|
13
14
|
readonly audience: string;
|
|
14
15
|
protected readonly commitments: Db.AuthCommitments;
|
|
15
16
|
protected redirectUri: string;
|
|
16
|
-
constructor(signupKind: 'apple' | 'google-pkce' | `custom-${string}`, issuer: string, oauthUrl: string, audience: string, nitro: Identity.IdentityInstrument, signatures: Signatures, commitments: Db.AuthCommitments, authKeys: Db.AuthKeys);
|
|
17
|
+
constructor(signupKind: 'apple' | 'google-pkce' | `custom-${string}`, issuer: string, oauthUrl: string, audience: string, nitro: Identity.IdentityInstrument, signatures: Signatures, commitments: Db.AuthCommitments, authKeys: Db.AuthKeys, env?: WdkEnv);
|
|
17
18
|
get kind(): string;
|
|
18
19
|
setRedirectUri(redirectUri: string): void;
|
|
19
20
|
commitAuth(target: string, isSignUp: boolean, state?: string, signer?: string): Promise<string>;
|
|
@@ -21,5 +22,7 @@ export declare class AuthCodeHandler extends IdentityHandler implements Handler
|
|
|
21
22
|
[key: string]: string;
|
|
22
23
|
}]>;
|
|
23
24
|
status(address: Address.Address, _imageHash: Hex.Hex | undefined, request: BaseSignatureRequest): Promise<SignerUnavailable | SignerReady | SignerActionable>;
|
|
25
|
+
protected serializeQuery(params: Record<string, string>): string;
|
|
26
|
+
private getNavigation;
|
|
24
27
|
}
|
|
25
28
|
//# sourceMappingURL=authcode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authcode.d.ts","sourceRoot":"","sources":["../../../src/sequence/handlers/authcode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAS,MAAM,IAAI,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACtH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"authcode.d.ts","sourceRoot":"","sources":["../../../src/sequence/handlers/authcode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAS,MAAM,IAAI,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACtH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAkB,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1D,qBAAa,eAAgB,SAAQ,eAAgB,YAAW,OAAO;aAInD,UAAU,EAAE,OAAO,GAAG,aAAa,GAAG,UAAU,MAAM,EAAE;aACxD,MAAM,EAAE,MAAM;IAC9B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM;aACnB,QAAQ,EAAE,MAAM;IAGhC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,eAAe;IATpD,SAAS,CAAC,WAAW,EAAE,MAAM,CAAK;gBAGhB,UAAU,EAAE,OAAO,GAAG,aAAa,GAAG,UAAU,MAAM,EAAE,EACxD,MAAM,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChC,KAAK,EAAE,QAAQ,CAAC,kBAAkB,EAClC,UAAU,EAAE,UAAU,EACH,WAAW,EAAE,EAAE,CAAC,eAAe,EAClD,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACrB,GAAG,CAAC,EAAE,MAAM;IAKd,IAAW,IAAI,WAEd;IAEM,cAAc,CAAC,WAAW,EAAE,MAAM;IAI5B,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAyB7E,YAAY,CACvB,UAAU,EAAE,EAAE,CAAC,cAAc,EAC7B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IAWjD,MAAM,CACV,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,UAAU,EAAE,GAAG,CAAC,GAAG,GAAG,SAAS,EAC/B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,iBAAiB,GAAG,WAAW,GAAG,gBAAgB,CAAC;IA4B9D,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;IAUhE,OAAO,CAAC,aAAa;CAOtB"}
|
|
@@ -8,8 +8,8 @@ export class AuthCodeHandler extends IdentityHandler {
|
|
|
8
8
|
audience;
|
|
9
9
|
commitments;
|
|
10
10
|
redirectUri = '';
|
|
11
|
-
constructor(signupKind, issuer, oauthUrl, audience, nitro, signatures, commitments, authKeys) {
|
|
12
|
-
super(nitro, authKeys, signatures, Identity.IdentityType.OIDC);
|
|
11
|
+
constructor(signupKind, issuer, oauthUrl, audience, nitro, signatures, commitments, authKeys, env) {
|
|
12
|
+
super(nitro, authKeys, signatures, Identity.IdentityType.OIDC, env);
|
|
13
13
|
this.signupKind = signupKind;
|
|
14
14
|
this.issuer = issuer;
|
|
15
15
|
this.oauthUrl = oauthUrl;
|
|
@@ -34,14 +34,14 @@ export class AuthCodeHandler extends IdentityHandler {
|
|
|
34
34
|
metadata: {},
|
|
35
35
|
isSignUp,
|
|
36
36
|
});
|
|
37
|
-
const searchParams =
|
|
37
|
+
const searchParams = this.serializeQuery({
|
|
38
38
|
client_id: this.audience,
|
|
39
39
|
redirect_uri: this.redirectUri,
|
|
40
40
|
response_type: 'code',
|
|
41
41
|
state,
|
|
42
42
|
...(this.signupKind === 'apple' ? {} : { scope: 'openid profile email' }),
|
|
43
43
|
});
|
|
44
|
-
return `${this.oauthUrl}?${searchParams
|
|
44
|
+
return `${this.oauthUrl}?${searchParams}`;
|
|
45
45
|
}
|
|
46
46
|
async completeAuth(commitment, code) {
|
|
47
47
|
let challenge = new Identity.AuthCodeChallenge(this.issuer, this.audience, this.redirectUri, code);
|
|
@@ -71,10 +71,27 @@ export class AuthCodeHandler extends IdentityHandler {
|
|
|
71
71
|
status: 'actionable',
|
|
72
72
|
message: 'request-redirect',
|
|
73
73
|
handle: async () => {
|
|
74
|
-
const
|
|
75
|
-
|
|
74
|
+
const navigation = this.getNavigation();
|
|
75
|
+
const url = await this.commitAuth(navigation.getPathname(), false, request.id, address);
|
|
76
|
+
navigation.redirect(url);
|
|
76
77
|
return true;
|
|
77
78
|
},
|
|
78
79
|
};
|
|
79
80
|
}
|
|
81
|
+
serializeQuery(params) {
|
|
82
|
+
const searchParamsCtor = this.env.urlSearchParams ?? globalThis.URLSearchParams;
|
|
83
|
+
if (searchParamsCtor) {
|
|
84
|
+
return new searchParamsCtor(params).toString();
|
|
85
|
+
}
|
|
86
|
+
return Object.entries(params)
|
|
87
|
+
.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
|
|
88
|
+
.join('&');
|
|
89
|
+
}
|
|
90
|
+
getNavigation() {
|
|
91
|
+
const navigation = this.env.navigation;
|
|
92
|
+
if (!navigation) {
|
|
93
|
+
throw new Error('navigation is not available');
|
|
94
|
+
}
|
|
95
|
+
return navigation;
|
|
96
|
+
}
|
|
80
97
|
}
|
|
@@ -4,13 +4,15 @@ import * as Identity from '@0xsequence/identity-instrument';
|
|
|
4
4
|
import { Signatures } from '../signatures.js';
|
|
5
5
|
import { BaseSignatureRequest } from '../types/signature-request.js';
|
|
6
6
|
import { IdentitySigner } from '../../identity/signer.js';
|
|
7
|
+
import { type WdkEnv } from '../../env.js';
|
|
7
8
|
export declare const identityTypeToHex: (identityType?: Identity.IdentityType) => Hex.Hex;
|
|
8
9
|
export declare class IdentityHandler {
|
|
9
10
|
private readonly nitro;
|
|
10
11
|
private readonly authKeys;
|
|
11
12
|
private readonly signatures;
|
|
12
13
|
readonly identityType: Identity.IdentityType;
|
|
13
|
-
|
|
14
|
+
protected readonly env: WdkEnv;
|
|
15
|
+
constructor(nitro: Identity.IdentityInstrument, authKeys: Db.AuthKeys, signatures: Signatures, identityType: Identity.IdentityType, env?: WdkEnv);
|
|
14
16
|
onStatusChange(cb: () => void): () => void;
|
|
15
17
|
protected nitroCommitVerifier(challenge: Identity.Challenge): Promise<Identity.Client.CommitVerifierReturn>;
|
|
16
18
|
protected nitroCompleteAuth(challenge: Identity.Challenge): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../src/sequence/handlers/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAS,MAAM,IAAI,CAAA;AAC/B,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,KAAK,QAAQ,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,EAAE,cAAc,EAAqB,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../src/sequence/handlers/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAS,MAAM,IAAI,CAAA;AAC/B,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,KAAK,QAAQ,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,EAAE,cAAc,EAAqB,MAAM,0BAA0B,CAAA;AAC5E,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAA;AAEzD,eAAO,MAAM,iBAAiB,GAAI,eAAe,QAAQ,CAAC,YAAY,KAAG,GAAG,CAAC,GAW5E,CAAA;AAED,qBAAa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;aACX,YAAY,EAAE,QAAQ,CAAC,YAAY;IANrD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;gBAGX,KAAK,EAAE,QAAQ,CAAC,kBAAkB,EAClC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACrB,UAAU,EAAE,UAAU,EACvB,YAAY,EAAE,QAAQ,CAAC,YAAY,EACnD,GAAG,CAAC,EAAE,MAAM;IAKP,cAAc,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;cAIjC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS;cAWjD,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS;;;;cAkB/C,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB;cAQ1D,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;YAQxE,UAAU;CA0BzB"}
|