@oxyhq/services 5.16.40 → 5.16.42
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/lib/commonjs/adapters/expo/crypto.js +56 -0
- package/lib/commonjs/adapters/expo/crypto.js.map +1 -0
- package/lib/commonjs/adapters/expo/fetch.js +30 -0
- package/lib/commonjs/adapters/expo/fetch.js.map +1 -0
- package/lib/commonjs/adapters/expo/index.js +48 -0
- package/lib/commonjs/adapters/expo/index.js.map +1 -0
- package/lib/commonjs/adapters/expo/storage.js +201 -0
- package/lib/commonjs/adapters/expo/storage.js.map +1 -0
- package/lib/commonjs/adapters/index.js +50 -0
- package/lib/commonjs/adapters/index.js.map +1 -0
- package/lib/commonjs/adapters/node/crypto.js +40 -0
- package/lib/commonjs/adapters/node/crypto.js.map +1 -0
- package/lib/commonjs/adapters/node/fetch.js +62 -0
- package/lib/commonjs/adapters/node/fetch.js.map +1 -0
- package/lib/commonjs/adapters/node/index.js +34 -0
- package/lib/commonjs/adapters/node/index.js.map +1 -0
- package/lib/commonjs/adapters/node/storage.js +163 -0
- package/lib/commonjs/adapters/node/storage.js.map +1 -0
- package/lib/commonjs/core/identity-session/DeviceManager.js +237 -0
- package/lib/commonjs/core/identity-session/DeviceManager.js.map +1 -0
- package/lib/commonjs/core/identity-session/INTEGRATION_GUIDE.md +287 -0
- package/lib/commonjs/core/identity-session/IdentityManager.js +400 -0
- package/lib/commonjs/core/identity-session/IdentityManager.js.map +1 -0
- package/lib/commonjs/core/identity-session/IdentitySessionCore.js +394 -0
- package/lib/commonjs/core/identity-session/IdentitySessionCore.js.map +1 -0
- package/lib/commonjs/core/identity-session/RefreshManager.js +137 -0
- package/lib/commonjs/core/identity-session/RefreshManager.js.map +1 -0
- package/lib/commonjs/core/identity-session/SessionManager.js +427 -0
- package/lib/commonjs/core/identity-session/SessionManager.js.map +1 -0
- package/lib/commonjs/core/identity-session/createIdentitySessionCore.js +24 -0
- package/lib/commonjs/core/identity-session/createIdentitySessionCore.js.map +1 -0
- package/lib/commonjs/core/identity-session/errors.js +176 -0
- package/lib/commonjs/core/identity-session/errors.js.map +1 -0
- package/lib/commonjs/core/identity-session/index.js +80 -0
- package/lib/commonjs/core/identity-session/index.js.map +1 -0
- package/lib/commonjs/core/identity-session/types.js +2 -0
- package/lib/commonjs/core/identity-session/types.js.map +1 -0
- package/lib/commonjs/core/index.js +2 -21
- package/lib/commonjs/core/index.js.map +1 -1
- package/lib/commonjs/index.js +58 -8
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/interfaces.js +7 -0
- package/lib/commonjs/models/interfaces.js.map +1 -1
- package/lib/commonjs/ui/context/OxyContext.js +434 -820
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/hooks/useAvatarPicker.js +52 -0
- package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +1 -0
- package/lib/commonjs/ui/hooks/useIdentityTransfer.js +125 -0
- package/lib/commonjs/ui/hooks/useIdentityTransfer.js.map +1 -0
- package/lib/commonjs/ui/hooks/useTransferCodesPersistence.js +81 -0
- package/lib/commonjs/ui/hooks/useTransferCodesPersistence.js.map +1 -0
- package/lib/commonjs/ui/screens/AccountCenterScreen.js +7 -2
- package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js +12 -5
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +2 -2
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ProfileScreen.js +6 -6
- package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/commonjs/ui/utils/sessionHelpers.js +7 -1
- package/lib/commonjs/ui/utils/sessionHelpers.js.map +1 -1
- package/lib/commonjs/utils/index.js +0 -7
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/utils/sessionUtils.js +8 -1
- package/lib/commonjs/utils/sessionUtils.js.map +1 -1
- package/lib/module/adapters/expo/crypto.js +51 -0
- package/lib/module/adapters/expo/crypto.js.map +1 -0
- package/lib/module/adapters/expo/fetch.js +26 -0
- package/lib/module/adapters/expo/fetch.js.map +1 -0
- package/lib/module/adapters/expo/index.js +45 -0
- package/lib/module/adapters/expo/index.js.map +1 -0
- package/lib/module/adapters/expo/storage.js +198 -0
- package/lib/module/adapters/expo/storage.js.map +1 -0
- package/lib/module/adapters/index.js +47 -0
- package/lib/module/adapters/index.js.map +1 -0
- package/lib/module/adapters/node/crypto.js +36 -0
- package/lib/module/adapters/node/crypto.js.map +1 -0
- package/lib/module/adapters/node/fetch.js +57 -0
- package/lib/module/adapters/node/fetch.js.map +1 -0
- package/lib/module/adapters/node/index.js +31 -0
- package/lib/module/adapters/node/index.js.map +1 -0
- package/lib/module/adapters/node/storage.js +159 -0
- package/lib/module/adapters/node/storage.js.map +1 -0
- package/lib/module/core/identity-session/DeviceManager.js +232 -0
- package/lib/module/core/identity-session/DeviceManager.js.map +1 -0
- package/lib/module/core/identity-session/INTEGRATION_GUIDE.md +287 -0
- package/lib/module/core/identity-session/IdentityManager.js +395 -0
- package/lib/module/core/identity-session/IdentityManager.js.map +1 -0
- package/lib/module/core/identity-session/IdentitySessionCore.js +390 -0
- package/lib/module/core/identity-session/IdentitySessionCore.js.map +1 -0
- package/lib/module/core/identity-session/RefreshManager.js +132 -0
- package/lib/module/core/identity-session/RefreshManager.js.map +1 -0
- package/lib/module/core/identity-session/SessionManager.js +422 -0
- package/lib/module/core/identity-session/SessionManager.js.map +1 -0
- package/lib/module/core/identity-session/createIdentitySessionCore.js +21 -0
- package/lib/module/core/identity-session/createIdentitySessionCore.js.map +1 -0
- package/lib/module/core/identity-session/errors.js +170 -0
- package/lib/module/core/identity-session/errors.js.map +1 -0
- package/lib/module/core/identity-session/index.js +17 -0
- package/lib/module/core/identity-session/index.js.map +1 -0
- package/lib/module/core/identity-session/types.js +2 -0
- package/lib/module/core/identity-session/types.js.map +1 -0
- package/lib/module/core/index.js +2 -3
- package/lib/module/core/index.js.map +1 -1
- package/lib/module/index.js +12 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/interfaces.js +7 -0
- package/lib/module/models/interfaces.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +436 -822
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/hooks/useAvatarPicker.js +48 -0
- package/lib/module/ui/hooks/useAvatarPicker.js.map +1 -0
- package/lib/module/ui/hooks/useIdentityTransfer.js +121 -0
- package/lib/module/ui/hooks/useIdentityTransfer.js.map +1 -0
- package/lib/module/ui/hooks/useTransferCodesPersistence.js +77 -0
- package/lib/module/ui/hooks/useTransferCodesPersistence.js.map +1 -0
- package/lib/module/ui/screens/AccountCenterScreen.js +7 -2
- package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js +12 -5
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSwitcherScreen.js +2 -2
- package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/module/ui/screens/ProfileScreen.js +6 -6
- package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/module/ui/utils/sessionHelpers.js +7 -1
- package/lib/module/ui/utils/sessionHelpers.js.map +1 -1
- package/lib/module/utils/index.js +2 -1
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/utils/sessionUtils.js +8 -1
- package/lib/module/utils/sessionUtils.js.map +1 -1
- package/lib/typescript/adapters/expo/crypto.d.ts +17 -0
- package/lib/typescript/adapters/expo/crypto.d.ts.map +1 -0
- package/lib/typescript/adapters/expo/fetch.d.ts +16 -0
- package/lib/typescript/adapters/expo/fetch.d.ts.map +1 -0
- package/lib/typescript/adapters/expo/index.d.ts +23 -0
- package/lib/typescript/adapters/expo/index.d.ts.map +1 -0
- package/lib/typescript/adapters/expo/storage.d.ts +23 -0
- package/lib/typescript/adapters/expo/storage.d.ts.map +1 -0
- package/lib/typescript/adapters/index.d.ts +19 -0
- package/lib/typescript/adapters/index.d.ts.map +1 -0
- package/lib/typescript/adapters/node/crypto.d.ts +17 -0
- package/lib/typescript/adapters/node/crypto.d.ts.map +1 -0
- package/lib/typescript/adapters/node/fetch.d.ts +16 -0
- package/lib/typescript/adapters/node/fetch.d.ts.map +1 -0
- package/lib/typescript/adapters/node/index.d.ts +23 -0
- package/lib/typescript/adapters/node/index.d.ts.map +1 -0
- package/lib/typescript/adapters/node/storage.d.ts +23 -0
- package/lib/typescript/adapters/node/storage.d.ts.map +1 -0
- package/lib/typescript/core/identity-session/DeviceManager.d.ts +64 -0
- package/lib/typescript/core/identity-session/DeviceManager.d.ts.map +1 -0
- package/lib/typescript/core/identity-session/IdentityManager.d.ts +88 -0
- package/lib/typescript/core/identity-session/IdentityManager.d.ts.map +1 -0
- package/lib/typescript/core/identity-session/IdentitySessionCore.d.ts +141 -0
- package/lib/typescript/core/identity-session/IdentitySessionCore.d.ts.map +1 -0
- package/lib/typescript/core/identity-session/RefreshManager.d.ts +36 -0
- package/lib/typescript/core/identity-session/RefreshManager.d.ts.map +1 -0
- package/lib/typescript/core/identity-session/SessionManager.d.ts +104 -0
- package/lib/typescript/core/identity-session/SessionManager.d.ts.map +1 -0
- package/lib/typescript/core/identity-session/createIdentitySessionCore.d.ts +11 -0
- package/lib/typescript/core/identity-session/createIdentitySessionCore.d.ts.map +1 -0
- package/lib/typescript/core/identity-session/errors.d.ts +63 -0
- package/lib/typescript/core/identity-session/errors.d.ts.map +1 -0
- package/lib/typescript/core/identity-session/index.d.ts +14 -0
- package/lib/typescript/core/identity-session/index.d.ts.map +1 -0
- package/lib/typescript/core/identity-session/types.d.ts +196 -0
- package/lib/typescript/core/identity-session/types.d.ts.map +1 -0
- package/lib/typescript/core/index.d.ts +1 -3
- package/lib/typescript/core/index.d.ts.map +1 -1
- package/lib/typescript/core/mixins/index.d.ts +2 -2
- package/lib/typescript/index.d.ts +3 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/models/interfaces.d.ts +5 -36
- package/lib/typescript/models/interfaces.d.ts.map +1 -1
- package/lib/typescript/models/session.d.ts +3 -16
- package/lib/typescript/models/session.d.ts.map +1 -1
- package/lib/typescript/ui/context/OxyContext.d.ts +2 -25
- package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/mutations/useAccountMutations.d.ts +7 -8
- package/lib/typescript/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/mutations/useServicesMutations.d.ts +1 -1
- package/lib/typescript/ui/hooks/mutations/useServicesMutations.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/queries/useAccountQueries.d.ts +5 -5
- package/lib/typescript/ui/hooks/queries/useAccountQueries.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/useAvatarPicker.d.ts +18 -0
- package/lib/typescript/ui/hooks/useAvatarPicker.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/useIdentityTransfer.d.ts +24 -0
- package/lib/typescript/ui/hooks/useIdentityTransfer.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/useTransferCodesPersistence.d.ts +6 -0
- package/lib/typescript/ui/hooks/useTransferCodesPersistence.d.ts.map +1 -0
- package/lib/typescript/ui/screens/AccountCenterScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/utils/sessionHelpers.d.ts +1 -0
- package/lib/typescript/ui/utils/sessionHelpers.d.ts.map +1 -1
- package/lib/typescript/utils/index.d.ts +0 -2
- package/lib/typescript/utils/index.d.ts.map +1 -1
- package/lib/typescript/utils/sessionUtils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/adapters/expo/crypto.ts +55 -0
- package/src/adapters/expo/fetch.ts +28 -0
- package/src/adapters/expo/index.ts +51 -0
- package/src/adapters/expo/storage.ts +228 -0
- package/src/adapters/index.ts +47 -0
- package/src/adapters/node/crypto.ts +39 -0
- package/src/adapters/node/fetch.ts +59 -0
- package/src/adapters/node/index.ts +37 -0
- package/src/adapters/node/storage.ts +170 -0
- package/src/core/identity-session/DeviceManager.ts +273 -0
- package/src/core/identity-session/INTEGRATION_GUIDE.md +287 -0
- package/src/core/identity-session/IdentityManager.ts +474 -0
- package/src/core/identity-session/IdentitySessionCore.ts +464 -0
- package/src/core/identity-session/RefreshManager.ts +189 -0
- package/src/core/identity-session/SessionManager.ts +500 -0
- package/src/core/identity-session/createIdentitySessionCore.ts +19 -0
- package/src/core/identity-session/errors.ts +197 -0
- package/src/core/identity-session/index.ts +15 -0
- package/src/core/identity-session/types.ts +188 -0
- package/src/core/index.ts +3 -4
- package/src/index.ts +28 -3
- package/src/models/interfaces.ts +12 -39
- package/src/models/session.ts +6 -16
- package/src/ui/context/OxyContext.tsx +442 -871
- package/src/ui/hooks/auth/index.ts +1 -0
- package/src/ui/hooks/useAvatarPicker.ts +62 -0
- package/src/ui/hooks/useIdentityTransfer.ts +135 -0
- package/src/ui/hooks/useTransferCodesPersistence.ts +80 -0
- package/src/ui/screens/AccountCenterScreen.tsx +7 -2
- package/src/ui/screens/AccountSettingsScreen.tsx +15 -8
- package/src/ui/screens/AccountSwitcherScreen.tsx +2 -2
- package/src/ui/screens/ProfileScreen.tsx +10 -10
- package/src/ui/utils/sessionHelpers.ts +7 -0
- package/src/utils/index.ts +1 -2
- package/src/utils/sessionUtils.ts +8 -0
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js +0 -732
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +0 -1
- package/lib/commonjs/ui/context/hooks/useDeviceManagement.js +0 -73
- package/lib/commonjs/ui/context/hooks/useDeviceManagement.js.map +0 -1
- package/lib/commonjs/ui/hooks/useDeviceManagement.js +0 -73
- package/lib/commonjs/ui/hooks/useDeviceManagement.js.map +0 -1
- package/lib/commonjs/ui/hooks/useSessionManagement.js +0 -281
- package/lib/commonjs/ui/hooks/useSessionManagement.js.map +0 -1
- package/lib/commonjs/utils/deviceManager.js +0 -177
- package/lib/commonjs/utils/deviceManager.js.map +0 -1
- package/lib/module/ui/context/hooks/useAuthOperations.js +0 -726
- package/lib/module/ui/context/hooks/useAuthOperations.js.map +0 -1
- package/lib/module/ui/context/hooks/useDeviceManagement.js +0 -68
- package/lib/module/ui/context/hooks/useDeviceManagement.js.map +0 -1
- package/lib/module/ui/hooks/useDeviceManagement.js +0 -68
- package/lib/module/ui/hooks/useDeviceManagement.js.map +0 -1
- package/lib/module/ui/hooks/useSessionManagement.js +0 -276
- package/lib/module/ui/hooks/useSessionManagement.js.map +0 -1
- package/lib/module/utils/deviceManager.js +0 -171
- package/lib/module/utils/deviceManager.js.map +0 -1
- package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts +0 -59
- package/lib/typescript/ui/context/hooks/useAuthOperations.d.ts.map +0 -1
- package/lib/typescript/ui/context/hooks/useDeviceManagement.d.ts +0 -27
- package/lib/typescript/ui/context/hooks/useDeviceManagement.d.ts.map +0 -1
- package/lib/typescript/ui/hooks/useDeviceManagement.d.ts +0 -27
- package/lib/typescript/ui/hooks/useDeviceManagement.d.ts.map +0 -1
- package/lib/typescript/ui/hooks/useSessionManagement.d.ts +0 -41
- package/lib/typescript/ui/hooks/useSessionManagement.d.ts.map +0 -1
- package/lib/typescript/utils/deviceManager.d.ts +0 -66
- package/lib/typescript/utils/deviceManager.d.ts.map +0 -1
- package/src/ui/context/hooks/useAuthOperations.ts +0 -801
- package/src/ui/context/hooks/useDeviceManagement.ts +0 -108
- package/src/ui/hooks/useDeviceManagement.ts +0 -108
- package/src/ui/hooks/useSessionManagement.ts +0 -401
- package/src/utils/deviceManager.ts +0 -198
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Node.js Crypto Adapter
|
|
5
|
+
*
|
|
6
|
+
* Uses Node's built-in crypto module
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import * as crypto from 'crypto';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Crypto Adapter Interface
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Create Node Crypto Adapter
|
|
17
|
+
*/
|
|
18
|
+
export async function createNodeCryptoAdapter() {
|
|
19
|
+
return {
|
|
20
|
+
/**
|
|
21
|
+
* Generate cryptographically secure random bytes
|
|
22
|
+
*/
|
|
23
|
+
async getRandomBytes(length) {
|
|
24
|
+
return new Uint8Array(crypto.randomBytes(length));
|
|
25
|
+
},
|
|
26
|
+
/**
|
|
27
|
+
* Hash a string using the specified algorithm
|
|
28
|
+
*/
|
|
29
|
+
async digestStringAsync(algorithm, data) {
|
|
30
|
+
const hash = crypto.createHash(algorithm.toLowerCase());
|
|
31
|
+
hash.update(data);
|
|
32
|
+
return hash.digest('hex');
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["crypto","createNodeCryptoAdapter","getRandomBytes","length","Uint8Array","randomBytes","digestStringAsync","algorithm","data","hash","createHash","toLowerCase","update","digest"],"sourceRoot":"../../../../src","sources":["adapters/node/crypto.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,MAAM,MAAM,QAAQ;;AAEhC;AACA;AACA;;AAMA;AACA;AACA;AACA,OAAO,eAAeC,uBAAuBA,CAAA,EAA2B;EACtE,OAAO;IACL;AACJ;AACA;IACI,MAAMC,cAAcA,CAACC,MAAc,EAAuB;MACxD,OAAO,IAAIC,UAAU,CAACJ,MAAM,CAACK,WAAW,CAACF,MAAM,CAAC,CAAC;IACnD,CAAC;IAED;AACJ;AACA;IACI,MAAMG,iBAAiBA,CAACC,SAA8B,EAAEC,IAAY,EAAmB;MACrF,MAAMC,IAAI,GAAGT,MAAM,CAACU,UAAU,CAACH,SAAS,CAACI,WAAW,CAAC,CAAC,CAAC;MACvDF,IAAI,CAACG,MAAM,CAACJ,IAAI,CAAC;MACjB,OAAOC,IAAI,CAACI,MAAM,CAAC,KAAK,CAAC;IAC3B;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Node.js Fetch Adapter
|
|
5
|
+
*
|
|
6
|
+
* Uses node-fetch or native fetch (Node 18+)
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
// Lazy import
|
|
10
|
+
let nodeFetch = null;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Initialize node-fetch
|
|
14
|
+
*/
|
|
15
|
+
async function initNodeFetch() {
|
|
16
|
+
if (!nodeFetch) {
|
|
17
|
+
try {
|
|
18
|
+
// Try native fetch first (Node 18+)
|
|
19
|
+
if (typeof fetch !== 'undefined') {
|
|
20
|
+
// Use a wrapper to match the interface
|
|
21
|
+
nodeFetch = {
|
|
22
|
+
default: fetch
|
|
23
|
+
};
|
|
24
|
+
return nodeFetch;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Fallback to node-fetch (dynamic import to avoid type errors if not installed)
|
|
28
|
+
// @ts-ignore - node-fetch may not be installed, handled at runtime
|
|
29
|
+
const nodeFetchModule = await import('node-fetch');
|
|
30
|
+
nodeFetch = {
|
|
31
|
+
default: nodeFetchModule.default || nodeFetchModule
|
|
32
|
+
};
|
|
33
|
+
} catch (error) {
|
|
34
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
35
|
+
throw new Error(`Failed to load fetch: ${errorMessage}. Please use Node.js 18+ or install node-fetch`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return nodeFetch;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Fetch Adapter Interface
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Create Node Fetch Adapter
|
|
47
|
+
*/
|
|
48
|
+
export async function createNodeFetchAdapter() {
|
|
49
|
+
const fetchModule = await initNodeFetch();
|
|
50
|
+
const fetchFn = fetchModule.default || fetchModule;
|
|
51
|
+
return {
|
|
52
|
+
fetch(url, options) {
|
|
53
|
+
return fetchFn(url, options);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["nodeFetch","initNodeFetch","fetch","default","nodeFetchModule","error","errorMessage","Error","message","String","createNodeFetchAdapter","fetchModule","fetchFn","url","options"],"sourceRoot":"../../../../src","sources":["adapters/node/fetch.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAIA,SAA2C,GAAG,IAAI;;AAEtD;AACA;AACA;AACA,eAAeC,aAAaA,CAAA,EAAuC;EACjE,IAAI,CAACD,SAAS,EAAE;IACd,IAAI;MACF;MACA,IAAI,OAAOE,KAAK,KAAK,WAAW,EAAE;QAChC;QACAF,SAAS,GAAG;UACVG,OAAO,EAAED;QACX,CAAC;QACD,OAAOF,SAAS;MAClB;;MAEA;MACA;MACA,MAAMI,eAAe,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;MAClDJ,SAAS,GAAG;QACVG,OAAO,EAAGC,eAAe,CAACD,OAAO,IAAIC;MACvC,CAAC;IACH,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd,MAAMC,YAAY,GAAGD,KAAK,YAAYE,KAAK,GAAGF,KAAK,CAACG,OAAO,GAAGC,MAAM,CAACJ,KAAK,CAAC;MAC3E,MAAM,IAAIE,KAAK,CAAC,yBAAyBD,YAAY,gDAAgD,CAAC;IACxG;EACF;EACA,OAAON,SAAS;AAClB;;AAEA;AACA;AACA;;AAKA;AACA;AACA;AACA,OAAO,eAAeU,sBAAsBA,CAAA,EAA0B;EACpE,MAAMC,WAAW,GAAG,MAAMV,aAAa,CAAC,CAAC;EACzC,MAAMW,OAAO,GAAID,WAAW,CAASR,OAAO,IAAIQ,WAAW;EAE3D,OAAO;IACLT,KAAKA,CAACW,GAAW,EAAEC,OAAqB,EAAqB;MAC3D,OAAOF,OAAO,CAACC,GAAG,EAAEC,OAAO,CAAC;IAC9B;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Node.js Platform Adapter
|
|
5
|
+
*
|
|
6
|
+
* Provides storage, crypto, and fetch adapters for Node.js
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { createNodeStorageAdapter } from './storage';
|
|
10
|
+
import { createNodeCryptoAdapter } from './crypto';
|
|
11
|
+
import { createNodeFetchAdapter } from './fetch';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Platform Adapter Interface
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Create Node Platform Adapter
|
|
19
|
+
*/
|
|
20
|
+
export async function createNodeAdapter() {
|
|
21
|
+
const storage = await createNodeStorageAdapter();
|
|
22
|
+
const crypto = await createNodeCryptoAdapter();
|
|
23
|
+
const fetchAdapter = await createNodeFetchAdapter();
|
|
24
|
+
return {
|
|
25
|
+
storage,
|
|
26
|
+
crypto,
|
|
27
|
+
fetch: fetchAdapter,
|
|
28
|
+
platform: 'node'
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createNodeStorageAdapter","createNodeCryptoAdapter","createNodeFetchAdapter","createNodeAdapter","storage","crypto","fetchAdapter","fetch","platform"],"sourceRoot":"../../../../src","sources":["adapters/node/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,SAASA,wBAAwB,QAA6B,WAAW;AACzE,SAASC,uBAAuB,QAA4B,UAAU;AACtE,SAASC,sBAAsB,QAA2B,SAAS;;AAGnE;AACA;AACA;;AAQA;AACA;AACA;AACA,OAAO,eAAeC,iBAAiBA,CAAA,EAA6B;EAClE,MAAMC,OAAO,GAAG,MAAMJ,wBAAwB,CAAC,CAAC;EAChD,MAAMK,MAAM,GAAG,MAAMJ,uBAAuB,CAAC,CAAC;EAC9C,MAAMK,YAAY,GAAG,MAAMJ,sBAAsB,CAAC,CAAC;EAEnD,OAAO;IACLE,OAAO;IACPC,MAAM;IACNE,KAAK,EAAED,YAAY;IACnBE,QAAQ,EAAE;EACZ,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Node.js Storage Adapter
|
|
5
|
+
*
|
|
6
|
+
* Uses filesystem for storage
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import * as fs from 'fs/promises';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import * as os from 'os';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Storage Adapter Interface
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Get storage directory
|
|
19
|
+
*/
|
|
20
|
+
function getStorageDir() {
|
|
21
|
+
const homeDir = os.homedir();
|
|
22
|
+
return path.join(homeDir, '.oxy', 'storage');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Get secure storage directory
|
|
27
|
+
*/
|
|
28
|
+
function getSecureStorageDir() {
|
|
29
|
+
const homeDir = os.homedir();
|
|
30
|
+
return path.join(homeDir, '.oxy', 'secure');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Ensure directory exists
|
|
35
|
+
*/
|
|
36
|
+
async function ensureDir(dirPath) {
|
|
37
|
+
try {
|
|
38
|
+
await fs.mkdir(dirPath, {
|
|
39
|
+
recursive: true
|
|
40
|
+
});
|
|
41
|
+
} catch (error) {
|
|
42
|
+
// Ignore if already exists
|
|
43
|
+
if (error.code !== 'EEXIST') {
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Get file path for a key
|
|
51
|
+
*/
|
|
52
|
+
function getFilePath(key, secure = false) {
|
|
53
|
+
const baseDir = secure ? getSecureStorageDir() : getStorageDir();
|
|
54
|
+
// Sanitize key to prevent directory traversal
|
|
55
|
+
const sanitizedKey = key.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
56
|
+
return path.join(baseDir, `${sanitizedKey}.json`);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Create Node Storage Adapter
|
|
61
|
+
*/
|
|
62
|
+
export async function createNodeStorageAdapter() {
|
|
63
|
+
// Ensure directories exist
|
|
64
|
+
await ensureDir(getStorageDir());
|
|
65
|
+
await ensureDir(getSecureStorageDir());
|
|
66
|
+
return {
|
|
67
|
+
// Secure storage
|
|
68
|
+
async secureGet(key) {
|
|
69
|
+
try {
|
|
70
|
+
const filePath = getFilePath(key, true);
|
|
71
|
+
const data = await fs.readFile(filePath, 'utf-8');
|
|
72
|
+
const parsed = JSON.parse(data);
|
|
73
|
+
return parsed.value || null;
|
|
74
|
+
} catch (error) {
|
|
75
|
+
if (error.code === 'ENOENT') {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
console.warn('[NodeStorage] Failed to get secure item:', error);
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
async secureSet(key, value) {
|
|
83
|
+
try {
|
|
84
|
+
const filePath = getFilePath(key, true);
|
|
85
|
+
const data = JSON.stringify({
|
|
86
|
+
value,
|
|
87
|
+
timestamp: Date.now()
|
|
88
|
+
});
|
|
89
|
+
await fs.writeFile(filePath, data, {
|
|
90
|
+
mode: 0o600
|
|
91
|
+
}); // Read/write for owner only
|
|
92
|
+
} catch (error) {
|
|
93
|
+
console.warn('[NodeStorage] Failed to set secure item:', error);
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
async secureDelete(key) {
|
|
98
|
+
try {
|
|
99
|
+
const filePath = getFilePath(key, true);
|
|
100
|
+
await fs.unlink(filePath);
|
|
101
|
+
} catch (error) {
|
|
102
|
+
if (error.code !== 'ENOENT') {
|
|
103
|
+
console.warn('[NodeStorage] Failed to delete secure item:', error);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
isSecureStorageAvailable() {
|
|
108
|
+
return true;
|
|
109
|
+
},
|
|
110
|
+
// Regular storage
|
|
111
|
+
async get(key) {
|
|
112
|
+
try {
|
|
113
|
+
const filePath = getFilePath(key, false);
|
|
114
|
+
const data = await fs.readFile(filePath, 'utf-8');
|
|
115
|
+
const parsed = JSON.parse(data);
|
|
116
|
+
return parsed.value || null;
|
|
117
|
+
} catch (error) {
|
|
118
|
+
if (error.code === 'ENOENT') {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
console.warn('[NodeStorage] Failed to get item:', error);
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
async set(key, value) {
|
|
126
|
+
try {
|
|
127
|
+
const filePath = getFilePath(key, false);
|
|
128
|
+
const data = JSON.stringify({
|
|
129
|
+
value,
|
|
130
|
+
timestamp: Date.now()
|
|
131
|
+
});
|
|
132
|
+
await fs.writeFile(filePath, data);
|
|
133
|
+
} catch (error) {
|
|
134
|
+
console.warn('[NodeStorage] Failed to set item:', error);
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
async remove(key) {
|
|
139
|
+
try {
|
|
140
|
+
const filePath = getFilePath(key, false);
|
|
141
|
+
await fs.unlink(filePath);
|
|
142
|
+
} catch (error) {
|
|
143
|
+
if (error.code !== 'ENOENT') {
|
|
144
|
+
console.warn('[NodeStorage] Failed to remove item:', error);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
async clear() {
|
|
149
|
+
try {
|
|
150
|
+
const storageDir = getStorageDir();
|
|
151
|
+
const files = await fs.readdir(storageDir);
|
|
152
|
+
await Promise.all(files.map(file => fs.unlink(path.join(storageDir, file))));
|
|
153
|
+
} catch (error) {
|
|
154
|
+
console.warn('[NodeStorage] Failed to clear storage:', error);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["fs","path","os","getStorageDir","homeDir","homedir","join","getSecureStorageDir","ensureDir","dirPath","mkdir","recursive","error","code","getFilePath","key","secure","baseDir","sanitizedKey","replace","createNodeStorageAdapter","secureGet","filePath","data","readFile","parsed","JSON","parse","value","console","warn","secureSet","stringify","timestamp","Date","now","writeFile","mode","secureDelete","unlink","isSecureStorageAvailable","get","set","remove","clear","storageDir","files","readdir","Promise","all","map","file"],"sourceRoot":"../../../../src","sources":["adapters/node/storage.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Device Manager
|
|
5
|
+
*
|
|
6
|
+
* Manages device identification and device sessions (Native + Web)
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { createIdentitySessionError, IdentitySessionErrorCodes } from './errors';
|
|
10
|
+
const DEVICE_STORAGE_KEY = 'oxy_device_info';
|
|
11
|
+
/**
|
|
12
|
+
* Device Manager Class
|
|
13
|
+
*/
|
|
14
|
+
export class DeviceManager {
|
|
15
|
+
cachedDevice = null;
|
|
16
|
+
constructor(adapter) {
|
|
17
|
+
this.adapter = adapter;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Invalidate cached device
|
|
22
|
+
*/
|
|
23
|
+
invalidateCache() {
|
|
24
|
+
this.cachedDevice = null;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Get device fingerprint
|
|
29
|
+
*/
|
|
30
|
+
getDeviceFingerprint() {
|
|
31
|
+
const fingerprint = {
|
|
32
|
+
userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',
|
|
33
|
+
platform: typeof navigator !== 'undefined' ? navigator.platform : 'unknown',
|
|
34
|
+
language: typeof navigator !== 'undefined' ? navigator.language : undefined,
|
|
35
|
+
timezone: typeof Intl !== 'undefined' ? Intl.DateTimeFormat().resolvedOptions().timeZone : undefined
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// Add screen info if available
|
|
39
|
+
if (typeof screen !== 'undefined') {
|
|
40
|
+
fingerprint.screen = {
|
|
41
|
+
width: screen.width,
|
|
42
|
+
height: screen.height,
|
|
43
|
+
colorDepth: screen.colorDepth
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return fingerprint;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Generate a unique device ID
|
|
51
|
+
*/
|
|
52
|
+
async generateDeviceId() {
|
|
53
|
+
const randomBytes = await this.adapter.crypto.getRandomBytes(32);
|
|
54
|
+
return Array.from(randomBytes, byte => byte.toString(16).padStart(2, '0')).join('');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Get a user-friendly device name based on platform
|
|
59
|
+
*/
|
|
60
|
+
getDefaultDeviceName() {
|
|
61
|
+
const fingerprint = this.getDeviceFingerprint();
|
|
62
|
+
const platform = (fingerprint.platform || '').toLowerCase();
|
|
63
|
+
const userAgent = (fingerprint.userAgent || '').toLowerCase();
|
|
64
|
+
if (platform.includes('win')) return 'Windows Computer';
|
|
65
|
+
if (platform.includes('mac')) return 'Mac Computer';
|
|
66
|
+
if (platform.includes('linux')) return 'Linux Computer';
|
|
67
|
+
if (userAgent.includes('iphone')) return 'iPhone';
|
|
68
|
+
if (userAgent.includes('ipad')) return 'iPad';
|
|
69
|
+
if (userAgent.includes('android')) return 'Android Device';
|
|
70
|
+
if (this.adapter.platform === 'web') return 'Web Browser';
|
|
71
|
+
return 'Unknown Device';
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Get stored device info or create new one
|
|
76
|
+
*/
|
|
77
|
+
async getCurrentDevice() {
|
|
78
|
+
if (this.cachedDevice) {
|
|
79
|
+
return this.cachedDevice;
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
const stored = await this.adapter.storage.get(DEVICE_STORAGE_KEY);
|
|
83
|
+
if (stored) {
|
|
84
|
+
const deviceInfo = JSON.parse(stored);
|
|
85
|
+
|
|
86
|
+
// Update last used timestamp
|
|
87
|
+
deviceInfo.lastUsed = new Date().toISOString();
|
|
88
|
+
await this.saveDeviceInfo(deviceInfo);
|
|
89
|
+
const device = {
|
|
90
|
+
deviceId: deviceInfo.deviceId,
|
|
91
|
+
deviceName: deviceInfo.deviceName,
|
|
92
|
+
deviceType: this.getDeviceType(),
|
|
93
|
+
platform: this.adapter.platform === 'native' ? 'ios' : 'web',
|
|
94
|
+
// Simplified
|
|
95
|
+
fingerprint: deviceInfo.fingerprint,
|
|
96
|
+
createdAt: deviceInfo.createdAt,
|
|
97
|
+
updatedAt: deviceInfo.lastUsed
|
|
98
|
+
};
|
|
99
|
+
this.cachedDevice = device;
|
|
100
|
+
return device;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Create new device info
|
|
104
|
+
return await this.createNewDevice();
|
|
105
|
+
} catch (error) {
|
|
106
|
+
console.error('[DeviceManager] Error getting device info:', error);
|
|
107
|
+
return await this.createNewDevice();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Create new device info and store it
|
|
113
|
+
*/
|
|
114
|
+
async createNewDevice() {
|
|
115
|
+
const deviceId = await this.generateDeviceId();
|
|
116
|
+
const fingerprint = JSON.stringify(this.getDeviceFingerprint());
|
|
117
|
+
const now = new Date().toISOString();
|
|
118
|
+
const device = {
|
|
119
|
+
deviceId,
|
|
120
|
+
deviceName: this.getDefaultDeviceName(),
|
|
121
|
+
deviceType: this.getDeviceType(),
|
|
122
|
+
platform: this.adapter.platform === 'native' ? 'ios' : 'web',
|
|
123
|
+
// Simplified
|
|
124
|
+
fingerprint,
|
|
125
|
+
createdAt: now,
|
|
126
|
+
updatedAt: now
|
|
127
|
+
};
|
|
128
|
+
const deviceInfo = {
|
|
129
|
+
deviceId,
|
|
130
|
+
deviceName: device.deviceName,
|
|
131
|
+
fingerprint,
|
|
132
|
+
createdAt: now,
|
|
133
|
+
lastUsed: now
|
|
134
|
+
};
|
|
135
|
+
await this.saveDeviceInfo(deviceInfo);
|
|
136
|
+
this.cachedDevice = device;
|
|
137
|
+
return device;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Get device type
|
|
142
|
+
*/
|
|
143
|
+
getDeviceType() {
|
|
144
|
+
if (this.adapter.platform === 'web') {
|
|
145
|
+
return 'desktop'; // Simplified - could detect mobile web
|
|
146
|
+
}
|
|
147
|
+
// For native, would need Platform.OS detection
|
|
148
|
+
return 'mobile';
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Save device info to storage
|
|
153
|
+
*/
|
|
154
|
+
async saveDeviceInfo(deviceInfo) {
|
|
155
|
+
try {
|
|
156
|
+
await this.adapter.storage.set(DEVICE_STORAGE_KEY, JSON.stringify(deviceInfo));
|
|
157
|
+
} catch (error) {
|
|
158
|
+
console.error('[DeviceManager] Error saving device info:', error);
|
|
159
|
+
throw createIdentitySessionError(IdentitySessionErrorCodes.DEVICE_CREATION_FAILED, `Failed to save device info: ${error instanceof Error ? error.message : String(error)}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Update device name
|
|
165
|
+
*/
|
|
166
|
+
async updateDeviceName(deviceName) {
|
|
167
|
+
const device = await this.getCurrentDevice();
|
|
168
|
+
if (!device) {
|
|
169
|
+
throw createIdentitySessionError(IdentitySessionErrorCodes.DEVICE_NOT_FOUND, 'Device not found');
|
|
170
|
+
}
|
|
171
|
+
device.deviceName = deviceName;
|
|
172
|
+
device.updatedAt = new Date().toISOString();
|
|
173
|
+
const deviceInfo = {
|
|
174
|
+
deviceId: device.deviceId,
|
|
175
|
+
deviceName: device.deviceName,
|
|
176
|
+
fingerprint: device.fingerprint,
|
|
177
|
+
createdAt: device.createdAt || new Date().toISOString(),
|
|
178
|
+
lastUsed: device.updatedAt
|
|
179
|
+
};
|
|
180
|
+
await this.saveDeviceInfo(deviceInfo);
|
|
181
|
+
this.cachedDevice = device;
|
|
182
|
+
return device;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Get device info for session creation
|
|
187
|
+
*/
|
|
188
|
+
async getDeviceInfo() {
|
|
189
|
+
const device = await this.getCurrentDevice();
|
|
190
|
+
if (!device) {
|
|
191
|
+
throw createIdentitySessionError(IdentitySessionErrorCodes.DEVICE_NOT_FOUND, 'Device not found');
|
|
192
|
+
}
|
|
193
|
+
const fingerprint = this.getDeviceFingerprint();
|
|
194
|
+
return {
|
|
195
|
+
deviceName: device.deviceName,
|
|
196
|
+
deviceType: device.deviceType,
|
|
197
|
+
platform: device.platform,
|
|
198
|
+
browser: typeof navigator !== 'undefined' ? this.getBrowserName() : undefined,
|
|
199
|
+
os: typeof navigator !== 'undefined' ? navigator.platform : undefined,
|
|
200
|
+
lastActive: new Date().toISOString(),
|
|
201
|
+
userAgent: fingerprint.userAgent,
|
|
202
|
+
fingerprint: device.fingerprint
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Get browser name from user agent
|
|
208
|
+
*/
|
|
209
|
+
getBrowserName() {
|
|
210
|
+
if (typeof navigator === 'undefined') return undefined;
|
|
211
|
+
const ua = navigator.userAgent.toLowerCase();
|
|
212
|
+
if (ua.includes('chrome')) return 'Chrome';
|
|
213
|
+
if (ua.includes('firefox')) return 'Firefox';
|
|
214
|
+
if (ua.includes('safari') && !ua.includes('chrome')) return 'Safari';
|
|
215
|
+
if (ua.includes('edge')) return 'Edge';
|
|
216
|
+
if (ua.includes('opera')) return 'Opera';
|
|
217
|
+
return undefined;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Clear stored device info
|
|
222
|
+
*/
|
|
223
|
+
async clearDeviceInfo() {
|
|
224
|
+
try {
|
|
225
|
+
await this.adapter.storage.remove(DEVICE_STORAGE_KEY);
|
|
226
|
+
this.invalidateCache();
|
|
227
|
+
} catch (error) {
|
|
228
|
+
console.error('[DeviceManager] Error clearing device info:', error);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=DeviceManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createIdentitySessionError","IdentitySessionErrorCodes","DEVICE_STORAGE_KEY","DeviceManager","cachedDevice","constructor","adapter","invalidateCache","getDeviceFingerprint","fingerprint","userAgent","navigator","platform","language","undefined","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","screen","width","height","colorDepth","generateDeviceId","randomBytes","crypto","getRandomBytes","Array","from","byte","toString","padStart","join","getDefaultDeviceName","toLowerCase","includes","getCurrentDevice","stored","storage","get","deviceInfo","JSON","parse","lastUsed","Date","toISOString","saveDeviceInfo","device","deviceId","deviceName","deviceType","getDeviceType","createdAt","updatedAt","createNewDevice","error","console","stringify","now","set","DEVICE_CREATION_FAILED","Error","message","String","updateDeviceName","DEVICE_NOT_FOUND","getDeviceInfo","browser","getBrowserName","os","lastActive","ua","clearDeviceInfo","remove"],"sourceRoot":"../../../../src","sources":["core/identity-session/DeviceManager.ts"],"mappings":"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","ignoreList":[]}
|