@prabhask5/stellar-engine 1.1.6 → 1.1.7
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 +65 -25
- package/dist/actions/truncateTooltip.d.ts +42 -0
- package/dist/actions/truncateTooltip.d.ts.map +1 -0
- package/dist/actions/truncateTooltip.js +257 -0
- package/dist/actions/truncateTooltip.js.map +1 -0
- package/dist/auth/singleUser.d.ts.map +1 -1
- package/dist/auth/singleUser.js +6 -35
- package/dist/auth/singleUser.js.map +1 -1
- package/dist/bin/install-pwa.d.ts +9 -0
- package/dist/bin/install-pwa.d.ts.map +1 -0
- package/dist/bin/install-pwa.js +1421 -0
- package/dist/bin/install-pwa.js.map +1 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +75 -1
- package/dist/engine.js.map +1 -1
- package/dist/entries/actions.d.ts +1 -0
- package/dist/entries/actions.d.ts.map +1 -1
- package/dist/entries/actions.js +1 -0
- package/dist/entries/actions.js.map +1 -1
- package/dist/entries/kit.d.ts +10 -9
- package/dist/entries/kit.d.ts.map +1 -1
- package/dist/entries/kit.js +7 -8
- package/dist/entries/kit.js.map +1 -1
- package/dist/entries/types.d.ts +1 -1
- package/dist/entries/types.d.ts.map +1 -1
- package/dist/entries/utils.d.ts +1 -1
- package/dist/entries/utils.d.ts.map +1 -1
- package/dist/entries/utils.js +1 -1
- package/dist/entries/utils.js.map +1 -1
- package/dist/entries/vite.d.ts +3 -0
- package/dist/entries/vite.d.ts.map +1 -0
- package/dist/entries/vite.js +3 -0
- package/dist/entries/vite.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/kit/auth.d.ts +25 -0
- package/dist/kit/auth.d.ts.map +1 -0
- package/dist/kit/auth.js +31 -0
- package/dist/kit/auth.js.map +1 -0
- package/dist/kit/confirm.d.ts +30 -0
- package/dist/kit/confirm.d.ts.map +1 -0
- package/dist/kit/confirm.js +82 -0
- package/dist/kit/confirm.js.map +1 -0
- package/dist/kit/loads.d.ts +62 -0
- package/dist/kit/loads.d.ts.map +1 -0
- package/dist/kit/loads.js +89 -0
- package/dist/kit/loads.js.map +1 -0
- package/dist/kit/server.d.ts +43 -0
- package/dist/kit/server.d.ts.map +1 -0
- package/dist/kit/server.js +154 -0
- package/dist/kit/server.js.map +1 -0
- package/dist/kit/sw.d.ts +47 -0
- package/dist/kit/sw.d.ts.map +1 -0
- package/dist/kit/sw.js +164 -0
- package/dist/kit/sw.js.map +1 -0
- package/dist/runtime/runtimeConfig.d.ts +0 -8
- package/dist/runtime/runtimeConfig.d.ts.map +1 -1
- package/dist/runtime/runtimeConfig.js.map +1 -1
- package/dist/supabase/auth.d.ts +1 -1
- package/dist/supabase/auth.d.ts.map +1 -1
- package/dist/supabase/auth.js.map +1 -1
- package/dist/sw/build/vite-plugin.d.ts +29 -0
- package/dist/sw/build/vite-plugin.d.ts.map +1 -0
- package/dist/sw/build/vite-plugin.js +124 -0
- package/dist/sw/build/vite-plugin.js.map +1 -0
- package/dist/sw/sw.js +614 -0
- package/dist/types.d.ts +0 -19
- package/dist/types.d.ts.map +1 -1
- package/package.json +20 -22
- package/src/components/DeferredChangesBanner.svelte +477 -0
- package/src/components/SyncStatus.svelte +1732 -0
- package/dist/crdt/awareness.d.ts +0 -54
- package/dist/crdt/awareness.d.ts.map +0 -1
- package/dist/crdt/awareness.js +0 -219
- package/dist/crdt/awareness.js.map +0 -1
- package/dist/crdt/doc.d.ts +0 -56
- package/dist/crdt/doc.d.ts.map +0 -1
- package/dist/crdt/doc.js +0 -130
- package/dist/crdt/doc.js.map +0 -1
- package/dist/crdt/index.d.ts +0 -15
- package/dist/crdt/index.d.ts.map +0 -1
- package/dist/crdt/index.js +0 -20
- package/dist/crdt/index.js.map +0 -1
- package/dist/crdt/offline.d.ts +0 -91
- package/dist/crdt/offline.d.ts.map +0 -1
- package/dist/crdt/offline.js +0 -353
- package/dist/crdt/offline.js.map +0 -1
- package/dist/crdt/sync.d.ts +0 -58
- package/dist/crdt/sync.d.ts.map +0 -1
- package/dist/crdt/sync.js +0 -399
- package/dist/crdt/sync.js.map +0 -1
- package/dist/crdt/types.d.ts +0 -62
- package/dist/crdt/types.d.ts.map +0 -1
- package/dist/crdt/types.js +0 -7
- package/dist/crdt/types.js.map +0 -1
- package/dist/email/sendEmail.d.ts +0 -31
- package/dist/email/sendEmail.d.ts.map +0 -1
- package/dist/email/sendEmail.js +0 -39
- package/dist/email/sendEmail.js.map +0 -1
- package/dist/email/validateSmtp.d.ts +0 -18
- package/dist/email/validateSmtp.d.ts.map +0 -1
- package/dist/email/validateSmtp.js +0 -33
- package/dist/email/validateSmtp.js.map +0 -1
- package/dist/entries/crdt.d.ts +0 -3
- package/dist/entries/crdt.d.ts.map +0 -1
- package/dist/entries/crdt.js +0 -13
- package/dist/entries/crdt.js.map +0 -1
- package/dist/entries/email.d.ts +0 -4
- package/dist/entries/email.d.ts.map +0 -1
- package/dist/entries/email.js +0 -4
- package/dist/entries/email.js.map +0 -1
- package/dist/kit/authPresets.d.ts +0 -28
- package/dist/kit/authPresets.d.ts.map +0 -1
- package/dist/kit/authPresets.js +0 -23
- package/dist/kit/authPresets.js.map +0 -1
- package/dist/kit/configEndpoint.d.ts +0 -18
- package/dist/kit/configEndpoint.d.ts.map +0 -1
- package/dist/kit/configEndpoint.js +0 -27
- package/dist/kit/configEndpoint.js.map +0 -1
- package/dist/kit/deployEndpoint.d.ts +0 -22
- package/dist/kit/deployEndpoint.d.ts.map +0 -1
- package/dist/kit/deployEndpoint.js +0 -79
- package/dist/kit/deployEndpoint.js.map +0 -1
- package/dist/kit/layoutLoad.d.ts +0 -23
- package/dist/kit/layoutLoad.d.ts.map +0 -1
- package/dist/kit/layoutLoad.js +0 -41
- package/dist/kit/layoutLoad.js.map +0 -1
- package/dist/kit/protectedLoad.d.ts +0 -16
- package/dist/kit/protectedLoad.d.ts.map +0 -1
- package/dist/kit/protectedLoad.js +0 -28
- package/dist/kit/protectedLoad.js.map +0 -1
- package/dist/kit/setupLoad.d.ts +0 -11
- package/dist/kit/setupLoad.d.ts.map +0 -1
- package/dist/kit/setupLoad.js +0 -28
- package/dist/kit/setupLoad.js.map +0 -1
- package/dist/kit/validateEndpoint.d.ts +0 -9
- package/dist/kit/validateEndpoint.d.ts.map +0 -1
- package/dist/kit/validateEndpoint.js +0 -25
- package/dist/kit/validateEndpoint.js.map +0 -1
- package/dist/kit/vercelApi.d.ts +0 -6
- package/dist/kit/vercelApi.d.ts.map +0 -1
- package/dist/kit/vercelApi.js +0 -48
- package/dist/kit/vercelApi.js.map +0 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG9D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGxE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAChB,MAAM,QAAQ,CAAC;AAChB,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAG7C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAGnG,OAAO,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,SAAS,EACT,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,MAAM,EACN,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGlD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC3E,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzD,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -35,7 +35,7 @@ export { supabase } from './supabase/client';
|
|
|
35
35
|
// Runtime config
|
|
36
36
|
export { initConfig, getConfig, setConfig } from './runtime/runtimeConfig';
|
|
37
37
|
// Debug
|
|
38
|
-
export { debug,
|
|
38
|
+
export { debug, isDebugMode, setDebugMode } from './debug';
|
|
39
39
|
// Utilities
|
|
40
40
|
export { generateId, now, calculateNewOrder, snakeToCamel } from './utils';
|
|
41
41
|
// Svelte actions
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,WAAW;AACX,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGlD,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,0BAA0B;AAC1B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAChB,MAAM,QAAQ,CAAC;AAGhB,2BAA2B;AAC3B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAEnG,OAAO;AACP,OAAO,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,SAAS,EACT,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAGzB,iBAAiB;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,QAAQ;AACR,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,cAAc;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,gBAAgB;AAChB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,mBAAmB;AACnB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,MAAM,EACN,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAE3B,sBAAsB;AACtB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAEnC,SAAS;AACT,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEjF,0DAA0D;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,gDAAgD;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,iBAAiB;AACjB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAG3E,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,WAAW;AACX,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGlD,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,0BAA0B;AAC1B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAChB,MAAM,QAAQ,CAAC;AAGhB,2BAA2B;AAC3B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAEnG,OAAO;AACP,OAAO,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,SAAS,EACT,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAGzB,iBAAiB;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,QAAQ;AACR,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,cAAc;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,gBAAgB;AAChB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,mBAAmB;AACnB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,MAAM,EACN,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAE3B,sBAAsB;AACtB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAEnC,SAAS;AACT,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEjF,0DAA0D;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,gDAAgD;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,iBAAiB;AACjB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAG3E,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE3D,YAAY;AACZ,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE3E,iBAAiB;AACjB,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAmBpG,2DAA2D;AAC3D,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Auth hydration helper for the root layout component.
|
|
3
|
+
*
|
|
4
|
+
* Reads layout load data and calls the appropriate `authState.set*()`
|
|
5
|
+
* method so child components get reactive access to auth state.
|
|
6
|
+
*/
|
|
7
|
+
import type { AuthMode, OfflineCredentials } from '../types.js';
|
|
8
|
+
import type { Session } from '@supabase/supabase-js';
|
|
9
|
+
/** Shape of the layout data expected by `hydrateAuthState`. */
|
|
10
|
+
export interface AuthLayoutData {
|
|
11
|
+
authMode: AuthMode;
|
|
12
|
+
session: Session | null;
|
|
13
|
+
offlineProfile: OfflineCredentials | null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Reads layout load data (`{ authMode, session, offlineProfile }`) and calls
|
|
17
|
+
* the appropriate `authState.set*()` method.
|
|
18
|
+
*
|
|
19
|
+
* Call this from a Svelte 5 `$effect()` in your root `+layout.svelte`:
|
|
20
|
+
* ```ts
|
|
21
|
+
* $effect(() => { hydrateAuthState(data); });
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare function hydrateAuthState(layoutData: AuthLayoutData): void;
|
|
25
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/kit/auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAMrD,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC3C;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAQjE"}
|
package/dist/kit/auth.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Auth hydration helper for the root layout component.
|
|
3
|
+
*
|
|
4
|
+
* Reads layout load data and calls the appropriate `authState.set*()`
|
|
5
|
+
* method so child components get reactive access to auth state.
|
|
6
|
+
*/
|
|
7
|
+
import { authState } from '../stores/authState.js';
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// PUBLIC API
|
|
10
|
+
// =============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* Reads layout load data (`{ authMode, session, offlineProfile }`) and calls
|
|
13
|
+
* the appropriate `authState.set*()` method.
|
|
14
|
+
*
|
|
15
|
+
* Call this from a Svelte 5 `$effect()` in your root `+layout.svelte`:
|
|
16
|
+
* ```ts
|
|
17
|
+
* $effect(() => { hydrateAuthState(data); });
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export function hydrateAuthState(layoutData) {
|
|
21
|
+
if (layoutData.authMode === 'supabase' && layoutData.session) {
|
|
22
|
+
authState.setSupabaseAuth(layoutData.session);
|
|
23
|
+
}
|
|
24
|
+
else if (layoutData.authMode === 'offline' && layoutData.offlineProfile) {
|
|
25
|
+
authState.setOfflineAuth(layoutData.offlineProfile);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
authState.setNoAuth();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/kit/auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAenD,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA0B;IACzD,IAAI,UAAU,CAAC,QAAQ,KAAK,UAAU,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QAC7D,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;SAAM,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;QAC1E,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,SAAS,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Email confirmation helpers for the `/confirm` route.
|
|
3
|
+
*
|
|
4
|
+
* Extracts the OTP verification + device trust + error translation logic
|
|
5
|
+
* so the scaffolded confirm page can focus on UI.
|
|
6
|
+
*/
|
|
7
|
+
/** Result of an email confirmation attempt. */
|
|
8
|
+
export interface ConfirmResult {
|
|
9
|
+
success: boolean;
|
|
10
|
+
error?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Handles email confirmation: verifies the OTP token, trusts the pending
|
|
14
|
+
* device for device-verification types, and translates Supabase error
|
|
15
|
+
* messages to user-friendly strings.
|
|
16
|
+
*
|
|
17
|
+
* @param tokenHash - The `token_hash` from the confirmation URL query params.
|
|
18
|
+
* @param type - The verification type from Supabase (`signup`, `email`, `email_change`, `magiclink`).
|
|
19
|
+
* @returns `{ success: true }` on success, or `{ success: false, error }` on failure.
|
|
20
|
+
*/
|
|
21
|
+
export declare function handleEmailConfirmation(tokenHash: string, type: 'signup' | 'email' | 'email_change' | 'magiclink'): Promise<ConfirmResult>;
|
|
22
|
+
/**
|
|
23
|
+
* Broadcasts an auth confirmation event via `BroadcastChannel` so other
|
|
24
|
+
* tabs (e.g. the login page) can pick up the auth state change.
|
|
25
|
+
*
|
|
26
|
+
* @param channelName - The BroadcastChannel name (must match the login page).
|
|
27
|
+
* @param type - The verification type to include in the message.
|
|
28
|
+
*/
|
|
29
|
+
export declare function broadcastAuthConfirmed(channelName: string, type: string): Promise<'closed' | 'can_close' | 'no_broadcast'>;
|
|
30
|
+
//# sourceMappingURL=confirm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../src/kit/confirm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,cAAc,GAAG,WAAW,GACtD,OAAO,CAAC,aAAa,CAAC,CAkCxB;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,QAAQ,GAAG,WAAW,GAAG,cAAc,CAAC,CAyBlD"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Email confirmation helpers for the `/confirm` route.
|
|
3
|
+
*
|
|
4
|
+
* Extracts the OTP verification + device trust + error translation logic
|
|
5
|
+
* so the scaffolded confirm page can focus on UI.
|
|
6
|
+
*/
|
|
7
|
+
import { verifyOtp } from '../supabase/auth.js';
|
|
8
|
+
import { trustPendingDevice } from '../auth/deviceVerification.js';
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// PUBLIC API
|
|
11
|
+
// =============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* Handles email confirmation: verifies the OTP token, trusts the pending
|
|
14
|
+
* device for device-verification types, and translates Supabase error
|
|
15
|
+
* messages to user-friendly strings.
|
|
16
|
+
*
|
|
17
|
+
* @param tokenHash - The `token_hash` from the confirmation URL query params.
|
|
18
|
+
* @param type - The verification type from Supabase (`signup`, `email`, `email_change`, `magiclink`).
|
|
19
|
+
* @returns `{ success: true }` on success, or `{ success: false, error }` on failure.
|
|
20
|
+
*/
|
|
21
|
+
export async function handleEmailConfirmation(tokenHash, type) {
|
|
22
|
+
try {
|
|
23
|
+
const otpType = type === 'magiclink' ? 'email' : type;
|
|
24
|
+
const { error } = await verifyOtp(tokenHash, otpType);
|
|
25
|
+
// For device-verification OTPs, trust the originating device
|
|
26
|
+
if (!error && (type === 'email' || type === 'magiclink')) {
|
|
27
|
+
await trustPendingDevice();
|
|
28
|
+
}
|
|
29
|
+
if (error) {
|
|
30
|
+
const errorLower = error.toLowerCase();
|
|
31
|
+
if (errorLower.includes('already') ||
|
|
32
|
+
errorLower.includes('confirmed') ||
|
|
33
|
+
errorLower.includes('used')) {
|
|
34
|
+
return {
|
|
35
|
+
success: false,
|
|
36
|
+
error: 'This email has already been confirmed. You can sign in to your account.'
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
else if (errorLower.includes('expired') || errorLower.includes('invalid')) {
|
|
40
|
+
return {
|
|
41
|
+
success: false,
|
|
42
|
+
error: 'This confirmation link has expired. Please request a new one from the login page.'
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return { success: false, error };
|
|
46
|
+
}
|
|
47
|
+
return { success: true };
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return { success: false, error: 'An unexpected error occurred. Please try again.' };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Broadcasts an auth confirmation event via `BroadcastChannel` so other
|
|
55
|
+
* tabs (e.g. the login page) can pick up the auth state change.
|
|
56
|
+
*
|
|
57
|
+
* @param channelName - The BroadcastChannel name (must match the login page).
|
|
58
|
+
* @param type - The verification type to include in the message.
|
|
59
|
+
*/
|
|
60
|
+
export async function broadcastAuthConfirmed(channelName, type) {
|
|
61
|
+
if (typeof window === 'undefined' || !('BroadcastChannel' in window)) {
|
|
62
|
+
return 'no_broadcast';
|
|
63
|
+
}
|
|
64
|
+
const channel = new BroadcastChannel(channelName);
|
|
65
|
+
channel.postMessage({
|
|
66
|
+
type: 'AUTH_CONFIRMED',
|
|
67
|
+
verificationType: type
|
|
68
|
+
});
|
|
69
|
+
// Give the original tab time to process the message
|
|
70
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
71
|
+
channel.close();
|
|
72
|
+
// Attempt to close this confirmation tab
|
|
73
|
+
try {
|
|
74
|
+
window.close();
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Browser policy may block window.close()
|
|
78
|
+
}
|
|
79
|
+
// If still here → close failed
|
|
80
|
+
return 'can_close';
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=confirm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../src/kit/confirm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAYnE,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,SAAiB,EACjB,IAAuD;IAEvD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QACtD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,OAA8C,CAAC,CAAC;QAE7F,6DAA6D;QAC7D,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,WAAW,CAAC,EAAE,CAAC;YACzD,MAAM,kBAAkB,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACvC,IACE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC9B,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAChC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC3B,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,yEAAyE;iBACjF,CAAC;YACJ,CAAC;iBAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5E,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,mFAAmF;iBAC3F,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACnC,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iDAAiD,EAAE,CAAC;IACtF,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAmB,EACnB,IAAY;IAEZ,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,kBAAkB,IAAI,MAAM,CAAC,EAAE,CAAC;QACrE,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAElD,OAAO,CAAC,WAAW,CAAC;QAClB,IAAI,EAAE,gBAAgB;QACtB,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IAEH,oDAAoD;IACpD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,yCAAyC;IACzC,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IAED,+BAA+B;IAC/B,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview SvelteKit load function helpers.
|
|
3
|
+
*
|
|
4
|
+
* Extracts orchestration logic from layout/page load functions so
|
|
5
|
+
* scaffolded routes can be thin wrappers around these helpers.
|
|
6
|
+
*/
|
|
7
|
+
import type { AuthStateResult } from '../auth/resolveAuthState.js';
|
|
8
|
+
/** Data returned by `resolveRootLayout`. */
|
|
9
|
+
export interface RootLayoutData extends AuthStateResult {
|
|
10
|
+
singleUserSetUp?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/** Data returned by `resolveProtectedLayout`. */
|
|
13
|
+
export interface ProtectedLayoutData {
|
|
14
|
+
session: AuthStateResult['session'];
|
|
15
|
+
authMode: AuthStateResult['authMode'];
|
|
16
|
+
offlineProfile: AuthStateResult['offlineProfile'];
|
|
17
|
+
}
|
|
18
|
+
/** Data returned by `resolveSetupAccess`. */
|
|
19
|
+
export interface SetupAccessData {
|
|
20
|
+
isFirstSetup: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Orchestrates the root layout load sequence:
|
|
24
|
+
* 1. Calls the app's `initEngine` function (for database schema setup)
|
|
25
|
+
* 2. Runs `initConfig()` — redirects to `/setup` if unconfigured
|
|
26
|
+
* 3. Resolves auth state
|
|
27
|
+
* 4. Starts sync engine if authenticated
|
|
28
|
+
*
|
|
29
|
+
* @param initEngineFn - The app's `initEngine()` call (executed before config init).
|
|
30
|
+
* Should already have been called at module scope in the browser.
|
|
31
|
+
* @param url - The current page URL (for setup redirect check).
|
|
32
|
+
* @returns Layout data with session, auth mode, offline profile, and setup status.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveRootLayout(url: {
|
|
35
|
+
pathname: string;
|
|
36
|
+
}, _initEngineFn?: () => void): Promise<RootLayoutData>;
|
|
37
|
+
/**
|
|
38
|
+
* Auth guard for protected routes. Resolves auth state and returns
|
|
39
|
+
* redirect info if unauthenticated.
|
|
40
|
+
*
|
|
41
|
+
* @param url - The current page URL (for building redirect parameter).
|
|
42
|
+
* @returns Auth data, or `null` if a redirect to `/login` is needed.
|
|
43
|
+
* When null, caller should `throw redirect(302, loginUrl)`.
|
|
44
|
+
*/
|
|
45
|
+
export declare function resolveProtectedLayout(url: {
|
|
46
|
+
pathname: string;
|
|
47
|
+
search: string;
|
|
48
|
+
}): Promise<{
|
|
49
|
+
data: ProtectedLayoutData;
|
|
50
|
+
redirectUrl: string | null;
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* Setup page guard: if unconfigured → public access; if configured → admin-only.
|
|
54
|
+
*
|
|
55
|
+
* @returns `{ isFirstSetup }` with access info, or `null` with a redirectUrl
|
|
56
|
+
* if the user should be redirected away.
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveSetupAccess(): Promise<{
|
|
59
|
+
data: SetupAccessData;
|
|
60
|
+
redirectUrl: string | null;
|
|
61
|
+
}>;
|
|
62
|
+
//# sourceMappingURL=loads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loads.d.ts","sourceRoot":"","sources":["../../src/kit/loads.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAMnE,4CAA4C;AAC5C,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,iDAAiD;AACjD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IACtC,cAAc,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;CACnD;AAED,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,OAAO,CAAC;CACvB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EACzB,aAAa,CAAC,EAAE,MAAM,IAAI,GACzB,OAAO,CAAC,cAAc,CAAC,CAsBzB;AAMD;;;;;;;GAOG;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,CAarE;AAMD;;;;;GAKG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAClD,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC,CAgBD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview SvelteKit load function helpers.
|
|
3
|
+
*
|
|
4
|
+
* Extracts orchestration logic from layout/page load functions so
|
|
5
|
+
* scaffolded routes can be thin wrappers around these helpers.
|
|
6
|
+
*/
|
|
7
|
+
import { initConfig, getConfig } from '../runtime/runtimeConfig.js';
|
|
8
|
+
import { resolveAuthState } from '../auth/resolveAuthState.js';
|
|
9
|
+
import { startSyncEngine } from '../engine.js';
|
|
10
|
+
import { getValidSession } from '../supabase/auth.js';
|
|
11
|
+
import { isAdmin } from '../auth/admin.js';
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// ROOT LAYOUT
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Orchestrates the root layout load sequence:
|
|
17
|
+
* 1. Calls the app's `initEngine` function (for database schema setup)
|
|
18
|
+
* 2. Runs `initConfig()` — redirects to `/setup` if unconfigured
|
|
19
|
+
* 3. Resolves auth state
|
|
20
|
+
* 4. Starts sync engine if authenticated
|
|
21
|
+
*
|
|
22
|
+
* @param initEngineFn - The app's `initEngine()` call (executed before config init).
|
|
23
|
+
* Should already have been called at module scope in the browser.
|
|
24
|
+
* @param url - The current page URL (for setup redirect check).
|
|
25
|
+
* @returns Layout data with session, auth mode, offline profile, and setup status.
|
|
26
|
+
*/
|
|
27
|
+
export async function resolveRootLayout(url, _initEngineFn) {
|
|
28
|
+
const config = await initConfig();
|
|
29
|
+
// No config yet → first-time user, redirect to setup wizard
|
|
30
|
+
if (!config && url.pathname !== '/setup') {
|
|
31
|
+
return { session: null, authMode: 'none', offlineProfile: null, singleUserSetUp: false };
|
|
32
|
+
}
|
|
33
|
+
// Still on setup page with no config — return blank state
|
|
34
|
+
if (!config) {
|
|
35
|
+
return { session: null, authMode: 'none', offlineProfile: null, singleUserSetUp: false };
|
|
36
|
+
}
|
|
37
|
+
// Resolve auth — determines Supabase / offline / none
|
|
38
|
+
const result = await resolveAuthState();
|
|
39
|
+
// Start sync engine only when the user is actually authenticated
|
|
40
|
+
if (result.authMode !== 'none') {
|
|
41
|
+
await startSyncEngine();
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
// =============================================================================
|
|
46
|
+
// PROTECTED LAYOUT
|
|
47
|
+
// =============================================================================
|
|
48
|
+
/**
|
|
49
|
+
* Auth guard for protected routes. Resolves auth state and returns
|
|
50
|
+
* redirect info if unauthenticated.
|
|
51
|
+
*
|
|
52
|
+
* @param url - The current page URL (for building redirect parameter).
|
|
53
|
+
* @returns Auth data, or `null` if a redirect to `/login` is needed.
|
|
54
|
+
* When null, caller should `throw redirect(302, loginUrl)`.
|
|
55
|
+
*/
|
|
56
|
+
export async function resolveProtectedLayout(url) {
|
|
57
|
+
const result = await resolveAuthState();
|
|
58
|
+
if (result.authMode === 'none') {
|
|
59
|
+
const returnUrl = url.pathname + url.search;
|
|
60
|
+
const loginUrl = returnUrl && returnUrl !== '/'
|
|
61
|
+
? `/login?redirect=${encodeURIComponent(returnUrl)}`
|
|
62
|
+
: '/login';
|
|
63
|
+
return { data: result, redirectUrl: loginUrl };
|
|
64
|
+
}
|
|
65
|
+
return { data: result, redirectUrl: null };
|
|
66
|
+
}
|
|
67
|
+
// =============================================================================
|
|
68
|
+
// SETUP ACCESS
|
|
69
|
+
// =============================================================================
|
|
70
|
+
/**
|
|
71
|
+
* Setup page guard: if unconfigured → public access; if configured → admin-only.
|
|
72
|
+
*
|
|
73
|
+
* @returns `{ isFirstSetup }` with access info, or `null` with a redirectUrl
|
|
74
|
+
* if the user should be redirected away.
|
|
75
|
+
*/
|
|
76
|
+
export async function resolveSetupAccess() {
|
|
77
|
+
if (!getConfig()) {
|
|
78
|
+
return { data: { isFirstSetup: true }, redirectUrl: null };
|
|
79
|
+
}
|
|
80
|
+
const session = await getValidSession();
|
|
81
|
+
if (!session?.user) {
|
|
82
|
+
return { data: { isFirstSetup: false }, redirectUrl: '/login' };
|
|
83
|
+
}
|
|
84
|
+
if (!isAdmin(session.user)) {
|
|
85
|
+
return { data: { isFirstSetup: false }, redirectUrl: '/' };
|
|
86
|
+
}
|
|
87
|
+
return { data: { isFirstSetup: false }, redirectUrl: null };
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=loads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loads.js","sourceRoot":"","sources":["../../src/kit/loads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Server-side API helpers for SvelteKit route handlers.
|
|
3
|
+
*
|
|
4
|
+
* Extracts reusable backend logic so scaffolded API routes can be thin wrappers.
|
|
5
|
+
*/
|
|
6
|
+
/** Configuration for deploying Supabase credentials to Vercel. */
|
|
7
|
+
export interface DeployConfig {
|
|
8
|
+
vercelToken: string;
|
|
9
|
+
projectId: string;
|
|
10
|
+
supabaseUrl: string;
|
|
11
|
+
supabaseAnonKey: string;
|
|
12
|
+
}
|
|
13
|
+
/** Result of a Vercel deployment attempt. */
|
|
14
|
+
export interface DeployResult {
|
|
15
|
+
success: boolean;
|
|
16
|
+
deploymentUrl?: string;
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Server config status returned by `getServerConfig()`. */
|
|
20
|
+
export interface ServerConfig {
|
|
21
|
+
configured: boolean;
|
|
22
|
+
supabaseUrl?: string;
|
|
23
|
+
supabaseAnonKey?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Reads Supabase configuration from `process.env` at runtime.
|
|
27
|
+
* Returns `{ configured: true, supabaseUrl, supabaseAnonKey }` when both
|
|
28
|
+
* env vars exist, or `{ configured: false }` otherwise.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getServerConfig(): ServerConfig;
|
|
31
|
+
/**
|
|
32
|
+
* Full Vercel deployment flow: upsert env vars, then trigger a production
|
|
33
|
+
* redeployment via git-based or clone-based strategy.
|
|
34
|
+
*/
|
|
35
|
+
export declare function deployToVercel(config: DeployConfig): Promise<DeployResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Factory returning a SvelteKit POST handler that validates Supabase credentials.
|
|
38
|
+
* The handler parses the request body and delegates to `validateSupabaseCredentials`.
|
|
39
|
+
*/
|
|
40
|
+
export declare function createValidateHandler(): ({ request }: {
|
|
41
|
+
request: Request;
|
|
42
|
+
}) => Promise<Response>;
|
|
43
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/kit/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,6CAA6C;AAC7C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA+ED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAQ9C;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CA+DhF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,KACrB,aAAa;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,QAAQ,CAAC,CAwBpE"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Server-side API helpers for SvelteKit route handlers.
|
|
3
|
+
*
|
|
4
|
+
* Extracts reusable backend logic so scaffolded API routes can be thin wrappers.
|
|
5
|
+
*/
|
|
6
|
+
// =============================================================================
|
|
7
|
+
// HELPERS — Vercel API Utilities
|
|
8
|
+
// =============================================================================
|
|
9
|
+
/**
|
|
10
|
+
* Low-level wrapper around the Vercel REST API.
|
|
11
|
+
*/
|
|
12
|
+
async function vercelApi(path, token, method = 'GET', body) {
|
|
13
|
+
return fetch(`https://api.vercel.com${path}`, {
|
|
14
|
+
method,
|
|
15
|
+
headers: {
|
|
16
|
+
Authorization: `Bearer ${token}`,
|
|
17
|
+
'Content-Type': 'application/json'
|
|
18
|
+
},
|
|
19
|
+
body: body ? JSON.stringify(body) : undefined
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Creates or updates a single environment variable on a Vercel project.
|
|
24
|
+
*
|
|
25
|
+
* Strategy:
|
|
26
|
+
* 1. Attempt to create via `POST /v10/projects/:id/env`.
|
|
27
|
+
* 2. If `ENV_ALREADY_EXISTS`, list all env vars to find the existing
|
|
28
|
+
* entry's ID, then patch it with the new value.
|
|
29
|
+
*/
|
|
30
|
+
async function setEnvVar(projectId, token, key, value) {
|
|
31
|
+
const createRes = await vercelApi(`/v10/projects/${projectId}/env`, token, 'POST', {
|
|
32
|
+
key,
|
|
33
|
+
value,
|
|
34
|
+
target: ['production', 'preview', 'development'],
|
|
35
|
+
type: 'plain'
|
|
36
|
+
});
|
|
37
|
+
if (createRes.ok)
|
|
38
|
+
return;
|
|
39
|
+
const createData = await createRes.json();
|
|
40
|
+
const errorCode = createData.error?.code || '';
|
|
41
|
+
const errorMessage = createData.error?.message || '';
|
|
42
|
+
if (errorCode === 'ENV_ALREADY_EXISTS' || errorMessage.includes('already exists')) {
|
|
43
|
+
const listRes = await vercelApi(`/v9/projects/${projectId}/env`, token);
|
|
44
|
+
if (!listRes.ok) {
|
|
45
|
+
throw new Error(`Failed to list env vars: ${listRes.statusText}`);
|
|
46
|
+
}
|
|
47
|
+
const listData = await listRes.json();
|
|
48
|
+
const existing = listData.envs?.find((e) => e.key === key);
|
|
49
|
+
if (existing) {
|
|
50
|
+
const updateRes = await vercelApi(`/v9/projects/${projectId}/env/${existing.id}`, token, 'PATCH', { value });
|
|
51
|
+
if (!updateRes.ok) {
|
|
52
|
+
throw new Error(`Failed to update env var ${key}: ${updateRes.statusText}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
throw new Error(`Env var ${key} reported as existing but not found in list`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
throw new Error(`Failed to create env var ${key}: ${createData.error?.message || createRes.statusText}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// =============================================================================
|
|
64
|
+
// PUBLIC API
|
|
65
|
+
// =============================================================================
|
|
66
|
+
/**
|
|
67
|
+
* Reads Supabase configuration from `process.env` at runtime.
|
|
68
|
+
* Returns `{ configured: true, supabaseUrl, supabaseAnonKey }` when both
|
|
69
|
+
* env vars exist, or `{ configured: false }` otherwise.
|
|
70
|
+
*/
|
|
71
|
+
export function getServerConfig() {
|
|
72
|
+
const supabaseUrl = process.env.PUBLIC_SUPABASE_URL || '';
|
|
73
|
+
const supabaseAnonKey = process.env.PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_KEY || '';
|
|
74
|
+
if (supabaseUrl && supabaseAnonKey) {
|
|
75
|
+
return { configured: true, supabaseUrl, supabaseAnonKey };
|
|
76
|
+
}
|
|
77
|
+
return { configured: false };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Full Vercel deployment flow: upsert env vars, then trigger a production
|
|
81
|
+
* redeployment via git-based or clone-based strategy.
|
|
82
|
+
*/
|
|
83
|
+
export async function deployToVercel(config) {
|
|
84
|
+
try {
|
|
85
|
+
// Phase 1 — Upsert environment variables
|
|
86
|
+
await setEnvVar(config.projectId, config.vercelToken, 'PUBLIC_SUPABASE_URL', config.supabaseUrl);
|
|
87
|
+
await setEnvVar(config.projectId, config.vercelToken, 'PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_KEY', config.supabaseAnonKey);
|
|
88
|
+
// Phase 2 — Trigger production redeployment
|
|
89
|
+
const deploymentId = process.env.VERCEL_DEPLOYMENT_ID || process.env.VERCEL_URL;
|
|
90
|
+
const gitRepo = process.env.VERCEL_GIT_REPO_SLUG;
|
|
91
|
+
const gitOwner = process.env.VERCEL_GIT_REPO_OWNER;
|
|
92
|
+
const gitRef = process.env.VERCEL_GIT_COMMIT_REF || 'main';
|
|
93
|
+
let deploymentUrl = '';
|
|
94
|
+
// Strategy A — Git-based redeployment (preferred)
|
|
95
|
+
if (gitRepo && gitOwner) {
|
|
96
|
+
const deployRes = await vercelApi(`/v13/deployments`, config.vercelToken, 'POST', {
|
|
97
|
+
name: config.projectId,
|
|
98
|
+
project: config.projectId,
|
|
99
|
+
target: 'production',
|
|
100
|
+
gitSource: {
|
|
101
|
+
type: 'github',
|
|
102
|
+
repoId: `${gitOwner}/${gitRepo}`,
|
|
103
|
+
ref: gitRef
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
if (deployRes.ok) {
|
|
107
|
+
const deployData = await deployRes.json();
|
|
108
|
+
deploymentUrl = deployData.url || '';
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Strategy B — Clone current deployment (fallback)
|
|
112
|
+
if (!deploymentUrl && deploymentId) {
|
|
113
|
+
const redeployRes = await vercelApi(`/v13/deployments`, config.vercelToken, 'POST', {
|
|
114
|
+
name: config.projectId,
|
|
115
|
+
project: config.projectId,
|
|
116
|
+
target: 'production',
|
|
117
|
+
deploymentId
|
|
118
|
+
});
|
|
119
|
+
if (redeployRes.ok) {
|
|
120
|
+
const redeployData = await redeployRes.json();
|
|
121
|
+
deploymentUrl = redeployData.url || '';
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return { success: true, deploymentUrl };
|
|
125
|
+
}
|
|
126
|
+
catch (e) {
|
|
127
|
+
const message = e instanceof Error ? e.message : 'Unknown error';
|
|
128
|
+
return { success: false, error: message };
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Factory returning a SvelteKit POST handler that validates Supabase credentials.
|
|
133
|
+
* The handler parses the request body and delegates to `validateSupabaseCredentials`.
|
|
134
|
+
*/
|
|
135
|
+
export function createValidateHandler() {
|
|
136
|
+
return async ({ request }) => {
|
|
137
|
+
const { validateSupabaseCredentials } = await import('../supabase/validate.js');
|
|
138
|
+
try {
|
|
139
|
+
const { supabaseUrl, supabaseAnonKey } = await request.json();
|
|
140
|
+
if (!supabaseUrl || !supabaseAnonKey) {
|
|
141
|
+
return new Response(JSON.stringify({ valid: false, error: 'Supabase URL and Anon Key are required' }), { status: 400, headers: { 'Content-Type': 'application/json' } });
|
|
142
|
+
}
|
|
143
|
+
const result = await validateSupabaseCredentials(supabaseUrl, supabaseAnonKey);
|
|
144
|
+
return new Response(JSON.stringify(result), {
|
|
145
|
+
headers: { 'Content-Type': 'application/json' }
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
catch (e) {
|
|
149
|
+
const message = e instanceof Error ? e.message : 'Unknown error';
|
|
150
|
+
return new Response(JSON.stringify({ valid: false, error: `Could not connect to Supabase: ${message}` }), { headers: { 'Content-Type': 'application/json' } });
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/kit/server.ts"],"names":[],"mappings":"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"}
|
package/dist/kit/sw.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Service worker lifecycle helpers.
|
|
3
|
+
*
|
|
4
|
+
* Extracts SW monitoring and update logic so components and pages
|
|
5
|
+
* can use clean APIs without duplicating browser-specific code.
|
|
6
|
+
*/
|
|
7
|
+
/** Options for `pollForNewServiceWorker`. */
|
|
8
|
+
export interface PollOptions {
|
|
9
|
+
/** Polling interval in milliseconds (default: 5000). */
|
|
10
|
+
intervalMs?: number;
|
|
11
|
+
/** Maximum number of polling attempts (default: 60). */
|
|
12
|
+
maxAttempts?: number;
|
|
13
|
+
/** Callback invoked when a new SW is detected in waiting state. */
|
|
14
|
+
onFound?: () => void;
|
|
15
|
+
}
|
|
16
|
+
/** Callbacks for `monitorSwLifecycle`. */
|
|
17
|
+
export interface SwLifecycleCallbacks {
|
|
18
|
+
/** Called whenever an update-available condition is detected. */
|
|
19
|
+
onUpdateAvailable: () => void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Polls `registration.update()` until a new service worker is detected
|
|
23
|
+
* in the waiting state. Useful after triggering a deployment to detect
|
|
24
|
+
* when the new build is live.
|
|
25
|
+
*
|
|
26
|
+
* @returns A cleanup function that stops polling.
|
|
27
|
+
*/
|
|
28
|
+
export declare function pollForNewServiceWorker(options?: PollOptions): () => void;
|
|
29
|
+
/**
|
|
30
|
+
* Sends `SKIP_WAITING` to the waiting service worker, listens for
|
|
31
|
+
* `controllerchange`, then reloads the page. Includes a double-reload guard.
|
|
32
|
+
*/
|
|
33
|
+
export declare function handleSwUpdate(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Comprehensive SW monitoring covering all detection strategies:
|
|
36
|
+
* 1. Immediate check for waiting worker
|
|
37
|
+
* 2. Delayed retries at 1s/3s (iOS PWA quirk)
|
|
38
|
+
* 3. `SW_INSTALLED` message listener
|
|
39
|
+
* 4. `updatefound` → `statechange` tracking
|
|
40
|
+
* 5. `visibilitychange` re-check
|
|
41
|
+
* 6. 2-minute polling interval
|
|
42
|
+
*
|
|
43
|
+
* @param callbacks - Object with `onUpdateAvailable` callback.
|
|
44
|
+
* @returns A cleanup function that removes all listeners and intervals.
|
|
45
|
+
*/
|
|
46
|
+
export declare function monitorSwLifecycle(callbacks: SwLifecycleCallbacks): () => void;
|
|
47
|
+
//# sourceMappingURL=sw.d.ts.map
|