@prabhask5/stellar-engine 1.1.8 → 1.1.10

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 (70) hide show
  1. package/README.md +19 -26
  2. package/dist/auth/crypto.d.ts +0 -23
  3. package/dist/auth/crypto.d.ts.map +1 -1
  4. package/dist/auth/crypto.js +0 -25
  5. package/dist/auth/crypto.js.map +1 -1
  6. package/dist/auth/deviceVerification.d.ts +2 -2
  7. package/dist/auth/deviceVerification.js +2 -2
  8. package/dist/auth/loginGuard.d.ts +7 -14
  9. package/dist/auth/loginGuard.d.ts.map +1 -1
  10. package/dist/auth/loginGuard.js +27 -62
  11. package/dist/auth/loginGuard.js.map +1 -1
  12. package/dist/auth/offlineCredentials.d.ts +6 -59
  13. package/dist/auth/offlineCredentials.d.ts.map +1 -1
  14. package/dist/auth/offlineCredentials.js +8 -111
  15. package/dist/auth/offlineCredentials.js.map +1 -1
  16. package/dist/auth/resolveAuthState.d.ts +14 -18
  17. package/dist/auth/resolveAuthState.d.ts.map +1 -1
  18. package/dist/auth/resolveAuthState.js +16 -58
  19. package/dist/auth/resolveAuthState.js.map +1 -1
  20. package/dist/auth/singleUser.js +4 -4
  21. package/dist/auth/singleUser.js.map +1 -1
  22. package/dist/bin/install-pwa.d.ts +4 -2
  23. package/dist/bin/install-pwa.d.ts.map +1 -1
  24. package/dist/bin/install-pwa.js +2289 -249
  25. package/dist/bin/install-pwa.js.map +1 -1
  26. package/dist/config.d.ts +3 -7
  27. package/dist/config.d.ts.map +1 -1
  28. package/dist/config.js +1 -1
  29. package/dist/config.js.map +1 -1
  30. package/dist/data.d.ts +105 -0
  31. package/dist/data.d.ts.map +1 -1
  32. package/dist/data.js +126 -0
  33. package/dist/data.js.map +1 -1
  34. package/dist/entries/auth.d.ts +8 -13
  35. package/dist/entries/auth.d.ts.map +1 -1
  36. package/dist/entries/auth.js +11 -40
  37. package/dist/entries/auth.js.map +1 -1
  38. package/dist/entries/stores.d.ts +2 -0
  39. package/dist/entries/stores.d.ts.map +1 -1
  40. package/dist/entries/stores.js +7 -0
  41. package/dist/entries/stores.js.map +1 -1
  42. package/dist/entries/types.d.ts +0 -1
  43. package/dist/entries/types.d.ts.map +1 -1
  44. package/dist/index.d.ts +6 -6
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +21 -18
  47. package/dist/index.js.map +1 -1
  48. package/dist/kit/loads.d.ts +3 -5
  49. package/dist/kit/loads.d.ts.map +1 -1
  50. package/dist/kit/loads.js +2 -10
  51. package/dist/kit/loads.js.map +1 -1
  52. package/dist/stores/authState.d.ts +2 -2
  53. package/dist/stores/authState.js +1 -1
  54. package/dist/stores/factories.d.ts +138 -0
  55. package/dist/stores/factories.d.ts.map +1 -0
  56. package/dist/stores/factories.js +154 -0
  57. package/dist/stores/factories.js.map +1 -0
  58. package/dist/supabase/auth.d.ts +14 -181
  59. package/dist/supabase/auth.d.ts.map +1 -1
  60. package/dist/supabase/auth.js +17 -317
  61. package/dist/supabase/auth.js.map +1 -1
  62. package/package.json +1 -1
  63. package/dist/auth/admin.d.ts +0 -49
  64. package/dist/auth/admin.d.ts.map +0 -1
  65. package/dist/auth/admin.js +0 -66
  66. package/dist/auth/admin.js.map +0 -1
  67. package/dist/auth/offlineLogin.d.ts +0 -120
  68. package/dist/auth/offlineLogin.d.ts.map +0 -1
  69. package/dist/auth/offlineLogin.js +0 -142
  70. package/dist/auth/offlineLogin.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"stores.d.ts","sourceRoot":"","sources":["../../src/entries/stores.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAU/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQhE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAU7C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAUlF,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"stores.d.ts","sourceRoot":"","sources":["../../src/entries/stores.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAU/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQhE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAU7C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAUlF,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AASnD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EAClB,MAAM,qBAAqB,CAAC"}
@@ -47,4 +47,11 @@ export { authState, isAuthenticated, userDisplayInfo } from '../stores/authState
47
47
  // applied to the local database.
48
48
  export { onSyncComplete } from '../engine';
49
49
  export { onRealtimeDataUpdate } from '../realtime';
50
+ // =============================================================================
51
+ // Store Factories
52
+ // =============================================================================
53
+ // Generic factory functions that create Svelte-compatible reactive stores for
54
+ // common data-loading patterns. These eliminate the repetitive loading-state /
55
+ // sync-listener / refresh boilerplate from every collection or detail store.
56
+ export { createCollectionStore, createDetailStore } from '../stores/factories';
50
57
  //# sourceMappingURL=stores.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stores.js","sourceRoot":"","sources":["../../src/entries/stores.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAChF,6EAA6E;AAC7E,4EAA4E;AAC5E,gFAAgF;AAEhF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAChF,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,kDAAkD;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;AAChF,4EAA4E;AAC5E,8EAA8E;AAE9E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAChF,wDAAwD;AACxD,sEAAsE;AACtE,6EAA6E;AAC7E,+EAA+E;AAE/E,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAElF,gFAAgF;AAChF,iCAAiC;AACjC,gFAAgF;AAChF,2DAA2D;AAC3D,0EAA0E;AAC1E,2EAA2E;AAC3E,mCAAmC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"stores.js","sourceRoot":"","sources":["../../src/entries/stores.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAChF,6EAA6E;AAC7E,4EAA4E;AAC5E,gFAAgF;AAEhF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAChF,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,kDAAkD;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;AAChF,4EAA4E;AAC5E,8EAA8E;AAE9E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAChF,wDAAwD;AACxD,sEAAsE;AACtE,6EAA6E;AAC7E,+EAA+E;AAE/E,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAElF,gFAAgF;AAChF,iCAAiC;AACjC,gFAAgF;AAChF,2DAA2D;AAC3D,0EAA0E;AAC1E,2EAA2E;AAC3E,mCAAmC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAChF,8EAA8E;AAC9E,+EAA+E;AAC/E,6EAA6E;AAE7E,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -11,7 +11,6 @@
11
11
  export type { SyncEngineConfig, TableConfig } from '../config';
12
12
  export type { DatabaseConfig, DatabaseVersionConfig } from '../database';
13
13
  export type { BatchOperation } from '../data';
14
- export type { AuthResponse } from '../supabase/auth';
15
14
  export type { AuthStateResult } from '../auth/resolveAuthState';
16
15
  export type { AppConfig } from '../runtime/runtimeConfig';
17
16
  export type { SyncOperationItem, OperationType, OfflineCredentials, OfflineSession, ConflictHistoryEntry, SyncStatus, AuthMode, SingleUserConfig, SingleUserGateType } from '../types';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/entries/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAQ/D,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAQzE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAS9C,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAOhE,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAe1D,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AASlB,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQhE,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/entries/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAQ/D,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAQzE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAQ9C,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAOhE,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAe1D,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AASlB,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQhE,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -9,8 +9,8 @@
9
9
  * - **Database Access** — get a handle to the IndexedDB instance or reset it.
10
10
  * - **Generic CRUD & Query** — create, read, update, delete, batch write,
11
11
  * increment, and query data in the local database.
12
- * - **Authentication** — Supabase GoTrue auth, offline login, single-user
13
- * (kiosk) auth, admin checks, device verification, and login guards.
12
+ * - **Authentication** — Single-user PIN/password gate auth, device
13
+ * verification, login guards, and session management.
14
14
  * - **Reactive Stores** — Svelte-compatible stores for sync status, network
15
15
  * state, remote changes, and auth state.
16
16
  * - **Realtime Events** — lifecycle hooks for sync completion and realtime
@@ -37,13 +37,11 @@ export { onSyncComplete } from './engine';
37
37
  export { engineCreate, engineUpdate, engineDelete, engineBatchWrite, engineIncrement } from './data';
38
38
  export type { BatchOperation } from './data';
39
39
  export { engineGet, engineGetAll, engineQuery, engineQueryRange, engineGetOrCreate } from './data';
40
- export { signIn, signUp, signOut, changePassword, changeEmail, completeEmailChange, resendConfirmationEmail, getUserProfile, updateProfile, verifyOtp, getValidSession } from './supabase/auth';
41
- export type { AuthResponse } from './supabase/auth';
40
+ export { queryAll, queryOne, reorderEntity, prependOrder } from './data';
41
+ export { signOut, resendConfirmationEmail, getUserProfile, updateProfile, verifyOtp, getValidSession } from './supabase/auth';
42
42
  export { resolveAuthState } from './auth/resolveAuthState';
43
43
  export type { AuthStateResult } from './auth/resolveAuthState';
44
- export { isAdmin } from './auth/admin';
45
44
  export { resetLoginGuard } from './auth/loginGuard';
46
- export { signInOffline, getOfflineLoginInfo } from './auth/offlineLogin';
47
45
  export { isSingleUserSetUp, getSingleUserInfo, setupSingleUser, unlockSingleUser, lockSingleUser, changeSingleUserGate, updateSingleUserProfile, resetSingleUser, completeSingleUserSetup, completeDeviceVerification, pollDeviceVerification, padPin, changeSingleUserEmail, completeSingleUserEmailChange, fetchRemoteGateConfig, linkSingleUserDevice, resetSingleUserRemote } from './auth/singleUser';
48
46
  export { resolveFirstName, resolveUserId, resolveAvatarInitial } from './auth/displayUtils';
49
47
  export { isDeviceTrusted, trustCurrentDevice, trustPendingDevice, getTrustedDevices, removeTrustedDevice, maskEmail, sendDeviceVerification, getCurrentDeviceId, getDeviceLabel } from './auth/deviceVerification';
@@ -53,6 +51,8 @@ export { remoteChangesStore } from './stores/remoteChanges';
53
51
  export type { RemoteActionType } from './stores/remoteChanges';
54
52
  export { isOnline } from './stores/network';
55
53
  export { authState, isAuthenticated, userDisplayInfo } from './stores/authState';
54
+ export { createCollectionStore, createDetailStore } from './stores/factories';
55
+ export type { CollectionStore, CollectionStoreConfig, DetailStore, DetailStoreConfig } from './stores/factories';
56
56
  export { onRealtimeDataUpdate } from './realtime';
57
57
  export { supabase } from './supabase/client';
58
58
  export { initConfig, getConfig, setConfig } from './runtime/runtimeConfig';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -9,8 +9,8 @@
9
9
  * - **Database Access** — get a handle to the IndexedDB instance or reset it.
10
10
  * - **Generic CRUD & Query** — create, read, update, delete, batch write,
11
11
  * increment, and query data in the local database.
12
- * - **Authentication** — Supabase GoTrue auth, offline login, single-user
13
- * (kiosk) auth, admin checks, device verification, and login guards.
12
+ * - **Authentication** — Single-user PIN/password gate auth, device
13
+ * verification, login guards, and session management.
14
14
  * - **Reactive Stores** — Svelte-compatible stores for sync status, network
15
15
  * state, remote changes, and auth state.
16
16
  * - **Realtime Events** — lifecycle hooks for sync completion and realtime
@@ -75,12 +75,20 @@ export { engineCreate, engineUpdate, engineDelete, engineBatchWrite, engineIncre
75
75
  // - `engineGetOrCreate` — retrieves an entity or creates it with defaults.
76
76
  export { engineGet, engineGetAll, engineQuery, engineQueryRange, engineGetOrCreate } from './data';
77
77
  // =============================================================================
78
- // Supabase Auth Core Authentication Operations
78
+ // Query & Repository Helpers
79
79
  // =============================================================================
80
- // Standard Supabase GoTrue operations: sign in/up/out, password and email
81
- // changes, email confirmation resend, profile CRUD, OTP verification, and
82
- // session validation.
83
- export { signIn, signUp, signOut, changePassword, changeEmail, completeEmailChange, resendConfirmationEmail, getUserProfile, updateProfile, verifyOtp, getValidSession } from './supabase/auth';
80
+ // Convenience wrappers that eliminate repetitive query and repository patterns:
81
+ // - `queryAll` fetches all non-deleted records, sorted by order.
82
+ // - `queryOne` — fetches a single non-deleted record by ID.
83
+ // - `reorderEntity` updates just the order field on any entity.
84
+ // - `prependOrder` — computes the next prepend-order value.
85
+ export { queryAll, queryOne, reorderEntity, prependOrder } from './data';
86
+ // =============================================================================
87
+ // Supabase Auth — Core Authentication Utilities
88
+ // =============================================================================
89
+ // Sign-out with full teardown, session management, profile CRUD, email
90
+ // confirmation resend, OTP verification, and session validation.
91
+ export { signOut, resendConfirmationEmail, getUserProfile, updateProfile, verifyOtp, getValidSession } from './supabase/auth';
84
92
  // =============================================================================
85
93
  // Auth State Resolution
86
94
  // =============================================================================
@@ -89,23 +97,12 @@ export { signIn, signUp, signOut, changePassword, changeEmail, completeEmailChan
89
97
  // anonymous, has an expired session, or needs setup.
90
98
  export { resolveAuthState } from './auth/resolveAuthState';
91
99
  // =============================================================================
92
- // Admin Role Check
93
- // =============================================================================
94
- // Utility to check whether the current user has admin privileges.
95
- export { isAdmin } from './auth/admin';
96
- // =============================================================================
97
100
  // Login Guard
98
101
  // =============================================================================
99
102
  // Prevents duplicate login attempts by maintaining a transient lock.
100
103
  // `resetLoginGuard` clears the lock (e.g. after a failed attempt).
101
104
  export { resetLoginGuard } from './auth/loginGuard';
102
105
  // =============================================================================
103
- // Offline Login
104
- // =============================================================================
105
- // Enables authentication when the device has no network connectivity, using
106
- // locally cached and encrypted credentials.
107
- export { signInOffline, getOfflineLoginInfo } from './auth/offlineLogin';
108
- // =============================================================================
109
106
  // Single-User Auth (PIN/Password Gate)
110
107
  // =============================================================================
111
108
  // Full lifecycle for single-user (kiosk/personal device) authentication:
@@ -142,6 +139,12 @@ export { remoteChangesStore } from './stores/remoteChanges';
142
139
  export { isOnline } from './stores/network';
143
140
  export { authState, isAuthenticated, userDisplayInfo } from './stores/authState';
144
141
  // =============================================================================
142
+ // Store Factories
143
+ // =============================================================================
144
+ // Generic factory functions for creating reactive stores with built-in loading
145
+ // state and sync-complete auto-refresh.
146
+ export { createCollectionStore, createDetailStore } from './stores/factories';
147
+ // =============================================================================
145
148
  // Realtime Event Subscriptions
146
149
  // =============================================================================
147
150
  // Callback registration for app-specific event hooks. `onRealtimeDataUpdate`
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -60,7 +60,7 @@ export interface ProtectedLayoutData {
60
60
  * Data returned by `resolveSetupAccess`.
61
61
  *
62
62
  * Tells the setup page whether this is a first-time configuration
63
- * (public access) or a reconfiguration (admin-only).
63
+ * (public access) or a reconfiguration (authenticated users only).
64
64
  */
65
65
  export interface SetupAccessData {
66
66
  /**
@@ -155,9 +155,8 @@ export declare function resolveProtectedLayout(url: {
155
155
  *
156
156
  * - **Unconfigured app** (first-time setup): public access, no auth required.
157
157
  * Returns `{ isFirstSetup: true }`.
158
- * - **Configured app** (reconfiguration): only authenticated admin users
159
- * may access. Non-admins are redirected to `/`, unauthenticated users
160
- * to `/login`.
158
+ * - **Configured app** (reconfiguration): any authenticated user may access.
159
+ * Unauthenticated users are redirected to `/login`.
161
160
  *
162
161
  * @returns An object containing:
163
162
  * - `data` — setup access info (`{ isFirstSetup }`)
@@ -180,7 +179,6 @@ export declare function resolveProtectedLayout(url: {
180
179
  *
181
180
  * @see {@link SetupAccessData} for the return data shape
182
181
  * @see {@link getConfig} for checking whether config exists
183
- * @see {@link isAdmin} for admin role verification
184
182
  */
185
183
  export declare function resolveSetupAccess(): Promise<{
186
184
  data: SetupAccessData;
@@ -1 +1 @@
1
- {"version":3,"file":"loads.d.ts","sourceRoot":"","sources":["../../src/kit/loads.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAMnE;;;;;GAKG;AACH,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IAEpC,oDAAoD;IACpD,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IAEtC,2DAA2D;IAC3D,cAAc,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;CACnD;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;CACvB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EACzB,aAAa,CAAC,EAAE,MAAM,IAAI,GACzB,OAAO,CAAC,cAAc,CAAC,CA4BzB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAgBrE;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAClD,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC,CAsBD"}
1
+ {"version":3,"file":"loads.d.ts","sourceRoot":"","sources":["../../src/kit/loads.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAMnE;;;;;GAKG;AACH,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IAEpC,oDAAoD;IACpD,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IAEtC,2DAA2D;IAC3D,cAAc,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;CACnD;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;CACvB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EACzB,aAAa,CAAC,EAAE,MAAM,IAAI,GACzB,OAAO,CAAC,cAAc,CAAC,CA4BzB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAgBrE;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAClD,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC,CAgBD"}
package/dist/kit/loads.js CHANGED
@@ -32,7 +32,6 @@ import { initConfig, getConfig } from '../runtime/runtimeConfig.js';
32
32
  import { resolveAuthState } from '../auth/resolveAuthState.js';
33
33
  import { startSyncEngine } from '../engine.js';
34
34
  import { getValidSession } from '../supabase/auth.js';
35
- import { isAdmin } from '../auth/admin.js';
36
35
  // =============================================================================
37
36
  // ROOT LAYOUT
38
37
  // =============================================================================
@@ -156,9 +155,8 @@ export async function resolveProtectedLayout(url) {
156
155
  *
157
156
  * - **Unconfigured app** (first-time setup): public access, no auth required.
158
157
  * Returns `{ isFirstSetup: true }`.
159
- * - **Configured app** (reconfiguration): only authenticated admin users
160
- * may access. Non-admins are redirected to `/`, unauthenticated users
161
- * to `/login`.
158
+ * - **Configured app** (reconfiguration): any authenticated user may access.
159
+ * Unauthenticated users are redirected to `/login`.
162
160
  *
163
161
  * @returns An object containing:
164
162
  * - `data` — setup access info (`{ isFirstSetup }`)
@@ -181,7 +179,6 @@ export async function resolveProtectedLayout(url) {
181
179
  *
182
180
  * @see {@link SetupAccessData} for the return data shape
183
181
  * @see {@link getConfig} for checking whether config exists
184
- * @see {@link isAdmin} for admin role verification
185
182
  */
186
183
  export async function resolveSetupAccess() {
187
184
  /* No config exists — this is the first-time setup, grant public access
@@ -195,11 +192,6 @@ export async function resolveSetupAccess() {
195
192
  /* No session — redirect to login so the user can authenticate first. */
196
193
  return { data: { isFirstSetup: false }, redirectUrl: '/login' };
197
194
  }
198
- if (!isAdmin(session.user)) {
199
- /* Authenticated but not an admin — redirect to home. Only admins
200
- should be able to change the app's configuration. */
201
- return { data: { isFirstSetup: false }, redirectUrl: '/' };
202
- }
203
195
  return { data: { isFirstSetup: false }, redirectUrl: null };
204
196
  }
205
197
  //# sourceMappingURL=loads.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loads.js","sourceRoot":"","sources":["../../src/kit/loads.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loads.js","sourceRoot":"","sources":["../../src/kit/loads.ts"],"names":[],"mappings":"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"}
@@ -41,7 +41,7 @@ interface AuthState {
41
41
  /**
42
42
  * Message to display when the user is forcibly signed out.
43
43
  * Set by `setNoAuth()` when a kicked reason is provided (e.g., session
44
- * expiry, admin revocation). Cleared on next successful auth transition.
44
+ * expiry). Cleared on next successful auth transition.
45
45
  */
46
46
  authKickedMessage: string | null;
47
47
  }
@@ -93,7 +93,7 @@ export declare const authState: {
93
93
  * authState.setNoAuth();
94
94
  *
95
95
  * // Forced sign-out with reason
96
- * authState.setNoAuth('Your account was deactivated by an administrator.');
96
+ * authState.setNoAuth('Your session has expired.');
97
97
  * ```
98
98
  */
99
99
  setNoAuth(kickedMessage?: string): void;
@@ -117,7 +117,7 @@ function createAuthStateStore() {
117
117
  * authState.setNoAuth();
118
118
  *
119
119
  * // Forced sign-out with reason
120
- * authState.setNoAuth('Your account was deactivated by an administrator.');
120
+ * authState.setNoAuth('Your session has expired.');
121
121
  * ```
122
122
  */
123
123
  setNoAuth(kickedMessage) {
@@ -0,0 +1,138 @@
1
+ /**
2
+ * @fileoverview Store Factory Functions
3
+ *
4
+ * Generic factory functions that create Svelte-compatible reactive stores for
5
+ * common data-loading patterns. These eliminate the repetitive boilerplate that
6
+ * every collection or detail store requires: loading state management,
7
+ * sync-complete listener registration, and refresh logic.
8
+ *
9
+ * Both factories produce stores that follow the Svelte store contract
10
+ * (`subscribe`/`unsubscribe`) and expose a read-only `loading` sub-store.
11
+ *
12
+ * @see {@link ../engine} for `onSyncComplete` lifecycle hook
13
+ */
14
+ /**
15
+ * Configuration for creating a collection store.
16
+ *
17
+ * @typeParam T - The entity type stored in the collection.
18
+ */
19
+ export interface CollectionStoreConfig<T> {
20
+ /** Async function that fetches the full collection (e.g., from local DB). */
21
+ load: () => Promise<T[]>;
22
+ }
23
+ /**
24
+ * A reactive store managing a collection of entities with loading state,
25
+ * sync-complete auto-refresh, and optimistic mutation support.
26
+ *
27
+ * @typeParam T - The entity type stored in the collection.
28
+ */
29
+ export interface CollectionStore<T> {
30
+ /** Standard Svelte store subscribe method. */
31
+ subscribe: (run: (value: T[]) => void) => () => void;
32
+ /** Read-only loading sub-store. */
33
+ loading: {
34
+ subscribe: (run: (value: boolean) => void) => () => void;
35
+ };
36
+ /**
37
+ * Initial load: fetches data, sets loading state, and registers a
38
+ * sync-complete listener for automatic refresh on future syncs.
39
+ */
40
+ load(): Promise<void>;
41
+ /** Re-fetch data without toggling the loading flag. */
42
+ refresh(): Promise<void>;
43
+ /** Replace the store's data directly. */
44
+ set(data: T[]): void;
45
+ /** Apply an optimistic mutation to the current data. */
46
+ mutate(fn: (items: T[]) => T[]): void;
47
+ }
48
+ /**
49
+ * Configuration for creating a detail store.
50
+ *
51
+ * @typeParam T - The entity type for the detail view.
52
+ */
53
+ export interface DetailStoreConfig<T> {
54
+ /** Async function that fetches a single entity by ID. */
55
+ load: (id: string) => Promise<T | null>;
56
+ }
57
+ /**
58
+ * A reactive store managing a single entity with loading state,
59
+ * sync-complete auto-refresh, and ID tracking.
60
+ *
61
+ * @typeParam T - The entity type for the detail view.
62
+ */
63
+ export interface DetailStore<T> {
64
+ /** Standard Svelte store subscribe method. */
65
+ subscribe: (run: (value: T | null) => void) => () => void;
66
+ /** Read-only loading sub-store. */
67
+ loading: {
68
+ subscribe: (run: (value: boolean) => void) => () => void;
69
+ };
70
+ /**
71
+ * Load a single entity by ID. Registers a sync-complete listener that
72
+ * auto-refreshes the same entity on future syncs.
73
+ */
74
+ load(id: string): Promise<void>;
75
+ /** Reset the store to null and clear the tracked ID. */
76
+ clear(): void;
77
+ /** Replace the store's data directly. */
78
+ set(data: T | null): void;
79
+ /** Get the currently tracked entity ID, or null if none loaded. */
80
+ getCurrentId(): string | null;
81
+ }
82
+ /**
83
+ * Create a reactive collection store with built-in loading state and
84
+ * sync-complete auto-refresh.
85
+ *
86
+ * The returned store follows the Svelte store contract and can be used with
87
+ * the `$store` auto-subscription syntax. On the first `load()` call, a
88
+ * sync-complete listener is registered so the collection automatically
89
+ * refreshes whenever the sync engine completes a cycle.
90
+ *
91
+ * Uses `typeof window !== 'undefined'` for environment detection since
92
+ * stellar-engine is a library (not tied to SvelteKit's `browser` export).
93
+ *
94
+ * @typeParam T - The entity type stored in the collection.
95
+ * @param config - Configuration with a `load` function.
96
+ * @returns A `CollectionStore<T>` instance.
97
+ *
98
+ * @example
99
+ * ```ts
100
+ * import { createCollectionStore } from '@prabhask5/stellar-engine/stores';
101
+ *
102
+ * const store = createCollectionStore<Task>({
103
+ * load: () => queryAll<Task>('tasks'),
104
+ * });
105
+ *
106
+ * // In your component:
107
+ * await store.load();
108
+ * // $store is now Task[], $store.loading is boolean
109
+ * ```
110
+ */
111
+ export declare function createCollectionStore<T>(config: CollectionStoreConfig<T>): CollectionStore<T>;
112
+ /**
113
+ * Create a reactive detail store for a single entity, with built-in loading
114
+ * state, ID tracking, and sync-complete auto-refresh.
115
+ *
116
+ * The store tracks the currently loaded entity ID so that sync-complete
117
+ * listeners can refresh the correct entity. Calling `load(id)` with a
118
+ * different ID updates the tracked ID and fetches the new entity.
119
+ *
120
+ * @typeParam T - The entity type for the detail view.
121
+ * @param config - Configuration with a `load` function that takes an entity ID.
122
+ * @returns A `DetailStore<T>` instance.
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * import { createDetailStore } from '@prabhask5/stellar-engine/stores';
127
+ *
128
+ * const store = createDetailStore<Task>({
129
+ * load: (id) => queryOne<Task>('tasks', id),
130
+ * });
131
+ *
132
+ * // In your component:
133
+ * await store.load(taskId);
134
+ * // $store is now Task | null, $store.loading is boolean
135
+ * ```
136
+ */
137
+ export declare function createDetailStore<T>(config: DetailStoreConfig<T>): DetailStore<T>;
138
+ //# sourceMappingURL=factories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../src/stores/factories.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH;;;;GAIG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,6EAA6E;IAC7E,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,8CAA8C;IAC9C,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAErD,mCAAmC;IACnC,OAAO,EAAE;QAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;KAAE,CAAC;IAEtE;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,uDAAuD;IACvD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB,yCAAyC;IACzC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;IAErB,wDAAwD;IACxD,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;CACvC;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,yDAAyD;IACzD,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CACzC;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,8CAA8C;IAC9C,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAE1D,mCAAmC;IACnC,OAAO,EAAE;QAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;KAAE,CAAC;IAEtE;;;OAGG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC,wDAAwD;IACxD,KAAK,IAAI,IAAI,CAAC;IAEd,yCAAyC;IACzC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IAE1B,mEAAmE;IACnE,YAAY,IAAI,MAAM,GAAG,IAAI,CAAC;CAC/B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAyC7F;AAMD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CA6CjF"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * @fileoverview Store Factory Functions
3
+ *
4
+ * Generic factory functions that create Svelte-compatible reactive stores for
5
+ * common data-loading patterns. These eliminate the repetitive boilerplate that
6
+ * every collection or detail store requires: loading state management,
7
+ * sync-complete listener registration, and refresh logic.
8
+ *
9
+ * Both factories produce stores that follow the Svelte store contract
10
+ * (`subscribe`/`unsubscribe`) and expose a read-only `loading` sub-store.
11
+ *
12
+ * @see {@link ../engine} for `onSyncComplete` lifecycle hook
13
+ */
14
+ import { writable } from 'svelte/store';
15
+ import { onSyncComplete } from '../engine';
16
+ // =============================================================================
17
+ // Collection Store Factory
18
+ // =============================================================================
19
+ /**
20
+ * Create a reactive collection store with built-in loading state and
21
+ * sync-complete auto-refresh.
22
+ *
23
+ * The returned store follows the Svelte store contract and can be used with
24
+ * the `$store` auto-subscription syntax. On the first `load()` call, a
25
+ * sync-complete listener is registered so the collection automatically
26
+ * refreshes whenever the sync engine completes a cycle.
27
+ *
28
+ * Uses `typeof window !== 'undefined'` for environment detection since
29
+ * stellar-engine is a library (not tied to SvelteKit's `browser` export).
30
+ *
31
+ * @typeParam T - The entity type stored in the collection.
32
+ * @param config - Configuration with a `load` function.
33
+ * @returns A `CollectionStore<T>` instance.
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * import { createCollectionStore } from '@prabhask5/stellar-engine/stores';
38
+ *
39
+ * const store = createCollectionStore<Task>({
40
+ * load: () => queryAll<Task>('tasks'),
41
+ * });
42
+ *
43
+ * // In your component:
44
+ * await store.load();
45
+ * // $store is now Task[], $store.loading is boolean
46
+ * ```
47
+ */
48
+ export function createCollectionStore(config) {
49
+ const { subscribe, set, update } = writable([]);
50
+ const loading = writable(true);
51
+ let syncUnsubscribe = null;
52
+ return {
53
+ subscribe,
54
+ loading: { subscribe: loading.subscribe },
55
+ async load() {
56
+ loading.set(true);
57
+ try {
58
+ const data = await config.load();
59
+ set(data);
60
+ /* Register sync-complete listener once, only in the browser.
61
+ On each sync cycle, the collection auto-refreshes from local DB. */
62
+ if (typeof window !== 'undefined' && !syncUnsubscribe) {
63
+ syncUnsubscribe = onSyncComplete(async () => {
64
+ const refreshed = await config.load();
65
+ set(refreshed);
66
+ });
67
+ }
68
+ }
69
+ finally {
70
+ loading.set(false);
71
+ }
72
+ },
73
+ async refresh() {
74
+ const data = await config.load();
75
+ set(data);
76
+ },
77
+ set(data) {
78
+ set(data);
79
+ },
80
+ mutate(fn) {
81
+ update(fn);
82
+ }
83
+ };
84
+ }
85
+ // =============================================================================
86
+ // Detail Store Factory
87
+ // =============================================================================
88
+ /**
89
+ * Create a reactive detail store for a single entity, with built-in loading
90
+ * state, ID tracking, and sync-complete auto-refresh.
91
+ *
92
+ * The store tracks the currently loaded entity ID so that sync-complete
93
+ * listeners can refresh the correct entity. Calling `load(id)` with a
94
+ * different ID updates the tracked ID and fetches the new entity.
95
+ *
96
+ * @typeParam T - The entity type for the detail view.
97
+ * @param config - Configuration with a `load` function that takes an entity ID.
98
+ * @returns A `DetailStore<T>` instance.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * import { createDetailStore } from '@prabhask5/stellar-engine/stores';
103
+ *
104
+ * const store = createDetailStore<Task>({
105
+ * load: (id) => queryOne<Task>('tasks', id),
106
+ * });
107
+ *
108
+ * // In your component:
109
+ * await store.load(taskId);
110
+ * // $store is now Task | null, $store.loading is boolean
111
+ * ```
112
+ */
113
+ export function createDetailStore(config) {
114
+ const { subscribe, set } = writable(null);
115
+ const loading = writable(true);
116
+ let currentId = null;
117
+ let syncUnsubscribe = null;
118
+ return {
119
+ subscribe,
120
+ loading: { subscribe: loading.subscribe },
121
+ async load(id) {
122
+ currentId = id;
123
+ loading.set(true);
124
+ try {
125
+ const data = await config.load(id);
126
+ set(data);
127
+ /* Register sync-complete listener once, only in the browser.
128
+ Uses the tracked `currentId` so it always refreshes the active entity. */
129
+ if (typeof window !== 'undefined' && !syncUnsubscribe) {
130
+ syncUnsubscribe = onSyncComplete(async () => {
131
+ if (currentId) {
132
+ const refreshed = await config.load(currentId);
133
+ set(refreshed);
134
+ }
135
+ });
136
+ }
137
+ }
138
+ finally {
139
+ loading.set(false);
140
+ }
141
+ },
142
+ clear() {
143
+ currentId = null;
144
+ set(null);
145
+ },
146
+ set(data) {
147
+ set(data);
148
+ },
149
+ getCurrentId() {
150
+ return currentId;
151
+ }
152
+ };
153
+ }
154
+ //# sourceMappingURL=factories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factories.js","sourceRoot":"","sources":["../../src/stores/factories.ts"],"names":[],"mappings":"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"}