signer-test-sdk-core 0.0.1
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/README.md +81 -0
- package/dist/src/components/OnboardingUI/auth.d.ts +158 -0
- package/dist/src/components/OnboardingUI/auth.js +230 -0
- package/dist/src/components/OnboardingUI/auth.js.map +1 -0
- package/dist/src/components/OnboardingUI/index.d.ts +9 -0
- package/dist/src/components/OnboardingUI/index.js +9 -0
- package/dist/src/components/OnboardingUI/index.js.map +1 -0
- package/dist/src/components/OnboardingUI/types.d.ts +159 -0
- package/dist/src/components/OnboardingUI/types.js +5 -0
- package/dist/src/components/OnboardingUI/types.js.map +1 -0
- package/dist/src/core/AbstraxnWallet.d.ts +162 -0
- package/dist/src/core/AbstraxnWallet.js +593 -0
- package/dist/src/core/AbstraxnWallet.js.map +1 -0
- package/dist/src/core/AuthManager.d.ts +112 -0
- package/dist/src/core/AuthManager.js +685 -0
- package/dist/src/core/AuthManager.js.map +1 -0
- package/dist/src/core/Signer.d.ts +35 -0
- package/dist/src/core/Signer.js +156 -0
- package/dist/src/core/Signer.js.map +1 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/index.js +19 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interfaces/IAuth.d.ts +26 -0
- package/dist/src/interfaces/IAuth.js +2 -0
- package/dist/src/interfaces/IAuth.js.map +1 -0
- package/dist/src/interfaces/ISigner.d.ts +14 -0
- package/dist/src/interfaces/ISigner.js +2 -0
- package/dist/src/interfaces/ISigner.js.map +1 -0
- package/dist/src/interfaces/IStorage.d.ts +15 -0
- package/dist/src/interfaces/IStorage.js +2 -0
- package/dist/src/interfaces/IStorage.js.map +1 -0
- package/dist/src/interfaces/IWallet.d.ts +45 -0
- package/dist/src/interfaces/IWallet.js +2 -0
- package/dist/src/interfaces/IWallet.js.map +1 -0
- package/dist/src/services/ApiService.d.ts +131 -0
- package/dist/src/services/ApiService.js +626 -0
- package/dist/src/services/ApiService.js.map +1 -0
- package/dist/src/services/TokenService.d.ts +29 -0
- package/dist/src/services/TokenService.js +40 -0
- package/dist/src/services/TokenService.js.map +1 -0
- package/dist/src/services/TurnkeyService.d.ts +54 -0
- package/dist/src/services/TurnkeyService.js +91 -0
- package/dist/src/services/TurnkeyService.js.map +1 -0
- package/dist/src/storage/IndexedDBStorage.d.ts +39 -0
- package/dist/src/storage/IndexedDBStorage.js +280 -0
- package/dist/src/storage/IndexedDBStorage.js.map +1 -0
- package/dist/src/utils/constants.d.ts +52 -0
- package/dist/src/utils/constants.js +78 -0
- package/dist/src/utils/constants.js.map +1 -0
- package/dist/src/utils/errors.d.ts +23 -0
- package/dist/src/utils/errors.js +48 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/helpers.d.ts +12 -0
- package/dist/src/utils/helpers.js +30 -0
- package/dist/src/utils/helpers.js.map +1 -0
- package/dist/src/utils/passkey.d.ts +33 -0
- package/dist/src/utils/passkey.js +122 -0
- package/dist/src/utils/passkey.js.map +1 -0
- package/dist/src/utils/types.d.ts +182 -0
- package/dist/src/utils/types.js +5 -0
- package/dist/src/utils/types.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Service - Manages JWT tokens
|
|
3
|
+
*/
|
|
4
|
+
import { AuthTokens } from '../utils/types';
|
|
5
|
+
import { IStorage } from '../interfaces/IStorage';
|
|
6
|
+
export declare class TokenService {
|
|
7
|
+
private storage;
|
|
8
|
+
constructor(storage: IStorage);
|
|
9
|
+
/**
|
|
10
|
+
* Get access token
|
|
11
|
+
*/
|
|
12
|
+
getAccessToken(): Promise<string | null>;
|
|
13
|
+
/**
|
|
14
|
+
* Get refresh token
|
|
15
|
+
*/
|
|
16
|
+
getRefreshToken(): Promise<string | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Set tokens
|
|
19
|
+
*/
|
|
20
|
+
setTokens(tokens: AuthTokens): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Clear tokens
|
|
23
|
+
*/
|
|
24
|
+
clearTokens(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Check if tokens exist
|
|
27
|
+
*/
|
|
28
|
+
hasTokens(): Promise<boolean>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { STORAGE_KEYS } from '../utils/constants';
|
|
2
|
+
export class TokenService {
|
|
3
|
+
constructor(storage) {
|
|
4
|
+
this.storage = storage;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Get access token
|
|
8
|
+
*/
|
|
9
|
+
async getAccessToken() {
|
|
10
|
+
return await this.storage.getItem(STORAGE_KEYS.ACCESS_TOKEN);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get refresh token
|
|
14
|
+
*/
|
|
15
|
+
async getRefreshToken() {
|
|
16
|
+
return await this.storage.getItem(STORAGE_KEYS.REFRESH_TOKEN);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Set tokens
|
|
20
|
+
*/
|
|
21
|
+
async setTokens(tokens) {
|
|
22
|
+
await this.storage.setItem(STORAGE_KEYS.ACCESS_TOKEN, tokens.accessToken);
|
|
23
|
+
await this.storage.setItem(STORAGE_KEYS.REFRESH_TOKEN, tokens.refreshToken);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Clear tokens
|
|
27
|
+
*/
|
|
28
|
+
async clearTokens() {
|
|
29
|
+
await this.storage.removeItem(STORAGE_KEYS.ACCESS_TOKEN);
|
|
30
|
+
await this.storage.removeItem(STORAGE_KEYS.REFRESH_TOKEN);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check if tokens exist
|
|
34
|
+
*/
|
|
35
|
+
async hasTokens() {
|
|
36
|
+
const accessToken = await this.getAccessToken();
|
|
37
|
+
return accessToken !== null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=TokenService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenService.js","sourceRoot":"","sources":["../../../src/services/TokenService.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,MAAM,OAAO,YAAY;IACvB,YAAoB,OAAiB;QAAjB,YAAO,GAAP,OAAO,CAAU;IAAG,CAAC;IAEzC;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAS,YAAY,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAS,YAAY,CAAC,aAAa,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,MAAkB;QAChC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAC1E,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAC9E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAChD,OAAO,WAAW,KAAK,IAAI,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal Service - Handles key management and signing
|
|
3
|
+
* ⚠️ This is INTERNAL - users never interact with this directly
|
|
4
|
+
* All infrastructure details are abstracted away
|
|
5
|
+
*/
|
|
6
|
+
import { TurnkeyClient } from '@turnkey/http';
|
|
7
|
+
import type { TGetWhoamiResponse } from '@turnkey/http/dist/__generated__/services/coordinator/public/v1/public_api.fetcher';
|
|
8
|
+
import { IndexedDBStorage } from '../storage/IndexedDBStorage';
|
|
9
|
+
export declare class TurnkeyService {
|
|
10
|
+
private client;
|
|
11
|
+
private storage;
|
|
12
|
+
constructor();
|
|
13
|
+
/**
|
|
14
|
+
* Reset the service state
|
|
15
|
+
* Clears IndexedDB and resets client
|
|
16
|
+
* Internal use only
|
|
17
|
+
*/
|
|
18
|
+
reset(): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Initialize client with IndexedDB storage
|
|
21
|
+
* This is called internally - users don't need to know about it
|
|
22
|
+
*/
|
|
23
|
+
init(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Get client
|
|
26
|
+
* Internal use only
|
|
27
|
+
*/
|
|
28
|
+
getClient(): TurnkeyClient;
|
|
29
|
+
/**
|
|
30
|
+
* Get public key from storage
|
|
31
|
+
* Used internally for authentication
|
|
32
|
+
* @param forceRefresh - If true, forces re-initialization to get fresh public key from IndexedDB
|
|
33
|
+
*/
|
|
34
|
+
getPublicKey(forceRefresh?: boolean): Promise<string | null>;
|
|
35
|
+
/**
|
|
36
|
+
* Create stamp for request
|
|
37
|
+
* Used internally for signing requests
|
|
38
|
+
*/
|
|
39
|
+
createStamp(body: string): Promise<{
|
|
40
|
+
stampHeaderName: string;
|
|
41
|
+
stampHeaderValue: string;
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* Get storage instance
|
|
45
|
+
* Internal use only
|
|
46
|
+
*/
|
|
47
|
+
getStorage(): IndexedDBStorage;
|
|
48
|
+
/**
|
|
49
|
+
* Get whoami information directly from Turnkey (without PROXY)
|
|
50
|
+
* This is used when isPolicy is true
|
|
51
|
+
* Returns the actual Turnkey response which has limited fields
|
|
52
|
+
*/
|
|
53
|
+
getWhoami(organizationId: string): Promise<TGetWhoamiResponse>;
|
|
54
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal Service - Handles key management and signing
|
|
3
|
+
* ⚠️ This is INTERNAL - users never interact with this directly
|
|
4
|
+
* All infrastructure details are abstracted away
|
|
5
|
+
*/
|
|
6
|
+
import { TurnkeyClient } from '@turnkey/http';
|
|
7
|
+
import { IndexedDBStorage } from '../storage/IndexedDBStorage';
|
|
8
|
+
import { TURNKEY_CONFIG } from '../utils/constants';
|
|
9
|
+
export class TurnkeyService {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.client = null;
|
|
12
|
+
this.storage = new IndexedDBStorage();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Reset the service state
|
|
16
|
+
* Clears IndexedDB and resets client
|
|
17
|
+
* Internal use only
|
|
18
|
+
*/
|
|
19
|
+
async reset() {
|
|
20
|
+
// Reset client first to close any open connections
|
|
21
|
+
this.client = null;
|
|
22
|
+
// Clear IndexedDB through storage (this includes a delay)
|
|
23
|
+
await this.storage.clearIndexedDB();
|
|
24
|
+
// Additional delay to ensure IndexedDB is fully cleared
|
|
25
|
+
await new Promise(resolve => setTimeout(resolve, 300));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Initialize client with IndexedDB storage
|
|
29
|
+
* This is called internally - users don't need to know about it
|
|
30
|
+
*/
|
|
31
|
+
async init() {
|
|
32
|
+
await this.storage.init();
|
|
33
|
+
const stamper = this.storage;
|
|
34
|
+
this.client = new TurnkeyClient({
|
|
35
|
+
baseUrl: TURNKEY_CONFIG.BASE_URL,
|
|
36
|
+
}, stamper);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get client
|
|
40
|
+
* Internal use only
|
|
41
|
+
*/
|
|
42
|
+
getClient() {
|
|
43
|
+
if (!this.client) {
|
|
44
|
+
throw new Error('Client not initialized. Call init() first.');
|
|
45
|
+
}
|
|
46
|
+
return this.client;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get public key from storage
|
|
50
|
+
* Used internally for authentication
|
|
51
|
+
* @param forceRefresh - If true, forces re-initialization to get fresh public key from IndexedDB
|
|
52
|
+
*/
|
|
53
|
+
async getPublicKey(forceRefresh = false) {
|
|
54
|
+
return await this.storage.getPublicKey(forceRefresh);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create stamp for request
|
|
58
|
+
* Used internally for signing requests
|
|
59
|
+
*/
|
|
60
|
+
async createStamp(body) {
|
|
61
|
+
// Ensure storage is initialized
|
|
62
|
+
// The stamp() method will handle retries if needed
|
|
63
|
+
if (!this.client) {
|
|
64
|
+
await this.init();
|
|
65
|
+
}
|
|
66
|
+
return await this.storage.stamp(body);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get storage instance
|
|
70
|
+
* Internal use only
|
|
71
|
+
*/
|
|
72
|
+
getStorage() {
|
|
73
|
+
return this.storage;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get whoami information directly from Turnkey (without PROXY)
|
|
77
|
+
* This is used when isPolicy is true
|
|
78
|
+
* Returns the actual Turnkey response which has limited fields
|
|
79
|
+
*/
|
|
80
|
+
async getWhoami(organizationId) {
|
|
81
|
+
if (!this.client) {
|
|
82
|
+
await this.init();
|
|
83
|
+
}
|
|
84
|
+
const client = this.getClient();
|
|
85
|
+
const response = await client.getWhoami({
|
|
86
|
+
organizationId,
|
|
87
|
+
});
|
|
88
|
+
return response;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=TurnkeyService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TurnkeyService.js","sourceRoot":"","sources":["../../../src/services/TurnkeyService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,MAAM,OAAO,cAAc;IAIzB;QAHQ,WAAM,GAAyB,IAAI,CAAC;QAI1C,IAAI,CAAC,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,mDAAmD;QACnD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,0DAA0D;QAC1D,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QACpC,wDAAwD;QACxD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiH,CAAC;QAEvI,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAC7B;YACE,OAAO,EAAE,cAAc,CAAC,QAAQ;SACjC,EACD,OAAc,CACf,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAAC,eAAwB,KAAK;QAC9C,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,gCAAgC;QAChC,mDAAmD;QACnD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,SAAS,CAAC,cAAsB;QACpC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC;YACtC,cAAc;SACf,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { IStorage } from '../interfaces/IStorage';
|
|
2
|
+
export declare class IndexedDBStorage implements IStorage {
|
|
3
|
+
private stamper;
|
|
4
|
+
private initialized;
|
|
5
|
+
/**
|
|
6
|
+
* Check if IndexedDB is available in the browser
|
|
7
|
+
*/
|
|
8
|
+
private isIndexedDBAvailable;
|
|
9
|
+
/**
|
|
10
|
+
* Initialize the IndexedDB stamper
|
|
11
|
+
* This uses Turnkey's IndexedDbStamper internally
|
|
12
|
+
* @param forceReinit - If true, forces re-initialization even if already initialized
|
|
13
|
+
*/
|
|
14
|
+
init(forceReinit?: boolean): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Get public key from stamper
|
|
17
|
+
* This is used internally for authentication
|
|
18
|
+
* @param forceRefresh - If true, forces re-initialization to get fresh public key from IndexedDB
|
|
19
|
+
*/
|
|
20
|
+
getPublicKey(forceRefresh?: boolean): Promise<string | null>;
|
|
21
|
+
/**
|
|
22
|
+
* Create stamp for request body
|
|
23
|
+
* This is used internally for signing requests
|
|
24
|
+
*/
|
|
25
|
+
stamp(body: string): Promise<{
|
|
26
|
+
stampHeaderName: string;
|
|
27
|
+
stampHeaderValue: string;
|
|
28
|
+
}>;
|
|
29
|
+
getItem<T>(key: string): Promise<T | null>;
|
|
30
|
+
setItem<T>(key: string, value: T): Promise<void>;
|
|
31
|
+
removeItem(key: string): Promise<void>;
|
|
32
|
+
clear(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Clear IndexedDB database used by Turnkey
|
|
35
|
+
* This deletes the IndexedDB database that stores Turnkey keys
|
|
36
|
+
*/
|
|
37
|
+
clearIndexedDB(): Promise<void>;
|
|
38
|
+
keys(): Promise<string[]>;
|
|
39
|
+
}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IndexedDB Storage implementation
|
|
3
|
+
* This is the internal storage mechanism - users don't interact with it directly
|
|
4
|
+
* Uses secure browser storage for key management
|
|
5
|
+
*/
|
|
6
|
+
import { IndexedDbStamper } from '@turnkey/indexed-db-stamper';
|
|
7
|
+
import { StorageError } from '../utils/errors';
|
|
8
|
+
export class IndexedDBStorage {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.stamper = null;
|
|
11
|
+
this.initialized = false;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Check if IndexedDB is available in the browser
|
|
15
|
+
*/
|
|
16
|
+
isIndexedDBAvailable() {
|
|
17
|
+
try {
|
|
18
|
+
// Check if IndexedDB is available
|
|
19
|
+
if (typeof window === 'undefined' || !window.indexedDB) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
// Try to open a test database to verify it's actually functional
|
|
23
|
+
// We'll do this asynchronously in init() to avoid blocking
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Initialize the IndexedDB stamper
|
|
32
|
+
* This uses Turnkey's IndexedDbStamper internally
|
|
33
|
+
* @param forceReinit - If true, forces re-initialization even if already initialized
|
|
34
|
+
*/
|
|
35
|
+
async init(forceReinit = false) {
|
|
36
|
+
if (this.initialized && !forceReinit) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// If forcing reinit, reset the stamper first
|
|
40
|
+
if (forceReinit) {
|
|
41
|
+
this.stamper = null;
|
|
42
|
+
this.initialized = false;
|
|
43
|
+
}
|
|
44
|
+
// Check if IndexedDB is available
|
|
45
|
+
if (!this.isIndexedDBAvailable()) {
|
|
46
|
+
throw new StorageError('IndexedDB is not available in this browser. ' +
|
|
47
|
+
'Please ensure you are not in private/incognito mode and that IndexedDB is enabled in your browser settings.');
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
// IndexedDbStamper constructor takes no arguments
|
|
51
|
+
this.stamper = new IndexedDbStamper();
|
|
52
|
+
await this.stamper.init();
|
|
53
|
+
this.initialized = true;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
57
|
+
// Provide more helpful error messages based on common issues
|
|
58
|
+
let userFriendlyMessage = 'Failed to initialize IndexedDB storage';
|
|
59
|
+
if (errorMessage.includes('backing store') || errorMessage.includes('Internal error')) {
|
|
60
|
+
userFriendlyMessage =
|
|
61
|
+
'IndexedDB initialization failed. This may occur if:\n' +
|
|
62
|
+
'• You are in private/incognito browsing mode\n' +
|
|
63
|
+
'• IndexedDB is disabled in your browser settings\n' +
|
|
64
|
+
'• You are in an iframe with restrictive permissions\n' +
|
|
65
|
+
'• Your browser storage quota has been exceeded\n\n' +
|
|
66
|
+
`Technical error: ${errorMessage}`;
|
|
67
|
+
}
|
|
68
|
+
else if (errorMessage.includes('quota') || errorMessage.includes('QuotaExceeded')) {
|
|
69
|
+
userFriendlyMessage =
|
|
70
|
+
'Browser storage quota exceeded. Please clear some storage space and try again.';
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
userFriendlyMessage = `Failed to initialize IndexedDB storage: ${errorMessage}`;
|
|
74
|
+
}
|
|
75
|
+
throw new StorageError(userFriendlyMessage);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get public key from stamper
|
|
80
|
+
* This is used internally for authentication
|
|
81
|
+
* @param forceRefresh - If true, forces re-initialization to get fresh public key from IndexedDB
|
|
82
|
+
*/
|
|
83
|
+
async getPublicKey(forceRefresh = false) {
|
|
84
|
+
// If force refresh is requested, re-initialize to get fresh public key
|
|
85
|
+
if (forceRefresh) {
|
|
86
|
+
await this.init(true);
|
|
87
|
+
}
|
|
88
|
+
else if (!this.stamper) {
|
|
89
|
+
await this.init();
|
|
90
|
+
}
|
|
91
|
+
if (!this.stamper) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
return this.stamper.getPublicKey() || null;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Create stamp for request body
|
|
103
|
+
* This is used internally for signing requests
|
|
104
|
+
*/
|
|
105
|
+
async stamp(body) {
|
|
106
|
+
if (!this.stamper || !this.initialized) {
|
|
107
|
+
await this.init();
|
|
108
|
+
}
|
|
109
|
+
if (!this.stamper) {
|
|
110
|
+
throw new Error('Stamper not initialized');
|
|
111
|
+
}
|
|
112
|
+
// Retry logic: if stamper throws "Key not initialized", retry initialization
|
|
113
|
+
const stamper = this.stamper;
|
|
114
|
+
try {
|
|
115
|
+
return await stamper.stamp(body);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
119
|
+
// If we get "Key not initialized" error, the stamper might not be fully ready
|
|
120
|
+
// Retry initialization and stamping
|
|
121
|
+
if (errorMessage.includes('Key not initialized') || errorMessage.includes('init()')) {
|
|
122
|
+
// Reset and reinitialize
|
|
123
|
+
this.stamper = null;
|
|
124
|
+
this.initialized = false;
|
|
125
|
+
await this.init();
|
|
126
|
+
// Get the newly initialized stamper
|
|
127
|
+
if (!this.stamper) {
|
|
128
|
+
throw new Error('Stamper not initialized after retry');
|
|
129
|
+
}
|
|
130
|
+
// Retry stamping with the reinitialized stamper
|
|
131
|
+
const retryStamper = this.stamper;
|
|
132
|
+
return await retryStamper.stamp(body);
|
|
133
|
+
}
|
|
134
|
+
// Re-throw other errors
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async getItem(key) {
|
|
139
|
+
try {
|
|
140
|
+
const value = localStorage.getItem(key);
|
|
141
|
+
return value ? JSON.parse(value) : null;
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
async setItem(key, value) {
|
|
148
|
+
try {
|
|
149
|
+
localStorage.setItem(key, JSON.stringify(value));
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
throw new Error(`Failed to set item: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async removeItem(key) {
|
|
156
|
+
try {
|
|
157
|
+
localStorage.removeItem(key);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
throw new Error(`Failed to remove item: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async clear() {
|
|
164
|
+
try {
|
|
165
|
+
localStorage.clear();
|
|
166
|
+
// Reset stamper state
|
|
167
|
+
if (this.stamper) {
|
|
168
|
+
this.stamper = null;
|
|
169
|
+
this.initialized = false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
throw new Error(`Failed to clear storage: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Clear IndexedDB database used by Turnkey
|
|
178
|
+
* This deletes the IndexedDB database that stores Turnkey keys
|
|
179
|
+
*/
|
|
180
|
+
async clearIndexedDB() {
|
|
181
|
+
try {
|
|
182
|
+
if (typeof window === 'undefined' || !window.indexedDB) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
// Reset stamper state first to close any open connections
|
|
186
|
+
this.stamper = null;
|
|
187
|
+
this.initialized = false;
|
|
188
|
+
// Try to delete common IndexedDB database names used by Turnkey
|
|
189
|
+
// IndexedDbStamper may use different database names, so we try multiple
|
|
190
|
+
const dbNames = [
|
|
191
|
+
'turnkey-stamper',
|
|
192
|
+
'@turnkey/indexed-db-stamper',
|
|
193
|
+
'turnkey',
|
|
194
|
+
'abstraxn-turnkey-stamper',
|
|
195
|
+
'turnkey-indexed-db-stamper',
|
|
196
|
+
// Also try to get all database names and delete any that look like Turnkey databases
|
|
197
|
+
];
|
|
198
|
+
// Try to get all database names (if supported by browser)
|
|
199
|
+
try {
|
|
200
|
+
if ('databases' in indexedDB && indexedDB.databases) {
|
|
201
|
+
const allDatabases = await indexedDB.databases();
|
|
202
|
+
allDatabases.forEach((db) => {
|
|
203
|
+
if (db.name && (db.name.toLowerCase().includes('turnkey') ||
|
|
204
|
+
db.name.toLowerCase().includes('stamper'))) {
|
|
205
|
+
if (!dbNames.includes(db.name)) {
|
|
206
|
+
dbNames.push(db.name);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
// browsers that don't support databases() API
|
|
214
|
+
}
|
|
215
|
+
// Delete all possible database names
|
|
216
|
+
// We need to wait for deletion to complete, even if blocked
|
|
217
|
+
const deletePromises = dbNames.map((dbName) => {
|
|
218
|
+
return new Promise((resolve) => {
|
|
219
|
+
try {
|
|
220
|
+
const deleteRequest = indexedDB.deleteDatabase(dbName);
|
|
221
|
+
deleteRequest.onsuccess = () => {
|
|
222
|
+
resolve();
|
|
223
|
+
};
|
|
224
|
+
deleteRequest.onerror = () => {
|
|
225
|
+
// Database might not exist, that's okay
|
|
226
|
+
resolve();
|
|
227
|
+
};
|
|
228
|
+
deleteRequest.onblocked = () => {
|
|
229
|
+
// Database is in use - wait a bit and try to close connections
|
|
230
|
+
// The database will be deleted once all connections are closed
|
|
231
|
+
setTimeout(() => {
|
|
232
|
+
// Try to trigger connection close by attempting to open the database
|
|
233
|
+
try {
|
|
234
|
+
const openRequest = indexedDB.open(dbName);
|
|
235
|
+
openRequest.onsuccess = () => {
|
|
236
|
+
const db = openRequest.result;
|
|
237
|
+
db.close();
|
|
238
|
+
// Wait a bit more for deletion to complete
|
|
239
|
+
setTimeout(resolve, 200);
|
|
240
|
+
};
|
|
241
|
+
openRequest.onerror = () => {
|
|
242
|
+
// If we can't open it, it might already be deleted
|
|
243
|
+
setTimeout(resolve, 200);
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
setTimeout(resolve, 200);
|
|
248
|
+
}
|
|
249
|
+
}, 100);
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
// Ignore errors for non-existent databases
|
|
254
|
+
resolve();
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
// Wait for all deletion attempts to complete
|
|
259
|
+
await Promise.all(deletePromises);
|
|
260
|
+
// Add additional delay to ensure IndexedDB deletion is fully processed
|
|
261
|
+
await new Promise(resolve => setTimeout(resolve, 200));
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
// Reset stamper state even if deletion fails
|
|
265
|
+
this.stamper = null;
|
|
266
|
+
this.initialized = false;
|
|
267
|
+
// Don't throw error, just log it
|
|
268
|
+
console.warn('Failed to clear IndexedDB:', error);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
async keys() {
|
|
272
|
+
try {
|
|
273
|
+
return Object.keys(localStorage);
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
return [];
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=IndexedDBStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IndexedDBStorage.js","sourceRoot":"","sources":["../../../src/storage/IndexedDBStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants for Abstraxn Wallet SDK
|
|
3
|
+
*/
|
|
4
|
+
export declare const DEFAULT_CHAIN_ID = 1;
|
|
5
|
+
export declare const SUPPORTED_CHAINS: {
|
|
6
|
+
id: number;
|
|
7
|
+
name: string;
|
|
8
|
+
rpcUrl: string;
|
|
9
|
+
nativeCurrency: {
|
|
10
|
+
name: string;
|
|
11
|
+
symbol: string;
|
|
12
|
+
decimals: number;
|
|
13
|
+
};
|
|
14
|
+
}[];
|
|
15
|
+
export declare const STORAGE_KEYS: {
|
|
16
|
+
readonly ACCESS_TOKEN: "abstraxn_access_token";
|
|
17
|
+
readonly REFRESH_TOKEN: "abstraxn_refresh_token";
|
|
18
|
+
readonly USER: "abstraxn_user";
|
|
19
|
+
readonly WALLET_CONFIG: "abstraxn_wallet_config";
|
|
20
|
+
readonly VERIFY_RESPONSE: "abstraxn_verify_response";
|
|
21
|
+
readonly WHOAMI: "abstraxn_whoami";
|
|
22
|
+
};
|
|
23
|
+
export declare const API_BASE_URL: string;
|
|
24
|
+
export declare const API_ENDPOINTS: {
|
|
25
|
+
readonly INIT_OTP: "/login/otp/init";
|
|
26
|
+
readonly VERIFY_OTP: "/login/otp/verify";
|
|
27
|
+
readonly GOOGLE_AUTH: "/login/google";
|
|
28
|
+
readonly GOOGLE_CALLBACK: "/login/google/callback";
|
|
29
|
+
readonly DISCORD_AUTH: "/login/discord";
|
|
30
|
+
readonly DISCORD_CALLBACK: "/login/discord/callback";
|
|
31
|
+
readonly X_AUTH: "/login/x";
|
|
32
|
+
readonly X_CALLBACK: "/login/x/callback";
|
|
33
|
+
readonly PASSKEY_SIGNUP: "/login/passkey/signup";
|
|
34
|
+
readonly PASSKEY_LOGIN: "/login/passkey/login";
|
|
35
|
+
readonly REFRESH_TOKEN: "/auth/refresh";
|
|
36
|
+
readonly SIGN_TRANSACTION: "/sign/transaction";
|
|
37
|
+
readonly PROXY: "/proxy/";
|
|
38
|
+
readonly WHOAMI: "/whoami";
|
|
39
|
+
readonly EXPORT_WALLET: "/export-wallet";
|
|
40
|
+
};
|
|
41
|
+
export declare const TURNKEY_CONFIG: {
|
|
42
|
+
readonly BASE_URL: "https://api.turnkey.com";
|
|
43
|
+
readonly STAMPER_DB_NAME: "abstraxn-turnkey-stamper";
|
|
44
|
+
};
|
|
45
|
+
export declare const TURNKEY_ENDPOINTS: {
|
|
46
|
+
readonly CREATE_POLICY: "/public/v1/submit/create_policy";
|
|
47
|
+
readonly SIGN_TRANSACTION: "/public/v1/submit/sign_transaction";
|
|
48
|
+
readonly SIGN_MESSAGE: "/public/v1/submit/sign_message";
|
|
49
|
+
readonly SIGN_TYPED_DATA: "/public/v1/submit/sign_typed_data";
|
|
50
|
+
readonly GET_WHOAMI: "/public/v1/query/whoami";
|
|
51
|
+
readonly STAMP_EXPORT_WALLET_ACCOUNT: "/public/v1/submit/export_wallet_account";
|
|
52
|
+
};
|