accounts 0.16.2 → 0.17.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/CHANGELOG.md +33 -0
- package/README.md +3 -4
- package/dist/cli/Provider.d.ts +1 -1
- package/dist/cli/Provider.d.ts.map +1 -1
- package/dist/cli/Provider.js +3 -3
- package/dist/cli/Provider.js.map +1 -1
- package/dist/cli/adapter.d.ts +13 -8
- package/dist/cli/adapter.d.ts.map +1 -1
- package/dist/cli/adapter.js +92 -303
- package/dist/cli/adapter.js.map +1 -1
- package/dist/core/adapters/deviceCode/deviceCode.d.ts +59 -0
- package/dist/core/adapters/deviceCode/deviceCode.d.ts.map +1 -0
- package/dist/core/adapters/deviceCode/deviceCode.js +93 -0
- package/dist/core/adapters/deviceCode/deviceCode.js.map +1 -0
- package/dist/core/adapters/deviceCode/index.d.ts +3 -0
- package/dist/core/adapters/deviceCode/index.d.ts.map +1 -0
- package/dist/core/adapters/deviceCode/index.js +3 -0
- package/dist/core/adapters/deviceCode/index.js.map +1 -0
- package/dist/core/adapters/deviceCode/tempoWallet.d.ts +9 -0
- package/dist/core/adapters/deviceCode/tempoWallet.d.ts.map +1 -0
- package/dist/core/adapters/deviceCode/tempoWallet.js +11 -0
- package/dist/core/adapters/deviceCode/tempoWallet.js.map +1 -0
- package/dist/core/adapters/internal/fromRequest.d.ts +10 -0
- package/dist/core/adapters/internal/fromRequest.d.ts.map +1 -1
- package/dist/core/adapters/internal/fromRequest.js +4 -2
- package/dist/core/adapters/internal/fromRequest.js.map +1 -1
- package/dist/server/CliAuth.d.ts +69 -1
- package/dist/server/CliAuth.d.ts.map +1 -1
- package/dist/server/CliAuth.js +6 -1
- package/dist/server/CliAuth.js.map +1 -1
- package/dist/server/Handler.d.ts +2 -1
- package/dist/server/Handler.d.ts.map +1 -1
- package/dist/server/Handler.js +2 -1
- package/dist/server/Handler.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal/handlers/codeAuth.d.ts +1 -0
- package/dist/server/internal/handlers/codeAuth.d.ts.map +1 -1
- package/dist/server/internal/handlers/codeAuth.js +1 -0
- package/dist/server/internal/handlers/codeAuth.js.map +1 -1
- package/dist/server/internal/handlers/deviceCode.d.ts +60 -0
- package/dist/server/internal/handlers/deviceCode.d.ts.map +1 -0
- package/dist/server/internal/handlers/deviceCode.js +218 -0
- package/dist/server/internal/handlers/deviceCode.js.map +1 -0
- package/package.json +7 -1
- package/src/cli/Provider.localnet.test.ts +414 -470
- package/src/cli/Provider.test-d.ts +4 -3
- package/src/cli/Provider.ts +6 -6
- package/src/cli/adapter.ts +111 -380
- package/src/core/adapters/deviceCode/deviceCode.localnet.test.ts +226 -0
- package/src/core/adapters/deviceCode/deviceCode.test-d.ts +19 -0
- package/src/core/adapters/deviceCode/deviceCode.ts +157 -0
- package/src/core/adapters/deviceCode/index.ts +2 -0
- package/src/core/adapters/deviceCode/tempoWallet.ts +17 -0
- package/src/core/adapters/internal/fromRequest.ts +115 -88
- package/src/server/CliAuth.test.ts +29 -18
- package/src/server/CliAuth.ts +10 -2
- package/src/server/Handler.test-d.ts +19 -33
- package/src/server/Handler.ts +2 -1
- package/src/server/index.ts +1 -0
- package/src/server/internal/handlers/codeAuth.ts +1 -0
- package/src/server/internal/handlers/deviceCode.test.ts +140 -0
- package/src/server/internal/handlers/deviceCode.ts +323 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# accounts
|
|
2
2
|
|
|
3
|
+
## 0.17.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 9e77565: Rewrote `accounts/cli` onto the Wata device-code transport and deprecated `CliAuth` and `Handler.codeAuth` in favor of `Handler.deviceCode`.
|
|
8
|
+
|
|
9
|
+
```diff
|
|
10
|
+
- Provider.create({
|
|
11
|
+
- host: 'https://wallet.example.com/api/auth/cli',
|
|
12
|
+
- pollIntervalMs: 1000,
|
|
13
|
+
- timeoutMs: 60_000,
|
|
14
|
+
- })
|
|
15
|
+
+ Provider.create({
|
|
16
|
+
+ host: 'https://wallet.example.com/auth/device',
|
|
17
|
+
+ pollingInterval: 1000,
|
|
18
|
+
+ timeout: 60_000,
|
|
19
|
+
+ })
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
- 9e77565: Added a `deviceCode` adapter (`accounts/deviceCode`) that forwards wallet RPC through the Wata device-code transport (RFC 8628 with PKCE), with a `tempoWallet` preset.
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
import { deviceCode } from "accounts/deviceCode";
|
|
26
|
+
|
|
27
|
+
const adapter = deviceCode({
|
|
28
|
+
name: "Example CLI",
|
|
29
|
+
onPrompt: ({ userCode, verificationUriFull }) =>
|
|
30
|
+
console.log(userCode, verificationUriFull),
|
|
31
|
+
rdns: "com.example.cli",
|
|
32
|
+
url: "https://wallet.tempo.xyz/auth/device",
|
|
33
|
+
});
|
|
34
|
+
```
|
|
35
|
+
|
|
3
36
|
## 0.16.2
|
|
4
37
|
|
|
5
38
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -105,10 +105,9 @@ Set `VITE_BASE_URL` to the production docs origin when using a custom domain.
|
|
|
105
105
|
|
|
106
106
|
The `ref-impls/` directory contains reference implementations for building with Tempo Accounts SDK:
|
|
107
107
|
|
|
108
|
-
| Directory
|
|
109
|
-
|
|
|
110
|
-
| `ref-impls/dialog/`
|
|
111
|
-
| `ref-impls/cli-auth/` | Minimal React + Cloudflare/Vite host reference for device-code CLI auth: built-in code-auth endpoints plus a single unstyled approval screen and local smoke client. |
|
|
108
|
+
| Directory | Description |
|
|
109
|
+
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
110
|
+
| `ref-impls/dialog/` | Minimal, unstyled embed dialog app demonstrating how to build a custom embed using the `Remote` API. Select `dialogRefImpl` in the web playground's adapter dropdown to test against it. |
|
|
112
111
|
|
|
113
112
|
## License
|
|
114
113
|
|
package/dist/cli/Provider.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { cli } from './adapter.js';
|
|
|
7
7
|
export declare function create(options: create.Options): create.ReturnType;
|
|
8
8
|
export declare namespace create {
|
|
9
9
|
type Options = Omit<CoreProvider.create.Options & cli.Options, 'adapter' | 'authorizeAccessKey' | 'host'> & {
|
|
10
|
-
/**
|
|
10
|
+
/** Base URL of the wallet's device-code endpoints. @default "https://wallet.tempo.xyz/auth/device" */
|
|
11
11
|
host?: string | undefined;
|
|
12
12
|
};
|
|
13
13
|
type ReturnType = CoreProvider.create.ReturnType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../src/cli/Provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAGlC;;;GAGG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CA4BjE;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAY,OAAO,GAAG,IAAI,CACxB,YAAY,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,EACzC,SAAS,GAAG,oBAAoB,GAAG,MAAM,CAC1C,GAAG;QACF,
|
|
1
|
+
{"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../src/cli/Provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAGlC;;;GAGG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CA4BjE;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAY,OAAO,GAAG,IAAI,CACxB,YAAY,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,EACzC,SAAS,GAAG,oBAAoB,GAAG,MAAM,CAC1C,GAAG;QACF,sGAAsG;QACtG,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;IACD,KAAY,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,UAAU,CAAA;CACxD"}
|
package/dist/cli/Provider.js
CHANGED
|
@@ -6,7 +6,7 @@ import * as Storage from './storage.js';
|
|
|
6
6
|
* device-code flow.
|
|
7
7
|
*/
|
|
8
8
|
export function create(options) {
|
|
9
|
-
const { host = 'https://wallet.tempo.xyz/
|
|
9
|
+
const { host = 'https://wallet.tempo.xyz/auth/device', open, pollingInterval, storage = Storage.filesystem(), timeout, ...rest } = options;
|
|
10
10
|
// CLI defaults `mode` to `'pull'` (local account friendly path).
|
|
11
11
|
const mpp = (() => {
|
|
12
12
|
if (!options.mpp)
|
|
@@ -20,8 +20,8 @@ export function create(options) {
|
|
|
20
20
|
adapter: cli({
|
|
21
21
|
host,
|
|
22
22
|
...(open ? { open } : {}),
|
|
23
|
-
...(
|
|
24
|
-
...(
|
|
23
|
+
...(pollingInterval !== undefined ? { pollingInterval } : {}),
|
|
24
|
+
...(timeout !== undefined ? { timeout } : {}),
|
|
25
25
|
}),
|
|
26
26
|
...(mpp ? { mpp } : {}),
|
|
27
27
|
storage,
|
package/dist/cli/Provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../src/cli/Provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAClC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,MAAM,EACJ,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../src/cli/Provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAClC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,MAAM,EACJ,IAAI,GAAG,sCAAsC,EAC7C,IAAI,EACJ,eAAe,EACf,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,EAC9B,OAAO,EACP,GAAG,IAAI,EACR,GAAG,OAAO,CAAA;IAEX,iEAAiE;IACjE,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE;QAChB,IAAI,CAAC,OAAO,CAAC,GAAG;YAAE,OAAO,SAAS,CAAA;QAClC,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ;YAAE,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QACrF,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,CAAA;IAClC,CAAC,CAAC,EAAE,CAAA;IAEJ,OAAO,YAAY,CAAC,MAAM,CAAC;QACzB,GAAG,IAAI;QACP,OAAO,EAAE,GAAG,CAAC;YACX,IAAI;YACJ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9C,CAAC;QACF,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvB,OAAO;KACR,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/cli/adapter.d.ts
CHANGED
|
@@ -1,22 +1,27 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { DeviceCode } from 'wata';
|
|
2
|
+
import type * as Adapter from '../core/Adapter.js';
|
|
2
3
|
/**
|
|
3
|
-
* Creates a CLI bootstrap adapter backed by the device
|
|
4
|
+
* Creates a CLI bootstrap adapter backed by the Wata device-code transport
|
|
5
|
+
* (OAuth 2.0 Device Authorization Grant, RFC 8628 with PKCE).
|
|
6
|
+
*
|
|
7
|
+
* Authorization opens the wallet's verification page in a browser; the wallet
|
|
8
|
+
* responds with a signed key authorization once the user approves.
|
|
4
9
|
*/
|
|
5
10
|
export declare function cli(options: cli.Options): Adapter.Adapter;
|
|
6
11
|
export declare namespace cli {
|
|
7
12
|
type Options = {
|
|
8
|
-
/**
|
|
13
|
+
/** Base URL of the wallet's device-code endpoints (derives `/register` and `/token`). */
|
|
9
14
|
host: string;
|
|
10
15
|
/** Provider display name. @default "Tempo CLI" */
|
|
11
16
|
name?: string | undefined;
|
|
12
17
|
/** Browser opener override. */
|
|
13
|
-
open?: ((url: string) => Promise<void> | void) | undefined;
|
|
14
|
-
/** Poll
|
|
15
|
-
|
|
18
|
+
open?: ((url: string, prompt: DeviceCode.Prompt) => Promise<void> | void) | undefined;
|
|
19
|
+
/** Poll cadence override in milliseconds. Defaults to the host-advertised interval. */
|
|
20
|
+
pollingInterval?: number | undefined;
|
|
16
21
|
/** Reverse-DNS provider identifier. @default "xyz.tempo.cli" */
|
|
17
22
|
rdns?: string | undefined;
|
|
18
|
-
/**
|
|
19
|
-
|
|
23
|
+
/** Overall wait for user approval in milliseconds. @default 300000 */
|
|
24
|
+
timeout?: number | undefined;
|
|
20
25
|
};
|
|
21
26
|
}
|
|
22
27
|
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/cli/adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/cli/adapter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAGtC,OAAO,KAAK,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAKlD;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CA4GzD;AAED,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC;IAC3B,KAAY,OAAO,GAAG;QACpB,yFAAyF;QACzF,IAAI,EAAE,MAAM,CAAA;QACZ,kDAAkD;QAClD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,+BAA+B;QAC/B,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;QACrF,uFAAuF;QACvF,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACpC,gEAAgE;QAChE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,sEAAsE;QACtE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CAAA;CACF"}
|
package/dist/cli/adapter.js
CHANGED
|
@@ -1,299 +1,115 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
-
import {
|
|
3
|
-
import { Base64, Hash, Hex, Provider as core_Provider, RpcResponse } from 'ox';
|
|
2
|
+
import { Provider as core_Provider } from 'ox';
|
|
4
3
|
import { KeyAuthorization } from 'ox/tempo';
|
|
4
|
+
import { hashMessage, hashTypedData } from 'viem';
|
|
5
5
|
import * as z from 'zod/mini';
|
|
6
|
-
import
|
|
6
|
+
import { deviceCode } from '../core/adapters/deviceCode/deviceCode.js';
|
|
7
7
|
import * as Keystore from '../core/Keystore.js';
|
|
8
|
-
import * as
|
|
8
|
+
import * as Rpc from '../core/zod/rpc.js';
|
|
9
9
|
/**
|
|
10
|
-
* Creates a CLI bootstrap adapter backed by the device
|
|
10
|
+
* Creates a CLI bootstrap adapter backed by the Wata device-code transport
|
|
11
|
+
* (OAuth 2.0 Device Authorization Grant, RFC 8628 with PKCE).
|
|
12
|
+
*
|
|
13
|
+
* Authorization opens the wallet's verification page in a browser; the wallet
|
|
14
|
+
* responds with a signed key authorization once the user approves.
|
|
11
15
|
*/
|
|
12
16
|
export function cli(options) {
|
|
13
|
-
const { name = 'Tempo CLI', rdns = 'xyz.tempo.cli' } = options;
|
|
14
|
-
return
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const keystores = {
|
|
21
|
-
p256: Keystore.webCryptoP256({ extractable: true }),
|
|
22
|
-
secp256k1: Keystore.secp256k1(),
|
|
23
|
-
};
|
|
24
|
-
async function saveGeneratedAccessKey(address, accessKey, keyAuthorization) {
|
|
25
|
-
const signed = KeyAuthorization.fromRpc(z.encode(CliAuth.keyAuthorization, keyAuthorization));
|
|
26
|
-
store.accessKeys.add({
|
|
27
|
-
account: address,
|
|
28
|
-
authorization: signed,
|
|
29
|
-
handle: accessKey.handle,
|
|
30
|
-
publicKey: accessKey.publicKey,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
async function authorize(request) {
|
|
34
|
-
const { host, open = defaultOpen, pollIntervalMs = 2_000, timeoutMs = 5 * 60 * 1_000, } = options;
|
|
35
|
-
const { account, authorizeAccessKey, method } = request;
|
|
36
|
-
// p256 by default; secp256k1 only when explicitly requested.
|
|
37
|
-
const generatedKeyType = authorizeAccessKey?.keyType === 'secp256k1' ? 'secp256k1' : 'p256';
|
|
38
|
-
const generatedAccessKey = authorizeAccessKey && !authorizeAccessKey.publicKey && !authorizeAccessKey.address
|
|
39
|
-
? await keystores[generatedKeyType].createKey()
|
|
40
|
-
: undefined;
|
|
41
|
-
const publicKey = authorizeAccessKey?.publicKey ?? generatedAccessKey?.publicKey;
|
|
42
|
-
const keyType = authorizeAccessKey?.keyType ?? (generatedAccessKey ? generatedKeyType : undefined);
|
|
43
|
-
if (!publicKey)
|
|
44
|
-
throw new RpcResponse.InvalidParamsError({
|
|
45
|
-
message: method === 'wallet_connect'
|
|
46
|
-
? '`wallet_connect` on the CLI adapter requires `capabilities.authorizeAccessKey`.'
|
|
47
|
-
: '`wallet_authorizeAccessKey` on the CLI adapter requires key parameters.',
|
|
48
|
-
});
|
|
49
|
-
const codeVerifier = createCodeVerifier();
|
|
50
|
-
const codeChallenge = createCodeChallenge(codeVerifier);
|
|
51
|
-
const body = {
|
|
52
|
-
...(account ? { account } : {}),
|
|
53
|
-
chainId: BigInt(store.getState().chainId),
|
|
54
|
-
codeChallenge,
|
|
55
|
-
...(typeof authorizeAccessKey?.expiry !== 'undefined'
|
|
56
|
-
? { expiry: authorizeAccessKey.expiry }
|
|
57
|
-
: {}),
|
|
58
|
-
...(keyType ? { keyType } : {}),
|
|
59
|
-
...(authorizeAccessKey?.limits ? { limits: authorizeAccessKey.limits } : {}),
|
|
60
|
-
pubKey: publicKey,
|
|
61
|
-
...(request.showDeposit !== undefined ? { showDeposit: request.showDeposit } : {}),
|
|
62
|
-
};
|
|
63
|
-
const created = await post({
|
|
64
|
-
body,
|
|
65
|
-
request: CliAuth.createRequest,
|
|
66
|
-
response: CliAuth.createResponse,
|
|
67
|
-
url: getApiUrl(host, 'code'),
|
|
68
|
-
});
|
|
69
|
-
const url = getBrowserUrl(host, created.code);
|
|
70
|
-
try {
|
|
71
|
-
await open(url);
|
|
72
|
-
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
throw new OpenError(url, created.code, error);
|
|
75
|
-
}
|
|
76
|
-
const startedAt = Date.now();
|
|
77
|
-
while (Date.now() - startedAt < timeoutMs) {
|
|
78
|
-
const result = await post({
|
|
79
|
-
body: {
|
|
80
|
-
codeVerifier,
|
|
81
|
-
},
|
|
82
|
-
request: CliAuth.pollRequest,
|
|
83
|
-
response: CliAuth.pollResponse,
|
|
84
|
-
url: getApiUrl(host, `poll/${created.code}`),
|
|
85
|
-
});
|
|
86
|
-
if (result.status === 'pending') {
|
|
87
|
-
await sleep(pollIntervalMs);
|
|
88
|
-
continue;
|
|
89
|
-
}
|
|
90
|
-
if (result.status === 'expired')
|
|
91
|
-
throw new Error('Device code expired before authorization completed.');
|
|
92
|
-
if (result.action === 'updateAccessKey')
|
|
93
|
-
throw new Error('Device code action does not match the authorization request.');
|
|
94
|
-
if (generatedAccessKey)
|
|
95
|
-
await saveGeneratedAccessKey(result.accountAddress, generatedAccessKey, result.keyAuthorization);
|
|
96
|
-
return result;
|
|
97
|
-
}
|
|
98
|
-
throw new TimeoutError(url, created.code);
|
|
99
|
-
}
|
|
100
|
-
async function update(parameters) {
|
|
101
|
-
const { host, open = defaultOpen, pollIntervalMs = 2_000, timeoutMs = 5 * 60 * 1_000, } = options;
|
|
102
|
-
const chainId = Number(parameters.chainId ?? store.getState().chainId);
|
|
103
|
-
const current = store.accessKeys.list({
|
|
104
|
-
accessKey: parameters.accessKeyAddress,
|
|
105
|
-
account: parameters.address,
|
|
106
|
-
chainId,
|
|
107
|
-
})[0];
|
|
108
|
-
const status = current?.keyAuthorization
|
|
109
|
-
? await store.accessKeys.getStatus({
|
|
110
|
-
accessKey: parameters.accessKeyAddress,
|
|
111
|
-
account: parameters.address,
|
|
112
|
-
chainId,
|
|
113
|
-
client: getClient({ chainId }),
|
|
114
|
-
})
|
|
115
|
-
: undefined;
|
|
116
|
-
const pendingKeyAuthorization = status === 'pending' && current?.keyAuthorization
|
|
117
|
-
? KeyAuthorization.toRpc(current.keyAuthorization)
|
|
118
|
-
: undefined;
|
|
119
|
-
const codeVerifier = createCodeVerifier();
|
|
120
|
-
const body = {
|
|
121
|
-
action: 'updateAccessKey',
|
|
122
|
-
accessKeyAddress: parameters.accessKeyAddress,
|
|
123
|
-
account: parameters.address,
|
|
124
|
-
chainId: BigInt(chainId),
|
|
125
|
-
codeChallenge: createCodeChallenge(codeVerifier),
|
|
126
|
-
...(pendingKeyAuthorization
|
|
127
|
-
? {
|
|
128
|
-
keyAuthorization: z.decode(CliAuth.keyAuthorization, {
|
|
129
|
-
...pendingKeyAuthorization,
|
|
130
|
-
address: pendingKeyAuthorization.keyId,
|
|
131
|
-
}),
|
|
132
|
-
}
|
|
133
|
-
: {}),
|
|
134
|
-
limits: parameters.limits,
|
|
135
|
-
};
|
|
136
|
-
const created = await post({
|
|
137
|
-
body,
|
|
138
|
-
request: CliAuth.createRequest,
|
|
139
|
-
response: CliAuth.createResponse,
|
|
140
|
-
url: getApiUrl(host, 'code'),
|
|
141
|
-
});
|
|
142
|
-
const url = getBrowserUrl(host, created.code);
|
|
143
|
-
try {
|
|
144
|
-
await open(url);
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
throw new OpenError(url, created.code, error);
|
|
148
|
-
}
|
|
149
|
-
const startedAt = Date.now();
|
|
150
|
-
while (Date.now() - startedAt < timeoutMs) {
|
|
151
|
-
const result = await post({
|
|
152
|
-
body: { codeVerifier },
|
|
153
|
-
request: CliAuth.pollRequest,
|
|
154
|
-
response: CliAuth.pollResponse,
|
|
155
|
-
url: getApiUrl(host, `poll/${created.code}`),
|
|
17
|
+
const { host, name = 'Tempo CLI', open = defaultOpen, pollingInterval, rdns = 'xyz.tempo.cli', timeout, } = options;
|
|
18
|
+
return deviceCode({
|
|
19
|
+
actions: ({ getClient, request, store }) => {
|
|
20
|
+
async function getAccessKey(address) {
|
|
21
|
+
const account = await store.accessKeys.select({
|
|
22
|
+
account: address,
|
|
23
|
+
chainId: store.getState().chainId,
|
|
156
24
|
});
|
|
157
|
-
if (
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}
|
|
161
|
-
if (result.status === 'expired')
|
|
162
|
-
throw new Error('Device code expired before access key update completed.');
|
|
163
|
-
if (result.action !== 'updateAccessKey')
|
|
164
|
-
throw new Error('Device code action does not match the access key update request.');
|
|
165
|
-
if (result.keyAuthorization) {
|
|
166
|
-
store.accessKeys.updateAuthorization({
|
|
167
|
-
accessKey: parameters.accessKeyAddress,
|
|
168
|
-
account: parameters.address,
|
|
169
|
-
authorization: KeyAuthorization.fromRpc(z.encode(CliAuth.keyAuthorization, result.keyAuthorization)),
|
|
170
|
-
chainId,
|
|
25
|
+
if (!account)
|
|
26
|
+
throw new core_Provider.UnauthorizedError({
|
|
27
|
+
message: `Account "${address}" cannot sign with an access key.`,
|
|
171
28
|
});
|
|
172
|
-
|
|
173
|
-
return;
|
|
29
|
+
return account;
|
|
174
30
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
async authorizeAccessKey(parameters) {
|
|
180
|
-
const { accounts, activeAccount } = store.getState();
|
|
181
|
-
const account = accounts[activeAccount]?.address;
|
|
182
|
-
const result = await authorize({
|
|
183
|
-
...(account ? { account } : {}),
|
|
184
|
-
authorizeAccessKey: parameters,
|
|
185
|
-
method: 'wallet_authorizeAccessKey',
|
|
186
|
-
...(parameters.showDeposit !== undefined
|
|
187
|
-
? { showDeposit: parameters.showDeposit }
|
|
188
|
-
: {}),
|
|
189
|
-
});
|
|
190
|
-
if (!account)
|
|
191
|
-
store.setState({
|
|
192
|
-
accounts: [{ address: result.accountAddress }],
|
|
193
|
-
activeAccount: 0,
|
|
194
|
-
});
|
|
195
|
-
return {
|
|
196
|
-
keyAuthorization: z.encode(CliAuth.keyAuthorization, result.keyAuthorization),
|
|
197
|
-
rootAddress: result.accountAddress,
|
|
198
|
-
};
|
|
31
|
+
return {
|
|
32
|
+
async signPersonalMessage(parameters) {
|
|
33
|
+
const account = await getAccessKey(parameters.address);
|
|
34
|
+
return await account.sign({ hash: hashMessage({ raw: parameters.data }) });
|
|
199
35
|
},
|
|
200
|
-
async
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
authorizeAccessKey: parameters?.authorizeAccessKey,
|
|
205
|
-
method: 'wallet_connect',
|
|
206
|
-
...(parameters?.showDeposit !== undefined
|
|
207
|
-
? { showDeposit: parameters.showDeposit }
|
|
208
|
-
: {}),
|
|
36
|
+
async signTypedData(parameters) {
|
|
37
|
+
const account = await getAccessKey(parameters.address);
|
|
38
|
+
return await account.sign({
|
|
39
|
+
hash: hashTypedData(JSON.parse(parameters.data)),
|
|
209
40
|
});
|
|
210
|
-
return {
|
|
211
|
-
accounts: [
|
|
212
|
-
{
|
|
213
|
-
address: result.accountAddress,
|
|
214
|
-
capabilities: {},
|
|
215
|
-
},
|
|
216
|
-
],
|
|
217
|
-
keyAuthorization: z.encode(CliAuth.keyAuthorization, result.keyAuthorization),
|
|
218
|
-
};
|
|
219
41
|
},
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
42
|
+
// Limit updates run their own ceremony: the wallet returns a
|
|
43
|
+
// replacement signed authorization for a pending (unpublished) key,
|
|
44
|
+
// or applies the update on-chain for a published one.
|
|
45
|
+
async updateAccessKey(parameters) {
|
|
46
|
+
const chainId = Number(parameters.chainId ?? store.getState().chainId);
|
|
47
|
+
const current = store.accessKeys.list({
|
|
48
|
+
accessKey: parameters.accessKeyAddress,
|
|
49
|
+
account: parameters.address,
|
|
50
|
+
chainId,
|
|
51
|
+
})[0];
|
|
52
|
+
const status = current?.keyAuthorization
|
|
53
|
+
? await store.accessKeys.getStatus({
|
|
54
|
+
accessKey: parameters.accessKeyAddress,
|
|
55
|
+
account: parameters.address,
|
|
56
|
+
chainId,
|
|
57
|
+
client: getClient({ chainId }),
|
|
58
|
+
})
|
|
59
|
+
: undefined;
|
|
60
|
+
const pendingKeyAuthorization = status === 'pending' && current?.keyAuthorization
|
|
61
|
+
? KeyAuthorization.toRpc(current.keyAuthorization)
|
|
62
|
+
: undefined;
|
|
63
|
+
const encoded = z.encode(Rpc.wallet_updateAccessKey.parameters, {
|
|
64
|
+
...parameters,
|
|
65
|
+
chainId: BigInt(chainId),
|
|
229
66
|
});
|
|
230
|
-
|
|
231
|
-
|
|
67
|
+
const result = (await request({
|
|
68
|
+
context: { account: parameters.address, chainId },
|
|
69
|
+
method: 'wallet_updateAccessKey',
|
|
70
|
+
params: [
|
|
232
71
|
{
|
|
233
|
-
|
|
234
|
-
|
|
72
|
+
...encoded,
|
|
73
|
+
...(pendingKeyAuthorization ? { keyAuthorization: pendingKeyAuthorization } : {}),
|
|
235
74
|
},
|
|
236
75
|
],
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
76
|
+
}));
|
|
77
|
+
if (result?.keyAuthorization)
|
|
78
|
+
store.accessKeys.updateAuthorization({
|
|
79
|
+
accessKey: parameters.accessKeyAddress,
|
|
80
|
+
account: parameters.address,
|
|
81
|
+
authorization: KeyAuthorization.fromRpc(result.keyAuthorization),
|
|
82
|
+
chainId,
|
|
83
|
+
});
|
|
245
84
|
},
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
this.url = url;
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
class TimeoutError extends Error {
|
|
276
|
-
code;
|
|
277
|
-
url;
|
|
278
|
-
constructor(url, code) {
|
|
279
|
-
super(`Timed out waiting for device code ${formatCode(code)}. Continue at ${url}.`);
|
|
280
|
-
this.name = 'TimeoutError';
|
|
281
|
-
this.code = code;
|
|
282
|
-
this.url = url;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
function createCodeChallenge(codeVerifier) {
|
|
286
|
-
return Base64.fromBytes(Hash.sha256(Hex.fromString(codeVerifier), { as: 'Bytes' }), {
|
|
287
|
-
pad: false,
|
|
288
|
-
url: true,
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
// The CLI persists to string-based filesystem storage, so its p256
|
|
88
|
+
// default opts into an extractable WebCrypto key (a non-extractable one
|
|
89
|
+
// could not survive a restart). secp256k1 stays available for explicit
|
|
90
|
+
// requests.
|
|
91
|
+
keystores: {
|
|
92
|
+
p256: Keystore.webCryptoP256({ extractable: true }),
|
|
93
|
+
secp256k1: Keystore.secp256k1(),
|
|
94
|
+
},
|
|
95
|
+
meta: { name },
|
|
96
|
+
// Only the ceremonies (bootstrap and limit updates) open a browser;
|
|
97
|
+
// everything else signs locally with the stored access key or fails fast.
|
|
98
|
+
methods: ['wallet_connect', 'wallet_authorizeAccessKey', 'wallet_updateAccessKey'],
|
|
99
|
+
name,
|
|
100
|
+
async onPrompt(prompt) {
|
|
101
|
+
if (!prompt.verificationUriFull) {
|
|
102
|
+
const code = prompt.userCode.replace(/^(.{4})(.{4})$/, '$1-$2');
|
|
103
|
+
process.stdout.write(`Enter code ${code} at ${prompt.verificationUri}\n`);
|
|
104
|
+
}
|
|
105
|
+
await open(prompt.verificationUriFull ?? prompt.verificationUri, prompt);
|
|
106
|
+
},
|
|
107
|
+
rdns,
|
|
108
|
+
...(pollingInterval !== undefined ? { pollingInterval } : {}),
|
|
109
|
+
...(timeout !== undefined ? { timeout } : {}),
|
|
110
|
+
url: host,
|
|
289
111
|
});
|
|
290
112
|
}
|
|
291
|
-
function createCodeVerifier() {
|
|
292
|
-
return Base64.fromBytes(Hex.toBytes(Hex.random(32)), { pad: false, url: true });
|
|
293
|
-
}
|
|
294
|
-
function formatCode(code) {
|
|
295
|
-
return code.length === 8 ? `${code.slice(0, 4)}-${code.slice(4)}` : code;
|
|
296
|
-
}
|
|
297
113
|
function defaultOpen(url) {
|
|
298
114
|
const command = process.platform === 'darwin'
|
|
299
115
|
? { command: 'open', args: [url] }
|
|
@@ -306,31 +122,4 @@ function defaultOpen(url) {
|
|
|
306
122
|
});
|
|
307
123
|
child.unref();
|
|
308
124
|
}
|
|
309
|
-
function getApiUrl(serviceUrl, path) {
|
|
310
|
-
const url = new URL(serviceUrl);
|
|
311
|
-
url.pathname = `${url.pathname.replace(/\/$/, '')}/${path.replace(/^\//, '')}`;
|
|
312
|
-
url.search = '';
|
|
313
|
-
return url.toString();
|
|
314
|
-
}
|
|
315
|
-
function getBrowserUrl(serviceUrl, code) {
|
|
316
|
-
const url = new URL(serviceUrl);
|
|
317
|
-
url.searchParams.set('code', code);
|
|
318
|
-
return url.toString();
|
|
319
|
-
}
|
|
320
|
-
async function post(options) {
|
|
321
|
-
const result = await fetch(options.url, {
|
|
322
|
-
body: JSON.stringify(z.encode(options.request, options.body)),
|
|
323
|
-
headers: { 'content-type': 'application/json' },
|
|
324
|
-
method: 'POST',
|
|
325
|
-
});
|
|
326
|
-
const json = (await result.json().catch(() => ({})));
|
|
327
|
-
if (!result.ok) {
|
|
328
|
-
const error = json.error;
|
|
329
|
-
throw new Error(typeof error === 'string' ? error : `Request failed: ${result.status}`);
|
|
330
|
-
}
|
|
331
|
-
return z.decode(options.response, json);
|
|
332
|
-
}
|
|
333
|
-
function unsupported(message) {
|
|
334
|
-
return new core_Provider.UnsupportedMethodError({ message });
|
|
335
|
-
}
|
|
336
125
|
//# sourceMappingURL=adapter.js.map
|
package/dist/cli/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/cli/adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/cli/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,IAAI,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AAEjD,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAG7B,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAA;AACtE,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAA;AAEzC;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CAAC,OAAoB;IACtC,MAAM,EACJ,IAAI,EACJ,IAAI,GAAG,WAAW,EAClB,IAAI,GAAG,WAAW,EAClB,eAAe,EACf,IAAI,GAAG,eAAe,EACtB,OAAO,GACR,GAAG,OAAO,CAAA;IAEX,OAAO,UAAU,CAAC;QAChB,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACzC,KAAK,UAAU,YAAY,CAAC,OAAsB;gBAChD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;oBAC5C,OAAO,EAAE,OAAO;oBAChB,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO;iBAClC,CAAC,CAAA;gBACF,IAAI,CAAC,OAAO;oBACV,MAAM,IAAI,aAAa,CAAC,iBAAiB,CAAC;wBACxC,OAAO,EAAE,YAAY,OAAO,mCAAmC;qBAChE,CAAC,CAAA;gBACJ,OAAO,OAAO,CAAA;YAChB,CAAC;YAED,OAAO;gBACL,KAAK,CAAC,mBAAmB,CAAC,UAAU;oBAClC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;oBACtD,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;gBAC5E,CAAC;gBACD,KAAK,CAAC,aAAa,CAAC,UAAU;oBAC5B,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;oBACtD,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;wBACxB,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAU,CAAC;qBAC1D,CAAC,CAAA;gBACJ,CAAC;gBACD,6DAA6D;gBAC7D,oEAAoE;gBACpE,sDAAsD;gBACtD,KAAK,CAAC,eAAe,CAAC,UAAU;oBAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAA;oBACtE,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;wBACpC,SAAS,EAAE,UAAU,CAAC,gBAAgB;wBACtC,OAAO,EAAE,UAAU,CAAC,OAAO;wBAC3B,OAAO;qBACR,CAAC,CAAC,CAAC,CAAC,CAAA;oBACL,MAAM,MAAM,GAAG,OAAO,EAAE,gBAAgB;wBACtC,CAAC,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;4BAC/B,SAAS,EAAE,UAAU,CAAC,gBAAgB;4BACtC,OAAO,EAAE,UAAU,CAAC,OAAO;4BAC3B,OAAO;4BACP,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;yBAC/B,CAAC;wBACJ,CAAC,CAAC,SAAS,CAAA;oBACb,MAAM,uBAAuB,GAC3B,MAAM,KAAK,SAAS,IAAI,OAAO,EAAE,gBAAgB;wBAC/C,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;wBAClD,CAAC,CAAC,SAAS,CAAA;oBAEf,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,UAAU,EAAE;wBAC9D,GAAG,UAAU;wBACb,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;qBACzB,CAAC,CAAA;oBACF,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC;wBAC5B,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE;wBACjD,MAAM,EAAE,wBAAwB;wBAChC,MAAM,EAAE;4BACN;gCACE,GAAG,OAAO;gCACV,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;6BAClF;yBACF;qBACF,CAAC,CAA+E,CAAA;oBAEjF,IAAI,MAAM,EAAE,gBAAgB;wBAC1B,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC;4BACnC,SAAS,EAAE,UAAU,CAAC,gBAAgB;4BACtC,OAAO,EAAE,UAAU,CAAC,OAAO;4BAC3B,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC;4BAChE,OAAO;yBACR,CAAC,CAAA;gBACN,CAAC;aACF,CAAA;QACH,CAAC;QACD,mEAAmE;QACnE,wEAAwE;QACxE,uEAAuE;QACvE,YAAY;QACZ,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACnD,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE;SAChC;QACD,IAAI,EAAE,EAAE,IAAI,EAAE;QACd,oEAAoE;QACpE,0EAA0E;QAC1E,OAAO,EAAE,CAAC,gBAAgB,EAAE,2BAA2B,EAAE,wBAAwB,CAAC;QAClF,IAAI;QACJ,KAAK,CAAC,QAAQ,CAAC,MAAM;YACnB,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;gBAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,OAAO,MAAM,CAAC,eAAe,IAAI,CAAC,CAAA;YAC3E,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;QAC1E,CAAC;QACD,IAAI;QACJ,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,EAAE,IAAI;KACV,CAAC,CAAA;AACJ,CAAC;AAmBD,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE;QAClC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE;YACpD,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAA;IAE5C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;QACjD,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAA;IACF,KAAK,CAAC,KAAK,EAAE,CAAA;AACf,CAAC"}
|