decane-connect-kit 2.26.0 → 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.cjs +184 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +107 -6
- package/dist/index.d.ts +107 -6
- package/dist/index.js +181 -49
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
|
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,12 +981,29 @@ 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;
|
|
932
997
|
* see it for what a device gives up until then. Default false.
|
|
933
998
|
*/
|
|
934
999
|
deferDeviceProtection?: boolean;
|
|
1000
|
+
/**
|
|
1001
|
+
* Resume a live session in a new tab, not only after a reload. Default false.
|
|
1002
|
+
* See the same option on the headless config for the security trade: the
|
|
1003
|
+
* session handle is the signing credential, so this widens where it can be
|
|
1004
|
+
* read from one tab to the whole origin.
|
|
1005
|
+
*/
|
|
1006
|
+
resumeSessionAcrossTabs?: boolean;
|
|
935
1007
|
/**
|
|
936
1008
|
* Offer to save a recovery-share file at signup. **Default false** since
|
|
937
1009
|
* 2.7.4 — opt in explicitly with `true`.
|
|
@@ -1204,6 +1276,35 @@ declare class RecoveryWalletMismatchError extends DecaneConnectError {
|
|
|
1204
1276
|
declare class ExportNotAuthorizedError extends DecaneConnectError {
|
|
1205
1277
|
constructor();
|
|
1206
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
|
+
}
|
|
1207
1308
|
|
|
1208
1309
|
declare class DecaneError extends Error {
|
|
1209
1310
|
code: DecaneErrorCode;
|
|
@@ -1652,4 +1753,4 @@ declare class WeakPasswordError extends Error {
|
|
|
1652
1753
|
*/
|
|
1653
1754
|
declare function validateUnlockPassword(password: string): void;
|
|
1654
1755
|
|
|
1655
|
-
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
|
|
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,12 +981,29 @@ 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;
|
|
932
997
|
* see it for what a device gives up until then. Default false.
|
|
933
998
|
*/
|
|
934
999
|
deferDeviceProtection?: boolean;
|
|
1000
|
+
/**
|
|
1001
|
+
* Resume a live session in a new tab, not only after a reload. Default false.
|
|
1002
|
+
* See the same option on the headless config for the security trade: the
|
|
1003
|
+
* session handle is the signing credential, so this widens where it can be
|
|
1004
|
+
* read from one tab to the whole origin.
|
|
1005
|
+
*/
|
|
1006
|
+
resumeSessionAcrossTabs?: boolean;
|
|
935
1007
|
/**
|
|
936
1008
|
* Offer to save a recovery-share file at signup. **Default false** since
|
|
937
1009
|
* 2.7.4 — opt in explicitly with `true`.
|
|
@@ -1204,6 +1276,35 @@ declare class RecoveryWalletMismatchError extends DecaneConnectError {
|
|
|
1204
1276
|
declare class ExportNotAuthorizedError extends DecaneConnectError {
|
|
1205
1277
|
constructor();
|
|
1206
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
|
+
}
|
|
1207
1308
|
|
|
1208
1309
|
declare class DecaneError extends Error {
|
|
1209
1310
|
code: DecaneErrorCode;
|
|
@@ -1652,4 +1753,4 @@ declare class WeakPasswordError extends Error {
|
|
|
1652
1753
|
*/
|
|
1653
1754
|
declare function validateUnlockPassword(password: string): void;
|
|
1654
1755
|
|
|
1655
|
-
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 };
|