@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.
@@ -1,16 +1,26 @@
1
1
 
2
- > @cartridge/controller@0.13.5 build:deps /home/runner/work/controller/controller/packages/controller
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.5 build /home/runner/work/controller/controller/packages/controller
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.5 build:browser /home/runner/work/controller/controller/packages/controller
10
+ > @cartridge/controller@0.13.7 build:browser /home/runner/work/controller/controller/packages/controller
11
11
  > vite build
12
12
 
13
13
  vite v6.3.4 building for production...
14
+ src/lookup.ts:116:7 - error TS2322: Type '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
+ 116 const HEADLESS_AUTH_OPTIONS: AuthOption[] = [
18
+    ~~~~~~~~~~~~~~~~~~~~~
19
+ src/lookup.ts:125:56 - error TS2345: Argument of type 'string' is not assignable to parameter of type '"metamask" | "rabby" | "phantom-evm" | "google" | "webauthn" | "discord" | "walletconnect" | "password"'.
20
+
21
+ 125 ].filter((option) => IMPLEMENTED_AUTH_OPTIONS.includes(option));
22
+    ~~~~~~
23
+
14
24
  transforming...
15
25
  ../../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
- dist/session.js  10.19 kB │ gzip: 3.09 kB │ map: 23.94 kB
44
- dist/provider-NKp7_oNj.js  15.63 kB │ gzip: 6.32 kB │ map: 41.81 kB
45
- dist/index.js 208.69 kB │ gzip: 55.04 kB │ map: 607.52 kB
46
- [vite:dts] Declaration files built in 3567ms.
53
+ dist/session.js  10.53 kB │ gzip: 3.24 kB │ map: 25.46 kB
54
+ dist/index-CYAUAqql.js  38.34 kB │ gzip: 12.80 kB │ map: 81.12 kB
55
+ dist/index.js 188.96 kB │ gzip: 49.77 kB │ map: 576.04 kB
56
+ [vite:dts] Declaration files built in 3626ms.
47
57
 
48
- ✓ built in 5.63s
58
+ ✓ built in 5.76s
49
59
 
50
- > @cartridge/controller@0.13.5 build:node /home/runner/work/controller/controller/packages/controller
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
  CLI Building entry: src/node/index.ts
@@ -58,15 +68,15 @@ computing gzip size...
58
68
  CLI Cleaning output folder
59
69
  ESM Build start
60
70
  CJS Build start
61
- "constants", "getChecksumAddress" and "shortString" are imported from external module "starknet" but never used in "dist/node/index.js".
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
- ESM dist/node/index.js 23.43 KB
65
- ESM dist/node/index.js.map 55.93 KB
66
- ESM ⚡️ Build success in 320ms
67
- CJS dist/node/index.cjs 24.32 KB
68
- CJS dist/node/index.cjs.map 56.16 KB
69
- CJS ⚡️ Build success in 320ms
73
+ "constants" and "shortString" are imported from external module "starknet" but never used in "dist/node/index.js".
74
+ CJS dist/node/index.cjs 24.40 KB
75
+ CJS dist/node/index.cjs.map 56.82 KB
76
+ CJS ⚡️ Build success in 326ms
77
+ ESM dist/node/index.js 23.50 KB
78
+ ESM dist/node/index.js.map 56.57 KB
79
+ ESM ⚡️ Build success in 326ms
70
80
  DTS Build start
71
81
  DTS ⚡️ Build success in 3096ms
72
82
  DTS dist/node/index.d.ts 6.42 KB
@@ -1,12 +1,22 @@
1
1
 
2
- > @cartridge/controller@0.13.5 build /home/runner/work/controller/controller/packages/controller
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.5 build:browser /home/runner/work/controller/controller/packages/controller
6
+ > @cartridge/controller@0.13.7 build:browser /home/runner/work/controller/controller/packages/controller
7
7
  > vite build
8
8
 
9
9
  vite v6.3.4 building for production...
10
+ src/lookup.ts:116:7 - error TS2322: Type '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
+ 116 const HEADLESS_AUTH_OPTIONS: AuthOption[] = [
14
+    ~~~~~~~~~~~~~~~~~~~~~
15
+ src/lookup.ts:125:56 - error TS2345: Argument of type 'string' is not assignable to parameter of type '"metamask" | "rabby" | "phantom-evm" | "google" | "webauthn" | "discord" | "walletconnect" | "password"'.
16
+
17
+ 125 ].filter((option) => IMPLEMENTED_AUTH_OPTIONS.includes(option));
18
+    ~~~~~~
19
+
10
20
  transforming...
11
21
  ../../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
- dist/session.js  10.19 kB │ gzip: 3.09 kB │ map: 23.94 kB
40
- dist/provider-NKp7_oNj.js  15.63 kB │ gzip: 6.32 kB │ map: 41.81 kB
41
- dist/index.js 208.69 kB │ gzip: 55.04 kB │ map: 607.52 kB
42
- [vite:dts] Declaration files built in 3532ms.
49
+ dist/session.js  10.53 kB │ gzip: 3.24 kB │ map: 25.46 kB
50
+ dist/index-CYAUAqql.js  38.34 kB │ gzip: 12.80 kB │ map: 81.12 kB
51
+ dist/index.js 188.96 kB │ gzip: 49.77 kB │ map: 576.04 kB
52
+ [vite:dts] Declaration files built in 3619ms.
43
53
 
44
- ✓ built in 5.65s
54
+ ✓ built in 5.80s
45
55
 
46
- > @cartridge/controller@0.13.5 build:node /home/runner/work/controller/controller/packages/controller
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
  CLI Building entry: src/node/index.ts
@@ -54,16 +64,16 @@ computing gzip size...
54
64
  CLI Cleaning output folder
55
65
  ESM Build start
56
66
  CJS Build start
57
- "constants", "getChecksumAddress" and "shortString" are imported from external module "starknet" but never used in "dist/node/index.cjs".
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
- "constants", "getChecksumAddress" and "shortString" are imported from external module "starknet" but never used in "dist/node/index.js".
60
- ESM dist/node/index.js 23.43 KB
61
- ESM dist/node/index.js.map 55.93 KB
70
+ ESM dist/node/index.js 23.50 KB
71
+ ESM dist/node/index.js.map 56.57 KB
62
72
  ESM ⚡️ Build success in 289ms
63
- CJS dist/node/index.cjs 24.32 KB
64
- CJS dist/node/index.cjs.map 56.16 KB
73
+ CJS dist/node/index.cjs 24.40 KB
74
+ CJS dist/node/index.cjs.map 56.82 KB
65
75
  CJS ⚡️ Build success in 289ms
66
76
  DTS Build start
67
- DTS ⚡️ Build success in 3292ms
77
+ DTS ⚡️ Build success in 3087ms
68
78
  DTS dist/node/index.d.ts 6.42 KB
69
79
  DTS dist/node/index.d.cts 6.42 KB
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 SDK without displaying any UI. You trigger headless mode by passing a `username` and `signer` to `connect(...)`.
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
- the approval UI and resolve once the session is approved.
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 uses the **existing signers** on the controller for the given username.
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.
@@ -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<{