decane-connect-kit 2.26.1 → 2.27.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/dist/index.d.cts CHANGED
@@ -147,6 +147,44 @@ interface DecaneConnectConfig {
147
147
  */
148
148
  persistSession?: boolean;
149
149
  /**
150
+ * How this device holds its share of the wallet. Default `'device'`.
151
+ *
152
+ * - `'device'`: the share is wrapped at rest under a passkey (or the unlock
153
+ * password) at creation and when a new device is provisioned. Sign-in asks
154
+ * for it once per device; `requireAssertionPerSignature` is available.
155
+ * - `'identity'`: nothing is stored on the device and nothing is asked for.
156
+ * Every visit is a sign-in, after which the enclave provisions a fresh
157
+ * device share against the JWT alone. No passkey, no password, no
158
+ * recovery file — recovery IS signing in again. `resumeSessionAcrossTabs`
159
+ * defaults to true here so a session is provisioned once, not per tab.
160
+ *
161
+ * THE SECURITY STATEMENT for the identity tier: a wallet is exactly as safe
162
+ * as the user's identity-provider account plus Decane (the JWT signing key
163
+ * and the attested enclave). Anyone who can obtain a valid Decane session
164
+ * for the user can sign. There is no device-bound factor. Mitigations: a
165
+ * new-device email on every provision from an unseen device, a per-user
166
+ * freeze switch operated by Decane, and (follow-up) a fresh sign-in
167
+ * requirement for high-value operations.
168
+ *
169
+ * The tier is a property of THIS client, not of the wallet: two apps on one
170
+ * project may hold the same wallet in different tiers (a marketplace with
171
+ * passkeys, a social app without). Same key, same addresses, same funds.
172
+ * Note the consequence: a per-signature assertion declared by one app
173
+ * protects that app's sessions, not the wallet — the other app's session
174
+ * signs without it.
175
+ *
176
+ * Switching an app from `'device'` to `'identity'` ports its users on their
177
+ * next sign-in with no loss of funds: an enrolled wallet (the normal case)
178
+ * simply provisions with no prompt; a wallet that was never enrolled but has
179
+ * a wrapped share on this device is unlocked with the existing passkey or
180
+ * password ONE last time, enrolled, and never prompted again (the client
181
+ * emits `migrated-to-identity`). Nothing is re-split, rotated or moved.
182
+ */
183
+ protection?: 'identity' | 'device';
184
+ /**
185
+ * @deprecated Use `protection: 'identity'`. Identical behaviour; kept as an
186
+ * alias so existing apps need no change.
187
+ *
150
188
  * Do not wrap and store this device's share at wallet creation or when a
151
189
  * device is first provisioned — so sign-in asks for no passkey and no
152
190
  * password. The session works without a stored share: signing runs on the
@@ -160,7 +198,8 @@ interface DecaneConnectConfig {
160
198
  */
161
199
  deferDeviceProtection?: boolean;
162
200
  /**
163
- * Resume a live session in a NEW TAB, not just after a reload. Default false.
201
+ * Resume a live session in a NEW TAB, not just after a reload. Default
202
+ * false in the device tier, true in the identity tier (see `protection`).
164
203
  *
165
204
  * The session — handle plus JWT — normally lives in sessionStorage, so it
166
205
  * survives a reload and dies with the tab. That makes a second tab, or a
@@ -323,7 +362,14 @@ type SdkEvent = 'connected' | 'disconnected' | 'session-expired'
323
362
  * later unlocks; surface or report this if you want visibility rather than a
324
363
  * console line.
325
364
  */
326
- | 'enrolment-failed';
365
+ | 'enrolment-failed'
366
+ /**
367
+ * An identity-tier client just unlocked a wallet that was never enrolled by
368
+ * prompting for the passkey or password that protected this device's share,
369
+ * and enrolled it. The one-off prompt will not appear again; apps that want
370
+ * to explain it to the user listen for this. Same key, same addresses.
371
+ */
372
+ | 'migrated-to-identity';
327
373
  interface DecaneConnect {
328
374
  connect(): Promise<ConnectResult>;
329
375
  connectWithGoogle(): Promise<ConnectResult>;
@@ -478,7 +524,8 @@ interface DecaneConnect {
478
524
  * Requires a live session; throws `WebAuthnNotSupportedError` where passkeys
479
525
  * are unavailable, and `NewDeviceError` when this device holds no share yet
480
526
  * (that case wants `connect()`, which provisions one and registers a passkey
481
- * on the way).
527
+ * on the way). Throws `CallSequenceError` in the identity tier, which holds
528
+ * no share on the device for a passkey to wrap.
482
529
  */
483
530
  addPasskey(): Promise<void>;
484
531
  /**
@@ -493,7 +540,8 @@ interface DecaneConnect {
493
540
  * live session; provisions a fresh share from the enclave when the device
494
541
  * has none. Idempotent — a protected device returns true at once. Resolves
495
542
  * false when the user dismissed the prompt, so the app can decide whether
496
- * to go on without protection; throws for anything else.
543
+ * to go on without protection; throws for anything else. A no-op returning
544
+ * false in the identity tier: that tier stores nothing on the device.
497
545
  */
498
546
  protectDevice(): Promise<boolean>;
499
547
  sessionExpiresAt(): number | null;
@@ -601,7 +649,7 @@ interface DecaneConnect {
601
649
  off(event: SdkEvent, handler: (...args: unknown[]) => void): void;
602
650
  }
603
651
  interface WrappedShareMeta {
604
- unlockMethod: 'passkey' | 'pin' | 'password' | 'deferred';
652
+ unlockMethod: 'passkey' | 'pin' | 'password' | 'deferred' | 'identity';
605
653
  credentialId?: string;
606
654
  prfSalt?: string;
607
655
  pinSalt?: string;
@@ -703,6 +751,13 @@ declare class ApiClient {
703
751
  evmAddress: string;
704
752
  solanaAddress: string;
705
753
  tronAddress: string;
754
+ /**
755
+ * The share is being written BEFORE the enclave has sealed the auth share.
756
+ * A backend that knows the flag treats the row as provisional: invisible to
757
+ * hasShare until enrolment lands, and replaced outright by a later
758
+ * creation. Omitted, the backend behaves as it always did.
759
+ */
760
+ pendingEnrolment?: boolean;
706
761
  }): Promise<void>;
707
762
  recordTransaction(jwt: string, tx: {
708
763
  chain: string;
@@ -926,6 +981,16 @@ interface SocialConfig {
926
981
  */
927
982
  showStatusOverlay?: boolean;
928
983
  /**
984
+ * How this device holds its share of the wallet: `'device'` (default) wraps
985
+ * it under a passkey or password; `'identity'` stores nothing and asks for
986
+ * nothing — sign-in is the whole ceremony, every visit. Mirrors the headless
987
+ * client's option of the same name; read it for the security statement
988
+ * before choosing `'identity'`.
989
+ */
990
+ protection?: 'identity' | 'device';
991
+ /**
992
+ * @deprecated Use `protection: 'identity'`. Same behaviour; kept as an alias.
993
+ *
929
994
  * Ask for no passkey or password at sign-in; protect the wallet on this
930
995
  * device later, when the app calls `protectDevice()` (typically before the
931
996
  * first transaction). Mirrors the headless client's option of the same name;
@@ -1211,6 +1276,35 @@ declare class RecoveryWalletMismatchError extends DecaneConnectError {
1211
1276
  declare class ExportNotAuthorizedError extends DecaneConnectError {
1212
1277
  constructor();
1213
1278
  }
1279
+ /**
1280
+ * Wallet creation stopped because the enclave did not seal the wallet's
1281
+ * recovery share (enrolment). Creation blocks on that step in every tier,
1282
+ * because a wallet that exists unenrolled cannot be provisioned to any other
1283
+ * device — and in the identity tier not even to this one, once the session
1284
+ * ends. The server share was uploaded as provisional and the device share, if
1285
+ * one was stored, has been deleted: nothing is left behind, and the next
1286
+ * sign-in creates a wallet from scratch. Retryable for exactly that reason.
1287
+ */
1288
+ declare class WalletEnrolmentError extends DecaneConnectError {
1289
+ constructor(cause?: unknown);
1290
+ }
1291
+ /**
1292
+ * /signer/provision answered 429: this user has been issued device shares too
1293
+ * often in the last hour. Distinct from NewDeviceError on purpose — the wallet
1294
+ * is enrolled and fine, and sending the user to a recovery file they do not
1295
+ * have (the old behaviour) was wrong. Wait, then sign in again.
1296
+ */
1297
+ declare class ProvisioningRateLimitedError extends DecaneConnectError {
1298
+ constructor();
1299
+ }
1300
+ /**
1301
+ * A non-OK answer from the enclave on a call with no more specific mapping,
1302
+ * carrying the status so a caller can decide whether trying again could help.
1303
+ */
1304
+ declare class EnclaveHttpError extends DecaneConnectError {
1305
+ status: number;
1306
+ constructor(status: number, message: string);
1307
+ }
1214
1308
 
1215
1309
  declare class DecaneError extends Error {
1216
1310
  code: DecaneErrorCode;
@@ -1659,4 +1753,4 @@ declare class WeakPasswordError extends Error {
1659
1753
  */
1660
1754
  declare function validateUnlockPassword(password: string): void;
1661
1755
 
1662
- export { type ActiveSession, AttestationError, type AuthProfile, type AuthResult, BUILT_IN_CHAINS, type BalanceResult, type CAIP25Method, type CAIP25SessionRequest, type CAIP25SessionResult, CHAINS, CallSequenceError, type Chain, type ChainDescriptor, type ChainId, type ChainScope, type ChainSupport, type ChainType, type ConnectMode, type ConnectResult, type DecaneConfig, type DecaneConnect, type DecaneConnectConfig, DecaneConnectError, DecaneError, DecaneErrorCode, DecaneKit, DecaneLogo, DecaneMark, type DecaneProvider, DecaneWordmark, type Eip1193Provider, type EthereumProviderOptions, ExportNotAuthorizedError, InvalidAccessTokenError, InvalidApiKeyError, InvalidPinError, InvalidRecoveryFileError, type KingsChatTokens, MIN_PASSWORD_LENGTH, NetworkError, NewDeviceError, OriginNotAllowedError, type PortableBackup, PromptPasswordNotConfiguredError, PromptPinNotConfiguredError, ProvisioningTimeoutError, ReconnectRequiredError, type RecordTransactionInput, RecoveryFailedError, type RecoveryProgress, type RecoveryShareFile, RecoveryWalletMismatchError, type SdkEvent, type SendTransactionRequest, SessionExpiredError, ShareCorruptedError, type SignMessageRequest, type SignTypedDataRequest, type SignedAuthorization, type SocialAuthState, type SocialConfig, SocialWalletModal, StaleDeviceShareError, type Theme, type TransactionRecord, type TxParams, type UnifiedWalletAccount, UnlockRequiredError, UnlockTokenRejectedError, UserCancelledError, WalletSelector, WeakPasswordError, WebAuthnNotSupportedError, type WrappedShareMeta, WrongPasswordError, WrongUnlockPasswordError, createDecane, createDecaneConnect, createEthereumProvider, loginWithKingsChatPopup, startEmailAuth, useChainSwitch, useDecane, useEthereumProvider, useSendTransaction, useSignMessage, useSignTypedData, useSocialAuth, useSocialBalance, useSocialWallet, useWalletSelector, validateUnlockPassword, verifyEmailCode };
1756
+ export { type ActiveSession, AttestationError, type AuthProfile, type AuthResult, BUILT_IN_CHAINS, type BalanceResult, type CAIP25Method, type CAIP25SessionRequest, type CAIP25SessionResult, CHAINS, CallSequenceError, type Chain, type ChainDescriptor, type ChainId, type ChainScope, type ChainSupport, type ChainType, type ConnectMode, type ConnectResult, type DecaneConfig, type DecaneConnect, type DecaneConnectConfig, DecaneConnectError, DecaneError, DecaneErrorCode, DecaneKit, DecaneLogo, DecaneMark, type DecaneProvider, DecaneWordmark, type Eip1193Provider, EnclaveHttpError, type EthereumProviderOptions, ExportNotAuthorizedError, InvalidAccessTokenError, InvalidApiKeyError, InvalidPinError, InvalidRecoveryFileError, type KingsChatTokens, MIN_PASSWORD_LENGTH, NetworkError, NewDeviceError, OriginNotAllowedError, type PortableBackup, PromptPasswordNotConfiguredError, PromptPinNotConfiguredError, ProvisioningRateLimitedError, ProvisioningTimeoutError, ReconnectRequiredError, type RecordTransactionInput, RecoveryFailedError, type RecoveryProgress, type RecoveryShareFile, RecoveryWalletMismatchError, type SdkEvent, type SendTransactionRequest, SessionExpiredError, ShareCorruptedError, type SignMessageRequest, type SignTypedDataRequest, type SignedAuthorization, type SocialAuthState, type SocialConfig, SocialWalletModal, StaleDeviceShareError, type Theme, type TransactionRecord, type TxParams, type UnifiedWalletAccount, UnlockRequiredError, UnlockTokenRejectedError, UserCancelledError, WalletEnrolmentError, WalletSelector, WeakPasswordError, WebAuthnNotSupportedError, type WrappedShareMeta, WrongPasswordError, WrongUnlockPasswordError, createDecane, createDecaneConnect, createEthereumProvider, loginWithKingsChatPopup, startEmailAuth, useChainSwitch, useDecane, useEthereumProvider, useSendTransaction, useSignMessage, useSignTypedData, useSocialAuth, useSocialBalance, useSocialWallet, useWalletSelector, validateUnlockPassword, verifyEmailCode };
package/dist/index.d.ts CHANGED
@@ -147,6 +147,44 @@ interface DecaneConnectConfig {
147
147
  */
148
148
  persistSession?: boolean;
149
149
  /**
150
+ * How this device holds its share of the wallet. Default `'device'`.
151
+ *
152
+ * - `'device'`: the share is wrapped at rest under a passkey (or the unlock
153
+ * password) at creation and when a new device is provisioned. Sign-in asks
154
+ * for it once per device; `requireAssertionPerSignature` is available.
155
+ * - `'identity'`: nothing is stored on the device and nothing is asked for.
156
+ * Every visit is a sign-in, after which the enclave provisions a fresh
157
+ * device share against the JWT alone. No passkey, no password, no
158
+ * recovery file — recovery IS signing in again. `resumeSessionAcrossTabs`
159
+ * defaults to true here so a session is provisioned once, not per tab.
160
+ *
161
+ * THE SECURITY STATEMENT for the identity tier: a wallet is exactly as safe
162
+ * as the user's identity-provider account plus Decane (the JWT signing key
163
+ * and the attested enclave). Anyone who can obtain a valid Decane session
164
+ * for the user can sign. There is no device-bound factor. Mitigations: a
165
+ * new-device email on every provision from an unseen device, a per-user
166
+ * freeze switch operated by Decane, and (follow-up) a fresh sign-in
167
+ * requirement for high-value operations.
168
+ *
169
+ * The tier is a property of THIS client, not of the wallet: two apps on one
170
+ * project may hold the same wallet in different tiers (a marketplace with
171
+ * passkeys, a social app without). Same key, same addresses, same funds.
172
+ * Note the consequence: a per-signature assertion declared by one app
173
+ * protects that app's sessions, not the wallet — the other app's session
174
+ * signs without it.
175
+ *
176
+ * Switching an app from `'device'` to `'identity'` ports its users on their
177
+ * next sign-in with no loss of funds: an enrolled wallet (the normal case)
178
+ * simply provisions with no prompt; a wallet that was never enrolled but has
179
+ * a wrapped share on this device is unlocked with the existing passkey or
180
+ * password ONE last time, enrolled, and never prompted again (the client
181
+ * emits `migrated-to-identity`). Nothing is re-split, rotated or moved.
182
+ */
183
+ protection?: 'identity' | 'device';
184
+ /**
185
+ * @deprecated Use `protection: 'identity'`. Identical behaviour; kept as an
186
+ * alias so existing apps need no change.
187
+ *
150
188
  * Do not wrap and store this device's share at wallet creation or when a
151
189
  * device is first provisioned — so sign-in asks for no passkey and no
152
190
  * password. The session works without a stored share: signing runs on the
@@ -160,7 +198,8 @@ interface DecaneConnectConfig {
160
198
  */
161
199
  deferDeviceProtection?: boolean;
162
200
  /**
163
- * Resume a live session in a NEW TAB, not just after a reload. Default false.
201
+ * Resume a live session in a NEW TAB, not just after a reload. Default
202
+ * false in the device tier, true in the identity tier (see `protection`).
164
203
  *
165
204
  * The session — handle plus JWT — normally lives in sessionStorage, so it
166
205
  * survives a reload and dies with the tab. That makes a second tab, or a
@@ -323,7 +362,14 @@ type SdkEvent = 'connected' | 'disconnected' | 'session-expired'
323
362
  * later unlocks; surface or report this if you want visibility rather than a
324
363
  * console line.
325
364
  */
326
- | 'enrolment-failed';
365
+ | 'enrolment-failed'
366
+ /**
367
+ * An identity-tier client just unlocked a wallet that was never enrolled by
368
+ * prompting for the passkey or password that protected this device's share,
369
+ * and enrolled it. The one-off prompt will not appear again; apps that want
370
+ * to explain it to the user listen for this. Same key, same addresses.
371
+ */
372
+ | 'migrated-to-identity';
327
373
  interface DecaneConnect {
328
374
  connect(): Promise<ConnectResult>;
329
375
  connectWithGoogle(): Promise<ConnectResult>;
@@ -478,7 +524,8 @@ interface DecaneConnect {
478
524
  * Requires a live session; throws `WebAuthnNotSupportedError` where passkeys
479
525
  * are unavailable, and `NewDeviceError` when this device holds no share yet
480
526
  * (that case wants `connect()`, which provisions one and registers a passkey
481
- * on the way).
527
+ * on the way). Throws `CallSequenceError` in the identity tier, which holds
528
+ * no share on the device for a passkey to wrap.
482
529
  */
483
530
  addPasskey(): Promise<void>;
484
531
  /**
@@ -493,7 +540,8 @@ interface DecaneConnect {
493
540
  * live session; provisions a fresh share from the enclave when the device
494
541
  * has none. Idempotent — a protected device returns true at once. Resolves
495
542
  * false when the user dismissed the prompt, so the app can decide whether
496
- * to go on without protection; throws for anything else.
543
+ * to go on without protection; throws for anything else. A no-op returning
544
+ * false in the identity tier: that tier stores nothing on the device.
497
545
  */
498
546
  protectDevice(): Promise<boolean>;
499
547
  sessionExpiresAt(): number | null;
@@ -601,7 +649,7 @@ interface DecaneConnect {
601
649
  off(event: SdkEvent, handler: (...args: unknown[]) => void): void;
602
650
  }
603
651
  interface WrappedShareMeta {
604
- unlockMethod: 'passkey' | 'pin' | 'password' | 'deferred';
652
+ unlockMethod: 'passkey' | 'pin' | 'password' | 'deferred' | 'identity';
605
653
  credentialId?: string;
606
654
  prfSalt?: string;
607
655
  pinSalt?: string;
@@ -703,6 +751,13 @@ declare class ApiClient {
703
751
  evmAddress: string;
704
752
  solanaAddress: string;
705
753
  tronAddress: string;
754
+ /**
755
+ * The share is being written BEFORE the enclave has sealed the auth share.
756
+ * A backend that knows the flag treats the row as provisional: invisible to
757
+ * hasShare until enrolment lands, and replaced outright by a later
758
+ * creation. Omitted, the backend behaves as it always did.
759
+ */
760
+ pendingEnrolment?: boolean;
706
761
  }): Promise<void>;
707
762
  recordTransaction(jwt: string, tx: {
708
763
  chain: string;
@@ -926,6 +981,16 @@ interface SocialConfig {
926
981
  */
927
982
  showStatusOverlay?: boolean;
928
983
  /**
984
+ * How this device holds its share of the wallet: `'device'` (default) wraps
985
+ * it under a passkey or password; `'identity'` stores nothing and asks for
986
+ * nothing — sign-in is the whole ceremony, every visit. Mirrors the headless
987
+ * client's option of the same name; read it for the security statement
988
+ * before choosing `'identity'`.
989
+ */
990
+ protection?: 'identity' | 'device';
991
+ /**
992
+ * @deprecated Use `protection: 'identity'`. Same behaviour; kept as an alias.
993
+ *
929
994
  * Ask for no passkey or password at sign-in; protect the wallet on this
930
995
  * device later, when the app calls `protectDevice()` (typically before the
931
996
  * first transaction). Mirrors the headless client's option of the same name;
@@ -1211,6 +1276,35 @@ declare class RecoveryWalletMismatchError extends DecaneConnectError {
1211
1276
  declare class ExportNotAuthorizedError extends DecaneConnectError {
1212
1277
  constructor();
1213
1278
  }
1279
+ /**
1280
+ * Wallet creation stopped because the enclave did not seal the wallet's
1281
+ * recovery share (enrolment). Creation blocks on that step in every tier,
1282
+ * because a wallet that exists unenrolled cannot be provisioned to any other
1283
+ * device — and in the identity tier not even to this one, once the session
1284
+ * ends. The server share was uploaded as provisional and the device share, if
1285
+ * one was stored, has been deleted: nothing is left behind, and the next
1286
+ * sign-in creates a wallet from scratch. Retryable for exactly that reason.
1287
+ */
1288
+ declare class WalletEnrolmentError extends DecaneConnectError {
1289
+ constructor(cause?: unknown);
1290
+ }
1291
+ /**
1292
+ * /signer/provision answered 429: this user has been issued device shares too
1293
+ * often in the last hour. Distinct from NewDeviceError on purpose — the wallet
1294
+ * is enrolled and fine, and sending the user to a recovery file they do not
1295
+ * have (the old behaviour) was wrong. Wait, then sign in again.
1296
+ */
1297
+ declare class ProvisioningRateLimitedError extends DecaneConnectError {
1298
+ constructor();
1299
+ }
1300
+ /**
1301
+ * A non-OK answer from the enclave on a call with no more specific mapping,
1302
+ * carrying the status so a caller can decide whether trying again could help.
1303
+ */
1304
+ declare class EnclaveHttpError extends DecaneConnectError {
1305
+ status: number;
1306
+ constructor(status: number, message: string);
1307
+ }
1214
1308
 
1215
1309
  declare class DecaneError extends Error {
1216
1310
  code: DecaneErrorCode;
@@ -1659,4 +1753,4 @@ declare class WeakPasswordError extends Error {
1659
1753
  */
1660
1754
  declare function validateUnlockPassword(password: string): void;
1661
1755
 
1662
- export { type ActiveSession, AttestationError, type AuthProfile, type AuthResult, BUILT_IN_CHAINS, type BalanceResult, type CAIP25Method, type CAIP25SessionRequest, type CAIP25SessionResult, CHAINS, CallSequenceError, type Chain, type ChainDescriptor, type ChainId, type ChainScope, type ChainSupport, type ChainType, type ConnectMode, type ConnectResult, type DecaneConfig, type DecaneConnect, type DecaneConnectConfig, DecaneConnectError, DecaneError, DecaneErrorCode, DecaneKit, DecaneLogo, DecaneMark, type DecaneProvider, DecaneWordmark, type Eip1193Provider, type EthereumProviderOptions, ExportNotAuthorizedError, InvalidAccessTokenError, InvalidApiKeyError, InvalidPinError, InvalidRecoveryFileError, type KingsChatTokens, MIN_PASSWORD_LENGTH, NetworkError, NewDeviceError, OriginNotAllowedError, type PortableBackup, PromptPasswordNotConfiguredError, PromptPinNotConfiguredError, ProvisioningTimeoutError, ReconnectRequiredError, type RecordTransactionInput, RecoveryFailedError, type RecoveryProgress, type RecoveryShareFile, RecoveryWalletMismatchError, type SdkEvent, type SendTransactionRequest, SessionExpiredError, ShareCorruptedError, type SignMessageRequest, type SignTypedDataRequest, type SignedAuthorization, type SocialAuthState, type SocialConfig, SocialWalletModal, StaleDeviceShareError, type Theme, type TransactionRecord, type TxParams, type UnifiedWalletAccount, UnlockRequiredError, UnlockTokenRejectedError, UserCancelledError, WalletSelector, WeakPasswordError, WebAuthnNotSupportedError, type WrappedShareMeta, WrongPasswordError, WrongUnlockPasswordError, createDecane, createDecaneConnect, createEthereumProvider, loginWithKingsChatPopup, startEmailAuth, useChainSwitch, useDecane, useEthereumProvider, useSendTransaction, useSignMessage, useSignTypedData, useSocialAuth, useSocialBalance, useSocialWallet, useWalletSelector, validateUnlockPassword, verifyEmailCode };
1756
+ export { type ActiveSession, AttestationError, type AuthProfile, type AuthResult, BUILT_IN_CHAINS, type BalanceResult, type CAIP25Method, type CAIP25SessionRequest, type CAIP25SessionResult, CHAINS, CallSequenceError, type Chain, type ChainDescriptor, type ChainId, type ChainScope, type ChainSupport, type ChainType, type ConnectMode, type ConnectResult, type DecaneConfig, type DecaneConnect, type DecaneConnectConfig, DecaneConnectError, DecaneError, DecaneErrorCode, DecaneKit, DecaneLogo, DecaneMark, type DecaneProvider, DecaneWordmark, type Eip1193Provider, EnclaveHttpError, type EthereumProviderOptions, ExportNotAuthorizedError, InvalidAccessTokenError, InvalidApiKeyError, InvalidPinError, InvalidRecoveryFileError, type KingsChatTokens, MIN_PASSWORD_LENGTH, NetworkError, NewDeviceError, OriginNotAllowedError, type PortableBackup, PromptPasswordNotConfiguredError, PromptPinNotConfiguredError, ProvisioningRateLimitedError, ProvisioningTimeoutError, ReconnectRequiredError, type RecordTransactionInput, RecoveryFailedError, type RecoveryProgress, type RecoveryShareFile, RecoveryWalletMismatchError, type SdkEvent, type SendTransactionRequest, SessionExpiredError, ShareCorruptedError, type SignMessageRequest, type SignTypedDataRequest, type SignedAuthorization, type SocialAuthState, type SocialConfig, SocialWalletModal, StaleDeviceShareError, type Theme, type TransactionRecord, type TxParams, type UnifiedWalletAccount, UnlockRequiredError, UnlockTokenRejectedError, UserCancelledError, WalletEnrolmentError, WalletSelector, WeakPasswordError, WebAuthnNotSupportedError, type WrappedShareMeta, WrongPasswordError, WrongUnlockPasswordError, createDecane, createDecaneConnect, createEthereumProvider, loginWithKingsChatPopup, startEmailAuth, useChainSwitch, useDecane, useEthereumProvider, useSendTransaction, useSignMessage, useSignTypedData, useSocialAuth, useSocialBalance, useSocialWallet, useWalletSelector, validateUnlockPassword, verifyEmailCode };