@strivacity/sdk-svelte 4.0.0-beta.0 → 4.0.0-beta.1
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/dist/client/hooks.svelte.cjs +1 -1
- package/dist/client/hooks.svelte.cjs.map +1 -1
- package/dist/client/hooks.svelte.mjs +1 -1
- package/dist/client/hooks.svelte.mjs.map +1 -1
- package/dist/server/sdk.cjs +1 -1
- package/dist/server/sdk.cjs.map +1 -1
- package/dist/server/sdk.mjs +1 -1
- package/dist/server/sdk.mjs.map +1 -1
- package/package.json +2 -2
- package/src/client/hooks.svelte.ts +2 -2
- package/src/server/sdk.ts +1 -1
- package/testing/tests/hooks.spec.ts +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../assets/rolldown-runtime.cjs");let t=require("@strivacity/sdk-core/utils/errors"),n=require("@strivacity/sdk-core/utils"),r=require("svelte/internal/client");r=e.r(r);let i=require("svelte"),a=require("svelte/reactivity");var o=Symbol(`strivacity-sdk`),s=Symbol(`strivacity-login-context`),c=()=>{let e=(0,i.getContext)(o);if(!e)throw Error(`Missing SDK context`);return e},l=()=>{let e=(0,i.getContext)(s);if(!e)throw Error(`Missing SDK native login context`);return e};function u(e={}){let o=new AbortController,l=c(),u=r.state(!0),d=r.state(r.proxy({})),f=r.state(r.proxy({})),p=r.state(r.proxy({}));(0,i.onMount)(async()=>{await l.init();try{await m(e.params)}catch(t){if(t instanceof DOMException&&t.name===`AbortError`)return;l.sdk.logging?.error(`Error fetching authorization URI`,t),e.onError?.(t),r.set(u,!1)}}),(0,i.onDestroy)(()=>{o.abort()});async function m(n={}){try{r.set(u,!0);let e=await l.sdk.startSession(n);e&&h(e)}catch(n){n instanceof t.FallbackError?(l.sdk.logging?.error(`Fallback error occurred`,n),e.onFallback?.(n)):(l.sdk.logging?.error(`Error starting session`,n),e.onError?.(n))}}function h(t){if(l.sdk.session){e.onLogin?.(l.sdk.session);return}let
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../assets/rolldown-runtime.cjs");let t=require("@strivacity/sdk-core/utils/errors"),n=require("@strivacity/sdk-core/utils"),r=require("svelte/internal/client");r=e.r(r);let i=require("svelte"),a=require("svelte/reactivity");var o=Symbol(`strivacity-sdk`),s=Symbol(`strivacity-login-context`),c=()=>{let e=(0,i.getContext)(o);if(!e)throw Error(`Missing SDK context`);return e},l=()=>{let e=(0,i.getContext)(s);if(!e)throw Error(`Missing SDK native login context`);return e};function u(e={}){let o=new AbortController,l=c(),u=r.state(!0),d=r.state(r.proxy({})),f=r.state(r.proxy({})),p=r.state(r.proxy({}));(0,i.onMount)(async()=>{await l.init();try{await m(e.params)}catch(t){if(t instanceof DOMException&&t.name===`AbortError`)return;l.sdk.logging?.error(`Error fetching authorization URI`,t),e.onError?.(t),r.set(u,!1)}}),(0,i.onDestroy)(()=>{o.abort()});async function m(n={}){try{r.set(u,!0);let e=await l.sdk.startSession(n);e&&h(e)}catch(n){n instanceof t.FallbackError?(l.sdk.logging?.error(`Fallback error occurred`,n),e.onFallback?.(n)):(l.sdk.logging?.error(`Error starting session`,n),e.onError?.(n))}}function h(t){if(l.sdk.session&&!(0,n.isSessionExpired)(l.sdk.session)){e.onLogin?.(l.sdk.session);return}let i={hostedUrl:t?.hostedUrl??r.get(p).hostedUrl,finalizeUrl:t?.finalizeUrl??r.get(p).finalizeUrl,screen:t?.screen??r.get(p).screen,forms:t?.forms??r.get(p).forms,layout:t?.layout??r.get(p).layout,messages:t?.messages??{},branding:t?.branding??r.get(p).branding};if(i.screen!==r.get(p).screen){r.set(d,{},!0),r.set(f,{},!0);for(let e of i.forms??[])r.get(d)[e.id]={},r.get(f)[e.id]={}}else l.sdk.logging?.info(`Updating screen: ${i.screen}`);for(let t of Object.keys(i.messages??{}))t===`global`?e.onGlobalMessage?.(i.messages?.global):r.get(f)[t]=i.messages[t]??{};r.set(p,i,!0),i.finalizeUrl||r.set(u,!1)}function g(n){if(l.sdk.logging?.warn(n?`Triggering fallback due to: ${n}`:`Triggering fallback`),!r.get(p).hostedUrl){let e=Error(`No hosted URL provided`);throw l.sdk.logging?.error(`Fallback error`,e),e}e.onFallback?.(new t.FallbackError(new a.SvelteURL(r.get(p).hostedUrl)))}function _(){l.sdk.logging?.debug(`Triggering close`),e.onClose?.()}async function v(i,a){try{r.set(u,!0);let e=await l.sdk.submitForm(i,a??(0,n.unflattenObject)(r.get(d)[i]??{}));e&&h(e)}catch(n){n instanceof t.FallbackError?(l.sdk.logging?.error(`Fallback error occurred`,n),e.onFallback?.(n)):(l.sdk.logging?.error(`Error submitting form`,n),e.onError?.(n))}}function y(e,t,n){r.get(d)[e]===void 0&&(r.get(d)[e]={}),r.get(d)[e][t]=n===``?null:n}function b(e,t,n){r.get(f)[e]===void 0&&(r.get(f)[e]={}),r.get(f)[e][t]=n}let x={get loading(){return r.get(u)},get forms(){return r.get(d)},get messages(){return r.get(f)},get state(){return r.get(p)},triggerFallback:g,triggerClose:_,submitForm:v,setFormValue:y,setMessage:b};return(0,i.setContext)(s,x),x}exports.STRIVACITY_LOGIN_CONTEXT=s,exports.STRIVACITY_SDK=o,exports.useNativeLogin=u,exports.useNativeLoginContext=l,exports.useStrivacity=c;
|
|
2
2
|
//# sourceMappingURL=hooks.svelte.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.svelte.cjs","names":[],"sources":["../../src/client/hooks.svelte.ts"],"sourcesContent":["import { getContext, setContext, onMount, onDestroy } from 'svelte';\nimport { SvelteURL } from 'svelte/reactivity';\nimport type { RedirectFlow, PopupFlow, EmbeddedFlow, NativeFlow, NativeParams, NativeFlowState, NativeFlowMessage } from '@strivacity/sdk-core/types';\nimport type { LoginContext, SDKContext, UseNativeLoginOptions } from '../types';\nimport { FallbackError } from '@strivacity/sdk-core/utils/errors';\nimport { unflattenObject } from '@strivacity/sdk-core/utils';\n\nexport const STRIVACITY_SDK = Symbol('strivacity-sdk');\nexport const STRIVACITY_LOGIN_CONTEXT = Symbol('strivacity-login-context');\n\n/**\n * Access the Strivacity SDK context.\n *\n * @template T - The type of the Strivacity SDK flow (RedirectFlow, PopupFlow, NativeFlow, or EmbeddedFlow).\n * @returns {SDKContext<T>} - The Strivacity SDK context.\n * @throws {Error} - If the Strivacity SDK context is not found.\n */\nexport const useStrivacity = <\n\tT extends RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow = RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow,\n>(): SDKContext<T> => {\n\tconst context = getContext<SDKContext<T>>(STRIVACITY_SDK);\n\n\tif (!context) {\n\t\tthrow new Error('Missing SDK context');\n\t}\n\n\treturn context;\n};\n\n/**\n * Access the Strivacity SDK context specifically for native login flow.\n *\n * @returns {LoginContext} - The native flow context.\n * @throws {Error} - If the Strivacity SDK context is not found.\n */\nexport const useNativeLoginContext = (): LoginContext => {\n\tconst context = getContext<LoginContext>(STRIVACITY_LOGIN_CONTEXT);\n\n\tif (!context) {\n\t\tthrow new Error('Missing SDK native login context');\n\t}\n\n\treturn context;\n};\n\n/**\n * Manages a native login flow session.\n *\n * @param {UseNativeLoginOptions} [options] - Optional options for the login session.\n * @returns {LoginContext} - The native flow context.\n * @throws {Error} - If the Strivacity SDK context is not found.\n */\nexport function useNativeLogin(options: UseNativeLoginOptions = {}): LoginContext {\n\tconst abortController = new AbortController();\n\tconst ctx = useStrivacity<NativeFlow>();\n\n\tlet loading = $state<boolean>(true);\n\tlet forms = $state<Record<string, Record<string, unknown>>>({});\n\tlet messages = $state<Record<string, Record<string, NativeFlowMessage>>>({});\n\tlet state = $state<Partial<NativeFlowState>>({});\n\n\tonMount(async () => {\n\t\tawait ctx.init();\n\n\t\ttry {\n\t\t\tawait startSession(options.params);\n\t\t} catch (error) {\n\t\t\tif (error instanceof DOMException && error.name === 'AbortError') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tctx.sdk.logging?.error('Error fetching authorization URI', error as Error);\n\t\t\tvoid options.onError?.(error as Error);\n\t\t\tloading = false;\n\t\t}\n\t});\n\n\tonDestroy(() => {\n\t\tabortController.abort();\n\t});\n\n\tasync function startSession(loginParams: NativeParams = {}) {\n\t\ttry {\n\t\t\tloading = true;\n\n\t\t\tconst nextState = await ctx.sdk.startSession(loginParams);\n\n\t\t\tif (nextState) {\n\t\t\t\thandleResponse(nextState);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tctx.sdk.logging?.error('Fallback error occurred', error);\n\t\t\t\tvoid options.onFallback?.(error);\n\t\t\t} else {\n\t\t\t\tctx.sdk.logging?.error('Error starting session', error as Error);\n\t\t\t\tvoid options.onError?.(error as Error);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleResponse(nextState: Partial<NativeFlowState>) {\n\t\tif (ctx.sdk.session) {\n\t\t\treturn void options.onLogin?.(ctx.sdk.session);\n\t\t}\n\n\t\tconst newState: NativeFlowState = {\n\t\t\thostedUrl: nextState?.hostedUrl ?? state.hostedUrl,\n\t\t\tfinalizeUrl: nextState?.finalizeUrl ?? state.finalizeUrl,\n\t\t\tscreen: nextState?.screen ?? state.screen,\n\t\t\tforms: nextState?.forms ?? state.forms,\n\t\t\tlayout: nextState?.layout ?? state.layout,\n\t\t\tmessages: nextState?.messages ?? {},\n\t\t\tbranding: nextState?.branding ?? state.branding,\n\t\t};\n\n\t\tif (newState.screen !== state.screen) {\n\t\t\tforms = {};\n\t\t\tmessages = {};\n\n\t\t\tfor (const form of newState.forms ?? []) {\n\t\t\t\tforms[form.id] = {};\n\t\t\t\tmessages[form.id] = {};\n\t\t\t}\n\t\t} else {\n\t\t\tctx.sdk.logging?.info(`Updating screen: ${newState.screen}`);\n\t\t}\n\n\t\tfor (const formId of Object.keys(newState.messages ?? {})) {\n\t\t\tif (formId === 'global') {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n\t\t\t\tvoid options.onGlobalMessage?.(newState.messages?.global!);\n\t\t\t} else {\n\t\t\t\tmessages[formId] = newState.messages![formId] ?? {};\n\t\t\t}\n\t\t}\n\n\t\tstate = newState;\n\n\t\tif (!newState.finalizeUrl) {\n\t\t\tloading = false;\n\t\t}\n\t}\n\n\tfunction triggerFallback(message?: string) {\n\t\tctx.sdk.logging?.warn(message ? `Triggering fallback due to: ${message}` : 'Triggering fallback');\n\n\t\tif (!state.hostedUrl) {\n\t\t\tconst error = new Error('No hosted URL provided');\n\t\t\tctx.sdk.logging?.error('Fallback error', error);\n\t\t\tthrow error;\n\t\t}\n\n\t\tvoid options.onFallback?.(new FallbackError(new SvelteURL(state.hostedUrl)));\n\t}\n\n\tfunction triggerClose() {\n\t\tctx.sdk.logging?.debug('Triggering close');\n\t\tvoid options.onClose?.();\n\t}\n\n\tasync function submitForm(formId: string, customBody?: Record<string, unknown>) {\n\t\ttry {\n\t\t\tloading = true;\n\n\t\t\tconst nextState = await ctx.sdk.submitForm(formId, customBody ?? unflattenObject(forms[formId] ?? {}));\n\n\t\t\tif (nextState) {\n\t\t\t\thandleResponse(nextState);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tctx.sdk.logging?.error('Fallback error occurred', error);\n\t\t\t\tvoid options.onFallback?.(error);\n\t\t\t} else {\n\t\t\t\tctx.sdk.logging?.error('Error submitting form', error as Error);\n\t\t\t\tvoid options.onError?.(error as Error);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setFormValue(formId: string, widgetId: string, value: unknown) {\n\t\tif (forms[formId] === undefined) {\n\t\t\tforms[formId] = {};\n\t\t}\n\n\t\tforms[formId][widgetId] = value === '' ? null : value;\n\t}\n\n\tfunction setMessage(formId: string, widgetId: string, value: NativeFlowMessage) {\n\t\tif (messages[formId] === undefined) {\n\t\t\tmessages[formId] = {};\n\t\t}\n\n\t\tmessages[formId][widgetId] = value;\n\t}\n\n\tconst context: LoginContext = {\n\t\tget loading() {\n\t\t\treturn loading;\n\t\t},\n\t\tget forms() {\n\t\t\treturn forms;\n\t\t},\n\t\tget messages() {\n\t\t\treturn messages;\n\t\t},\n\t\tget state() {\n\t\t\treturn state;\n\t\t},\n\t\ttriggerFallback,\n\t\ttriggerClose,\n\t\tsubmitForm,\n\t\tsetFormValue,\n\t\tsetMessage,\n\t};\n\n\tsetContext(STRIVACITY_LOGIN_CONTEXT, context);\n\n\treturn context;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks.svelte.cjs","names":[],"sources":["../../src/client/hooks.svelte.ts"],"sourcesContent":["import { getContext, setContext, onMount, onDestroy } from 'svelte';\nimport { SvelteURL } from 'svelte/reactivity';\nimport type { RedirectFlow, PopupFlow, EmbeddedFlow, NativeFlow, NativeParams, NativeFlowState, NativeFlowMessage } from '@strivacity/sdk-core/types';\nimport type { LoginContext, SDKContext, UseNativeLoginOptions } from '../types';\nimport { FallbackError } from '@strivacity/sdk-core/utils/errors';\nimport { isSessionExpired, unflattenObject } from '@strivacity/sdk-core/utils';\n\nexport const STRIVACITY_SDK = Symbol('strivacity-sdk');\nexport const STRIVACITY_LOGIN_CONTEXT = Symbol('strivacity-login-context');\n\n/**\n * Access the Strivacity SDK context.\n *\n * @template T - The type of the Strivacity SDK flow (RedirectFlow, PopupFlow, NativeFlow, or EmbeddedFlow).\n * @returns {SDKContext<T>} - The Strivacity SDK context.\n * @throws {Error} - If the Strivacity SDK context is not found.\n */\nexport const useStrivacity = <\n\tT extends RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow = RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow,\n>(): SDKContext<T> => {\n\tconst context = getContext<SDKContext<T>>(STRIVACITY_SDK);\n\n\tif (!context) {\n\t\tthrow new Error('Missing SDK context');\n\t}\n\n\treturn context;\n};\n\n/**\n * Access the Strivacity SDK context specifically for native login flow.\n *\n * @returns {LoginContext} - The native flow context.\n * @throws {Error} - If the Strivacity SDK context is not found.\n */\nexport const useNativeLoginContext = (): LoginContext => {\n\tconst context = getContext<LoginContext>(STRIVACITY_LOGIN_CONTEXT);\n\n\tif (!context) {\n\t\tthrow new Error('Missing SDK native login context');\n\t}\n\n\treturn context;\n};\n\n/**\n * Manages a native login flow session.\n *\n * @param {UseNativeLoginOptions} [options] - Optional options for the login session.\n * @returns {LoginContext} - The native flow context.\n * @throws {Error} - If the Strivacity SDK context is not found.\n */\nexport function useNativeLogin(options: UseNativeLoginOptions = {}): LoginContext {\n\tconst abortController = new AbortController();\n\tconst ctx = useStrivacity<NativeFlow>();\n\n\tlet loading = $state<boolean>(true);\n\tlet forms = $state<Record<string, Record<string, unknown>>>({});\n\tlet messages = $state<Record<string, Record<string, NativeFlowMessage>>>({});\n\tlet state = $state<Partial<NativeFlowState>>({});\n\n\tonMount(async () => {\n\t\tawait ctx.init();\n\n\t\ttry {\n\t\t\tawait startSession(options.params);\n\t\t} catch (error) {\n\t\t\tif (error instanceof DOMException && error.name === 'AbortError') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tctx.sdk.logging?.error('Error fetching authorization URI', error as Error);\n\t\t\tvoid options.onError?.(error as Error);\n\t\t\tloading = false;\n\t\t}\n\t});\n\n\tonDestroy(() => {\n\t\tabortController.abort();\n\t});\n\n\tasync function startSession(loginParams: NativeParams = {}) {\n\t\ttry {\n\t\t\tloading = true;\n\n\t\t\tconst nextState = await ctx.sdk.startSession(loginParams);\n\n\t\t\tif (nextState) {\n\t\t\t\thandleResponse(nextState);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tctx.sdk.logging?.error('Fallback error occurred', error);\n\t\t\t\tvoid options.onFallback?.(error);\n\t\t\t} else {\n\t\t\t\tctx.sdk.logging?.error('Error starting session', error as Error);\n\t\t\t\tvoid options.onError?.(error as Error);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleResponse(nextState: Partial<NativeFlowState>) {\n\t\tif (ctx.sdk.session && !isSessionExpired(ctx.sdk.session)) {\n\t\t\treturn void options.onLogin?.(ctx.sdk.session);\n\t\t}\n\n\t\tconst newState: NativeFlowState = {\n\t\t\thostedUrl: nextState?.hostedUrl ?? state.hostedUrl,\n\t\t\tfinalizeUrl: nextState?.finalizeUrl ?? state.finalizeUrl,\n\t\t\tscreen: nextState?.screen ?? state.screen,\n\t\t\tforms: nextState?.forms ?? state.forms,\n\t\t\tlayout: nextState?.layout ?? state.layout,\n\t\t\tmessages: nextState?.messages ?? {},\n\t\t\tbranding: nextState?.branding ?? state.branding,\n\t\t};\n\n\t\tif (newState.screen !== state.screen) {\n\t\t\tforms = {};\n\t\t\tmessages = {};\n\n\t\t\tfor (const form of newState.forms ?? []) {\n\t\t\t\tforms[form.id] = {};\n\t\t\t\tmessages[form.id] = {};\n\t\t\t}\n\t\t} else {\n\t\t\tctx.sdk.logging?.info(`Updating screen: ${newState.screen}`);\n\t\t}\n\n\t\tfor (const formId of Object.keys(newState.messages ?? {})) {\n\t\t\tif (formId === 'global') {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n\t\t\t\tvoid options.onGlobalMessage?.(newState.messages?.global!);\n\t\t\t} else {\n\t\t\t\tmessages[formId] = newState.messages![formId] ?? {};\n\t\t\t}\n\t\t}\n\n\t\tstate = newState;\n\n\t\tif (!newState.finalizeUrl) {\n\t\t\tloading = false;\n\t\t}\n\t}\n\n\tfunction triggerFallback(message?: string) {\n\t\tctx.sdk.logging?.warn(message ? `Triggering fallback due to: ${message}` : 'Triggering fallback');\n\n\t\tif (!state.hostedUrl) {\n\t\t\tconst error = new Error('No hosted URL provided');\n\t\t\tctx.sdk.logging?.error('Fallback error', error);\n\t\t\tthrow error;\n\t\t}\n\n\t\tvoid options.onFallback?.(new FallbackError(new SvelteURL(state.hostedUrl)));\n\t}\n\n\tfunction triggerClose() {\n\t\tctx.sdk.logging?.debug('Triggering close');\n\t\tvoid options.onClose?.();\n\t}\n\n\tasync function submitForm(formId: string, customBody?: Record<string, unknown>) {\n\t\ttry {\n\t\t\tloading = true;\n\n\t\t\tconst nextState = await ctx.sdk.submitForm(formId, customBody ?? unflattenObject(forms[formId] ?? {}));\n\n\t\t\tif (nextState) {\n\t\t\t\thandleResponse(nextState);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tctx.sdk.logging?.error('Fallback error occurred', error);\n\t\t\t\tvoid options.onFallback?.(error);\n\t\t\t} else {\n\t\t\t\tctx.sdk.logging?.error('Error submitting form', error as Error);\n\t\t\t\tvoid options.onError?.(error as Error);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setFormValue(formId: string, widgetId: string, value: unknown) {\n\t\tif (forms[formId] === undefined) {\n\t\t\tforms[formId] = {};\n\t\t}\n\n\t\tforms[formId][widgetId] = value === '' ? null : value;\n\t}\n\n\tfunction setMessage(formId: string, widgetId: string, value: NativeFlowMessage) {\n\t\tif (messages[formId] === undefined) {\n\t\t\tmessages[formId] = {};\n\t\t}\n\n\t\tmessages[formId][widgetId] = value;\n\t}\n\n\tconst context: LoginContext = {\n\t\tget loading() {\n\t\t\treturn loading;\n\t\t},\n\t\tget forms() {\n\t\t\treturn forms;\n\t\t},\n\t\tget messages() {\n\t\t\treturn messages;\n\t\t},\n\t\tget state() {\n\t\t\treturn state;\n\t\t},\n\t\ttriggerFallback,\n\t\ttriggerClose,\n\t\tsubmitForm,\n\t\tsetFormValue,\n\t\tsetMessage,\n\t};\n\n\tsetContext(STRIVACITY_LOGIN_CONTEXT, context);\n\n\treturn context;\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{FallbackError as e}from"@strivacity/sdk-core/utils/errors";import{unflattenObject as
|
|
1
|
+
import{FallbackError as e}from"@strivacity/sdk-core/utils/errors";import{isSessionExpired as t,unflattenObject as n}from"@strivacity/sdk-core/utils";import*as r from"svelte/internal/client";import{getContext as i,onDestroy as a,onMount as o,setContext as s}from"svelte";import{SvelteURL as c}from"svelte/reactivity";var l=Symbol(`strivacity-sdk`),u=Symbol(`strivacity-login-context`),d=()=>{let e=i(l);if(!e)throw Error(`Missing SDK context`);return e},f=()=>{let e=i(u);if(!e)throw Error(`Missing SDK native login context`);return e};function p(i={}){let l=new AbortController,f=d(),p=r.state(!0),m=r.state(r.proxy({})),h=r.state(r.proxy({})),g=r.state(r.proxy({}));o(async()=>{await f.init();try{await _(i.params)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`)return;f.sdk.logging?.error(`Error fetching authorization URI`,e),i.onError?.(e),r.set(p,!1)}}),a(()=>{l.abort()});async function _(t={}){try{r.set(p,!0);let e=await f.sdk.startSession(t);e&&v(e)}catch(t){t instanceof e?(f.sdk.logging?.error(`Fallback error occurred`,t),i.onFallback?.(t)):(f.sdk.logging?.error(`Error starting session`,t),i.onError?.(t))}}function v(e){if(f.sdk.session&&!t(f.sdk.session)){i.onLogin?.(f.sdk.session);return}let n={hostedUrl:e?.hostedUrl??r.get(g).hostedUrl,finalizeUrl:e?.finalizeUrl??r.get(g).finalizeUrl,screen:e?.screen??r.get(g).screen,forms:e?.forms??r.get(g).forms,layout:e?.layout??r.get(g).layout,messages:e?.messages??{},branding:e?.branding??r.get(g).branding};if(n.screen!==r.get(g).screen){r.set(m,{},!0),r.set(h,{},!0);for(let e of n.forms??[])r.get(m)[e.id]={},r.get(h)[e.id]={}}else f.sdk.logging?.info(`Updating screen: ${n.screen}`);for(let e of Object.keys(n.messages??{}))e===`global`?i.onGlobalMessage?.(n.messages?.global):r.get(h)[e]=n.messages[e]??{};r.set(g,n,!0),n.finalizeUrl||r.set(p,!1)}function y(t){if(f.sdk.logging?.warn(t?`Triggering fallback due to: ${t}`:`Triggering fallback`),!r.get(g).hostedUrl){let e=Error(`No hosted URL provided`);throw f.sdk.logging?.error(`Fallback error`,e),e}i.onFallback?.(new e(new c(r.get(g).hostedUrl)))}function b(){f.sdk.logging?.debug(`Triggering close`),i.onClose?.()}async function x(t,a){try{r.set(p,!0);let e=await f.sdk.submitForm(t,a??n(r.get(m)[t]??{}));e&&v(e)}catch(t){t instanceof e?(f.sdk.logging?.error(`Fallback error occurred`,t),i.onFallback?.(t)):(f.sdk.logging?.error(`Error submitting form`,t),i.onError?.(t))}}function S(e,t,n){r.get(m)[e]===void 0&&(r.get(m)[e]={}),r.get(m)[e][t]=n===``?null:n}function C(e,t,n){r.get(h)[e]===void 0&&(r.get(h)[e]={}),r.get(h)[e][t]=n}let w={get loading(){return r.get(p)},get forms(){return r.get(m)},get messages(){return r.get(h)},get state(){return r.get(g)},triggerFallback:y,triggerClose:b,submitForm:x,setFormValue:S,setMessage:C};return s(u,w),w}export{u as STRIVACITY_LOGIN_CONTEXT,l as STRIVACITY_SDK,p as useNativeLogin,f as useNativeLoginContext,d as useStrivacity};
|
|
2
2
|
//# sourceMappingURL=hooks.svelte.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.svelte.mjs","names":[],"sources":["../../src/client/hooks.svelte.ts"],"sourcesContent":["import { getContext, setContext, onMount, onDestroy } from 'svelte';\nimport { SvelteURL } from 'svelte/reactivity';\nimport type { RedirectFlow, PopupFlow, EmbeddedFlow, NativeFlow, NativeParams, NativeFlowState, NativeFlowMessage } from '@strivacity/sdk-core/types';\nimport type { LoginContext, SDKContext, UseNativeLoginOptions } from '../types';\nimport { FallbackError } from '@strivacity/sdk-core/utils/errors';\nimport { unflattenObject } from '@strivacity/sdk-core/utils';\n\nexport const STRIVACITY_SDK = Symbol('strivacity-sdk');\nexport const STRIVACITY_LOGIN_CONTEXT = Symbol('strivacity-login-context');\n\n/**\n * Access the Strivacity SDK context.\n *\n * @template T - The type of the Strivacity SDK flow (RedirectFlow, PopupFlow, NativeFlow, or EmbeddedFlow).\n * @returns {SDKContext<T>} - The Strivacity SDK context.\n * @throws {Error} - If the Strivacity SDK context is not found.\n */\nexport const useStrivacity = <\n\tT extends RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow = RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow,\n>(): SDKContext<T> => {\n\tconst context = getContext<SDKContext<T>>(STRIVACITY_SDK);\n\n\tif (!context) {\n\t\tthrow new Error('Missing SDK context');\n\t}\n\n\treturn context;\n};\n\n/**\n * Access the Strivacity SDK context specifically for native login flow.\n *\n * @returns {LoginContext} - The native flow context.\n * @throws {Error} - If the Strivacity SDK context is not found.\n */\nexport const useNativeLoginContext = (): LoginContext => {\n\tconst context = getContext<LoginContext>(STRIVACITY_LOGIN_CONTEXT);\n\n\tif (!context) {\n\t\tthrow new Error('Missing SDK native login context');\n\t}\n\n\treturn context;\n};\n\n/**\n * Manages a native login flow session.\n *\n * @param {UseNativeLoginOptions} [options] - Optional options for the login session.\n * @returns {LoginContext} - The native flow context.\n * @throws {Error} - If the Strivacity SDK context is not found.\n */\nexport function useNativeLogin(options: UseNativeLoginOptions = {}): LoginContext {\n\tconst abortController = new AbortController();\n\tconst ctx = useStrivacity<NativeFlow>();\n\n\tlet loading = $state<boolean>(true);\n\tlet forms = $state<Record<string, Record<string, unknown>>>({});\n\tlet messages = $state<Record<string, Record<string, NativeFlowMessage>>>({});\n\tlet state = $state<Partial<NativeFlowState>>({});\n\n\tonMount(async () => {\n\t\tawait ctx.init();\n\n\t\ttry {\n\t\t\tawait startSession(options.params);\n\t\t} catch (error) {\n\t\t\tif (error instanceof DOMException && error.name === 'AbortError') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tctx.sdk.logging?.error('Error fetching authorization URI', error as Error);\n\t\t\tvoid options.onError?.(error as Error);\n\t\t\tloading = false;\n\t\t}\n\t});\n\n\tonDestroy(() => {\n\t\tabortController.abort();\n\t});\n\n\tasync function startSession(loginParams: NativeParams = {}) {\n\t\ttry {\n\t\t\tloading = true;\n\n\t\t\tconst nextState = await ctx.sdk.startSession(loginParams);\n\n\t\t\tif (nextState) {\n\t\t\t\thandleResponse(nextState);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tctx.sdk.logging?.error('Fallback error occurred', error);\n\t\t\t\tvoid options.onFallback?.(error);\n\t\t\t} else {\n\t\t\t\tctx.sdk.logging?.error('Error starting session', error as Error);\n\t\t\t\tvoid options.onError?.(error as Error);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleResponse(nextState: Partial<NativeFlowState>) {\n\t\tif (ctx.sdk.session) {\n\t\t\treturn void options.onLogin?.(ctx.sdk.session);\n\t\t}\n\n\t\tconst newState: NativeFlowState = {\n\t\t\thostedUrl: nextState?.hostedUrl ?? state.hostedUrl,\n\t\t\tfinalizeUrl: nextState?.finalizeUrl ?? state.finalizeUrl,\n\t\t\tscreen: nextState?.screen ?? state.screen,\n\t\t\tforms: nextState?.forms ?? state.forms,\n\t\t\tlayout: nextState?.layout ?? state.layout,\n\t\t\tmessages: nextState?.messages ?? {},\n\t\t\tbranding: nextState?.branding ?? state.branding,\n\t\t};\n\n\t\tif (newState.screen !== state.screen) {\n\t\t\tforms = {};\n\t\t\tmessages = {};\n\n\t\t\tfor (const form of newState.forms ?? []) {\n\t\t\t\tforms[form.id] = {};\n\t\t\t\tmessages[form.id] = {};\n\t\t\t}\n\t\t} else {\n\t\t\tctx.sdk.logging?.info(`Updating screen: ${newState.screen}`);\n\t\t}\n\n\t\tfor (const formId of Object.keys(newState.messages ?? {})) {\n\t\t\tif (formId === 'global') {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n\t\t\t\tvoid options.onGlobalMessage?.(newState.messages?.global!);\n\t\t\t} else {\n\t\t\t\tmessages[formId] = newState.messages![formId] ?? {};\n\t\t\t}\n\t\t}\n\n\t\tstate = newState;\n\n\t\tif (!newState.finalizeUrl) {\n\t\t\tloading = false;\n\t\t}\n\t}\n\n\tfunction triggerFallback(message?: string) {\n\t\tctx.sdk.logging?.warn(message ? `Triggering fallback due to: ${message}` : 'Triggering fallback');\n\n\t\tif (!state.hostedUrl) {\n\t\t\tconst error = new Error('No hosted URL provided');\n\t\t\tctx.sdk.logging?.error('Fallback error', error);\n\t\t\tthrow error;\n\t\t}\n\n\t\tvoid options.onFallback?.(new FallbackError(new SvelteURL(state.hostedUrl)));\n\t}\n\n\tfunction triggerClose() {\n\t\tctx.sdk.logging?.debug('Triggering close');\n\t\tvoid options.onClose?.();\n\t}\n\n\tasync function submitForm(formId: string, customBody?: Record<string, unknown>) {\n\t\ttry {\n\t\t\tloading = true;\n\n\t\t\tconst nextState = await ctx.sdk.submitForm(formId, customBody ?? unflattenObject(forms[formId] ?? {}));\n\n\t\t\tif (nextState) {\n\t\t\t\thandleResponse(nextState);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tctx.sdk.logging?.error('Fallback error occurred', error);\n\t\t\t\tvoid options.onFallback?.(error);\n\t\t\t} else {\n\t\t\t\tctx.sdk.logging?.error('Error submitting form', error as Error);\n\t\t\t\tvoid options.onError?.(error as Error);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setFormValue(formId: string, widgetId: string, value: unknown) {\n\t\tif (forms[formId] === undefined) {\n\t\t\tforms[formId] = {};\n\t\t}\n\n\t\tforms[formId][widgetId] = value === '' ? null : value;\n\t}\n\n\tfunction setMessage(formId: string, widgetId: string, value: NativeFlowMessage) {\n\t\tif (messages[formId] === undefined) {\n\t\t\tmessages[formId] = {};\n\t\t}\n\n\t\tmessages[formId][widgetId] = value;\n\t}\n\n\tconst context: LoginContext = {\n\t\tget loading() {\n\t\t\treturn loading;\n\t\t},\n\t\tget forms() {\n\t\t\treturn forms;\n\t\t},\n\t\tget messages() {\n\t\t\treturn messages;\n\t\t},\n\t\tget state() {\n\t\t\treturn state;\n\t\t},\n\t\ttriggerFallback,\n\t\ttriggerClose,\n\t\tsubmitForm,\n\t\tsetFormValue,\n\t\tsetMessage,\n\t};\n\n\tsetContext(STRIVACITY_LOGIN_CONTEXT, context);\n\n\treturn context;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks.svelte.mjs","names":[],"sources":["../../src/client/hooks.svelte.ts"],"sourcesContent":["import { getContext, setContext, onMount, onDestroy } from 'svelte';\nimport { SvelteURL } from 'svelte/reactivity';\nimport type { RedirectFlow, PopupFlow, EmbeddedFlow, NativeFlow, NativeParams, NativeFlowState, NativeFlowMessage } from '@strivacity/sdk-core/types';\nimport type { LoginContext, SDKContext, UseNativeLoginOptions } from '../types';\nimport { FallbackError } from '@strivacity/sdk-core/utils/errors';\nimport { isSessionExpired, unflattenObject } from '@strivacity/sdk-core/utils';\n\nexport const STRIVACITY_SDK = Symbol('strivacity-sdk');\nexport const STRIVACITY_LOGIN_CONTEXT = Symbol('strivacity-login-context');\n\n/**\n * Access the Strivacity SDK context.\n *\n * @template T - The type of the Strivacity SDK flow (RedirectFlow, PopupFlow, NativeFlow, or EmbeddedFlow).\n * @returns {SDKContext<T>} - The Strivacity SDK context.\n * @throws {Error} - If the Strivacity SDK context is not found.\n */\nexport const useStrivacity = <\n\tT extends RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow = RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow,\n>(): SDKContext<T> => {\n\tconst context = getContext<SDKContext<T>>(STRIVACITY_SDK);\n\n\tif (!context) {\n\t\tthrow new Error('Missing SDK context');\n\t}\n\n\treturn context;\n};\n\n/**\n * Access the Strivacity SDK context specifically for native login flow.\n *\n * @returns {LoginContext} - The native flow context.\n * @throws {Error} - If the Strivacity SDK context is not found.\n */\nexport const useNativeLoginContext = (): LoginContext => {\n\tconst context = getContext<LoginContext>(STRIVACITY_LOGIN_CONTEXT);\n\n\tif (!context) {\n\t\tthrow new Error('Missing SDK native login context');\n\t}\n\n\treturn context;\n};\n\n/**\n * Manages a native login flow session.\n *\n * @param {UseNativeLoginOptions} [options] - Optional options for the login session.\n * @returns {LoginContext} - The native flow context.\n * @throws {Error} - If the Strivacity SDK context is not found.\n */\nexport function useNativeLogin(options: UseNativeLoginOptions = {}): LoginContext {\n\tconst abortController = new AbortController();\n\tconst ctx = useStrivacity<NativeFlow>();\n\n\tlet loading = $state<boolean>(true);\n\tlet forms = $state<Record<string, Record<string, unknown>>>({});\n\tlet messages = $state<Record<string, Record<string, NativeFlowMessage>>>({});\n\tlet state = $state<Partial<NativeFlowState>>({});\n\n\tonMount(async () => {\n\t\tawait ctx.init();\n\n\t\ttry {\n\t\t\tawait startSession(options.params);\n\t\t} catch (error) {\n\t\t\tif (error instanceof DOMException && error.name === 'AbortError') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tctx.sdk.logging?.error('Error fetching authorization URI', error as Error);\n\t\t\tvoid options.onError?.(error as Error);\n\t\t\tloading = false;\n\t\t}\n\t});\n\n\tonDestroy(() => {\n\t\tabortController.abort();\n\t});\n\n\tasync function startSession(loginParams: NativeParams = {}) {\n\t\ttry {\n\t\t\tloading = true;\n\n\t\t\tconst nextState = await ctx.sdk.startSession(loginParams);\n\n\t\t\tif (nextState) {\n\t\t\t\thandleResponse(nextState);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tctx.sdk.logging?.error('Fallback error occurred', error);\n\t\t\t\tvoid options.onFallback?.(error);\n\t\t\t} else {\n\t\t\t\tctx.sdk.logging?.error('Error starting session', error as Error);\n\t\t\t\tvoid options.onError?.(error as Error);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleResponse(nextState: Partial<NativeFlowState>) {\n\t\tif (ctx.sdk.session && !isSessionExpired(ctx.sdk.session)) {\n\t\t\treturn void options.onLogin?.(ctx.sdk.session);\n\t\t}\n\n\t\tconst newState: NativeFlowState = {\n\t\t\thostedUrl: nextState?.hostedUrl ?? state.hostedUrl,\n\t\t\tfinalizeUrl: nextState?.finalizeUrl ?? state.finalizeUrl,\n\t\t\tscreen: nextState?.screen ?? state.screen,\n\t\t\tforms: nextState?.forms ?? state.forms,\n\t\t\tlayout: nextState?.layout ?? state.layout,\n\t\t\tmessages: nextState?.messages ?? {},\n\t\t\tbranding: nextState?.branding ?? state.branding,\n\t\t};\n\n\t\tif (newState.screen !== state.screen) {\n\t\t\tforms = {};\n\t\t\tmessages = {};\n\n\t\t\tfor (const form of newState.forms ?? []) {\n\t\t\t\tforms[form.id] = {};\n\t\t\t\tmessages[form.id] = {};\n\t\t\t}\n\t\t} else {\n\t\t\tctx.sdk.logging?.info(`Updating screen: ${newState.screen}`);\n\t\t}\n\n\t\tfor (const formId of Object.keys(newState.messages ?? {})) {\n\t\t\tif (formId === 'global') {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n\t\t\t\tvoid options.onGlobalMessage?.(newState.messages?.global!);\n\t\t\t} else {\n\t\t\t\tmessages[formId] = newState.messages![formId] ?? {};\n\t\t\t}\n\t\t}\n\n\t\tstate = newState;\n\n\t\tif (!newState.finalizeUrl) {\n\t\t\tloading = false;\n\t\t}\n\t}\n\n\tfunction triggerFallback(message?: string) {\n\t\tctx.sdk.logging?.warn(message ? `Triggering fallback due to: ${message}` : 'Triggering fallback');\n\n\t\tif (!state.hostedUrl) {\n\t\t\tconst error = new Error('No hosted URL provided');\n\t\t\tctx.sdk.logging?.error('Fallback error', error);\n\t\t\tthrow error;\n\t\t}\n\n\t\tvoid options.onFallback?.(new FallbackError(new SvelteURL(state.hostedUrl)));\n\t}\n\n\tfunction triggerClose() {\n\t\tctx.sdk.logging?.debug('Triggering close');\n\t\tvoid options.onClose?.();\n\t}\n\n\tasync function submitForm(formId: string, customBody?: Record<string, unknown>) {\n\t\ttry {\n\t\t\tloading = true;\n\n\t\t\tconst nextState = await ctx.sdk.submitForm(formId, customBody ?? unflattenObject(forms[formId] ?? {}));\n\n\t\t\tif (nextState) {\n\t\t\t\thandleResponse(nextState);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tctx.sdk.logging?.error('Fallback error occurred', error);\n\t\t\t\tvoid options.onFallback?.(error);\n\t\t\t} else {\n\t\t\t\tctx.sdk.logging?.error('Error submitting form', error as Error);\n\t\t\t\tvoid options.onError?.(error as Error);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setFormValue(formId: string, widgetId: string, value: unknown) {\n\t\tif (forms[formId] === undefined) {\n\t\t\tforms[formId] = {};\n\t\t}\n\n\t\tforms[formId][widgetId] = value === '' ? null : value;\n\t}\n\n\tfunction setMessage(formId: string, widgetId: string, value: NativeFlowMessage) {\n\t\tif (messages[formId] === undefined) {\n\t\t\tmessages[formId] = {};\n\t\t}\n\n\t\tmessages[formId][widgetId] = value;\n\t}\n\n\tconst context: LoginContext = {\n\t\tget loading() {\n\t\t\treturn loading;\n\t\t},\n\t\tget forms() {\n\t\t\treturn forms;\n\t\t},\n\t\tget messages() {\n\t\t\treturn messages;\n\t\t},\n\t\tget state() {\n\t\t\treturn state;\n\t\t},\n\t\ttriggerFallback,\n\t\ttriggerClose,\n\t\tsubmitForm,\n\t\tsetFormValue,\n\t\tsetMessage,\n\t};\n\n\tsetContext(STRIVACITY_LOGIN_CONTEXT, context);\n\n\treturn context;\n}\n"],"mappings":"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"}
|
package/dist/server/sdk.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@strivacity/sdk-core/utils"),t=require("@sveltejs/kit"),n=require("@strivacity/sdk-core/server");function r(r){let i=(0,n.createBaseServerSDK)({toRequest:e=>e.request},r);async function a(n,r={}){let a=await i.getSession(n);if(a&&(0,e.isSessionExpired)(a)&&a.refresh_token)try{a=await i.refreshSession(n)}catch{a=null}if(!a){let e=[`embedded`,`native`].includes(i.options.mode)?i.options.loginUri:`${i.options.authUrlPrefix}/login`,a=new URL(e,n.url.origin),o=r.returnTo??`${n.url.pathname}${n.url.search}`;o&&a.searchParams.set(`returnTo`,o),(0,t.redirect)(302,a)}return a}return{get options(){return i.options},handle:async({event:e,resolve:t})=>await i.handler(e)??t(e),requireSession:a,getSession:e=>i.getSession(e),updateSession:(e,t)=>i.updateSession(e,t),refreshSession:e=>i.refreshSession(e),revokeSession:e=>i.revokeSession(e),getEntrySession:e=>i.getEntrySession(e),completeLogin:(e,t)=>i.completeLogin(e,t),logout:(e,t)=>i.logout(e,t),handleLogin:e=>i.handleLogin(e),handleRegister:e=>i.handleRegister(e),handleCallback:e=>i.handleCallback(e),handleRefresh:e=>i.handleRefresh(e),handleRevoke:e=>i.handleRevoke(e),handleEntry:e=>i.handleEntry(e),handleLogout:e=>i.handleLogout(e),handleBackChannelLogout:e=>i.handleBackChannelLogout(e),handler:e=>i.handler(e)}}exports.createServerSDK=r;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@strivacity/sdk-core/utils"),t=require("@sveltejs/kit"),n=require("@strivacity/sdk-core/server");function r(r){let i=(0,n.createBaseServerSDK)({toRequest:e=>e.request},r);async function a(n,r={}){let a=await i.getSession(n);if(a&&(0,e.isSessionExpired)(a,i.options.refreshSkew)&&a.refresh_token)try{a=await i.refreshSession(n)}catch{a=null}if(!a){let e=[`embedded`,`native`].includes(i.options.mode)?i.options.loginUri:`${i.options.authUrlPrefix}/login`,a=new URL(e,n.url.origin),o=r.returnTo??`${n.url.pathname}${n.url.search}`;o&&a.searchParams.set(`returnTo`,o),(0,t.redirect)(302,a)}return a}return{get options(){return i.options},handle:async({event:e,resolve:t})=>await i.handler(e)??t(e),requireSession:a,getSession:e=>i.getSession(e),updateSession:(e,t)=>i.updateSession(e,t),refreshSession:e=>i.refreshSession(e),revokeSession:e=>i.revokeSession(e),getEntrySession:e=>i.getEntrySession(e),completeLogin:(e,t)=>i.completeLogin(e,t),logout:(e,t)=>i.logout(e,t),handleLogin:e=>i.handleLogin(e),handleRegister:e=>i.handleRegister(e),handleCallback:e=>i.handleCallback(e),handleRefresh:e=>i.handleRefresh(e),handleRevoke:e=>i.handleRevoke(e),handleEntry:e=>i.handleEntry(e),handleLogout:e=>i.handleLogout(e),handleBackChannelLogout:e=>i.handleBackChannelLogout(e),handler:e=>i.handler(e)}}exports.createServerSDK=r;
|
|
2
2
|
//# sourceMappingURL=sdk.cjs.map
|
package/dist/server/sdk.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.cjs","names":[],"sources":["../../src/server/sdk.ts"],"sourcesContent":["import type { RequestEvent, Handle } from '@sveltejs/kit';\nimport type { SessionData } from '@strivacity/sdk-core/types';\nimport type { SvelteKitServerSDK, SvelteKitServerSDKInitConfig } from './types';\nimport { redirect } from '@sveltejs/kit';\nimport { isSessionExpired } from '@strivacity/sdk-core/utils';\nimport { createBaseServerSDK } from '@strivacity/sdk-core/server';\n\n/**\n * Creates the Strivacity server SDK for SvelteKit: session management, auth route handlers, and the `handle` hook used in `hooks.server.ts`.\n *\n * @param {SvelteKitServerSDKInitConfig} initConfig - The configuration options for initializing the server SDK.\n * @returns {SvelteKitServerSDK} The initialized server SDK instance.\n */\nexport function createServerSDK(initConfig: SvelteKitServerSDKInitConfig): SvelteKitServerSDK {\n\tconst base = createBaseServerSDK<RequestEvent>(\n\t\t{\n\t\t\ttoRequest: (event) => event.request,\n\t\t},\n\t\tinitConfig,\n\t);\n\n\tasync function requireSession(event: RequestEvent, guardOpts: { returnTo?: string } = {}): Promise<SessionData> {\n\t\tlet session = await base.getSession(event);\n\n\t\tif (session && isSessionExpired(session) && session.refresh_token) {\n\t\t\ttry {\n\t\t\t\tsession = await base.refreshSession(event);\n\t\t\t} catch {\n\t\t\t\tsession = null;\n\t\t\t}\n\t\t}\n\n\t\tif (!session) {\n\t\t\tconst loginUrl = ['embedded', 'native'].includes(base.options.mode) ? base.options.loginUri : `${base.options.authUrlPrefix}/login`;\n\t\t\tconst uri = new URL(loginUrl, event.url.origin);\n\t\t\tconst returnTo = guardOpts.returnTo ?? `${event.url.pathname}${event.url.search}`;\n\n\t\t\tif (returnTo) {\n\t\t\t\turi.searchParams.set('returnTo', returnTo);\n\t\t\t}\n\n\t\t\tredirect(302, uri);\n\t\t}\n\n\t\treturn session;\n\t}\n\n\tconst handle: Handle = async ({ event, resolve }) => {\n\t\tconst response = await base.handler(event);\n\n\t\treturn response ?? resolve(event);\n\t};\n\n\treturn {\n\t\tget options() {\n\t\t\treturn base.options;\n\t\t},\n\t\thandle,\n\t\trequireSession,\n\t\tgetSession: (event) => base.getSession(event),\n\t\tupdateSession: (session, event) => base.updateSession(session, event),\n\t\trefreshSession: (event) => base.refreshSession(event),\n\t\trevokeSession: (event) => base.revokeSession(event),\n\t\tgetEntrySession: (entryUrl) => base.getEntrySession(entryUrl),\n\t\tcompleteLogin: (params, event) => base.completeLogin(params, event),\n\t\tlogout: (postLogoutRedirectUri, event) => base.logout(postLogoutRedirectUri, event),\n\t\thandleLogin: (event) => base.handleLogin(event),\n\t\thandleRegister: (event) => base.handleRegister(event),\n\t\thandleCallback: (event) => base.handleCallback(event),\n\t\thandleRefresh: (event) => base.handleRefresh(event),\n\t\thandleRevoke: (event) => base.handleRevoke(event),\n\t\thandleEntry: (event) => base.handleEntry(event),\n\t\thandleLogout: (event) => base.handleLogout(event),\n\t\thandleBackChannelLogout: (event) => base.handleBackChannelLogout(event),\n\t\thandler: (event) => base.handler(event),\n\t};\n}\n"],"mappings":"mLAaA,SAAgB,EAAgB,EAA8D,CAC7F,IAAM,GAAA,EAAO,EAAA,oBAAA,CACZ,CACC,UAAY,GAAU,EAAM,OAC7B,EACA,CACD,EAEA,eAAe,EAAe,EAAqB,EAAmC,CAAC,EAAyB,CAC/G,IAAI,EAAU,MAAM,EAAK,WAAW,CAAK,EAEzC,GAAI,IAAA,EAAW,EAAA,iBAAA,CAAiB,
|
|
1
|
+
{"version":3,"file":"sdk.cjs","names":[],"sources":["../../src/server/sdk.ts"],"sourcesContent":["import type { RequestEvent, Handle } from '@sveltejs/kit';\nimport type { SessionData } from '@strivacity/sdk-core/types';\nimport type { SvelteKitServerSDK, SvelteKitServerSDKInitConfig } from './types';\nimport { redirect } from '@sveltejs/kit';\nimport { isSessionExpired } from '@strivacity/sdk-core/utils';\nimport { createBaseServerSDK } from '@strivacity/sdk-core/server';\n\n/**\n * Creates the Strivacity server SDK for SvelteKit: session management, auth route handlers, and the `handle` hook used in `hooks.server.ts`.\n *\n * @param {SvelteKitServerSDKInitConfig} initConfig - The configuration options for initializing the server SDK.\n * @returns {SvelteKitServerSDK} The initialized server SDK instance.\n */\nexport function createServerSDK(initConfig: SvelteKitServerSDKInitConfig): SvelteKitServerSDK {\n\tconst base = createBaseServerSDK<RequestEvent>(\n\t\t{\n\t\t\ttoRequest: (event) => event.request,\n\t\t},\n\t\tinitConfig,\n\t);\n\n\tasync function requireSession(event: RequestEvent, guardOpts: { returnTo?: string } = {}): Promise<SessionData> {\n\t\tlet session = await base.getSession(event);\n\n\t\tif (session && isSessionExpired(session, base.options.refreshSkew) && session.refresh_token) {\n\t\t\ttry {\n\t\t\t\tsession = await base.refreshSession(event);\n\t\t\t} catch {\n\t\t\t\tsession = null;\n\t\t\t}\n\t\t}\n\n\t\tif (!session) {\n\t\t\tconst loginUrl = ['embedded', 'native'].includes(base.options.mode) ? base.options.loginUri : `${base.options.authUrlPrefix}/login`;\n\t\t\tconst uri = new URL(loginUrl, event.url.origin);\n\t\t\tconst returnTo = guardOpts.returnTo ?? `${event.url.pathname}${event.url.search}`;\n\n\t\t\tif (returnTo) {\n\t\t\t\turi.searchParams.set('returnTo', returnTo);\n\t\t\t}\n\n\t\t\tredirect(302, uri);\n\t\t}\n\n\t\treturn session;\n\t}\n\n\tconst handle: Handle = async ({ event, resolve }) => {\n\t\tconst response = await base.handler(event);\n\n\t\treturn response ?? resolve(event);\n\t};\n\n\treturn {\n\t\tget options() {\n\t\t\treturn base.options;\n\t\t},\n\t\thandle,\n\t\trequireSession,\n\t\tgetSession: (event) => base.getSession(event),\n\t\tupdateSession: (session, event) => base.updateSession(session, event),\n\t\trefreshSession: (event) => base.refreshSession(event),\n\t\trevokeSession: (event) => base.revokeSession(event),\n\t\tgetEntrySession: (entryUrl) => base.getEntrySession(entryUrl),\n\t\tcompleteLogin: (params, event) => base.completeLogin(params, event),\n\t\tlogout: (postLogoutRedirectUri, event) => base.logout(postLogoutRedirectUri, event),\n\t\thandleLogin: (event) => base.handleLogin(event),\n\t\thandleRegister: (event) => base.handleRegister(event),\n\t\thandleCallback: (event) => base.handleCallback(event),\n\t\thandleRefresh: (event) => base.handleRefresh(event),\n\t\thandleRevoke: (event) => base.handleRevoke(event),\n\t\thandleEntry: (event) => base.handleEntry(event),\n\t\thandleLogout: (event) => base.handleLogout(event),\n\t\thandleBackChannelLogout: (event) => base.handleBackChannelLogout(event),\n\t\thandler: (event) => base.handler(event),\n\t};\n}\n"],"mappings":"mLAaA,SAAgB,EAAgB,EAA8D,CAC7F,IAAM,GAAA,EAAO,EAAA,oBAAA,CACZ,CACC,UAAY,GAAU,EAAM,OAC7B,EACA,CACD,EAEA,eAAe,EAAe,EAAqB,EAAmC,CAAC,EAAyB,CAC/G,IAAI,EAAU,MAAM,EAAK,WAAW,CAAK,EAEzC,GAAI,IAAA,EAAW,EAAA,iBAAA,CAAiB,EAAS,EAAK,QAAQ,WAAW,GAAK,EAAQ,cAC7E,GAAI,CACH,EAAU,MAAM,EAAK,eAAe,CAAK,CAC1C,MAAQ,CACP,EAAU,IACX,CAGD,GAAI,CAAC,EAAS,CACb,IAAM,EAAW,CAAC,WAAY,QAAQ,CAAC,CAAC,SAAS,EAAK,QAAQ,IAAI,EAAI,EAAK,QAAQ,SAAW,GAAG,EAAK,QAAQ,cAAc,QACtH,EAAM,IAAI,IAAI,EAAU,EAAM,IAAI,MAAM,EACxC,EAAW,EAAU,UAAY,GAAG,EAAM,IAAI,WAAW,EAAM,IAAI,SAErE,GACH,EAAI,aAAa,IAAI,WAAY,CAAQ,GAG1C,EAAA,EAAA,SAAA,CAAS,IAAK,CAAG,CAClB,CAEA,OAAO,CACR,CAQA,MAAO,CACN,IAAI,SAAU,CACb,OAAO,EAAK,OACb,EACA,aAV6B,CAAE,QAAO,aAG/B,MAFgB,EAAK,QAAQ,CAAK,GAEtB,EAAQ,CAAK,EAQhC,iBACA,WAAa,GAAU,EAAK,WAAW,CAAK,EAC5C,eAAgB,EAAS,IAAU,EAAK,cAAc,EAAS,CAAK,EACpE,eAAiB,GAAU,EAAK,eAAe,CAAK,EACpD,cAAgB,GAAU,EAAK,cAAc,CAAK,EAClD,gBAAkB,GAAa,EAAK,gBAAgB,CAAQ,EAC5D,eAAgB,EAAQ,IAAU,EAAK,cAAc,EAAQ,CAAK,EAClE,QAAS,EAAuB,IAAU,EAAK,OAAO,EAAuB,CAAK,EAClF,YAAc,GAAU,EAAK,YAAY,CAAK,EAC9C,eAAiB,GAAU,EAAK,eAAe,CAAK,EACpD,eAAiB,GAAU,EAAK,eAAe,CAAK,EACpD,cAAgB,GAAU,EAAK,cAAc,CAAK,EAClD,aAAe,GAAU,EAAK,aAAa,CAAK,EAChD,YAAc,GAAU,EAAK,YAAY,CAAK,EAC9C,aAAe,GAAU,EAAK,aAAa,CAAK,EAChD,wBAA0B,GAAU,EAAK,wBAAwB,CAAK,EACtE,QAAU,GAAU,EAAK,QAAQ,CAAK,CACvC,CACD"}
|
package/dist/server/sdk.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{isSessionExpired as e}from"@strivacity/sdk-core/utils";import{redirect as t}from"@sveltejs/kit";import{createBaseServerSDK as n}from"@strivacity/sdk-core/server";function r(r){let i=n({toRequest:e=>e.request},r);async function a(n,r={}){let a=await i.getSession(n);if(a&&e(a)&&a.refresh_token)try{a=await i.refreshSession(n)}catch{a=null}if(!a){let e=[`embedded`,`native`].includes(i.options.mode)?i.options.loginUri:`${i.options.authUrlPrefix}/login`,a=new URL(e,n.url.origin),o=r.returnTo??`${n.url.pathname}${n.url.search}`;o&&a.searchParams.set(`returnTo`,o),t(302,a)}return a}return{get options(){return i.options},handle:async({event:e,resolve:t})=>await i.handler(e)??t(e),requireSession:a,getSession:e=>i.getSession(e),updateSession:(e,t)=>i.updateSession(e,t),refreshSession:e=>i.refreshSession(e),revokeSession:e=>i.revokeSession(e),getEntrySession:e=>i.getEntrySession(e),completeLogin:(e,t)=>i.completeLogin(e,t),logout:(e,t)=>i.logout(e,t),handleLogin:e=>i.handleLogin(e),handleRegister:e=>i.handleRegister(e),handleCallback:e=>i.handleCallback(e),handleRefresh:e=>i.handleRefresh(e),handleRevoke:e=>i.handleRevoke(e),handleEntry:e=>i.handleEntry(e),handleLogout:e=>i.handleLogout(e),handleBackChannelLogout:e=>i.handleBackChannelLogout(e),handler:e=>i.handler(e)}}export{r as createServerSDK};
|
|
1
|
+
import{isSessionExpired as e}from"@strivacity/sdk-core/utils";import{redirect as t}from"@sveltejs/kit";import{createBaseServerSDK as n}from"@strivacity/sdk-core/server";function r(r){let i=n({toRequest:e=>e.request},r);async function a(n,r={}){let a=await i.getSession(n);if(a&&e(a,i.options.refreshSkew)&&a.refresh_token)try{a=await i.refreshSession(n)}catch{a=null}if(!a){let e=[`embedded`,`native`].includes(i.options.mode)?i.options.loginUri:`${i.options.authUrlPrefix}/login`,a=new URL(e,n.url.origin),o=r.returnTo??`${n.url.pathname}${n.url.search}`;o&&a.searchParams.set(`returnTo`,o),t(302,a)}return a}return{get options(){return i.options},handle:async({event:e,resolve:t})=>await i.handler(e)??t(e),requireSession:a,getSession:e=>i.getSession(e),updateSession:(e,t)=>i.updateSession(e,t),refreshSession:e=>i.refreshSession(e),revokeSession:e=>i.revokeSession(e),getEntrySession:e=>i.getEntrySession(e),completeLogin:(e,t)=>i.completeLogin(e,t),logout:(e,t)=>i.logout(e,t),handleLogin:e=>i.handleLogin(e),handleRegister:e=>i.handleRegister(e),handleCallback:e=>i.handleCallback(e),handleRefresh:e=>i.handleRefresh(e),handleRevoke:e=>i.handleRevoke(e),handleEntry:e=>i.handleEntry(e),handleLogout:e=>i.handleLogout(e),handleBackChannelLogout:e=>i.handleBackChannelLogout(e),handler:e=>i.handler(e)}}export{r as createServerSDK};
|
|
2
2
|
//# sourceMappingURL=sdk.mjs.map
|
package/dist/server/sdk.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.mjs","names":[],"sources":["../../src/server/sdk.ts"],"sourcesContent":["import type { RequestEvent, Handle } from '@sveltejs/kit';\nimport type { SessionData } from '@strivacity/sdk-core/types';\nimport type { SvelteKitServerSDK, SvelteKitServerSDKInitConfig } from './types';\nimport { redirect } from '@sveltejs/kit';\nimport { isSessionExpired } from '@strivacity/sdk-core/utils';\nimport { createBaseServerSDK } from '@strivacity/sdk-core/server';\n\n/**\n * Creates the Strivacity server SDK for SvelteKit: session management, auth route handlers, and the `handle` hook used in `hooks.server.ts`.\n *\n * @param {SvelteKitServerSDKInitConfig} initConfig - The configuration options for initializing the server SDK.\n * @returns {SvelteKitServerSDK} The initialized server SDK instance.\n */\nexport function createServerSDK(initConfig: SvelteKitServerSDKInitConfig): SvelteKitServerSDK {\n\tconst base = createBaseServerSDK<RequestEvent>(\n\t\t{\n\t\t\ttoRequest: (event) => event.request,\n\t\t},\n\t\tinitConfig,\n\t);\n\n\tasync function requireSession(event: RequestEvent, guardOpts: { returnTo?: string } = {}): Promise<SessionData> {\n\t\tlet session = await base.getSession(event);\n\n\t\tif (session && isSessionExpired(session) && session.refresh_token) {\n\t\t\ttry {\n\t\t\t\tsession = await base.refreshSession(event);\n\t\t\t} catch {\n\t\t\t\tsession = null;\n\t\t\t}\n\t\t}\n\n\t\tif (!session) {\n\t\t\tconst loginUrl = ['embedded', 'native'].includes(base.options.mode) ? base.options.loginUri : `${base.options.authUrlPrefix}/login`;\n\t\t\tconst uri = new URL(loginUrl, event.url.origin);\n\t\t\tconst returnTo = guardOpts.returnTo ?? `${event.url.pathname}${event.url.search}`;\n\n\t\t\tif (returnTo) {\n\t\t\t\turi.searchParams.set('returnTo', returnTo);\n\t\t\t}\n\n\t\t\tredirect(302, uri);\n\t\t}\n\n\t\treturn session;\n\t}\n\n\tconst handle: Handle = async ({ event, resolve }) => {\n\t\tconst response = await base.handler(event);\n\n\t\treturn response ?? resolve(event);\n\t};\n\n\treturn {\n\t\tget options() {\n\t\t\treturn base.options;\n\t\t},\n\t\thandle,\n\t\trequireSession,\n\t\tgetSession: (event) => base.getSession(event),\n\t\tupdateSession: (session, event) => base.updateSession(session, event),\n\t\trefreshSession: (event) => base.refreshSession(event),\n\t\trevokeSession: (event) => base.revokeSession(event),\n\t\tgetEntrySession: (entryUrl) => base.getEntrySession(entryUrl),\n\t\tcompleteLogin: (params, event) => base.completeLogin(params, event),\n\t\tlogout: (postLogoutRedirectUri, event) => base.logout(postLogoutRedirectUri, event),\n\t\thandleLogin: (event) => base.handleLogin(event),\n\t\thandleRegister: (event) => base.handleRegister(event),\n\t\thandleCallback: (event) => base.handleCallback(event),\n\t\thandleRefresh: (event) => base.handleRefresh(event),\n\t\thandleRevoke: (event) => base.handleRevoke(event),\n\t\thandleEntry: (event) => base.handleEntry(event),\n\t\thandleLogout: (event) => base.handleLogout(event),\n\t\thandleBackChannelLogout: (event) => base.handleBackChannelLogout(event),\n\t\thandler: (event) => base.handler(event),\n\t};\n}\n"],"mappings":"yKAaA,SAAgB,EAAgB,EAA8D,CAC7F,IAAM,EAAO,EACZ,CACC,UAAY,GAAU,EAAM,OAC7B,EACA,CACD,EAEA,eAAe,EAAe,EAAqB,EAAmC,CAAC,EAAyB,CAC/G,IAAI,EAAU,MAAM,EAAK,WAAW,CAAK,EAEzC,GAAI,GAAW,EAAiB,
|
|
1
|
+
{"version":3,"file":"sdk.mjs","names":[],"sources":["../../src/server/sdk.ts"],"sourcesContent":["import type { RequestEvent, Handle } from '@sveltejs/kit';\nimport type { SessionData } from '@strivacity/sdk-core/types';\nimport type { SvelteKitServerSDK, SvelteKitServerSDKInitConfig } from './types';\nimport { redirect } from '@sveltejs/kit';\nimport { isSessionExpired } from '@strivacity/sdk-core/utils';\nimport { createBaseServerSDK } from '@strivacity/sdk-core/server';\n\n/**\n * Creates the Strivacity server SDK for SvelteKit: session management, auth route handlers, and the `handle` hook used in `hooks.server.ts`.\n *\n * @param {SvelteKitServerSDKInitConfig} initConfig - The configuration options for initializing the server SDK.\n * @returns {SvelteKitServerSDK} The initialized server SDK instance.\n */\nexport function createServerSDK(initConfig: SvelteKitServerSDKInitConfig): SvelteKitServerSDK {\n\tconst base = createBaseServerSDK<RequestEvent>(\n\t\t{\n\t\t\ttoRequest: (event) => event.request,\n\t\t},\n\t\tinitConfig,\n\t);\n\n\tasync function requireSession(event: RequestEvent, guardOpts: { returnTo?: string } = {}): Promise<SessionData> {\n\t\tlet session = await base.getSession(event);\n\n\t\tif (session && isSessionExpired(session, base.options.refreshSkew) && session.refresh_token) {\n\t\t\ttry {\n\t\t\t\tsession = await base.refreshSession(event);\n\t\t\t} catch {\n\t\t\t\tsession = null;\n\t\t\t}\n\t\t}\n\n\t\tif (!session) {\n\t\t\tconst loginUrl = ['embedded', 'native'].includes(base.options.mode) ? base.options.loginUri : `${base.options.authUrlPrefix}/login`;\n\t\t\tconst uri = new URL(loginUrl, event.url.origin);\n\t\t\tconst returnTo = guardOpts.returnTo ?? `${event.url.pathname}${event.url.search}`;\n\n\t\t\tif (returnTo) {\n\t\t\t\turi.searchParams.set('returnTo', returnTo);\n\t\t\t}\n\n\t\t\tredirect(302, uri);\n\t\t}\n\n\t\treturn session;\n\t}\n\n\tconst handle: Handle = async ({ event, resolve }) => {\n\t\tconst response = await base.handler(event);\n\n\t\treturn response ?? resolve(event);\n\t};\n\n\treturn {\n\t\tget options() {\n\t\t\treturn base.options;\n\t\t},\n\t\thandle,\n\t\trequireSession,\n\t\tgetSession: (event) => base.getSession(event),\n\t\tupdateSession: (session, event) => base.updateSession(session, event),\n\t\trefreshSession: (event) => base.refreshSession(event),\n\t\trevokeSession: (event) => base.revokeSession(event),\n\t\tgetEntrySession: (entryUrl) => base.getEntrySession(entryUrl),\n\t\tcompleteLogin: (params, event) => base.completeLogin(params, event),\n\t\tlogout: (postLogoutRedirectUri, event) => base.logout(postLogoutRedirectUri, event),\n\t\thandleLogin: (event) => base.handleLogin(event),\n\t\thandleRegister: (event) => base.handleRegister(event),\n\t\thandleCallback: (event) => base.handleCallback(event),\n\t\thandleRefresh: (event) => base.handleRefresh(event),\n\t\thandleRevoke: (event) => base.handleRevoke(event),\n\t\thandleEntry: (event) => base.handleEntry(event),\n\t\thandleLogout: (event) => base.handleLogout(event),\n\t\thandleBackChannelLogout: (event) => base.handleBackChannelLogout(event),\n\t\thandler: (event) => base.handler(event),\n\t};\n}\n"],"mappings":"yKAaA,SAAgB,EAAgB,EAA8D,CAC7F,IAAM,EAAO,EACZ,CACC,UAAY,GAAU,EAAM,OAC7B,EACA,CACD,EAEA,eAAe,EAAe,EAAqB,EAAmC,CAAC,EAAyB,CAC/G,IAAI,EAAU,MAAM,EAAK,WAAW,CAAK,EAEzC,GAAI,GAAW,EAAiB,EAAS,EAAK,QAAQ,WAAW,GAAK,EAAQ,cAC7E,GAAI,CACH,EAAU,MAAM,EAAK,eAAe,CAAK,CAC1C,MAAQ,CACP,EAAU,IACX,CAGD,GAAI,CAAC,EAAS,CACb,IAAM,EAAW,CAAC,WAAY,QAAQ,CAAC,CAAC,SAAS,EAAK,QAAQ,IAAI,EAAI,EAAK,QAAQ,SAAW,GAAG,EAAK,QAAQ,cAAc,QACtH,EAAM,IAAI,IAAI,EAAU,EAAM,IAAI,MAAM,EACxC,EAAW,EAAU,UAAY,GAAG,EAAM,IAAI,WAAW,EAAM,IAAI,SAErE,GACH,EAAI,aAAa,IAAI,WAAY,CAAQ,EAG1C,EAAS,IAAK,CAAG,CAClB,CAEA,OAAO,CACR,CAQA,MAAO,CACN,IAAI,SAAU,CACb,OAAO,EAAK,OACb,EACA,aAV6B,CAAE,QAAO,aAG/B,MAFgB,EAAK,QAAQ,CAAK,GAEtB,EAAQ,CAAK,EAQhC,iBACA,WAAa,GAAU,EAAK,WAAW,CAAK,EAC5C,eAAgB,EAAS,IAAU,EAAK,cAAc,EAAS,CAAK,EACpE,eAAiB,GAAU,EAAK,eAAe,CAAK,EACpD,cAAgB,GAAU,EAAK,cAAc,CAAK,EAClD,gBAAkB,GAAa,EAAK,gBAAgB,CAAQ,EAC5D,eAAgB,EAAQ,IAAU,EAAK,cAAc,EAAQ,CAAK,EAClE,QAAS,EAAuB,IAAU,EAAK,OAAO,EAAuB,CAAK,EAClF,YAAc,GAAU,EAAK,YAAY,CAAK,EAC9C,eAAiB,GAAU,EAAK,eAAe,CAAK,EACpD,eAAiB,GAAU,EAAK,eAAe,CAAK,EACpD,cAAgB,GAAU,EAAK,cAAc,CAAK,EAClD,aAAe,GAAU,EAAK,aAAa,CAAK,EAChD,YAAc,GAAU,EAAK,YAAY,CAAK,EAC9C,aAAe,GAAU,EAAK,aAAa,CAAK,EAChD,wBAA0B,GAAU,EAAK,wBAAwB,CAAK,EACtE,QAAU,GAAU,EAAK,QAAQ,CAAK,CACvC,CACD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strivacity/sdk-svelte",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.1",
|
|
4
4
|
"description": "Strivacity Svelte SDK client",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "strivacity <opensource@strivacity.com>",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
}
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@strivacity/sdk-core": "4.0.0-beta.
|
|
64
|
+
"@strivacity/sdk-core": "4.0.0-beta.1"
|
|
65
65
|
},
|
|
66
66
|
"peerDependencies": {
|
|
67
67
|
"@sveltejs/kit": ">=2",
|
|
@@ -3,7 +3,7 @@ import { SvelteURL } from 'svelte/reactivity';
|
|
|
3
3
|
import type { RedirectFlow, PopupFlow, EmbeddedFlow, NativeFlow, NativeParams, NativeFlowState, NativeFlowMessage } from '@strivacity/sdk-core/types';
|
|
4
4
|
import type { LoginContext, SDKContext, UseNativeLoginOptions } from '../types';
|
|
5
5
|
import { FallbackError } from '@strivacity/sdk-core/utils/errors';
|
|
6
|
-
import { unflattenObject } from '@strivacity/sdk-core/utils';
|
|
6
|
+
import { isSessionExpired, unflattenObject } from '@strivacity/sdk-core/utils';
|
|
7
7
|
|
|
8
8
|
export const STRIVACITY_SDK = Symbol('strivacity-sdk');
|
|
9
9
|
export const STRIVACITY_LOGIN_CONTEXT = Symbol('strivacity-login-context');
|
|
@@ -100,7 +100,7 @@ export function useNativeLogin(options: UseNativeLoginOptions = {}): LoginContex
|
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
function handleResponse(nextState: Partial<NativeFlowState>) {
|
|
103
|
-
if (ctx.sdk.session) {
|
|
103
|
+
if (ctx.sdk.session && !isSessionExpired(ctx.sdk.session)) {
|
|
104
104
|
return void options.onLogin?.(ctx.sdk.session);
|
|
105
105
|
}
|
|
106
106
|
|
package/src/server/sdk.ts
CHANGED
|
@@ -22,7 +22,7 @@ export function createServerSDK(initConfig: SvelteKitServerSDKInitConfig): Svelt
|
|
|
22
22
|
async function requireSession(event: RequestEvent, guardOpts: { returnTo?: string } = {}): Promise<SessionData> {
|
|
23
23
|
let session = await base.getSession(event);
|
|
24
24
|
|
|
25
|
-
if (session && isSessionExpired(session) && session.refresh_token) {
|
|
25
|
+
if (session && isSessionExpired(session, base.options.refreshSkew) && session.refresh_token) {
|
|
26
26
|
try {
|
|
27
27
|
session = await base.refreshSession(event);
|
|
28
28
|
} catch {
|
|
@@ -112,7 +112,7 @@ describe('useNativeLogin', () => {
|
|
|
112
112
|
});
|
|
113
113
|
|
|
114
114
|
test('calls onLogin and leaves the tracked state untouched when the sdk already has a session', async () => {
|
|
115
|
-
const session = { access_token: 'access-token' } as unknown as SessionData;
|
|
115
|
+
const session = { access_token: 'access-token', expires_at: Math.floor(Date.now() / 1000) + 3600 } as unknown as SessionData;
|
|
116
116
|
const sdk = createMockFlow<NativeFlow>({ session });
|
|
117
117
|
vi.mocked(sdk.startSession).mockResolvedValue({ screen: 'identifier' });
|
|
118
118
|
const onLogin = vi.fn();
|