@cartridge/controller 0.13.5 → 0.13.7
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$colon$deps.log +27 -17
- package/.turbo/turbo-build.log +25 -15
- package/HEADLESS_MODE.md +28 -7
- package/dist/controller.d.ts +2 -1
- package/dist/index-CYAUAqql.js +1072 -0
- package/dist/index-CYAUAqql.js.map +1 -0
- package/dist/index.js +1925 -2488
- package/dist/index.js.map +1 -1
- package/dist/lookup.d.ts +2 -0
- package/dist/node/index.cjs +3 -3
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +4 -4
- package/dist/node/index.js.map +1 -1
- package/dist/session/provider.d.ts +7 -2
- package/dist/session.js +141 -142
- package/dist/session.js.map +1 -1
- package/dist/stats.html +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/utils.d.ts +5 -3
- package/package.json +2 -2
- package/src/__tests__/lookupUsername.test.ts +166 -0
- package/src/__tests__/toWasmPolicies.test.ts +89 -40
- package/src/controller.ts +13 -0
- package/src/iframe/keychain.ts +7 -0
- package/src/lookup.ts +170 -2
- package/src/session/provider.ts +75 -48
- package/src/types.ts +6 -0
- package/src/utils.ts +19 -5
- package/dist/provider-NKp7_oNj.js +0 -387
- package/dist/provider-NKp7_oNj.js.map +0 -1
|
@@ -1,16 +1,26 @@
|
|
|
1
1
|
|
|
2
|
-
> @cartridge/controller@0.13.
|
|
2
|
+
> @cartridge/controller@0.13.7 build:deps /home/runner/work/controller/controller/packages/controller
|
|
3
3
|
> pnpm build
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @cartridge/controller@0.13.
|
|
6
|
+
> @cartridge/controller@0.13.7 build /home/runner/work/controller/controller/packages/controller
|
|
7
7
|
> pnpm build:browser && pnpm build:node
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
> @cartridge/controller@0.13.
|
|
10
|
+
> @cartridge/controller@0.13.7 build:browser /home/runner/work/controller/controller/packages/controller
|
|
11
11
|
> vite build
|
|
12
12
|
|
|
13
13
|
[36mvite v6.3.4 [32mbuilding for production...[36m[39m
|
|
14
|
+
[96msrc/lookup.ts[0m:[93m116[0m:[93m7[0m - [91merror[0m[90m TS2322: [0mType 'string[]' is not assignable to type '("base" | "metamask" | "rabby" | "phantom-evm" | "argent" | "braavos" | "phantom" | "google" | "webauthn" | "discord" | "walletconnect" | "password")[]'.
|
|
15
|
+
Type 'string' is not assignable to type '"base" | "metamask" | "rabby" | "phantom-evm" | "argent" | "braavos" | "phantom" | "google" | "webauthn" | "discord" | "walletconnect" | "password"'.
|
|
16
|
+
|
|
17
|
+
[7m116[0m const HEADLESS_AUTH_OPTIONS: AuthOption[] = [
|
|
18
|
+
[7m [0m [91m ~~~~~~~~~~~~~~~~~~~~~[0m
|
|
19
|
+
[96msrc/lookup.ts[0m:[93m125[0m:[93m56[0m - [91merror[0m[90m TS2345: [0mArgument of type 'string' is not assignable to parameter of type '"metamask" | "rabby" | "phantom-evm" | "google" | "webauthn" | "discord" | "walletconnect" | "password"'.
|
|
20
|
+
|
|
21
|
+
[7m125[0m ].filter((option) => IMPLEMENTED_AUTH_OPTIONS.includes(option));
|
|
22
|
+
[7m [0m [91m ~~~~~~[0m
|
|
23
|
+
|
|
14
24
|
transforming...
|
|
15
25
|
[33m../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.3_zod@3.24.4/node_modules/ox/_esm/core/Address.js (6:21): A comment
|
|
16
26
|
|
|
@@ -40,14 +50,14 @@ rendering chunks...
|
|
|
40
50
|
|
|
41
51
|
[vite:dts] Start generate declaration files...
|
|
42
52
|
computing gzip size...
|
|
43
|
-
[2mdist/[22m[36msession.js
|
|
44
|
-
[2mdist/[22m[
|
|
45
|
-
[2mdist/[22m[36mindex.js
|
|
46
|
-
[vite:dts] Declaration files built in
|
|
53
|
+
[2mdist/[22m[36msession.js [39m[1m[2m 10.53 kB[22m[1m[22m[2m │ gzip: 3.24 kB[22m[2m │ map: 25.46 kB[22m
|
|
54
|
+
[2mdist/[22m[36mindex-CYAUAqql.js [39m[1m[2m 38.34 kB[22m[1m[22m[2m │ gzip: 12.80 kB[22m[2m │ map: 81.12 kB[22m
|
|
55
|
+
[2mdist/[22m[36mindex.js [39m[1m[2m188.96 kB[22m[1m[22m[2m │ gzip: 49.77 kB[22m[2m │ map: 576.04 kB[22m
|
|
56
|
+
[vite:dts] Declaration files built in 3626ms.
|
|
47
57
|
|
|
48
|
-
[32m✓ built in 5.
|
|
58
|
+
[32m✓ built in 5.76s[39m
|
|
49
59
|
|
|
50
|
-
> @cartridge/controller@0.13.
|
|
60
|
+
> @cartridge/controller@0.13.7 build:node /home/runner/work/controller/controller/packages/controller
|
|
51
61
|
> tsup --config tsup.node.config.ts
|
|
52
62
|
|
|
53
63
|
[34mCLI[39m Building entry: src/node/index.ts
|
|
@@ -58,15 +68,15 @@ computing gzip size...
|
|
|
58
68
|
[34mCLI[39m Cleaning output folder
|
|
59
69
|
[34mESM[39m Build start
|
|
60
70
|
[34mCJS[39m Build start
|
|
61
|
-
"constants"
|
|
62
|
-
"constants", "getChecksumAddress" and "shortString" are imported from external module "starknet" but never used in "dist/node/index.cjs".
|
|
71
|
+
"constants" and "shortString" are imported from external module "starknet" but never used in "dist/node/index.cjs".
|
|
63
72
|
Entry module "dist/node/index.cjs" is using named and default exports together. Consumers of your bundle will have to use `chunk.default` to access the default export, which may not be what you want. Use `output.exports: "named"` to disable this warning.
|
|
64
|
-
|
|
65
|
-
[
|
|
66
|
-
[
|
|
67
|
-
[32mCJS[39m
|
|
68
|
-
[
|
|
69
|
-
[
|
|
73
|
+
"constants" and "shortString" are imported from external module "starknet" but never used in "dist/node/index.js".
|
|
74
|
+
[32mCJS[39m [1mdist/node/index.cjs [22m[32m24.40 KB[39m
|
|
75
|
+
[32mCJS[39m [1mdist/node/index.cjs.map [22m[32m56.82 KB[39m
|
|
76
|
+
[32mCJS[39m ⚡️ Build success in 326ms
|
|
77
|
+
[32mESM[39m [1mdist/node/index.js [22m[32m23.50 KB[39m
|
|
78
|
+
[32mESM[39m [1mdist/node/index.js.map [22m[32m56.57 KB[39m
|
|
79
|
+
[32mESM[39m ⚡️ Build success in 326ms
|
|
70
80
|
[34mDTS[39m Build start
|
|
71
81
|
[32mDTS[39m ⚡️ Build success in 3096ms
|
|
72
82
|
[32mDTS[39m [1mdist/node/index.d.ts [22m[32m6.42 KB[39m
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
|
|
2
|
-
> @cartridge/controller@0.13.
|
|
2
|
+
> @cartridge/controller@0.13.7 build /home/runner/work/controller/controller/packages/controller
|
|
3
3
|
> pnpm build:browser && pnpm build:node
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @cartridge/controller@0.13.
|
|
6
|
+
> @cartridge/controller@0.13.7 build:browser /home/runner/work/controller/controller/packages/controller
|
|
7
7
|
> vite build
|
|
8
8
|
|
|
9
9
|
[36mvite v6.3.4 [32mbuilding for production...[36m[39m
|
|
10
|
+
[96msrc/lookup.ts[0m:[93m116[0m:[93m7[0m - [91merror[0m[90m TS2322: [0mType 'string[]' is not assignable to type '("base" | "metamask" | "rabby" | "phantom-evm" | "argent" | "braavos" | "phantom" | "google" | "webauthn" | "discord" | "walletconnect" | "password")[]'.
|
|
11
|
+
Type 'string' is not assignable to type '"base" | "metamask" | "rabby" | "phantom-evm" | "argent" | "braavos" | "phantom" | "google" | "webauthn" | "discord" | "walletconnect" | "password"'.
|
|
12
|
+
|
|
13
|
+
[7m116[0m const HEADLESS_AUTH_OPTIONS: AuthOption[] = [
|
|
14
|
+
[7m [0m [91m ~~~~~~~~~~~~~~~~~~~~~[0m
|
|
15
|
+
[96msrc/lookup.ts[0m:[93m125[0m:[93m56[0m - [91merror[0m[90m TS2345: [0mArgument of type 'string' is not assignable to parameter of type '"metamask" | "rabby" | "phantom-evm" | "google" | "webauthn" | "discord" | "walletconnect" | "password"'.
|
|
16
|
+
|
|
17
|
+
[7m125[0m ].filter((option) => IMPLEMENTED_AUTH_OPTIONS.includes(option));
|
|
18
|
+
[7m [0m [91m ~~~~~~[0m
|
|
19
|
+
|
|
10
20
|
transforming...
|
|
11
21
|
[33m../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.3_zod@3.24.4/node_modules/ox/_esm/core/Address.js (6:21): A comment
|
|
12
22
|
|
|
@@ -36,14 +46,14 @@ rendering chunks...
|
|
|
36
46
|
|
|
37
47
|
[vite:dts] Start generate declaration files...
|
|
38
48
|
computing gzip size...
|
|
39
|
-
[2mdist/[22m[36msession.js
|
|
40
|
-
[2mdist/[22m[
|
|
41
|
-
[2mdist/[22m[36mindex.js
|
|
42
|
-
[vite:dts] Declaration files built in
|
|
49
|
+
[2mdist/[22m[36msession.js [39m[1m[2m 10.53 kB[22m[1m[22m[2m │ gzip: 3.24 kB[22m[2m │ map: 25.46 kB[22m
|
|
50
|
+
[2mdist/[22m[36mindex-CYAUAqql.js [39m[1m[2m 38.34 kB[22m[1m[22m[2m │ gzip: 12.80 kB[22m[2m │ map: 81.12 kB[22m
|
|
51
|
+
[2mdist/[22m[36mindex.js [39m[1m[2m188.96 kB[22m[1m[22m[2m │ gzip: 49.77 kB[22m[2m │ map: 576.04 kB[22m
|
|
52
|
+
[vite:dts] Declaration files built in 3619ms.
|
|
43
53
|
|
|
44
|
-
[32m✓ built in 5.
|
|
54
|
+
[32m✓ built in 5.80s[39m
|
|
45
55
|
|
|
46
|
-
> @cartridge/controller@0.13.
|
|
56
|
+
> @cartridge/controller@0.13.7 build:node /home/runner/work/controller/controller/packages/controller
|
|
47
57
|
> tsup --config tsup.node.config.ts
|
|
48
58
|
|
|
49
59
|
[34mCLI[39m Building entry: src/node/index.ts
|
|
@@ -54,16 +64,16 @@ computing gzip size...
|
|
|
54
64
|
[34mCLI[39m Cleaning output folder
|
|
55
65
|
[34mESM[39m Build start
|
|
56
66
|
[34mCJS[39m Build start
|
|
57
|
-
"constants"
|
|
67
|
+
"constants" and "shortString" are imported from external module "starknet" but never used in "dist/node/index.js".
|
|
68
|
+
"constants" and "shortString" are imported from external module "starknet" but never used in "dist/node/index.cjs".
|
|
58
69
|
Entry module "dist/node/index.cjs" is using named and default exports together. Consumers of your bundle will have to use `chunk.default` to access the default export, which may not be what you want. Use `output.exports: "named"` to disable this warning.
|
|
59
|
-
|
|
60
|
-
[32mESM[39m [1mdist/node/index.js
|
|
61
|
-
[32mESM[39m [1mdist/node/index.js.map [22m[32m55.93 KB[39m
|
|
70
|
+
[32mESM[39m [1mdist/node/index.js [22m[32m23.50 KB[39m
|
|
71
|
+
[32mESM[39m [1mdist/node/index.js.map [22m[32m56.57 KB[39m
|
|
62
72
|
[32mESM[39m ⚡️ Build success in 289ms
|
|
63
|
-
[32mCJS[39m [1mdist/node/index.cjs [22m[32m24.
|
|
64
|
-
[32mCJS[39m [1mdist/node/index.cjs.map [22m[32m56.
|
|
73
|
+
[32mCJS[39m [1mdist/node/index.cjs [22m[32m24.40 KB[39m
|
|
74
|
+
[32mCJS[39m [1mdist/node/index.cjs.map [22m[32m56.82 KB[39m
|
|
65
75
|
[32mCJS[39m ⚡️ Build success in 289ms
|
|
66
76
|
[34mDTS[39m Build start
|
|
67
|
-
[32mDTS[39m ⚡️ Build success in
|
|
77
|
+
[32mDTS[39m ⚡️ Build success in 3087ms
|
|
68
78
|
[32mDTS[39m [1mdist/node/index.d.ts [22m[32m6.42 KB[39m
|
|
69
79
|
[32mDTS[39m [1mdist/node/index.d.cts [22m[32m6.42 KB[39m
|
package/HEADLESS_MODE.md
CHANGED
|
@@ -2,13 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
Headless mode enables programmatic authentication with the Cartridge Controller
|
|
5
|
+
Headless mode enables programmatic authentication with the Cartridge Controller
|
|
6
|
+
SDK without displaying any UI. You trigger headless mode by passing a `username`
|
|
7
|
+
and `signer` to `connect(...)`.
|
|
6
8
|
|
|
7
9
|
```
|
|
8
10
|
Controller SDK → Keychain iframe (hidden) → Backend API
|
|
9
11
|
```
|
|
10
12
|
|
|
11
13
|
**Key Points**
|
|
14
|
+
|
|
12
15
|
- The keychain iframe still exists, but the modal is not opened.
|
|
13
16
|
- The SDK passes the connect request to keychain over Penpal.
|
|
14
17
|
- Keychain executes the same authentication logic as the UI flow.
|
|
@@ -16,6 +19,20 @@ Controller SDK → Keychain iframe (hidden) → Backend API
|
|
|
16
19
|
|
|
17
20
|
## Usage
|
|
18
21
|
|
|
22
|
+
### Username Lookup (Recommended)
|
|
23
|
+
|
|
24
|
+
Use lookup first so your app can decide whether to login or signup and show the
|
|
25
|
+
available signer methods for existing accounts.
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
const lookup = await controller.lookupUsername("alice");
|
|
29
|
+
|
|
30
|
+
if (lookup.exists) {
|
|
31
|
+
// e.g. ["webauthn", "google", "password"]
|
|
32
|
+
console.log(lookup.signers);
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
19
36
|
### Basic (Passkey / WebAuthn)
|
|
20
37
|
|
|
21
38
|
```ts
|
|
@@ -31,6 +48,9 @@ await controller.connect({
|
|
|
31
48
|
});
|
|
32
49
|
```
|
|
33
50
|
|
|
51
|
+
If `alice` does not exist yet, headless connect will create a new account and
|
|
52
|
+
continue.
|
|
53
|
+
|
|
34
54
|
### Password
|
|
35
55
|
|
|
36
56
|
```ts
|
|
@@ -60,6 +80,7 @@ await controller.connect({ username: "alice", signer: "walletconnect" });
|
|
|
60
80
|
## Supported Auth Options
|
|
61
81
|
|
|
62
82
|
Headless mode supports all **implemented** auth options:
|
|
83
|
+
|
|
63
84
|
- `webauthn`
|
|
64
85
|
- `password`
|
|
65
86
|
- `google`
|
|
@@ -72,8 +93,8 @@ Headless mode supports all **implemented** auth options:
|
|
|
72
93
|
## Handling Session Approval
|
|
73
94
|
|
|
74
95
|
If policies are unverified or include approvals, Keychain will prompt for
|
|
75
|
-
session approval **after** authentication. In that case, `connect` will open
|
|
76
|
-
|
|
96
|
+
session approval **after** authentication. In that case, `connect` will open the
|
|
97
|
+
approval UI and resolve once the session is approved.
|
|
77
98
|
|
|
78
99
|
```ts
|
|
79
100
|
const account = await controller.connect({
|
|
@@ -83,6 +104,7 @@ const account = await controller.connect({
|
|
|
83
104
|
|
|
84
105
|
console.log("Session approved:", account.address);
|
|
85
106
|
```
|
|
107
|
+
|
|
86
108
|
If you want to react to connection state changes, subscribe to the standard
|
|
87
109
|
wallet events (for example `accountsChanged`) or just await `connect(...)` and
|
|
88
110
|
update your app state afterwards.
|
|
@@ -92,9 +114,7 @@ update your app state afterwards.
|
|
|
92
114
|
The SDK provides specific error classes for headless mode:
|
|
93
115
|
|
|
94
116
|
```ts
|
|
95
|
-
import {
|
|
96
|
-
HeadlessAuthenticationError,
|
|
97
|
-
} from "@cartridge/controller";
|
|
117
|
+
import { HeadlessAuthenticationError } from "@cartridge/controller";
|
|
98
118
|
|
|
99
119
|
try {
|
|
100
120
|
await controller.connect({ username: "alice", signer: "webauthn" });
|
|
@@ -107,7 +127,8 @@ try {
|
|
|
107
127
|
|
|
108
128
|
## Notes
|
|
109
129
|
|
|
110
|
-
- Headless mode
|
|
130
|
+
- Headless mode can create new accounts when the username does not exist.
|
|
131
|
+
- For existing accounts, the requested signer must already be registered.
|
|
111
132
|
- For passkeys, the account must already have a WebAuthn signer registered.
|
|
112
133
|
- If policies are unverified or include approvals, Keychain will request
|
|
113
134
|
explicit approval after authentication.
|
package/dist/controller.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { WalletWithStarknetFeatures } from '@starknet-io/get-starknet-wallet-sta
|
|
|
3
3
|
import { AddStarknetChainParameters } from '@starknet-io/types-js';
|
|
4
4
|
import { WalletAccount } from 'starknet';
|
|
5
5
|
import { default as BaseProvider } from './provider';
|
|
6
|
-
import { AuthOptions, ConnectOptions, ControllerOptions, ProfileContextTypeVariant, OpenOptions, StarterpackOptions } from './types';
|
|
6
|
+
import { AuthOptions, ConnectOptions, ControllerOptions, ProfileContextTypeVariant, OpenOptions, HeadlessUsernameLookupResult, StarterpackOptions } from './types';
|
|
7
7
|
export default class ControllerProvider extends BaseProvider {
|
|
8
8
|
private keychain?;
|
|
9
9
|
private options;
|
|
@@ -28,6 +28,7 @@ export default class ControllerProvider extends BaseProvider {
|
|
|
28
28
|
revoke(origin: string, _policy: Policy[]): Promise<void> | null;
|
|
29
29
|
rpcUrl(): string;
|
|
30
30
|
username(): Promise<string> | undefined;
|
|
31
|
+
lookupUsername(username: string): Promise<HeadlessUsernameLookupResult>;
|
|
31
32
|
openPurchaseCredits(): void;
|
|
32
33
|
openStarterPack(id: string | number, options?: StarterpackOptions): Promise<void>;
|
|
33
34
|
openExecute(calls: any, chainId?: string): Promise<{
|