@prabhask5/stellar-engine 1.0.3
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 +295 -0
- package/dist/actions/remoteChange.d.ts +79 -0
- package/dist/actions/remoteChange.d.ts.map +1 -0
- package/dist/actions/remoteChange.js +300 -0
- package/dist/actions/remoteChange.js.map +1 -0
- package/dist/auth/admin.d.ts +12 -0
- package/dist/auth/admin.d.ts.map +1 -0
- package/dist/auth/admin.js +23 -0
- package/dist/auth/admin.js.map +1 -0
- package/dist/auth/offlineCredentials.d.ts +41 -0
- package/dist/auth/offlineCredentials.d.ts.map +1 -0
- package/dist/auth/offlineCredentials.js +121 -0
- package/dist/auth/offlineCredentials.js.map +1 -0
- package/dist/auth/offlineLogin.d.ts +34 -0
- package/dist/auth/offlineLogin.d.ts.map +1 -0
- package/dist/auth/offlineLogin.js +75 -0
- package/dist/auth/offlineLogin.js.map +1 -0
- package/dist/auth/offlineSession.d.ts +22 -0
- package/dist/auth/offlineSession.d.ts.map +1 -0
- package/dist/auth/offlineSession.js +54 -0
- package/dist/auth/offlineSession.js.map +1 -0
- package/dist/auth/resolveAuthState.d.ts +24 -0
- package/dist/auth/resolveAuthState.d.ts.map +1 -0
- package/dist/auth/resolveAuthState.js +69 -0
- package/dist/auth/resolveAuthState.js.map +1 -0
- package/dist/config.d.ts +53 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +55 -0
- package/dist/config.js.map +1 -0
- package/dist/conflicts.d.ts +70 -0
- package/dist/conflicts.d.ts.map +1 -0
- package/dist/conflicts.js +321 -0
- package/dist/conflicts.js.map +1 -0
- package/dist/data.d.ts +77 -0
- package/dist/data.d.ts.map +1 -0
- package/dist/data.js +360 -0
- package/dist/data.js.map +1 -0
- package/dist/database.d.ts +31 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +51 -0
- package/dist/database.js.map +1 -0
- package/dist/debug.d.ts +11 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +48 -0
- package/dist/debug.js.map +1 -0
- package/dist/deviceId.d.ts +16 -0
- package/dist/deviceId.d.ts.map +1 -0
- package/dist/deviceId.js +48 -0
- package/dist/deviceId.js.map +1 -0
- package/dist/engine.d.ts +14 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +1903 -0
- package/dist/engine.js.map +1 -0
- package/dist/entries/actions.d.ts +2 -0
- package/dist/entries/actions.d.ts.map +1 -0
- package/dist/entries/actions.js +3 -0
- package/dist/entries/actions.js.map +1 -0
- package/dist/entries/auth.d.ts +7 -0
- package/dist/entries/auth.d.ts.map +1 -0
- package/dist/entries/auth.js +6 -0
- package/dist/entries/auth.js.map +1 -0
- package/dist/entries/config.d.ts +3 -0
- package/dist/entries/config.d.ts.map +1 -0
- package/dist/entries/config.js +3 -0
- package/dist/entries/config.js.map +1 -0
- package/dist/entries/stores.d.ts +9 -0
- package/dist/entries/stores.d.ts.map +1 -0
- package/dist/entries/stores.js +9 -0
- package/dist/entries/stores.js.map +1 -0
- package/dist/entries/types.d.ts +11 -0
- package/dist/entries/types.d.ts.map +1 -0
- package/dist/entries/types.js +2 -0
- package/dist/entries/types.js.map +1 -0
- package/dist/entries/utils.d.ts +3 -0
- package/dist/entries/utils.d.ts.map +1 -0
- package/dist/entries/utils.js +4 -0
- package/dist/entries/utils.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/operations.d.ts +73 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +227 -0
- package/dist/operations.js.map +1 -0
- package/dist/queue.d.ts +32 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +377 -0
- package/dist/queue.js.map +1 -0
- package/dist/realtime.d.ts +57 -0
- package/dist/realtime.d.ts.map +1 -0
- package/dist/realtime.js +491 -0
- package/dist/realtime.js.map +1 -0
- package/dist/reconnectHandler.d.ts +16 -0
- package/dist/reconnectHandler.d.ts.map +1 -0
- package/dist/reconnectHandler.js +21 -0
- package/dist/reconnectHandler.js.map +1 -0
- package/dist/runtime/runtimeConfig.d.ts +27 -0
- package/dist/runtime/runtimeConfig.d.ts.map +1 -0
- package/dist/runtime/runtimeConfig.js +133 -0
- package/dist/runtime/runtimeConfig.js.map +1 -0
- package/dist/stores/authState.d.ts +57 -0
- package/dist/stores/authState.d.ts.map +1 -0
- package/dist/stores/authState.js +154 -0
- package/dist/stores/authState.js.map +1 -0
- package/dist/stores/network.d.ts +9 -0
- package/dist/stores/network.d.ts.map +1 -0
- package/dist/stores/network.js +97 -0
- package/dist/stores/network.js.map +1 -0
- package/dist/stores/remoteChanges.d.ts +142 -0
- package/dist/stores/remoteChanges.d.ts.map +1 -0
- package/dist/stores/remoteChanges.js +353 -0
- package/dist/stores/remoteChanges.js.map +1 -0
- package/dist/stores/sync.d.ts +35 -0
- package/dist/stores/sync.d.ts.map +1 -0
- package/dist/stores/sync.js +115 -0
- package/dist/stores/sync.js.map +1 -0
- package/dist/supabase/auth.d.ts +60 -0
- package/dist/supabase/auth.d.ts.map +1 -0
- package/dist/supabase/auth.js +298 -0
- package/dist/supabase/auth.js.map +1 -0
- package/dist/supabase/client.d.ts +15 -0
- package/dist/supabase/client.d.ts.map +1 -0
- package/dist/supabase/client.js +149 -0
- package/dist/supabase/client.js.map +1 -0
- package/dist/supabase/validate.d.ts +11 -0
- package/dist/supabase/validate.d.ts.map +1 -0
- package/dist/supabase/validate.js +38 -0
- package/dist/supabase/validate.js.map +1 -0
- package/dist/types.d.ts +78 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +24 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +56 -0
- package/dist/utils.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteChange.js","sourceRoot":"","sources":["../../src/actions/remoteChange.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Check
|
|
3
|
+
*
|
|
4
|
+
* Delegates to config.auth.adminCheck or returns false.
|
|
5
|
+
*/
|
|
6
|
+
import type { User } from '@supabase/supabase-js';
|
|
7
|
+
/**
|
|
8
|
+
* Check if a user has admin privileges.
|
|
9
|
+
* Uses the adminCheck function from engine config if provided.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isAdmin(user: User | null): boolean;
|
|
12
|
+
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/auth/admin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAGlD;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAUlD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Check
|
|
3
|
+
*
|
|
4
|
+
* Delegates to config.auth.adminCheck or returns false.
|
|
5
|
+
*/
|
|
6
|
+
import { getEngineConfig } from '../config';
|
|
7
|
+
/**
|
|
8
|
+
* Check if a user has admin privileges.
|
|
9
|
+
* Uses the adminCheck function from engine config if provided.
|
|
10
|
+
*/
|
|
11
|
+
export function isAdmin(user) {
|
|
12
|
+
try {
|
|
13
|
+
const config = getEngineConfig();
|
|
14
|
+
if (config.auth?.adminCheck) {
|
|
15
|
+
return config.auth.adminCheck(user);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// Engine not initialized yet
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/auth/admin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,IAAiB;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offline Credentials Management
|
|
3
|
+
* Handles caching, retrieval, and verification of user credentials for offline login
|
|
4
|
+
*/
|
|
5
|
+
import type { OfflineCredentials } from '../types';
|
|
6
|
+
import type { User, Session } from '@supabase/supabase-js';
|
|
7
|
+
/**
|
|
8
|
+
* Cache user credentials for offline login
|
|
9
|
+
* Called after successful Supabase login
|
|
10
|
+
*/
|
|
11
|
+
export declare function cacheOfflineCredentials(email: string, password: string, user: User, _session: Session): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Get cached offline credentials
|
|
14
|
+
* Returns null if no credentials are cached or if credentials are in old format
|
|
15
|
+
*/
|
|
16
|
+
export declare function getOfflineCredentials(): Promise<OfflineCredentials | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Verify email and password against cached credentials
|
|
19
|
+
* @param email - The email to verify
|
|
20
|
+
* @param password - The password to verify
|
|
21
|
+
* @param expectedUserId - The userId that the credentials should belong to
|
|
22
|
+
* @returns Object with valid boolean and optional reason for failure
|
|
23
|
+
*/
|
|
24
|
+
export declare function verifyOfflineCredentials(email: string, password: string, expectedUserId: string): Promise<{
|
|
25
|
+
valid: boolean;
|
|
26
|
+
reason?: string;
|
|
27
|
+
}>;
|
|
28
|
+
/**
|
|
29
|
+
* Update the cached password (after online password change)
|
|
30
|
+
* @param newPassword - The new password to cache
|
|
31
|
+
*/
|
|
32
|
+
export declare function updateOfflineCredentialsPassword(newPassword: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Update user profile in cached credentials (after online profile update)
|
|
35
|
+
*/
|
|
36
|
+
export declare function updateOfflineCredentialsProfile(profile: Record<string, unknown>): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Clear all cached offline credentials (on logout)
|
|
39
|
+
*/
|
|
40
|
+
export declare function clearOfflineCredentials(): Promise<void>;
|
|
41
|
+
//# sourceMappingURL=offlineCredentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offlineCredentials.d.ts","sourceRoot":"","sources":["../../src/auth/offlineCredentials.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAK3D;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAQhF;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmC9C;AAED;;;GAGG;AACH,wBAAsB,gCAAgC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWzF;AAED;;GAEG;AACH,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7D"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offline Credentials Management
|
|
3
|
+
* Handles caching, retrieval, and verification of user credentials for offline login
|
|
4
|
+
*/
|
|
5
|
+
import { getEngineConfig } from '../config';
|
|
6
|
+
import { debugWarn, debugError } from '../debug';
|
|
7
|
+
const CREDENTIALS_ID = 'current_user';
|
|
8
|
+
/**
|
|
9
|
+
* Cache user credentials for offline login
|
|
10
|
+
* Called after successful Supabase login
|
|
11
|
+
*/
|
|
12
|
+
export async function cacheOfflineCredentials(email, password, user, _session) {
|
|
13
|
+
// Validate inputs to prevent storing incomplete credentials
|
|
14
|
+
if (!email || !password) {
|
|
15
|
+
debugError('[Auth] Cannot cache credentials: email or password is empty');
|
|
16
|
+
throw new Error('Cannot cache credentials: email or password is empty');
|
|
17
|
+
}
|
|
18
|
+
const config = getEngineConfig();
|
|
19
|
+
const db = config.db;
|
|
20
|
+
// Extract profile using config's profileExtractor, or use raw metadata
|
|
21
|
+
const profile = config.auth?.profileExtractor
|
|
22
|
+
? config.auth.profileExtractor(user.user_metadata || {})
|
|
23
|
+
: (user.user_metadata || {});
|
|
24
|
+
const credentials = {
|
|
25
|
+
id: CREDENTIALS_ID,
|
|
26
|
+
userId: user.id,
|
|
27
|
+
email: email,
|
|
28
|
+
password: password,
|
|
29
|
+
profile,
|
|
30
|
+
cachedAt: new Date().toISOString()
|
|
31
|
+
};
|
|
32
|
+
// Use put to insert or update the singleton record
|
|
33
|
+
await db.table('offlineCredentials').put(credentials);
|
|
34
|
+
// Verify the credentials were stored correctly (paranoid check)
|
|
35
|
+
const stored = await db.table('offlineCredentials').get(CREDENTIALS_ID);
|
|
36
|
+
if (!stored || !stored.password) {
|
|
37
|
+
debugError('[Auth] Credentials were not stored correctly - password missing');
|
|
38
|
+
throw new Error('Failed to store credentials: password not persisted');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get cached offline credentials
|
|
43
|
+
* Returns null if no credentials are cached or if credentials are in old format
|
|
44
|
+
*/
|
|
45
|
+
export async function getOfflineCredentials() {
|
|
46
|
+
const db = getEngineConfig().db;
|
|
47
|
+
const credentials = await db.table('offlineCredentials').get(CREDENTIALS_ID);
|
|
48
|
+
if (!credentials) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return credentials;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Verify email and password against cached credentials
|
|
55
|
+
* @param email - The email to verify
|
|
56
|
+
* @param password - The password to verify
|
|
57
|
+
* @param expectedUserId - The userId that the credentials should belong to
|
|
58
|
+
* @returns Object with valid boolean and optional reason for failure
|
|
59
|
+
*/
|
|
60
|
+
export async function verifyOfflineCredentials(email, password, expectedUserId) {
|
|
61
|
+
const credentials = await getOfflineCredentials();
|
|
62
|
+
if (!credentials) {
|
|
63
|
+
debugWarn('[Auth] No credentials found in database');
|
|
64
|
+
return { valid: false, reason: 'no_credentials' };
|
|
65
|
+
}
|
|
66
|
+
// SECURITY: Verify all fields match
|
|
67
|
+
if (credentials.userId !== expectedUserId) {
|
|
68
|
+
debugWarn('[Auth] Credential userId mismatch:', credentials.userId, '!==', expectedUserId);
|
|
69
|
+
return { valid: false, reason: 'user_mismatch' };
|
|
70
|
+
}
|
|
71
|
+
if (credentials.email !== email) {
|
|
72
|
+
debugWarn('[Auth] Credential email mismatch:', credentials.email, '!==', email);
|
|
73
|
+
return { valid: false, reason: 'email_mismatch' };
|
|
74
|
+
}
|
|
75
|
+
if (!credentials.password) {
|
|
76
|
+
debugWarn('[Auth] No password stored in credentials');
|
|
77
|
+
return { valid: false, reason: 'no_stored_password' };
|
|
78
|
+
}
|
|
79
|
+
if (credentials.password !== password) {
|
|
80
|
+
debugWarn('[Auth] Password mismatch (stored length:', credentials.password.length, ', entered length:', password.length, ')');
|
|
81
|
+
return { valid: false, reason: 'password_mismatch' };
|
|
82
|
+
}
|
|
83
|
+
return { valid: true };
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Update the cached password (after online password change)
|
|
87
|
+
* @param newPassword - The new password to cache
|
|
88
|
+
*/
|
|
89
|
+
export async function updateOfflineCredentialsPassword(newPassword) {
|
|
90
|
+
const credentials = await getOfflineCredentials();
|
|
91
|
+
if (!credentials) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const db = getEngineConfig().db;
|
|
95
|
+
await db.table('offlineCredentials').update(CREDENTIALS_ID, {
|
|
96
|
+
password: newPassword,
|
|
97
|
+
cachedAt: new Date().toISOString()
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Update user profile in cached credentials (after online profile update)
|
|
102
|
+
*/
|
|
103
|
+
export async function updateOfflineCredentialsProfile(profile) {
|
|
104
|
+
const credentials = await getOfflineCredentials();
|
|
105
|
+
if (!credentials) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const db = getEngineConfig().db;
|
|
109
|
+
await db.table('offlineCredentials').update(CREDENTIALS_ID, {
|
|
110
|
+
profile,
|
|
111
|
+
cachedAt: new Date().toISOString()
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Clear all cached offline credentials (on logout)
|
|
116
|
+
*/
|
|
117
|
+
export async function clearOfflineCredentials() {
|
|
118
|
+
const db = getEngineConfig().db;
|
|
119
|
+
await db.table('offlineCredentials').delete(CREDENTIALS_ID);
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=offlineCredentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offlineCredentials.js","sourceRoot":"","sources":["../../src/auth/offlineCredentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offline Login
|
|
3
|
+
*
|
|
4
|
+
* Provides high-level offline sign-in and credential info functions,
|
|
5
|
+
* absorbing the login page's direct use of offline auth internals.
|
|
6
|
+
*/
|
|
7
|
+
interface OfflineLoginResult {
|
|
8
|
+
success: boolean;
|
|
9
|
+
error?: string;
|
|
10
|
+
reason?: 'no_credentials' | 'no_stored_password' | 'user_mismatch' | 'email_mismatch' | 'password_mismatch' | 'session_failed';
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Sign in offline using cached credentials.
|
|
14
|
+
*
|
|
15
|
+
* 1. Fetches cached offline credentials
|
|
16
|
+
* 2. Verifies email + password against cached credentials
|
|
17
|
+
* 3. Creates offline session
|
|
18
|
+
* 4. Validates session was persisted
|
|
19
|
+
* 5. Returns structured result with typed error reasons
|
|
20
|
+
*/
|
|
21
|
+
export declare function signInOffline(email: string, password: string): Promise<OfflineLoginResult>;
|
|
22
|
+
/**
|
|
23
|
+
* Get non-sensitive display info about cached offline credentials.
|
|
24
|
+
* Returns null if no credentials cached.
|
|
25
|
+
* Used by login page to show "Sign in as X" offline UI.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getOfflineLoginInfo(): Promise<{
|
|
28
|
+
hasCredentials: boolean;
|
|
29
|
+
email?: string;
|
|
30
|
+
firstName?: string;
|
|
31
|
+
lastName?: string;
|
|
32
|
+
} | null>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=offlineLogin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offlineLogin.d.ts","sourceRoot":"","sources":["../../src/auth/offlineLogin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,UAAU,kBAAkB;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,gBAAgB,GAAG,oBAAoB,GAAG,eAAe,GAAG,gBAAgB,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;CAChI;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,CAAC,CAoC7B;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC;IACnD,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAAC,CAiBR"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offline Login
|
|
3
|
+
*
|
|
4
|
+
* Provides high-level offline sign-in and credential info functions,
|
|
5
|
+
* absorbing the login page's direct use of offline auth internals.
|
|
6
|
+
*/
|
|
7
|
+
import { getOfflineCredentials, verifyOfflineCredentials } from './offlineCredentials';
|
|
8
|
+
import { createOfflineSession, getValidOfflineSession } from './offlineSession';
|
|
9
|
+
import { debugLog, debugError } from '../debug';
|
|
10
|
+
/**
|
|
11
|
+
* Sign in offline using cached credentials.
|
|
12
|
+
*
|
|
13
|
+
* 1. Fetches cached offline credentials
|
|
14
|
+
* 2. Verifies email + password against cached credentials
|
|
15
|
+
* 3. Creates offline session
|
|
16
|
+
* 4. Validates session was persisted
|
|
17
|
+
* 5. Returns structured result with typed error reasons
|
|
18
|
+
*/
|
|
19
|
+
export async function signInOffline(email, password) {
|
|
20
|
+
try {
|
|
21
|
+
// 1. Get cached credentials
|
|
22
|
+
const credentials = await getOfflineCredentials();
|
|
23
|
+
if (!credentials) {
|
|
24
|
+
return { success: false, reason: 'no_credentials' };
|
|
25
|
+
}
|
|
26
|
+
if (!credentials.password) {
|
|
27
|
+
return { success: false, reason: 'no_stored_password' };
|
|
28
|
+
}
|
|
29
|
+
// 2. Verify credentials
|
|
30
|
+
const verification = await verifyOfflineCredentials(email, password, credentials.userId);
|
|
31
|
+
if (!verification.valid) {
|
|
32
|
+
return {
|
|
33
|
+
success: false,
|
|
34
|
+
reason: verification.reason
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// 3. Create offline session
|
|
38
|
+
await createOfflineSession(credentials.userId);
|
|
39
|
+
// 4. Validate session was persisted
|
|
40
|
+
const session = await getValidOfflineSession();
|
|
41
|
+
if (!session) {
|
|
42
|
+
return { success: false, reason: 'session_failed' };
|
|
43
|
+
}
|
|
44
|
+
debugLog('[Auth] Offline login successful');
|
|
45
|
+
return { success: true };
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
debugError('[Auth] Offline login error:', e);
|
|
49
|
+
return { success: false, reason: 'session_failed' };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get non-sensitive display info about cached offline credentials.
|
|
54
|
+
* Returns null if no credentials cached.
|
|
55
|
+
* Used by login page to show "Sign in as X" offline UI.
|
|
56
|
+
*/
|
|
57
|
+
export async function getOfflineLoginInfo() {
|
|
58
|
+
try {
|
|
59
|
+
const credentials = await getOfflineCredentials();
|
|
60
|
+
if (!credentials)
|
|
61
|
+
return null;
|
|
62
|
+
// Extract display info from profile
|
|
63
|
+
const profile = credentials.profile || {};
|
|
64
|
+
return {
|
|
65
|
+
hasCredentials: true,
|
|
66
|
+
email: credentials.email,
|
|
67
|
+
firstName: profile.firstName,
|
|
68
|
+
lastName: profile.lastName
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=offlineLogin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offlineLogin.js","sourceRoot":"","sources":["../../src/auth/offlineLogin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAQhD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAa,EACb,QAAgB;IAEhB,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,WAAW,GAAG,MAAM,qBAAqB,EAAE,CAAC;QAClD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QACtD,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;QAC1D,CAAC;QAED,wBAAwB;QACxB,MAAM,YAAY,GAAG,MAAM,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACzF,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,YAAY,CAAC,MAAsC;aAC5D,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,MAAM,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE/C,oCAAoC;QACpC,MAAM,OAAO,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QACtD,CAAC;QAED,QAAQ,CAAC,iCAAiC,CAAC,CAAC;QAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,UAAU,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACtD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IAMvC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,qBAAqB,EAAE,CAAC;QAClD,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAE9B,oCAAoC;QACpC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC;QAE1C,OAAO;YACL,cAAc,EAAE,IAAI;YACpB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,SAAS,EAAE,OAAO,CAAC,SAA+B;YAClD,QAAQ,EAAE,OAAO,CAAC,QAA8B;SACjD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offline Session Management
|
|
3
|
+
* Handles creation, validation, and cleanup of offline sessions
|
|
4
|
+
*/
|
|
5
|
+
import type { OfflineSession } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* Create a new offline session
|
|
8
|
+
* @param userId - The Supabase user ID
|
|
9
|
+
* @returns The created session
|
|
10
|
+
*/
|
|
11
|
+
export declare function createOfflineSession(userId: string): Promise<OfflineSession>;
|
|
12
|
+
/**
|
|
13
|
+
* Get a valid offline session
|
|
14
|
+
* Returns null if no session exists
|
|
15
|
+
* Note: Sessions don't expire - they're only revoked on re-auth or logout
|
|
16
|
+
*/
|
|
17
|
+
export declare function getValidOfflineSession(): Promise<OfflineSession | null>;
|
|
18
|
+
/**
|
|
19
|
+
* Clear the offline session (on logout or session invalidation)
|
|
20
|
+
*/
|
|
21
|
+
export declare function clearOfflineSession(): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=offlineSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offlineSession.d.ts","sourceRoot":"","sources":["../../src/auth/offlineSession.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/C;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAqBlF;AAYD;;;;GAIG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAE7E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGzD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offline Session Management
|
|
3
|
+
* Handles creation, validation, and cleanup of offline sessions
|
|
4
|
+
*/
|
|
5
|
+
import { getEngineConfig } from '../config';
|
|
6
|
+
const SESSION_ID = 'current_session';
|
|
7
|
+
/**
|
|
8
|
+
* Create a new offline session
|
|
9
|
+
* @param userId - The Supabase user ID
|
|
10
|
+
* @returns The created session
|
|
11
|
+
*/
|
|
12
|
+
export async function createOfflineSession(userId) {
|
|
13
|
+
const now = new Date();
|
|
14
|
+
const db = getEngineConfig().db;
|
|
15
|
+
const session = {
|
|
16
|
+
id: SESSION_ID,
|
|
17
|
+
userId: userId,
|
|
18
|
+
offlineToken: crypto.randomUUID(),
|
|
19
|
+
createdAt: now.toISOString()
|
|
20
|
+
};
|
|
21
|
+
// Use put to insert or update the singleton record
|
|
22
|
+
await db.table('offlineSession').put(session);
|
|
23
|
+
// Verify the session was persisted by reading it back
|
|
24
|
+
const verified = await db.table('offlineSession').get(SESSION_ID);
|
|
25
|
+
if (!verified) {
|
|
26
|
+
throw new Error('Failed to persist offline session');
|
|
27
|
+
}
|
|
28
|
+
return session;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get the current offline session
|
|
32
|
+
* Returns null if no session exists
|
|
33
|
+
*/
|
|
34
|
+
async function getOfflineSession() {
|
|
35
|
+
const db = getEngineConfig().db;
|
|
36
|
+
const session = await db.table('offlineSession').get(SESSION_ID);
|
|
37
|
+
return session || null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get a valid offline session
|
|
41
|
+
* Returns null if no session exists
|
|
42
|
+
* Note: Sessions don't expire - they're only revoked on re-auth or logout
|
|
43
|
+
*/
|
|
44
|
+
export async function getValidOfflineSession() {
|
|
45
|
+
return await getOfflineSession();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Clear the offline session (on logout or session invalidation)
|
|
49
|
+
*/
|
|
50
|
+
export async function clearOfflineSession() {
|
|
51
|
+
const db = getEngineConfig().db;
|
|
52
|
+
await db.table('offlineSession').delete(SESSION_ID);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=offlineSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offlineSession.js","sourceRoot":"","sources":["../../src/auth/offlineSession.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG5C,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAErC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAc;IACvD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC,EAAG,CAAC;IAEjC,MAAM,OAAO,GAAmB;QAC9B,EAAE,EAAE,UAAU;QACd,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE;QACjC,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;KAC7B,CAAC;IAEF,mDAAmD;IACnD,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAE9C,sDAAsD;IACtD,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,iBAAiB;IAC9B,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC,EAAG,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACjE,OAAO,OAAO,IAAI,IAAI,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,OAAO,MAAM,iBAAiB,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC,EAAG,CAAC;IACjC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth State Resolution
|
|
3
|
+
*
|
|
4
|
+
* Determines the current authentication state by checking Supabase session,
|
|
5
|
+
* offline session, and cached credentials. Used by app layouts to determine
|
|
6
|
+
* whether user is authenticated and in which mode.
|
|
7
|
+
*/
|
|
8
|
+
import type { Session } from '@supabase/supabase-js';
|
|
9
|
+
import type { OfflineCredentials } from '../types';
|
|
10
|
+
export interface AuthStateResult {
|
|
11
|
+
session: Session | null;
|
|
12
|
+
authMode: 'supabase' | 'offline' | 'none';
|
|
13
|
+
offlineProfile: OfflineCredentials | null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the current authentication state.
|
|
17
|
+
*
|
|
18
|
+
* - Online: check Supabase session validity
|
|
19
|
+
* - Offline: check localStorage session, fallback to offline session + credential matching
|
|
20
|
+
* - Handles corrupted state cleanup
|
|
21
|
+
* - Does NOT start sync engine (caller decides)
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveAuthState(): Promise<AuthStateResult>;
|
|
24
|
+
//# sourceMappingURL=resolveAuthState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveAuthState.d.ts","sourceRoot":"","sources":["../../src/auth/resolveAuthState.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAMnD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IAC1C,cAAc,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC3C;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC,CAoDjE"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth State Resolution
|
|
3
|
+
*
|
|
4
|
+
* Determines the current authentication state by checking Supabase session,
|
|
5
|
+
* offline session, and cached credentials. Used by app layouts to determine
|
|
6
|
+
* whether user is authenticated and in which mode.
|
|
7
|
+
*/
|
|
8
|
+
import { getSession, isSessionExpired } from '../supabase/auth';
|
|
9
|
+
import { getValidOfflineSession, clearOfflineSession } from './offlineSession';
|
|
10
|
+
import { getOfflineCredentials } from './offlineCredentials';
|
|
11
|
+
import { debugWarn, debugError } from '../debug';
|
|
12
|
+
/**
|
|
13
|
+
* Resolve the current authentication state.
|
|
14
|
+
*
|
|
15
|
+
* - Online: check Supabase session validity
|
|
16
|
+
* - Offline: check localStorage session, fallback to offline session + credential matching
|
|
17
|
+
* - Handles corrupted state cleanup
|
|
18
|
+
* - Does NOT start sync engine (caller decides)
|
|
19
|
+
*/
|
|
20
|
+
export async function resolveAuthState() {
|
|
21
|
+
try {
|
|
22
|
+
const isOffline = typeof navigator !== 'undefined' && !navigator.onLine;
|
|
23
|
+
// Get session once and reuse (egress optimization)
|
|
24
|
+
const session = await getSession();
|
|
25
|
+
const hasValidSession = session && !isSessionExpired(session);
|
|
26
|
+
// ONLINE: Always use Supabase authentication
|
|
27
|
+
if (!isOffline) {
|
|
28
|
+
if (hasValidSession) {
|
|
29
|
+
return { session, authMode: 'supabase', offlineProfile: null };
|
|
30
|
+
}
|
|
31
|
+
// No valid Supabase session while online - user needs to login
|
|
32
|
+
return { session: null, authMode: 'none', offlineProfile: null };
|
|
33
|
+
}
|
|
34
|
+
// OFFLINE: Try Supabase session from localStorage first, then offline session
|
|
35
|
+
if (hasValidSession) {
|
|
36
|
+
return { session, authMode: 'supabase', offlineProfile: null };
|
|
37
|
+
}
|
|
38
|
+
// No valid Supabase session - check for offline session
|
|
39
|
+
const offlineSession = await getValidOfflineSession();
|
|
40
|
+
if (offlineSession) {
|
|
41
|
+
// SECURITY: Verify offline session matches cached credentials
|
|
42
|
+
const profile = await getOfflineCredentials();
|
|
43
|
+
if (profile && profile.userId === offlineSession.userId) {
|
|
44
|
+
return { session: null, authMode: 'offline', offlineProfile: profile };
|
|
45
|
+
}
|
|
46
|
+
// Mismatch: credentials changed after session created
|
|
47
|
+
debugWarn('[Auth] Offline session userId does not match credentials - clearing session');
|
|
48
|
+
await clearOfflineSession();
|
|
49
|
+
}
|
|
50
|
+
// No valid session while offline
|
|
51
|
+
return { session: null, authMode: 'none', offlineProfile: null };
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
// If session retrieval fails completely (corrupted auth state),
|
|
55
|
+
// clear all Supabase auth data and return no session
|
|
56
|
+
debugError('[Auth] Failed to resolve auth state, clearing auth storage:', e);
|
|
57
|
+
try {
|
|
58
|
+
if (typeof localStorage !== 'undefined') {
|
|
59
|
+
const keys = Object.keys(localStorage).filter((k) => k.startsWith('sb-'));
|
|
60
|
+
keys.forEach((k) => localStorage.removeItem(k));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Ignore storage errors
|
|
65
|
+
}
|
|
66
|
+
return { session: null, authMode: 'none', offlineProfile: null };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=resolveAuthState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveAuthState.js","sourceRoot":"","sources":["../../src/auth/resolveAuthState.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAQjD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,OAAO,SAAS,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAExE,mDAAmD;QACnD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;QACnC,MAAM,eAAe,GAAG,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE9D,6CAA6C;QAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,eAAe,EAAE,CAAC;gBACpB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;YACjE,CAAC;YACD,+DAA+D;YAC/D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QACnE,CAAC;QAED,8EAA8E;QAC9E,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QACjE,CAAC;QAED,wDAAwD;QACxD,MAAM,cAAc,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAEtD,IAAI,cAAc,EAAE,CAAC;YACnB,8DAA8D;YAC9D,MAAM,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAC;YAC9C,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,EAAE,CAAC;gBACxD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;YACzE,CAAC;YACD,sDAAsD;YACtD,SAAS,CAAC,6EAA6E,CAAC,CAAC;YACzF,MAAM,mBAAmB,EAAE,CAAC;QAC9B,CAAC;QAED,iCAAiC;QACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IACnE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,gEAAgE;QAChE,qDAAqD;QACrD,UAAU,CAAC,6DAA6D,EAAE,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC;YACH,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE,CAAC;gBACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1E,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IACnE,CAAC;AACH,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { SupabaseClient, User } from '@supabase/supabase-js';
|
|
2
|
+
import type { Session } from '@supabase/supabase-js';
|
|
3
|
+
import type Dexie from 'dexie';
|
|
4
|
+
import { type DatabaseConfig } from './database';
|
|
5
|
+
export interface SyncEngineConfig {
|
|
6
|
+
tables: TableConfig[];
|
|
7
|
+
prefix: string;
|
|
8
|
+
/** Provide a pre-created Dexie instance (backward compat). Mutually exclusive with `database`. */
|
|
9
|
+
db?: Dexie;
|
|
10
|
+
/** Provide a pre-created Supabase client (backward compat). Engine creates one internally if not provided. */
|
|
11
|
+
supabase?: SupabaseClient;
|
|
12
|
+
/** Engine creates and owns the Dexie instance when this is provided. */
|
|
13
|
+
database?: DatabaseConfig;
|
|
14
|
+
auth?: {
|
|
15
|
+
profileExtractor?: (userMetadata: Record<string, unknown>) => Record<string, unknown>;
|
|
16
|
+
profileToMetadata?: (profile: Record<string, unknown>) => Record<string, unknown>;
|
|
17
|
+
enableOfflineAuth?: boolean;
|
|
18
|
+
sessionValidationIntervalMs?: number;
|
|
19
|
+
confirmRedirectPath?: string;
|
|
20
|
+
/** Check if a user has admin privileges */
|
|
21
|
+
adminCheck?: (user: User | null) => boolean;
|
|
22
|
+
};
|
|
23
|
+
/** Called when Supabase auth state changes (SIGNED_IN, SIGNED_OUT, etc.) */
|
|
24
|
+
onAuthStateChange?: (event: string, session: Session | null) => void;
|
|
25
|
+
/** Called when user is kicked back to login (e.g., credentials invalid on reconnect) */
|
|
26
|
+
onAuthKicked?: (message: string) => void;
|
|
27
|
+
syncDebounceMs?: number;
|
|
28
|
+
syncIntervalMs?: number;
|
|
29
|
+
tombstoneMaxAgeDays?: number;
|
|
30
|
+
visibilitySyncMinAwayMs?: number;
|
|
31
|
+
onlineReconnectCooldownMs?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface TableConfig {
|
|
34
|
+
supabaseName: string;
|
|
35
|
+
dexieTable: string;
|
|
36
|
+
columns: string;
|
|
37
|
+
ownershipFilter?: string;
|
|
38
|
+
isSingleton?: boolean;
|
|
39
|
+
excludeFromConflict?: string[];
|
|
40
|
+
numericMergeFields?: string[];
|
|
41
|
+
onRemoteChange?: (table: string, record: Record<string, unknown>) => void;
|
|
42
|
+
}
|
|
43
|
+
export declare function initEngine(config: SyncEngineConfig): void;
|
|
44
|
+
export declare function getEngineConfig(): SyncEngineConfig;
|
|
45
|
+
/**
|
|
46
|
+
* Get the Supabase-to-Dexie table mapping derived from config.
|
|
47
|
+
*/
|
|
48
|
+
export declare function getTableMap(): Record<string, string>;
|
|
49
|
+
/**
|
|
50
|
+
* Get columns for a specific Supabase table from config.
|
|
51
|
+
*/
|
|
52
|
+
export declare function getTableColumns(supabaseName: string): string;
|
|
53
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAiC,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IAEf,kGAAkG;IAClG,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,8GAA8G;IAC9G,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B,IAAI,CAAC,EAAE;QACL,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtF,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClF,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,2BAA2B,CAAC,EAAE,MAAM,CAAC;QACrC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,2CAA2C;QAC3C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,OAAO,CAAC;KAC7C,CAAC;IAEF,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;IACrE,wFAAwF;IACxF,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC3E;AAID,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAoBzD;AAED,wBAAgB,eAAe,IAAI,gBAAgB,CAKlD;AAGD;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAO5D"}
|