accounts 0.10.4 → 0.10.6

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 CHANGED
@@ -1,5 +1,27 @@
1
1
  # accounts
2
2
 
3
+ ## 0.10.6
4
+
5
+ ### Patch Changes
6
+
7
+ - e12ae75: Added `auth` option to the `webAuthn` adapter, mirroring the Provider `auth` capability shape (`string | { url, ... }`); the existing `authUrl` option is preserved as a deprecated alias.
8
+
9
+ ```diff
10
+ - webAuthn({ authUrl: '/webauthn' })
11
+ + webAuthn({ auth: '/webauthn' })
12
+ ```
13
+
14
+ ## 0.10.5
15
+
16
+ ### Patch Changes
17
+
18
+ - b65893e: Renamed the `dangerous_secp256k1` adapter to `secp256k1`. The old name is preserved as a deprecated alias so existing imports keep working.
19
+
20
+ ```diff
21
+ - import { dangerous_secp256k1 } from 'accounts'
22
+ + import { secp256k1 } from 'accounts'
23
+ ```
24
+
3
25
  ## 0.10.4
4
26
 
5
27
  ### Patch Changes
@@ -70,7 +70,7 @@ export type Instance = {
70
70
  * wallet host's own Provider runs the orchestration instead of racing
71
71
  * the dapp-side Provider for the challenge.
72
72
  *
73
- * Wallet-host adapters (`local`, `webAuthn`, `dangerous_secp256k1`)
73
+ * Wallet-host adapters (`local`, `webAuthn`, `secp256k1`)
74
74
  * leave this unset.
75
75
  */
76
76
  forwardsAuth?: boolean | undefined;
@@ -0,0 +1,45 @@
1
+ import type { Hex } from 'viem';
2
+ import * as Adapter from '../Adapter.js';
3
+ /**
4
+ * Creates a secp256k1 adapter that signs in-process with a `secp256k1` private key.
5
+ *
6
+ * If `privateKey` is provided, the adapter pins that key as the signer (useful
7
+ * for server-side use, where the key is supplied by the host environment).
8
+ *
9
+ * If `privateKey` is omitted, the adapter generates a random key on first
10
+ * connect and persists it via the provider's storage adapter (e.g.
11
+ * `localStorage`, cookies). Storing keys in browser storage in plaintext is
12
+ * dangerous — only use the unpinned form for development, testing, or when the
13
+ * threat model allows it.
14
+ *
15
+ * Wraps the {@link local} adapter.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * import { secp256k1, Provider } from 'accounts'
20
+ *
21
+ * // Server-side (pinned key):
22
+ * const provider = Provider.create({
23
+ * adapter: secp256k1({ privateKey: process.env.PRIVATE_KEY }),
24
+ * })
25
+ *
26
+ * // Client-side (random key, persisted to storage):
27
+ * const provider = Provider.create({
28
+ * adapter: secp256k1(),
29
+ * })
30
+ * ```
31
+ */
32
+ export declare function secp256k1(options?: secp256k1.Options): Adapter.Adapter;
33
+ export declare namespace secp256k1 {
34
+ type Options = {
35
+ /** Data URI of the provider icon. @default Black 1×1 SVG. */
36
+ icon?: `data:image/${string}` | undefined;
37
+ /** Display name of the provider (e.g. `"My Wallet"`). @default "Injected Wallet" */
38
+ name?: string | undefined;
39
+ /** Fixed private key to expose instead of generating/loading one from storage. */
40
+ privateKey?: Hex | undefined;
41
+ /** Reverse DNS identifier. @default `com.{lowercase name}` */
42
+ rdns?: string | undefined;
43
+ };
44
+ }
45
+ //# sourceMappingURL=secp256k1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/secp256k1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAG/B,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AAGxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,SAAS,CAAC,OAAY,GAAG,OAAO,CAAC,OAAO,CA6B1E;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAK,OAAO,GAAG;QACb,6DAA6D;QAC7D,IAAI,CAAC,EAAE,cAAc,MAAM,EAAE,GAAG,SAAS,CAAA;QACzC,oFAAoF;QACpF,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,kFAAkF;QAClF,UAAU,CAAC,EAAE,GAAG,GAAG,SAAS,CAAA;QAC5B,8DAA8D;QAC9D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACF"}
@@ -2,23 +2,35 @@ import { Account as TempoAccount, Secp256k1 } from 'viem/tempo';
2
2
  import * as Adapter from '../Adapter.js';
3
3
  import { local } from './local.js';
4
4
  /**
5
- * Creates a secp256k1 adapter that generates random private keys and persists them to storage.
5
+ * Creates a secp256k1 adapter that signs in-process with a `secp256k1` private key.
6
6
  *
7
- * ⚠️ **Dangerous**: Private keys are stored in plaintext via the provider's storage adapter
8
- * (e.g. localStorage, cookies). Use only for development, testing, or when the threat model allows it.
7
+ * If `privateKey` is provided, the adapter pins that key as the signer (useful
8
+ * for server-side use, where the key is supplied by the host environment).
9
9
  *
10
- * Wraps the {@link local} adapter with automatic key generation.
10
+ * If `privateKey` is omitted, the adapter generates a random key on first
11
+ * connect and persists it via the provider's storage adapter (e.g.
12
+ * `localStorage`, cookies). Storing keys in browser storage in plaintext is
13
+ * dangerous — only use the unpinned form for development, testing, or when the
14
+ * threat model allows it.
15
+ *
16
+ * Wraps the {@link local} adapter.
11
17
  *
12
18
  * @example
13
19
  * ```ts
14
- * import { dangerous_secp256k1, Provider } from 'accounts'
20
+ * import { secp256k1, Provider } from 'accounts'
21
+ *
22
+ * // Server-side (pinned key):
23
+ * const provider = Provider.create({
24
+ * adapter: secp256k1({ privateKey: process.env.PRIVATE_KEY }),
25
+ * })
15
26
  *
27
+ * // Client-side (random key, persisted to storage):
16
28
  * const provider = Provider.create({
17
- * adapter: dangerous_secp256k1(),
29
+ * adapter: secp256k1(),
18
30
  * })
19
31
  * ```
20
32
  */
21
- export function dangerous_secp256k1(options = {}) {
33
+ export function secp256k1(options = {}) {
22
34
  const { icon, name, privateKey, rdns } = options;
23
35
  const fixed = privateKey
24
36
  ? {
@@ -47,4 +59,4 @@ export function dangerous_secp256k1(options = {}) {
47
59
  })(config);
48
60
  });
49
61
  }
50
- //# sourceMappingURL=dangerous_secp256k1.js.map
62
+ //# sourceMappingURL=secp256k1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["../../../src/core/adapters/secp256k1.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE/D,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,SAAS,CAAC,UAA6B,EAAE;IACvD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAChD,MAAM,KAAK,GAAG,UAAU;QACtB,CAAC,CAAC;YACE,OAAO,EAAE,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,OAAO;YACvD,OAAO,EAAE,WAAoB;YAC7B,UAAU;SACX;QACH,CAAC,CAAC,SAAS,CAAA;IAEb,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE;QACrD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;QAExB,OAAO,KAAK,CAAC;YACX,KAAK,CAAC,aAAa;gBACjB,IAAI,KAAK;oBAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAA;gBAEvC,MAAM,UAAU,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAA;gBAC/C,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;gBACxD,OAAO;oBACL,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,WAAoB,EAAE,UAAU,EAAE,CAAC;iBACtF,CAAA;YACH,CAAC;YACD,KAAK,CAAC,YAAY;gBAChB,IAAI,KAAK;oBAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAA;gBACvC,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAA;YACrD,CAAC;SACF,CAAC,CAAC,MAAM,CAAC,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -1,6 +1,8 @@
1
+ import type { z } from 'zod';
1
2
  import type { OneOf } from '../../internal/types.js';
2
3
  import * as Adapter from '../Adapter.js';
3
4
  import * as WebAuthnCeremony from '../WebAuthnCeremony.js';
5
+ import * as Rpc from '../zod/rpc.js';
4
6
  /**
5
7
  * Creates a WebAuthn adapter backed by real passkey ceremonies.
6
8
  *
@@ -22,7 +24,15 @@ export declare namespace webAuthn {
22
24
  /** Ceremony strategy for WebAuthn registration and authentication. @default WebAuthnCeremony.local() */
23
25
  ceremony?: WebAuthnCeremony.WebAuthnCeremony | undefined;
24
26
  } | {
25
- /** URL of a WebAuthn handler (shorthand for `WebAuthnCeremony.server({ url })`). */
27
+ /**
28
+ * Server Authentication endpoint for WebAuthn ceremonies (shorthand for
29
+ * `WebAuthnCeremony.server({ url })`). Accepts the same shape as the
30
+ * Provider `auth` capability — only the `url` field is consumed here;
31
+ * other fields (`challenge`, `verify`, `logout`, `returnToken`) are
32
+ * SIWE-only and ignored by the WebAuthn ceremony.
33
+ */
34
+ auth?: z.input<typeof Rpc.wallet_connect.auth> | undefined;
35
+ /** @deprecated Use `auth` instead. */
26
36
  authUrl?: string | undefined;
27
37
  }> & {
28
38
  /** Data URI of the provider icon. @default Black 1×1 SVG. */
@@ -1 +1 @@
1
- {"version":3,"file":"webAuthn.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/webAuthn.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,gBAAgB,MAAM,wBAAwB,CAAA;AAG1D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,OAAO,GAAE,QAAQ,CAAC,OAAY,GAAG,OAAO,CAAC,OAAO,CAwFxE;AAED,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,KAAK,OAAO,GAAG,KAAK,CAChB;QACE,wGAAwG;QACxG,QAAQ,CAAC,EAAE,gBAAgB,CAAC,gBAAgB,GAAG,SAAS,CAAA;KACzD,GACD;QACE,oFAAoF;QACpF,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CACJ,GAAG;QACF,6DAA6D;QAC7D,IAAI,CAAC,EAAE,cAAc,MAAM,EAAE,GAAG,SAAS,CAAA;QACzC,oFAAoF;QACpF,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,8DAA8D;QAC9D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACF"}
1
+ {"version":3,"file":"webAuthn.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/webAuthn.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAE5B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,gBAAgB,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,GAAG,MAAM,eAAe,CAAA;AAGpC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,OAAO,GAAE,QAAQ,CAAC,OAAY,GAAG,OAAO,CAAC,OAAO,CA6FxE;AAED,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,KAAK,OAAO,GAAG,KAAK,CAChB;QACE,wGAAwG;QACxG,QAAQ,CAAC,EAAE,gBAAgB,CAAC,gBAAgB,GAAG,SAAS,CAAA;KACzD,GACD;QACE;;;;;;WAMG;QACH,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;QAC1D,sCAAsC;QACtC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CACJ,GAAG;QACF,6DAA6D;QAC7D,IAAI,CAAC,EAAE,cAAc,MAAM,EAAE,GAAG,SAAS,CAAA;QACzC,oFAAoF;QACpF,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,8DAA8D;QAC9D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACF"}
@@ -4,6 +4,7 @@ import { Account } from 'viem/tempo';
4
4
  import { Authentication, Registration } from 'webauthx/client';
5
5
  import * as Adapter from '../Adapter.js';
6
6
  import * as WebAuthnCeremony from '../WebAuthnCeremony.js';
7
+ import * as Rpc from '../zod/rpc.js';
7
8
  import { local } from './local.js';
8
9
  /**
9
10
  * Creates a WebAuthn adapter backed by real passkey ceremonies.
@@ -21,11 +22,16 @@ import { local } from './local.js';
21
22
  * ```
22
23
  */
23
24
  export function webAuthn(options = {}) {
24
- const { authUrl, icon, name, rdns } = options;
25
+ const { auth, authUrl, icon, name, rdns } = options;
26
+ const url = (() => {
27
+ if (auth)
28
+ return typeof auth === 'string' ? auth : auth.url;
29
+ return authUrl;
30
+ })();
25
31
  return Adapter.define({ icon, name, rdns }, (parameters) => {
26
32
  const { storage } = parameters;
27
33
  const ceremony = options.ceremony ??
28
- (authUrl ? WebAuthnCeremony.server({ url: authUrl }) : WebAuthnCeremony.local({ storage }));
34
+ (url ? WebAuthnCeremony.server({ url }) : WebAuthnCeremony.local({ storage }));
29
35
  const base = local({
30
36
  async createAccount(parameters) {
31
37
  const { options } = await ceremony.getRegistrationOptions(parameters);
@@ -1 +1 @@
1
- {"version":3,"file":"webAuthn.js","sourceRoot":"","sources":["../../../src/core/adapters/webAuthn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webAuthn.js","sourceRoot":"","sources":["../../../src/core/adapters/webAuthn.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -15,5 +15,7 @@ export { dialog, dialog as tempoWallet } from './core/adapters/dialog.js';
15
15
  export { local } from './core/adapters/local.js';
16
16
  export { turnkey } from './core/adapters/turnkey.js';
17
17
  export { webAuthn } from './core/adapters/webAuthn.js';
18
- export { dangerous_secp256k1 } from './core/adapters/dangerous_secp256k1.js';
18
+ export { secp256k1,
19
+ /** @deprecated Use `secp256k1` instead. */
20
+ secp256k1 as dangerous_secp256k1, } from './core/adapters/secp256k1.js';
19
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,oBAAoB,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,oBAAoB,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACtD,OAAO,EACL,SAAS;AACT,2CAA2C;AAC3C,SAAS,IAAI,mBAAmB,GACjC,MAAM,8BAA8B,CAAA"}
package/dist/index.js CHANGED
@@ -15,5 +15,7 @@ export { dialog, dialog as tempoWallet } from './core/adapters/dialog.js';
15
15
  export { local } from './core/adapters/local.js';
16
16
  export { turnkey } from './core/adapters/turnkey.js';
17
17
  export { webAuthn } from './core/adapters/webAuthn.js';
18
- export { dangerous_secp256k1 } from './core/adapters/dangerous_secp256k1.js';
18
+ export { secp256k1,
19
+ /** @deprecated Use `secp256k1` instead. */
20
+ secp256k1 as dangerous_secp256k1, } from './core/adapters/secp256k1.js';
19
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,oBAAoB,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,oBAAoB,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACtD,OAAO,EACL,SAAS;AACT,2CAA2C;AAC3C,SAAS,IAAI,mBAAmB,GACjC,MAAM,8BAA8B,CAAA"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "accounts",
3
3
  "description": "Tempo Accounts SDK",
4
4
  "type": "module",
5
- "version": "0.10.4",
5
+ "version": "0.10.6",
6
6
  "dependencies": {
7
7
  "hono": "^4.12.18",
8
8
  "idb-keyval": "^6.2.2",
@@ -132,7 +132,7 @@ export type Instance = {
132
132
  * wallet host's own Provider runs the orchestration instead of racing
133
133
  * the dapp-side Provider for the challenge.
134
134
  *
135
- * Wallet-host adapters (`local`, `webAuthn`, `dangerous_secp256k1`)
135
+ * Wallet-host adapters (`local`, `webAuthn`, `secp256k1`)
136
136
  * leave this unset.
137
137
  */
138
138
  forwardsAuth?: boolean | undefined
@@ -3,14 +3,14 @@ import { describe, expect, test } from 'vp/test'
3
3
  import { accounts, privateKeys } from '../../../test/config.js'
4
4
  import * as Provider from '../Provider.js'
5
5
  import * as Storage from '../Storage.js'
6
- import { dangerous_secp256k1 } from './dangerous_secp256k1.js'
6
+ import { secp256k1 } from './secp256k1.js'
7
7
 
8
- describe('dangerous_secp256k1', () => {
8
+ describe('secp256k1', () => {
9
9
  test('behavior: privateKey option pins the connected account', async () => {
10
10
  const account = accounts[1]!
11
11
  const provider = Provider.create({
12
- adapter: dangerous_secp256k1({ privateKey: privateKeys[1]! }),
13
- storage: Storage.memory({ key: 'dangerous-secp256k1-private-key' }),
12
+ adapter: secp256k1({ privateKey: privateKeys[1]! }),
13
+ storage: Storage.memory({ key: 'secp256k1-private-key' }),
14
14
  })
15
15
 
16
16
  const result = await provider.request({ method: 'wallet_connect' })
@@ -5,23 +5,35 @@ import * as Adapter from '../Adapter.js'
5
5
  import { local } from './local.js'
6
6
 
7
7
  /**
8
- * Creates a secp256k1 adapter that generates random private keys and persists them to storage.
8
+ * Creates a secp256k1 adapter that signs in-process with a `secp256k1` private key.
9
9
  *
10
- * ⚠️ **Dangerous**: Private keys are stored in plaintext via the provider's storage adapter
11
- * (e.g. localStorage, cookies). Use only for development, testing, or when the threat model allows it.
10
+ * If `privateKey` is provided, the adapter pins that key as the signer (useful
11
+ * for server-side use, where the key is supplied by the host environment).
12
12
  *
13
- * Wraps the {@link local} adapter with automatic key generation.
13
+ * If `privateKey` is omitted, the adapter generates a random key on first
14
+ * connect and persists it via the provider's storage adapter (e.g.
15
+ * `localStorage`, cookies). Storing keys in browser storage in plaintext is
16
+ * dangerous — only use the unpinned form for development, testing, or when the
17
+ * threat model allows it.
18
+ *
19
+ * Wraps the {@link local} adapter.
14
20
  *
15
21
  * @example
16
22
  * ```ts
17
- * import { dangerous_secp256k1, Provider } from 'accounts'
23
+ * import { secp256k1, Provider } from 'accounts'
24
+ *
25
+ * // Server-side (pinned key):
26
+ * const provider = Provider.create({
27
+ * adapter: secp256k1({ privateKey: process.env.PRIVATE_KEY }),
28
+ * })
18
29
  *
30
+ * // Client-side (random key, persisted to storage):
19
31
  * const provider = Provider.create({
20
- * adapter: dangerous_secp256k1(),
32
+ * adapter: secp256k1(),
21
33
  * })
22
34
  * ```
23
35
  */
24
- export function dangerous_secp256k1(options: dangerous_secp256k1.Options = {}): Adapter.Adapter {
36
+ export function secp256k1(options: secp256k1.Options = {}): Adapter.Adapter {
25
37
  const { icon, name, privateKey, rdns } = options
26
38
  const fixed = privateKey
27
39
  ? {
@@ -52,7 +64,7 @@ export function dangerous_secp256k1(options: dangerous_secp256k1.Options = {}):
52
64
  })
53
65
  }
54
66
 
55
- export declare namespace dangerous_secp256k1 {
67
+ export declare namespace secp256k1 {
56
68
  type Options = {
57
69
  /** Data URI of the provider icon. @default Black 1×1 SVG. */
58
70
  icon?: `data:image/${string}` | undefined
@@ -292,27 +292,55 @@ declare namespace setup {
292
292
  }
293
293
 
294
294
  function createClient(options: setup.Options = {}) {
295
- const client = {
295
+ type WalletShape = { accounts: { address: string; addressFormat: string }[] }
296
+ const state = {
296
297
  fetchCalls: 0,
297
298
  initCalls: 0,
298
299
  loadCalls: 0,
299
300
  signPayloads: [] as Hex.Hex[],
300
301
  signWith: [] as string[],
301
- wallets: [{ accounts: [{ address, addressFormat: 'ADDRESS_FORMAT_ETHEREUM' }] }],
302
- async fetchWallets() {
303
- client.fetchCalls++
304
- return client.wallets
302
+ wallets: [
303
+ { accounts: [{ address, addressFormat: 'ADDRESS_FORMAT_ETHEREUM' }] },
304
+ ] as WalletShape[],
305
+ }
306
+ const client = {
307
+ get fetchCalls() {
308
+ return state.fetchCalls
305
309
  },
306
- async getSession() {
307
- return options.session === undefined
308
- ? { expiry: Math.floor(Date.now() / 1000) + 60 }
309
- : options.session
310
+ get initCalls() {
311
+ return state.initCalls
312
+ },
313
+ get loadCalls() {
314
+ return state.loadCalls
315
+ },
316
+ set loadCalls(value: number) {
317
+ state.loadCalls = value
310
318
  },
319
+ get signPayloads() {
320
+ return state.signPayloads
321
+ },
322
+ get signWith() {
323
+ return state.signWith
324
+ },
325
+ get wallets() {
326
+ return state.wallets
327
+ },
328
+ set wallets(value: WalletShape[]) {
329
+ state.wallets = value
330
+ },
331
+ fetchWallets: async () => {
332
+ state.fetchCalls++
333
+ return state.wallets as readonly turnkey.Wallet[]
334
+ },
335
+ getSession: async () =>
336
+ options.session === undefined
337
+ ? { expiry: Math.floor(Date.now() / 1000) + 60 }
338
+ : options.session,
311
339
  httpClient: {
312
- async signRawPayload(parameters: turnkey.SignRawPayloadParameters) {
340
+ signRawPayload: async (parameters: turnkey.SignRawPayloadParameters) => {
313
341
  if (options.signError) throw options.signError
314
- client.signPayloads.push(parameters.payload)
315
- client.signWith.push(parameters.signWith)
342
+ state.signPayloads.push(parameters.payload)
343
+ state.signWith.push(parameters.signWith)
316
344
  return {
317
345
  r: Hex.padLeft('0x11', 32),
318
346
  s: Hex.padLeft('0x22', 32),
@@ -320,17 +348,17 @@ function createClient(options: setup.Options = {}) {
320
348
  }
321
349
  },
322
350
  },
323
- init() {
324
- client.initCalls++
351
+ init: () => {
352
+ state.initCalls++
325
353
  },
326
- logout() {},
354
+ logout: () => {},
327
355
  } satisfies turnkey.Client & {
328
356
  fetchCalls: number
329
357
  initCalls: number
330
358
  loadCalls: number
331
359
  signPayloads: Hex.Hex[]
332
360
  signWith: string[]
333
- wallets: turnkey.Wallet[]
361
+ wallets: WalletShape[]
334
362
  }
335
363
 
336
364
  return client
@@ -2,10 +2,12 @@ import { PublicKey, Signature } from 'ox'
2
2
  import { SignatureEnvelope } from 'ox/tempo'
3
3
  import { Account } from 'viem/tempo'
4
4
  import { Authentication, Registration } from 'webauthx/client'
5
+ import type { z } from 'zod'
5
6
 
6
7
  import type { OneOf } from '../../internal/types.js'
7
8
  import * as Adapter from '../Adapter.js'
8
9
  import * as WebAuthnCeremony from '../WebAuthnCeremony.js'
10
+ import * as Rpc from '../zod/rpc.js'
9
11
  import { local } from './local.js'
10
12
 
11
13
  /**
@@ -24,14 +26,19 @@ import { local } from './local.js'
24
26
  * ```
25
27
  */
26
28
  export function webAuthn(options: webAuthn.Options = {}): Adapter.Adapter {
27
- const { authUrl, icon, name, rdns } = options
29
+ const { auth, authUrl, icon, name, rdns } = options
30
+
31
+ const url = (() => {
32
+ if (auth) return typeof auth === 'string' ? auth : auth.url
33
+ return authUrl
34
+ })()
28
35
 
29
36
  return Adapter.define({ icon, name, rdns }, (parameters) => {
30
37
  const { storage } = parameters
31
38
 
32
39
  const ceremony =
33
40
  options.ceremony ??
34
- (authUrl ? WebAuthnCeremony.server({ url: authUrl }) : WebAuthnCeremony.local({ storage }))
41
+ (url ? WebAuthnCeremony.server({ url }) : WebAuthnCeremony.local({ storage }))
35
42
 
36
43
  const base = local({
37
44
  async createAccount(parameters) {
@@ -120,7 +127,15 @@ export declare namespace webAuthn {
120
127
  ceremony?: WebAuthnCeremony.WebAuthnCeremony | undefined
121
128
  }
122
129
  | {
123
- /** URL of a WebAuthn handler (shorthand for `WebAuthnCeremony.server({ url })`). */
130
+ /**
131
+ * Server Authentication endpoint for WebAuthn ceremonies (shorthand for
132
+ * `WebAuthnCeremony.server({ url })`). Accepts the same shape as the
133
+ * Provider `auth` capability — only the `url` field is consumed here;
134
+ * other fields (`challenge`, `verify`, `logout`, `returnToken`) are
135
+ * SIWE-only and ignored by the WebAuthn ceremony.
136
+ */
137
+ auth?: z.input<typeof Rpc.wallet_connect.auth> | undefined
138
+ /** @deprecated Use `auth` instead. */
124
139
  authUrl?: string | undefined
125
140
  }
126
141
  > & {
package/src/index.ts CHANGED
@@ -15,4 +15,8 @@ export { dialog, dialog as tempoWallet } from './core/adapters/dialog.js'
15
15
  export { local } from './core/adapters/local.js'
16
16
  export { turnkey } from './core/adapters/turnkey.js'
17
17
  export { webAuthn } from './core/adapters/webAuthn.js'
18
- export { dangerous_secp256k1 } from './core/adapters/dangerous_secp256k1.js'
18
+ export {
19
+ secp256k1,
20
+ /** @deprecated Use `secp256k1` instead. */
21
+ secp256k1 as dangerous_secp256k1,
22
+ } from './core/adapters/secp256k1.js'
@@ -355,7 +355,7 @@ describe('behavior: with feePayer.feeToken', () => {
355
355
  const { transaction } = await fillTransaction(client, {
356
356
  account: userAccount.address,
357
357
  calls: [transferCall()],
358
- feePayer: false,
358
+ feePayer: false as never,
359
359
  feeToken: addresses.alphaUsd as Address,
360
360
  })
361
361
  expect(transaction.feeToken?.toLowerCase()).toBe(addresses.alphaUsd.toLowerCase())
@@ -1,33 +0,0 @@
1
- import type { Hex } from 'viem';
2
- import * as Adapter from '../Adapter.js';
3
- /**
4
- * Creates a secp256k1 adapter that generates random private keys and persists them to storage.
5
- *
6
- * ⚠️ **Dangerous**: Private keys are stored in plaintext via the provider's storage adapter
7
- * (e.g. localStorage, cookies). Use only for development, testing, or when the threat model allows it.
8
- *
9
- * Wraps the {@link local} adapter with automatic key generation.
10
- *
11
- * @example
12
- * ```ts
13
- * import { dangerous_secp256k1, Provider } from 'accounts'
14
- *
15
- * const provider = Provider.create({
16
- * adapter: dangerous_secp256k1(),
17
- * })
18
- * ```
19
- */
20
- export declare function dangerous_secp256k1(options?: dangerous_secp256k1.Options): Adapter.Adapter;
21
- export declare namespace dangerous_secp256k1 {
22
- type Options = {
23
- /** Data URI of the provider icon. @default Black 1×1 SVG. */
24
- icon?: `data:image/${string}` | undefined;
25
- /** Display name of the provider (e.g. `"My Wallet"`). @default "Injected Wallet" */
26
- name?: string | undefined;
27
- /** Fixed private key to expose instead of generating/loading one from storage. */
28
- privateKey?: Hex | undefined;
29
- /** Reverse DNS identifier. @default `com.{lowercase name}` */
30
- rdns?: string | undefined;
31
- };
32
- }
33
- //# sourceMappingURL=dangerous_secp256k1.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dangerous_secp256k1.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/dangerous_secp256k1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAG/B,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AAGxC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,mBAAmB,CAAC,OAAY,GAAG,OAAO,CAAC,OAAO,CA6B9F;AAED,MAAM,CAAC,OAAO,WAAW,mBAAmB,CAAC;IAC3C,KAAK,OAAO,GAAG;QACb,6DAA6D;QAC7D,IAAI,CAAC,EAAE,cAAc,MAAM,EAAE,GAAG,SAAS,CAAA;QACzC,oFAAoF;QACpF,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,kFAAkF;QAClF,UAAU,CAAC,EAAE,GAAG,GAAG,SAAS,CAAA;QAC5B,8DAA8D;QAC9D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dangerous_secp256k1.js","sourceRoot":"","sources":["../../../src/core/adapters/dangerous_secp256k1.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE/D,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAuC,EAAE;IAC3E,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAChD,MAAM,KAAK,GAAG,UAAU;QACtB,CAAC,CAAC;YACE,OAAO,EAAE,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,OAAO;YACvD,OAAO,EAAE,WAAoB;YAC7B,UAAU;SACX;QACH,CAAC,CAAC,SAAS,CAAA;IAEb,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE;QACrD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;QAExB,OAAO,KAAK,CAAC;YACX,KAAK,CAAC,aAAa;gBACjB,IAAI,KAAK;oBAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAA;gBAEvC,MAAM,UAAU,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAA;gBAC/C,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;gBACxD,OAAO;oBACL,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,WAAoB,EAAE,UAAU,EAAE,CAAC;iBACtF,CAAA;YACH,CAAC;YACD,KAAK,CAAC,YAAY;gBAChB,IAAI,KAAK;oBAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAA;gBACvC,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAA;YACrD,CAAC;SACF,CAAC,CAAC,MAAM,CAAC,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC"}