@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.
Files changed (138) hide show
  1. package/README.md +295 -0
  2. package/dist/actions/remoteChange.d.ts +79 -0
  3. package/dist/actions/remoteChange.d.ts.map +1 -0
  4. package/dist/actions/remoteChange.js +300 -0
  5. package/dist/actions/remoteChange.js.map +1 -0
  6. package/dist/auth/admin.d.ts +12 -0
  7. package/dist/auth/admin.d.ts.map +1 -0
  8. package/dist/auth/admin.js +23 -0
  9. package/dist/auth/admin.js.map +1 -0
  10. package/dist/auth/offlineCredentials.d.ts +41 -0
  11. package/dist/auth/offlineCredentials.d.ts.map +1 -0
  12. package/dist/auth/offlineCredentials.js +121 -0
  13. package/dist/auth/offlineCredentials.js.map +1 -0
  14. package/dist/auth/offlineLogin.d.ts +34 -0
  15. package/dist/auth/offlineLogin.d.ts.map +1 -0
  16. package/dist/auth/offlineLogin.js +75 -0
  17. package/dist/auth/offlineLogin.js.map +1 -0
  18. package/dist/auth/offlineSession.d.ts +22 -0
  19. package/dist/auth/offlineSession.d.ts.map +1 -0
  20. package/dist/auth/offlineSession.js +54 -0
  21. package/dist/auth/offlineSession.js.map +1 -0
  22. package/dist/auth/resolveAuthState.d.ts +24 -0
  23. package/dist/auth/resolveAuthState.d.ts.map +1 -0
  24. package/dist/auth/resolveAuthState.js +69 -0
  25. package/dist/auth/resolveAuthState.js.map +1 -0
  26. package/dist/config.d.ts +53 -0
  27. package/dist/config.d.ts.map +1 -0
  28. package/dist/config.js +55 -0
  29. package/dist/config.js.map +1 -0
  30. package/dist/conflicts.d.ts +70 -0
  31. package/dist/conflicts.d.ts.map +1 -0
  32. package/dist/conflicts.js +321 -0
  33. package/dist/conflicts.js.map +1 -0
  34. package/dist/data.d.ts +77 -0
  35. package/dist/data.d.ts.map +1 -0
  36. package/dist/data.js +360 -0
  37. package/dist/data.js.map +1 -0
  38. package/dist/database.d.ts +31 -0
  39. package/dist/database.d.ts.map +1 -0
  40. package/dist/database.js +51 -0
  41. package/dist/database.js.map +1 -0
  42. package/dist/debug.d.ts +11 -0
  43. package/dist/debug.d.ts.map +1 -0
  44. package/dist/debug.js +48 -0
  45. package/dist/debug.js.map +1 -0
  46. package/dist/deviceId.d.ts +16 -0
  47. package/dist/deviceId.d.ts.map +1 -0
  48. package/dist/deviceId.js +48 -0
  49. package/dist/deviceId.js.map +1 -0
  50. package/dist/engine.d.ts +14 -0
  51. package/dist/engine.d.ts.map +1 -0
  52. package/dist/engine.js +1903 -0
  53. package/dist/engine.js.map +1 -0
  54. package/dist/entries/actions.d.ts +2 -0
  55. package/dist/entries/actions.d.ts.map +1 -0
  56. package/dist/entries/actions.js +3 -0
  57. package/dist/entries/actions.js.map +1 -0
  58. package/dist/entries/auth.d.ts +7 -0
  59. package/dist/entries/auth.d.ts.map +1 -0
  60. package/dist/entries/auth.js +6 -0
  61. package/dist/entries/auth.js.map +1 -0
  62. package/dist/entries/config.d.ts +3 -0
  63. package/dist/entries/config.d.ts.map +1 -0
  64. package/dist/entries/config.js +3 -0
  65. package/dist/entries/config.js.map +1 -0
  66. package/dist/entries/stores.d.ts +9 -0
  67. package/dist/entries/stores.d.ts.map +1 -0
  68. package/dist/entries/stores.js +9 -0
  69. package/dist/entries/stores.js.map +1 -0
  70. package/dist/entries/types.d.ts +11 -0
  71. package/dist/entries/types.d.ts.map +1 -0
  72. package/dist/entries/types.js +2 -0
  73. package/dist/entries/types.js.map +1 -0
  74. package/dist/entries/utils.d.ts +3 -0
  75. package/dist/entries/utils.d.ts.map +1 -0
  76. package/dist/entries/utils.js +4 -0
  77. package/dist/entries/utils.js.map +1 -0
  78. package/dist/index.d.ts +32 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +39 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/operations.d.ts +73 -0
  83. package/dist/operations.d.ts.map +1 -0
  84. package/dist/operations.js +227 -0
  85. package/dist/operations.js.map +1 -0
  86. package/dist/queue.d.ts +32 -0
  87. package/dist/queue.d.ts.map +1 -0
  88. package/dist/queue.js +377 -0
  89. package/dist/queue.js.map +1 -0
  90. package/dist/realtime.d.ts +57 -0
  91. package/dist/realtime.d.ts.map +1 -0
  92. package/dist/realtime.js +491 -0
  93. package/dist/realtime.js.map +1 -0
  94. package/dist/reconnectHandler.d.ts +16 -0
  95. package/dist/reconnectHandler.d.ts.map +1 -0
  96. package/dist/reconnectHandler.js +21 -0
  97. package/dist/reconnectHandler.js.map +1 -0
  98. package/dist/runtime/runtimeConfig.d.ts +27 -0
  99. package/dist/runtime/runtimeConfig.d.ts.map +1 -0
  100. package/dist/runtime/runtimeConfig.js +133 -0
  101. package/dist/runtime/runtimeConfig.js.map +1 -0
  102. package/dist/stores/authState.d.ts +57 -0
  103. package/dist/stores/authState.d.ts.map +1 -0
  104. package/dist/stores/authState.js +154 -0
  105. package/dist/stores/authState.js.map +1 -0
  106. package/dist/stores/network.d.ts +9 -0
  107. package/dist/stores/network.d.ts.map +1 -0
  108. package/dist/stores/network.js +97 -0
  109. package/dist/stores/network.js.map +1 -0
  110. package/dist/stores/remoteChanges.d.ts +142 -0
  111. package/dist/stores/remoteChanges.d.ts.map +1 -0
  112. package/dist/stores/remoteChanges.js +353 -0
  113. package/dist/stores/remoteChanges.js.map +1 -0
  114. package/dist/stores/sync.d.ts +35 -0
  115. package/dist/stores/sync.d.ts.map +1 -0
  116. package/dist/stores/sync.js +115 -0
  117. package/dist/stores/sync.js.map +1 -0
  118. package/dist/supabase/auth.d.ts +60 -0
  119. package/dist/supabase/auth.d.ts.map +1 -0
  120. package/dist/supabase/auth.js +298 -0
  121. package/dist/supabase/auth.js.map +1 -0
  122. package/dist/supabase/client.d.ts +15 -0
  123. package/dist/supabase/client.d.ts.map +1 -0
  124. package/dist/supabase/client.js +149 -0
  125. package/dist/supabase/client.js.map +1 -0
  126. package/dist/supabase/validate.d.ts +11 -0
  127. package/dist/supabase/validate.d.ts.map +1 -0
  128. package/dist/supabase/validate.js +38 -0
  129. package/dist/supabase/validate.js.map +1 -0
  130. package/dist/types.d.ts +78 -0
  131. package/dist/types.d.ts.map +1 -0
  132. package/dist/types.js +16 -0
  133. package/dist/types.js.map +1 -0
  134. package/dist/utils.d.ts +24 -0
  135. package/dist/utils.d.ts.map +1 -0
  136. package/dist/utils.js +56 -0
  137. package/dist/utils.js.map +1 -0
  138. 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"}
@@ -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"}