@strivacity/sdk-svelte 3.0.2 → 4.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1714 -428
  3. package/dist/assets/rolldown-runtime.cjs +1 -0
  4. package/dist/client/components.svelte.cjs +2 -0
  5. package/dist/client/components.svelte.cjs.map +1 -0
  6. package/dist/client/components.svelte.d.ts +11 -0
  7. package/dist/client/components.svelte.mjs +2 -0
  8. package/dist/client/components.svelte.mjs.map +1 -0
  9. package/dist/client/hooks.svelte.cjs +2 -0
  10. package/dist/client/hooks.svelte.cjs.map +1 -0
  11. package/dist/client/hooks.svelte.d.ts +27 -0
  12. package/dist/client/hooks.svelte.mjs +2 -0
  13. package/dist/client/hooks.svelte.mjs.map +1 -0
  14. package/dist/client/index.cjs +1 -0
  15. package/dist/client/index.d.ts +8 -0
  16. package/dist/client/index.mjs +1 -0
  17. package/dist/client/storages.cjs +1 -0
  18. package/dist/client/storages.d.ts +1 -0
  19. package/dist/client/storages.mjs +1 -0
  20. package/dist/client/types.cjs +1 -0
  21. package/dist/client/types.d.ts +238 -0
  22. package/dist/client/types.mjs +1 -0
  23. package/dist/client/utils.cjs +1 -0
  24. package/dist/client/utils.d.ts +1 -0
  25. package/dist/client/utils.mjs +1 -0
  26. package/dist/errors.cjs +1 -0
  27. package/dist/errors.d.ts +1 -0
  28. package/dist/errors.mjs +1 -0
  29. package/dist/server/index.cjs +1 -0
  30. package/dist/server/index.d.ts +6 -0
  31. package/dist/server/index.mjs +1 -0
  32. package/dist/server/sdk.cjs +2 -0
  33. package/dist/server/sdk.cjs.map +1 -0
  34. package/dist/server/sdk.d.ts +8 -0
  35. package/dist/server/sdk.mjs +2 -0
  36. package/dist/server/sdk.mjs.map +1 -0
  37. package/dist/server/storages.cjs +2 -0
  38. package/dist/server/storages.cjs.map +1 -0
  39. package/dist/server/storages.d.ts +10 -0
  40. package/dist/server/storages.mjs +2 -0
  41. package/dist/server/storages.mjs.map +1 -0
  42. package/dist/server/types.cjs +1 -0
  43. package/dist/server/types.d.ts +35 -0
  44. package/dist/server/types.mjs +1 -0
  45. package/dist/server/utils.cjs +1 -0
  46. package/dist/server/utils.d.ts +1 -0
  47. package/dist/server/utils.mjs +1 -0
  48. package/dist/types.cjs +1 -2
  49. package/dist/types.d.ts +2 -181
  50. package/dist/types.mjs +1 -2
  51. package/eslint.config.mjs +3 -0
  52. package/package.json +59 -11
  53. package/project.json +47 -0
  54. package/src/client/components.svelte.ts +125 -0
  55. package/src/client/hooks.svelte.ts +221 -0
  56. package/src/client/index.ts +8 -0
  57. package/src/client/storages.ts +1 -0
  58. package/src/client/types.ts +299 -0
  59. package/src/client/utils.ts +1 -0
  60. package/src/errors.ts +1 -0
  61. package/src/server/index.ts +6 -0
  62. package/src/server/sdk.ts +77 -0
  63. package/src/server/storages.ts +22 -0
  64. package/src/server/types.ts +49 -0
  65. package/src/server/utils.ts +1 -0
  66. package/src/types.ts +2 -0
  67. package/svelte.config.js +5 -0
  68. package/testing/fixtures/AuthProviderHost.svelte +29 -0
  69. package/testing/fixtures/Harness.svelte +30 -0
  70. package/testing/fixtures/NativeLoginConsumer.svelte +21 -0
  71. package/testing/fixtures/NativeLoginContextConsumer.svelte +10 -0
  72. package/testing/fixtures/StrivacityConsumer.svelte +10 -0
  73. package/testing/tests/components.spec.ts +183 -0
  74. package/testing/tests/errors.spec.ts +10 -0
  75. package/testing/tests/hooks.spec.ts +275 -0
  76. package/testing/tests/index.spec.ts +199 -0
  77. package/testing/tests/server/sdk.spec.ts +214 -0
  78. package/testing/tests/server/storages.spec.ts +50 -0
  79. package/testing/tests/server/utils.spec.ts +10 -0
  80. package/testing/tests/storages.spec.ts +10 -0
  81. package/testing/tests/utils.spec.ts +10 -0
  82. package/testing/utils/mount.ts +83 -0
  83. package/tsconfig.app.json +4 -0
  84. package/tsconfig.json +6 -0
  85. package/vite.config.mts +52 -0
  86. package/dist/AuthProvider.cjs +0 -2
  87. package/dist/AuthProvider.cjs.map +0 -1
  88. package/dist/AuthProvider.mjs +0 -2
  89. package/dist/AuthProvider.mjs.map +0 -1
  90. package/dist/AuthProvider.svelte.d.ts +0 -1
  91. package/dist/LoginRenderer.cjs +0 -2
  92. package/dist/LoginRenderer.cjs.map +0 -1
  93. package/dist/LoginRenderer.mjs +0 -2
  94. package/dist/LoginRenderer.mjs.map +0 -1
  95. package/dist/LoginRenderer.svelte.d.ts +0 -1
  96. package/dist/composables.cjs +0 -2
  97. package/dist/composables.cjs.map +0 -1
  98. package/dist/composables.d.ts +0 -12
  99. package/dist/composables.mjs +0 -2
  100. package/dist/composables.mjs.map +0 -1
  101. package/dist/index.cjs +0 -2
  102. package/dist/index.cjs.map +0 -1
  103. package/dist/index.d.ts +0 -13
  104. package/dist/index.mjs +0 -2
  105. package/dist/index.mjs.map +0 -1
  106. package/dist/types.cjs.map +0 -1
  107. package/dist/types.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(e,t,n)=>(s(e,t,`default`),n&&s(n,t,`default`)),l=(n,r,o)=>(o=n==null?{}:e(i(n)),s(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return o}});
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../assets/rolldown-runtime.cjs"),t=require("./hooks.svelte.cjs");let n=require("svelte/internal/client");n=e.r(n);let r=require("svelte"),i=require("@strivacity/sdk-core");function a(e){let a,o=null,s=n.state(!0),c=n.state(n.proxy(globalThis.navigator?.language??`en-US`)),l=n.state(!1),u=n.state(null),d=n.state(null),f=n.state(null),p=n.state(!0),m=n.state(null),h=async()=>{let e=await a.isAuthenticated;n.get(s)&&n.set(s,!1),a.language!==n.get(c)&&n.set(c,a.language,!0),e!==n.get(l)&&n.set(l,e,!0),a.idTokenClaims!==n.get(u)&&n.set(u,a.idTokenClaims||null,!0),a.accessToken!==n.get(d)&&n.set(d,a.accessToken||null,!0),a.refreshToken!==n.get(f)&&n.set(f,a.refreshToken||null,!0),a.accessTokenExpired!==n.get(p)&&n.set(p,a.accessTokenExpired,!0),a.accessTokenExpirationDate!==n.get(m)&&n.set(m,a.accessTokenExpirationDate||null,!0)};function g(){a=(0,i.initFlow)(e.options),o=a.subscribeToAllEvents(h),n.user_effect(()=>{let t=e.session?.();t&&(a.session=t),h()})}(0,r.onDestroy)(()=>{o?.dispose()}),typeof window<`u`&&g();let _={get sdk(){return a},get loading(){return n.get(s)},get language(){return n.get(c)},get isAuthenticated(){return n.get(l)},get idTokenClaims(){return n.get(u)},get accessToken(){return n.get(d)},get refreshToken(){return n.get(f)},get accessTokenExpired(){return n.get(p)},get accessTokenExpirationDate(){return n.get(m)},init:()=>a.init(),subscribeToEvent:(...e)=>a.subscribeToEvent(...e),subscribeToAllEvents:(...e)=>a.subscribeToAllEvents(...e),checkAuthentication:(...e)=>a.checkAuthentication(...e),tokenExchange:(...e)=>a.tokenExchange(...e),handleCallback:(...e)=>a.handleCallback(...e),refresh:()=>a.refresh(),revoke:()=>a.revoke(),logout:(...e)=>a.logout(...e),login:(...e)=>a.login(...e),register:(...e)=>a.register(...e),entry:(...e)=>a.entry(...e)};return(0,r.setContext)(t.STRIVACITY_SDK,_),_}exports.createStyAuthProvider=a;
2
+ //# sourceMappingURL=components.svelte.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.svelte.cjs","names":[],"sources":["../../src/client/components.svelte.ts"],"sourcesContent":["import { setContext, onDestroy } from 'svelte';\nimport { initFlow } from '@strivacity/sdk-core';\nimport type { IdTokenClaims, RedirectFlow, PopupFlow, EmbeddedFlow, NativeFlow, SDKContext, SDKInstance, StyAuthProviderProps } from '../types';\nimport { STRIVACITY_SDK } from './hooks.svelte';\n\n/**\n * The `StyAuthProvider` component is a Svelte context provider that initializes the Strivacity SDK and provides its state and methods to the rest of the application.\n *\n * @param {StyAuthProviderProps} props - The properties for the `StyAuthProvider` component.\n * @param {SDKInitConfig} props.options - The configuration options for initializing the Strivacity SDK.\n * @param {() => SessionData | null | undefined} [props.session] - Optional getter for session data to initialize/refresh the SDK with.\n *\n * @returns {SDKContext<RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow>} A Svelte context provider that wraps its children and provides access to the Strivacity SDK.\n */\nexport function createStyAuthProvider(props: StyAuthProviderProps): SDKContext<RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow> {\n\tlet sdk: SDKInstance;\n\tlet subscriptions: ReturnType<SDKInstance['subscribeToAllEvents']> | null = null;\n\n\tlet loading = $state<boolean>(true);\n\tlet language = $state<string>(globalThis.navigator?.language ?? 'en-US');\n\tlet isAuthenticated = $state<boolean>(false);\n\tlet idTokenClaims = $state<IdTokenClaims | null>(null);\n\tlet accessToken = $state<string | null>(null);\n\tlet refreshToken = $state<string | null>(null);\n\tlet accessTokenExpired = $state<boolean>(true);\n\tlet accessTokenExpirationDate = $state<number | null>(null);\n\n\tconst updateSession = async () => {\n\t\tconst authenticated = await sdk.isAuthenticated;\n\n\t\tif (loading) {\n\t\t\tloading = false;\n\t\t}\n\t\tif (sdk.language !== language) {\n\t\t\tlanguage = sdk.language;\n\t\t}\n\t\tif (authenticated !== isAuthenticated) {\n\t\t\tisAuthenticated = authenticated;\n\t\t}\n\t\tif (sdk.idTokenClaims !== idTokenClaims) {\n\t\t\tidTokenClaims = sdk.idTokenClaims || null;\n\t\t}\n\t\tif (sdk.accessToken !== accessToken) {\n\t\t\taccessToken = sdk.accessToken || null;\n\t\t}\n\t\tif (sdk.refreshToken !== refreshToken) {\n\t\t\trefreshToken = sdk.refreshToken || null;\n\t\t}\n\t\tif (sdk.accessTokenExpired !== accessTokenExpired) {\n\t\t\taccessTokenExpired = sdk.accessTokenExpired;\n\t\t}\n\t\tif (sdk.accessTokenExpirationDate !== accessTokenExpirationDate) {\n\t\t\taccessTokenExpirationDate = sdk.accessTokenExpirationDate || null;\n\t\t}\n\t};\n\n\tfunction onInit() {\n\t\tsdk = initFlow(props.options as never);\n\t\tsubscriptions = sdk.subscribeToAllEvents(updateSession);\n\n\t\t$effect(() => {\n\t\t\tconst session = props.session?.();\n\n\t\t\tif (session) {\n\t\t\t\tsdk.session = session;\n\t\t\t}\n\n\t\t\tvoid updateSession();\n\t\t});\n\t}\n\n\tonDestroy(() => {\n\t\tsubscriptions?.dispose();\n\t});\n\n\tif (typeof window !== 'undefined') {\n\t\tonInit();\n\t}\n\n\tconst contextValue: SDKContext<RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow> = {\n\t\tget sdk() {\n\t\t\treturn sdk;\n\t\t},\n\t\tget loading() {\n\t\t\treturn loading;\n\t\t},\n\t\tget language() {\n\t\t\treturn language;\n\t\t},\n\t\tget isAuthenticated() {\n\t\t\treturn isAuthenticated;\n\t\t},\n\t\tget idTokenClaims() {\n\t\t\treturn idTokenClaims;\n\t\t},\n\t\tget accessToken() {\n\t\t\treturn accessToken;\n\t\t},\n\t\tget refreshToken() {\n\t\t\treturn refreshToken;\n\t\t},\n\t\tget accessTokenExpired() {\n\t\t\treturn accessTokenExpired;\n\t\t},\n\t\tget accessTokenExpirationDate() {\n\t\t\treturn accessTokenExpirationDate;\n\t\t},\n\t\tinit: () => sdk.init(),\n\t\tsubscribeToEvent: ((...args: Parameters<typeof sdk.subscribeToEvent>) => sdk.subscribeToEvent(...args)) as typeof sdk.subscribeToEvent,\n\t\tsubscribeToAllEvents: (...args: Parameters<typeof sdk.subscribeToAllEvents>) => sdk.subscribeToAllEvents(...args),\n\t\tcheckAuthentication: (...args: Parameters<typeof sdk.checkAuthentication>) => sdk.checkAuthentication(...args),\n\t\ttokenExchange: (...args: Parameters<typeof sdk.tokenExchange>) => sdk.tokenExchange(...args),\n\t\thandleCallback: (...args: Parameters<typeof sdk.handleCallback>) => sdk.handleCallback(...args),\n\t\trefresh: () => sdk.refresh(),\n\t\trevoke: () => sdk.revoke(),\n\t\tlogout: (...args: Parameters<typeof sdk.logout>) => sdk.logout(...args),\n\t\tlogin: (...args: Parameters<typeof sdk.login>) => sdk.login(...args),\n\t\tregister: (...args: Parameters<typeof sdk.register>) => sdk.register(...args),\n\t\tentry: (...args: Parameters<typeof sdk.entry>) => sdk.entry(...args),\n\t};\n\n\tsetContext(STRIVACITY_SDK, contextValue);\n\n\treturn contextValue;\n}\n"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { RedirectFlow, PopupFlow, EmbeddedFlow, NativeFlow, SDKContext, StyAuthProviderProps } from '../types';
2
+ /**
3
+ * The `StyAuthProvider` component is a Svelte context provider that initializes the Strivacity SDK and provides its state and methods to the rest of the application.
4
+ *
5
+ * @param {StyAuthProviderProps} props - The properties for the `StyAuthProvider` component.
6
+ * @param {SDKInitConfig} props.options - The configuration options for initializing the Strivacity SDK.
7
+ * @param {() => SessionData | null | undefined} [props.session] - Optional getter for session data to initialize/refresh the SDK with.
8
+ *
9
+ * @returns {SDKContext<RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow>} A Svelte context provider that wraps its children and provides access to the Strivacity SDK.
10
+ */
11
+ export declare function createStyAuthProvider(props: StyAuthProviderProps): SDKContext<RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow>;
@@ -0,0 +1,2 @@
1
+ import{STRIVACITY_SDK as e}from"./hooks.svelte.mjs";import*as t from"svelte/internal/client";import{onDestroy as n,setContext as r}from"svelte";import{initFlow as i}from"@strivacity/sdk-core";function a(a){let o,s=null,c=t.state(!0),l=t.state(t.proxy(globalThis.navigator?.language??`en-US`)),u=t.state(!1),d=t.state(null),f=t.state(null),p=t.state(null),m=t.state(!0),h=t.state(null),g=async()=>{let e=await o.isAuthenticated;t.get(c)&&t.set(c,!1),o.language!==t.get(l)&&t.set(l,o.language,!0),e!==t.get(u)&&t.set(u,e,!0),o.idTokenClaims!==t.get(d)&&t.set(d,o.idTokenClaims||null,!0),o.accessToken!==t.get(f)&&t.set(f,o.accessToken||null,!0),o.refreshToken!==t.get(p)&&t.set(p,o.refreshToken||null,!0),o.accessTokenExpired!==t.get(m)&&t.set(m,o.accessTokenExpired,!0),o.accessTokenExpirationDate!==t.get(h)&&t.set(h,o.accessTokenExpirationDate||null,!0)};function _(){o=i(a.options),s=o.subscribeToAllEvents(g),t.user_effect(()=>{let e=a.session?.();e&&(o.session=e),g()})}n(()=>{s?.dispose()}),typeof window<`u`&&_();let v={get sdk(){return o},get loading(){return t.get(c)},get language(){return t.get(l)},get isAuthenticated(){return t.get(u)},get idTokenClaims(){return t.get(d)},get accessToken(){return t.get(f)},get refreshToken(){return t.get(p)},get accessTokenExpired(){return t.get(m)},get accessTokenExpirationDate(){return t.get(h)},init:()=>o.init(),subscribeToEvent:(...e)=>o.subscribeToEvent(...e),subscribeToAllEvents:(...e)=>o.subscribeToAllEvents(...e),checkAuthentication:(...e)=>o.checkAuthentication(...e),tokenExchange:(...e)=>o.tokenExchange(...e),handleCallback:(...e)=>o.handleCallback(...e),refresh:()=>o.refresh(),revoke:()=>o.revoke(),logout:(...e)=>o.logout(...e),login:(...e)=>o.login(...e),register:(...e)=>o.register(...e),entry:(...e)=>o.entry(...e)};return r(e,v),v}export{a as createStyAuthProvider};
2
+ //# sourceMappingURL=components.svelte.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.svelte.mjs","names":[],"sources":["../../src/client/components.svelte.ts"],"sourcesContent":["import { setContext, onDestroy } from 'svelte';\nimport { initFlow } from '@strivacity/sdk-core';\nimport type { IdTokenClaims, RedirectFlow, PopupFlow, EmbeddedFlow, NativeFlow, SDKContext, SDKInstance, StyAuthProviderProps } from '../types';\nimport { STRIVACITY_SDK } from './hooks.svelte';\n\n/**\n * The `StyAuthProvider` component is a Svelte context provider that initializes the Strivacity SDK and provides its state and methods to the rest of the application.\n *\n * @param {StyAuthProviderProps} props - The properties for the `StyAuthProvider` component.\n * @param {SDKInitConfig} props.options - The configuration options for initializing the Strivacity SDK.\n * @param {() => SessionData | null | undefined} [props.session] - Optional getter for session data to initialize/refresh the SDK with.\n *\n * @returns {SDKContext<RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow>} A Svelte context provider that wraps its children and provides access to the Strivacity SDK.\n */\nexport function createStyAuthProvider(props: StyAuthProviderProps): SDKContext<RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow> {\n\tlet sdk: SDKInstance;\n\tlet subscriptions: ReturnType<SDKInstance['subscribeToAllEvents']> | null = null;\n\n\tlet loading = $state<boolean>(true);\n\tlet language = $state<string>(globalThis.navigator?.language ?? 'en-US');\n\tlet isAuthenticated = $state<boolean>(false);\n\tlet idTokenClaims = $state<IdTokenClaims | null>(null);\n\tlet accessToken = $state<string | null>(null);\n\tlet refreshToken = $state<string | null>(null);\n\tlet accessTokenExpired = $state<boolean>(true);\n\tlet accessTokenExpirationDate = $state<number | null>(null);\n\n\tconst updateSession = async () => {\n\t\tconst authenticated = await sdk.isAuthenticated;\n\n\t\tif (loading) {\n\t\t\tloading = false;\n\t\t}\n\t\tif (sdk.language !== language) {\n\t\t\tlanguage = sdk.language;\n\t\t}\n\t\tif (authenticated !== isAuthenticated) {\n\t\t\tisAuthenticated = authenticated;\n\t\t}\n\t\tif (sdk.idTokenClaims !== idTokenClaims) {\n\t\t\tidTokenClaims = sdk.idTokenClaims || null;\n\t\t}\n\t\tif (sdk.accessToken !== accessToken) {\n\t\t\taccessToken = sdk.accessToken || null;\n\t\t}\n\t\tif (sdk.refreshToken !== refreshToken) {\n\t\t\trefreshToken = sdk.refreshToken || null;\n\t\t}\n\t\tif (sdk.accessTokenExpired !== accessTokenExpired) {\n\t\t\taccessTokenExpired = sdk.accessTokenExpired;\n\t\t}\n\t\tif (sdk.accessTokenExpirationDate !== accessTokenExpirationDate) {\n\t\t\taccessTokenExpirationDate = sdk.accessTokenExpirationDate || null;\n\t\t}\n\t};\n\n\tfunction onInit() {\n\t\tsdk = initFlow(props.options as never);\n\t\tsubscriptions = sdk.subscribeToAllEvents(updateSession);\n\n\t\t$effect(() => {\n\t\t\tconst session = props.session?.();\n\n\t\t\tif (session) {\n\t\t\t\tsdk.session = session;\n\t\t\t}\n\n\t\t\tvoid updateSession();\n\t\t});\n\t}\n\n\tonDestroy(() => {\n\t\tsubscriptions?.dispose();\n\t});\n\n\tif (typeof window !== 'undefined') {\n\t\tonInit();\n\t}\n\n\tconst contextValue: SDKContext<RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow> = {\n\t\tget sdk() {\n\t\t\treturn sdk;\n\t\t},\n\t\tget loading() {\n\t\t\treturn loading;\n\t\t},\n\t\tget language() {\n\t\t\treturn language;\n\t\t},\n\t\tget isAuthenticated() {\n\t\t\treturn isAuthenticated;\n\t\t},\n\t\tget idTokenClaims() {\n\t\t\treturn idTokenClaims;\n\t\t},\n\t\tget accessToken() {\n\t\t\treturn accessToken;\n\t\t},\n\t\tget refreshToken() {\n\t\t\treturn refreshToken;\n\t\t},\n\t\tget accessTokenExpired() {\n\t\t\treturn accessTokenExpired;\n\t\t},\n\t\tget accessTokenExpirationDate() {\n\t\t\treturn accessTokenExpirationDate;\n\t\t},\n\t\tinit: () => sdk.init(),\n\t\tsubscribeToEvent: ((...args: Parameters<typeof sdk.subscribeToEvent>) => sdk.subscribeToEvent(...args)) as typeof sdk.subscribeToEvent,\n\t\tsubscribeToAllEvents: (...args: Parameters<typeof sdk.subscribeToAllEvents>) => sdk.subscribeToAllEvents(...args),\n\t\tcheckAuthentication: (...args: Parameters<typeof sdk.checkAuthentication>) => sdk.checkAuthentication(...args),\n\t\ttokenExchange: (...args: Parameters<typeof sdk.tokenExchange>) => sdk.tokenExchange(...args),\n\t\thandleCallback: (...args: Parameters<typeof sdk.handleCallback>) => sdk.handleCallback(...args),\n\t\trefresh: () => sdk.refresh(),\n\t\trevoke: () => sdk.revoke(),\n\t\tlogout: (...args: Parameters<typeof sdk.logout>) => sdk.logout(...args),\n\t\tlogin: (...args: Parameters<typeof sdk.login>) => sdk.login(...args),\n\t\tregister: (...args: Parameters<typeof sdk.register>) => sdk.register(...args),\n\t\tentry: (...args: Parameters<typeof sdk.entry>) => sdk.entry(...args),\n\t};\n\n\tsetContext(STRIVACITY_SDK, contextValue);\n\n\treturn contextValue;\n}\n"],"mappings":"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"}
@@ -0,0 +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 n={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(n.screen!==r.get(p).screen){r.set(d,{},!0),r.set(f,{},!0);for(let e of n.forms??[])r.get(d)[e.id]={},r.get(f)[e.id]={}}else l.sdk.logging?.info(`Updating screen: ${n.screen}`);for(let t of Object.keys(n.messages??{}))t===`global`?e.onGlobalMessage?.(n.messages?.global):r.get(f)[t]=n.messages[t]??{};r.set(p,n,!0),n.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
+ //# sourceMappingURL=hooks.svelte.cjs.map
@@ -0,0 +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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"}
@@ -0,0 +1,27 @@
1
+ import { RedirectFlow, PopupFlow, EmbeddedFlow, NativeFlow } from '@strivacity/sdk-core/types';
2
+ import { LoginContext, SDKContext, UseNativeLoginOptions } from '../types';
3
+ export declare const STRIVACITY_SDK: unique symbol;
4
+ export declare const STRIVACITY_LOGIN_CONTEXT: unique symbol;
5
+ /**
6
+ * Access the Strivacity SDK context.
7
+ *
8
+ * @template T - The type of the Strivacity SDK flow (RedirectFlow, PopupFlow, NativeFlow, or EmbeddedFlow).
9
+ * @returns {SDKContext<T>} - The Strivacity SDK context.
10
+ * @throws {Error} - If the Strivacity SDK context is not found.
11
+ */
12
+ export declare const useStrivacity: <T extends RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow = RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow>() => SDKContext<T>;
13
+ /**
14
+ * Access the Strivacity SDK context specifically for native login flow.
15
+ *
16
+ * @returns {LoginContext} - The native flow context.
17
+ * @throws {Error} - If the Strivacity SDK context is not found.
18
+ */
19
+ export declare const useNativeLoginContext: () => LoginContext;
20
+ /**
21
+ * Manages a native login flow session.
22
+ *
23
+ * @param {UseNativeLoginOptions} [options] - Optional options for the login session.
24
+ * @returns {LoginContext} - The native flow context.
25
+ * @throws {Error} - If the Strivacity SDK context is not found.
26
+ */
27
+ export declare function useNativeLogin(options?: UseNativeLoginOptions): LoginContext;
@@ -0,0 +1,2 @@
1
+ import{FallbackError as e}from"@strivacity/sdk-core/utils/errors";import{unflattenObject as t}from"@strivacity/sdk-core/utils";import*as n from"svelte/internal/client";import{getContext as r,onDestroy as i,onMount as a,setContext as o}from"svelte";import{SvelteURL as s}from"svelte/reactivity";var c=Symbol(`strivacity-sdk`),l=Symbol(`strivacity-login-context`),u=()=>{let e=r(c);if(!e)throw Error(`Missing SDK context`);return e},d=()=>{let e=r(l);if(!e)throw Error(`Missing SDK native login context`);return e};function f(r={}){let c=new AbortController,d=u(),f=n.state(!0),p=n.state(n.proxy({})),m=n.state(n.proxy({})),h=n.state(n.proxy({}));a(async()=>{await d.init();try{await g(r.params)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`)return;d.sdk.logging?.error(`Error fetching authorization URI`,e),r.onError?.(e),n.set(f,!1)}}),i(()=>{c.abort()});async function g(t={}){try{n.set(f,!0);let e=await d.sdk.startSession(t);e&&_(e)}catch(t){t instanceof e?(d.sdk.logging?.error(`Fallback error occurred`,t),r.onFallback?.(t)):(d.sdk.logging?.error(`Error starting session`,t),r.onError?.(t))}}function _(e){if(d.sdk.session){r.onLogin?.(d.sdk.session);return}let t={hostedUrl:e?.hostedUrl??n.get(h).hostedUrl,finalizeUrl:e?.finalizeUrl??n.get(h).finalizeUrl,screen:e?.screen??n.get(h).screen,forms:e?.forms??n.get(h).forms,layout:e?.layout??n.get(h).layout,messages:e?.messages??{},branding:e?.branding??n.get(h).branding};if(t.screen!==n.get(h).screen){n.set(p,{},!0),n.set(m,{},!0);for(let e of t.forms??[])n.get(p)[e.id]={},n.get(m)[e.id]={}}else d.sdk.logging?.info(`Updating screen: ${t.screen}`);for(let e of Object.keys(t.messages??{}))e===`global`?r.onGlobalMessage?.(t.messages?.global):n.get(m)[e]=t.messages[e]??{};n.set(h,t,!0),t.finalizeUrl||n.set(f,!1)}function v(t){if(d.sdk.logging?.warn(t?`Triggering fallback due to: ${t}`:`Triggering fallback`),!n.get(h).hostedUrl){let e=Error(`No hosted URL provided`);throw d.sdk.logging?.error(`Fallback error`,e),e}r.onFallback?.(new e(new s(n.get(h).hostedUrl)))}function y(){d.sdk.logging?.debug(`Triggering close`),r.onClose?.()}async function b(i,a){try{n.set(f,!0);let e=await d.sdk.submitForm(i,a??t(n.get(p)[i]??{}));e&&_(e)}catch(t){t instanceof e?(d.sdk.logging?.error(`Fallback error occurred`,t),r.onFallback?.(t)):(d.sdk.logging?.error(`Error submitting form`,t),r.onError?.(t))}}function x(e,t,r){n.get(p)[e]===void 0&&(n.get(p)[e]={}),n.get(p)[e][t]=r===``?null:r}function S(e,t,r){n.get(m)[e]===void 0&&(n.get(m)[e]={}),n.get(m)[e][t]=r}let C={get loading(){return n.get(f)},get forms(){return n.get(p)},get messages(){return n.get(m)},get state(){return n.get(h)},triggerFallback:v,triggerClose:y,submitForm:b,setFormValue:x,setMessage:S};return o(l,C),C}export{l as STRIVACITY_LOGIN_CONTEXT,c as STRIVACITY_SDK,f as useNativeLogin,d as useNativeLoginContext,u as useStrivacity};
2
+ //# sourceMappingURL=hooks.svelte.mjs.map
@@ -0,0 +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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"}
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require("../assets/rolldown-runtime.cjs"),require("./types.cjs");const e=require("./hooks.svelte.cjs"),t=require("./components.svelte.cjs");require("./storages.cjs"),require("./utils.cjs"),exports.STRIVACITY_LOGIN_CONTEXT=e.STRIVACITY_LOGIN_CONTEXT,exports.STRIVACITY_SDK=e.STRIVACITY_SDK,exports.createStyAuthProvider=t.createStyAuthProvider,exports.useNativeLogin=e.useNativeLogin,exports.useNativeLoginContext=e.useNativeLoginContext,exports.useStrivacity=e.useStrivacity;var n=require("@strivacity/sdk-core/flows");Object.keys(n).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return n[e]}})});var r=require("@strivacity/sdk-core/handlers");Object.keys(r).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return r[e]}})});var i=require("@strivacity/sdk-core/utils");Object.keys(i).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return i[e]}})});var a=require("@strivacity/sdk-core/types");Object.keys(a).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return a[e]}})});var o=require("@strivacity/sdk-core/storages");Object.keys(o).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return o[e]}})});
@@ -0,0 +1,8 @@
1
+ export * from '@strivacity/sdk-core/flows';
2
+ export * from '@strivacity/sdk-core/handlers';
3
+ export * from '@strivacity/sdk-core/utils';
4
+ export * from './components.svelte';
5
+ export * from './hooks.svelte';
6
+ export * from './storages';
7
+ export * from './types';
8
+ export * from './utils';
@@ -0,0 +1 @@
1
+ import"./types.mjs";import{STRIVACITY_LOGIN_CONTEXT as e,STRIVACITY_SDK as t,useNativeLogin as n,useNativeLoginContext as r,useStrivacity as i}from"./hooks.svelte.mjs";import{createStyAuthProvider as a}from"./components.svelte.mjs";import"./storages.mjs";import"./utils.mjs";export*from"@strivacity/sdk-core/types";export*from"@strivacity/sdk-core/utils";export*from"@strivacity/sdk-core/storages";export*from"@strivacity/sdk-core/flows";export*from"@strivacity/sdk-core/handlers";export{e as STRIVACITY_LOGIN_CONTEXT,t as STRIVACITY_SDK,a as createStyAuthProvider,n as useNativeLogin,r as useNativeLoginContext,i as useStrivacity};
@@ -0,0 +1 @@
1
+ require("../assets/rolldown-runtime.cjs");var e=require("@strivacity/sdk-core/storages");Object.keys(e).forEach(function(t){t!=="default"&&!Object.prototype.hasOwnProperty.call(exports,t)&&Object.defineProperty(exports,t,{enumerable:!0,get:function(){return e[t]}})});
@@ -0,0 +1 @@
1
+ export * from '@strivacity/sdk-core/storages';
@@ -0,0 +1 @@
1
+ export*from"@strivacity/sdk-core/storages";
@@ -0,0 +1 @@
1
+ require("../assets/rolldown-runtime.cjs");var e=require("@strivacity/sdk-core/types");Object.keys(e).forEach(function(t){t!=="default"&&!Object.prototype.hasOwnProperty.call(exports,t)&&Object.defineProperty(exports,t,{enumerable:!0,get:function(){return e[t]}})});
@@ -0,0 +1,238 @@
1
+ import { IdTokenClaims, RedirectFlow, PopupFlow, NativeFlow, EmbeddedFlow, initFlow, NativeParams, NativeFlowState, SessionData, NativeFlowMessage, SDKInitConfig } from '@strivacity/sdk-core';
2
+ import { FallbackError } from '@strivacity/sdk-core/utils';
3
+ export * from '@strivacity/sdk-core/types';
4
+ export type SDKContext<Flow extends RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow> = {
5
+ /**
6
+ * The underlying Strivacity SDK flow instance.
7
+ */
8
+ readonly sdk: Flow;
9
+ /**
10
+ * A boolean indicating whether the SDK is still loading.
11
+ */
12
+ readonly loading: boolean;
13
+ /**
14
+ * BCP 47 language code representing the current language of the SDK.
15
+ */
16
+ readonly language: string;
17
+ /**
18
+ * A boolean ref indicating whether the user is authenticated.
19
+ */
20
+ readonly isAuthenticated: boolean;
21
+ /**
22
+ * The claims from the ID token, if available.
23
+ */
24
+ readonly idTokenClaims: IdTokenClaims | null;
25
+ /**
26
+ * The access token, if available.
27
+ */
28
+ readonly accessToken: string | null;
29
+ /**
30
+ * The refresh token, if available.
31
+ */
32
+ readonly refreshToken: string | null;
33
+ /**
34
+ * A boolean ref indicating whether the access token has expired.
35
+ */
36
+ readonly accessTokenExpired: boolean;
37
+ /**
38
+ * The expiration date of the access token, if available.
39
+ */
40
+ readonly accessTokenExpirationDate: number | null;
41
+ /**
42
+ * Subscribes to a specific SDK event.
43
+ */
44
+ subscribeToEvent: Flow['subscribeToEvent'];
45
+ /**
46
+ * Subscribes to all SDK events.
47
+ */
48
+ subscribeToAllEvents: Flow['subscribeToAllEvents'];
49
+ /**
50
+ * Checks whether the user is currently authenticated, optionally triggering a token refresh.
51
+ */
52
+ checkAuthentication: Flow['checkAuthentication'];
53
+ /**
54
+ * Initializes the SDK, loading metadata and restoring any persisted session.
55
+ */
56
+ init: Flow['init'];
57
+ /**
58
+ * Performs a token exchange using the provided parameters.
59
+ */
60
+ tokenExchange: Flow['tokenExchange'];
61
+ /**
62
+ * Handles the authentication callback by parsing the response from the given URL.
63
+ */
64
+ handleCallback: Flow['handleCallback'];
65
+ /**
66
+ * Refreshes the current access token using the refresh token.
67
+ */
68
+ refresh: Flow['refresh'];
69
+ /**
70
+ * Revokes the current tokens.
71
+ */
72
+ revoke: Flow['revoke'];
73
+ /**
74
+ * Logs the user out and optionally redirects to a post-logout URI.
75
+ */
76
+ logout: Flow['logout'];
77
+ /**
78
+ * Initiates the login flow.
79
+ */
80
+ login: Flow['login'];
81
+ /**
82
+ * Initiates the registration flow.
83
+ */
84
+ register: Flow['register'];
85
+ /**
86
+ * Handles the entry point URL of the authentication flow, typically used for embedded or native modes.
87
+ */
88
+ entry: Flow['entry'];
89
+ };
90
+ export type SDKInstance = ReturnType<typeof initFlow>;
91
+ export type LoginContext = {
92
+ /**
93
+ * Whether a form submission or session initialization is in progress.
94
+ */
95
+ loading: boolean;
96
+ /**
97
+ * Current form field values, keyed by form ID then widget ID.
98
+ */
99
+ forms: Record<string, Record<string, unknown>>;
100
+ /**
101
+ * Current validation and info messages, keyed by form ID then widget ID.
102
+ */
103
+ messages: Record<string, Record<string, NativeFlowMessage>>;
104
+ /**
105
+ * The current login flow state returned by the backend.
106
+ */
107
+ state: Partial<NativeFlowState>;
108
+ /**
109
+ * Submits the form with the given ID and advances the login flow.
110
+ *
111
+ * @param formId - The ID of the form to submit.
112
+ * @param customBody - Optional custom body to send with the form submission. If not provided, the current form values will be used.
113
+ * @returns A promise that resolves when the form submission is complete.
114
+ */
115
+ submitForm: (formId: string, customBody?: Record<string, unknown>) => Promise<void>;
116
+ /**
117
+ * Redirects to the hosted login UI.
118
+ *
119
+ * @param message - Optional message to log before redirecting.
120
+ * @returns A promise that resolves when the redirect is initiated.
121
+ */
122
+ triggerFallback: (message?: string) => void;
123
+ /**
124
+ * Signals that the login flow was closed by the user.
125
+ */
126
+ triggerClose: () => void;
127
+ /**
128
+ * Updates a single field value within a form before submission.
129
+ *
130
+ * @param formId - The ID of the form containing the field.
131
+ * @param widgetId - The ID of the widget (field) to update.
132
+ * @param value - The new value to set for the field.
133
+ */
134
+ setFormValue: (formId: string, widgetId: string, value: unknown) => void;
135
+ /**
136
+ * Sets a validation or info message on a specific widget.
137
+ *
138
+ * @param formId - The ID of the form containing the widget.
139
+ * @param widgetId - The ID of the widget to set the message for.
140
+ * @param value - The message to set, which can be a string or a structured NativeFlowMessage.
141
+ */
142
+ setMessage: (formId: string, widgetId: string, value: NativeFlowMessage) => void;
143
+ };
144
+ export type StyAuthProviderProps = {
145
+ /**
146
+ * The options to be used by the AuthProvider. These options are passed to the SDK during initialization.
147
+ */
148
+ options: SDKInitConfig;
149
+ /**
150
+ * A getter returning the session data to be used by the AuthProvider.
151
+ *
152
+ * Called reactively (inside a Svelte effect) whenever the returned value changes, so it should read from a
153
+ * reactive source (e.g. a `$props()` field) rather than a plain snapshot. If not provided, the AuthProvider
154
+ * will attempt to retrieve the session data from the SDK.
155
+ */
156
+ session?: () => SessionData | null | undefined;
157
+ };
158
+ /**
159
+ * The reactive context value exposed to native login flow widgets via `useNativeLoginContext()` (key: `nativeFlowContext`).
160
+ */
161
+ export type NativeFlowContextValue = {
162
+ /**
163
+ * Whether a form submission or session initialization is in progress.
164
+ */
165
+ loading: boolean;
166
+ /**
167
+ * Current form field values, keyed by form ID then widget ID.
168
+ */
169
+ forms: Record<string, Record<string, unknown>>;
170
+ /**
171
+ * Current validation and info messages, keyed by form ID then widget ID.
172
+ */
173
+ messages: Record<string, Record<string, NativeFlowMessage>>;
174
+ /**
175
+ * The current login flow state returned by the backend.
176
+ */
177
+ state: Partial<NativeFlowState>;
178
+ /**
179
+ * Submits the form with the given ID and advances the login flow.
180
+ *
181
+ * @param formId - The ID of the form to submit.
182
+ * @param customBody - Optional custom body to send with the form submission. If not provided, the current form values will be used.
183
+ * @returns A promise that resolves when the form submission is complete.
184
+ */
185
+ submitForm: (formId: string, customBody?: Record<string, unknown>) => Promise<void>;
186
+ /**
187
+ * Redirects to the hosted login UI.
188
+ *
189
+ * @param message - Optional message to log before redirecting.
190
+ */
191
+ triggerFallback: (message?: string) => void;
192
+ /**
193
+ * Signals that the login flow was closed by the user.
194
+ */
195
+ triggerClose: () => void;
196
+ /**
197
+ * Updates a single field value within a form before submission.
198
+ *
199
+ * @param formId - The ID of the form containing the field.
200
+ * @param widgetId - The ID of the widget (field) to update.
201
+ * @param value - The new value to set for the field.
202
+ */
203
+ setFormValue: (formId: string, widgetId: string, value: unknown) => void;
204
+ /**
205
+ * Sets a validation or info message on a specific widget.
206
+ *
207
+ * @param formId - The ID of the form containing the widget.
208
+ * @param widgetId - The ID of the widget to set the message for.
209
+ * @param value - The message to set.
210
+ */
211
+ setMessage: (formId: string, widgetId: string, value: NativeFlowMessage) => void;
212
+ };
213
+ export type UseNativeLoginOptions = {
214
+ /**
215
+ * Optional parameters to be passed to the login session request. These parameters will be sent to the `authorizationUri` endpoint.
216
+ */
217
+ params?: NativeParams;
218
+ /**
219
+ * Called when the user successfully completes the login flow.
220
+ */
221
+ onLogin?: (session: SessionData) => void | Promise<void>;
222
+ /**
223
+ * Called when the fallback flow is triggered, typically due to an error or unsupported environment. Receives a `FallbackError` object containing the hosted URL to redirect to.
224
+ */
225
+ onFallback?: (error: FallbackError) => void | Promise<void>;
226
+ /**
227
+ * Called when the login flow is closed by the user.
228
+ */
229
+ onClose?: () => void | Promise<void>;
230
+ /**
231
+ * Called when an error occurs during the login session initialization or flow.
232
+ */
233
+ onError?: (error: Error) => void | Promise<void>;
234
+ /**
235
+ * Called when a global message is received during the login flow.
236
+ */
237
+ onGlobalMessage?: (message: NativeFlowMessage) => void | Promise<void>;
238
+ };
@@ -0,0 +1 @@
1
+ export*from"@strivacity/sdk-core/types";
@@ -0,0 +1 @@
1
+ require("../assets/rolldown-runtime.cjs");var e=require("@strivacity/sdk-core/utils");Object.keys(e).forEach(function(t){t!=="default"&&!Object.prototype.hasOwnProperty.call(exports,t)&&Object.defineProperty(exports,t,{enumerable:!0,get:function(){return e[t]}})});
@@ -0,0 +1 @@
1
+ export * from '@strivacity/sdk-core/utils';
@@ -0,0 +1 @@
1
+ export*from"@strivacity/sdk-core/utils";
@@ -0,0 +1 @@
1
+ require("./assets/rolldown-runtime.cjs");var e=require("@strivacity/sdk-core/utils/errors");Object.keys(e).forEach(function(t){t!=="default"&&!Object.prototype.hasOwnProperty.call(exports,t)&&Object.defineProperty(exports,t,{enumerable:!0,get:function(){return e[t]}})});
@@ -0,0 +1 @@
1
+ export * from '@strivacity/sdk-core/utils/errors';
@@ -0,0 +1 @@
1
+ export*from"@strivacity/sdk-core/utils/errors";
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require("../assets/rolldown-runtime.cjs"),require("../errors.cjs"),require("./types.cjs");const e=require("./sdk.cjs"),t=require("./storages.cjs");require("./utils.cjs"),exports.createServerSDK=e.createServerSDK,exports.createSessionIdCookieStorage=t.createSessionIdCookieStorage;var n=require("@strivacity/sdk-core/utils");Object.keys(n).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return n[e]}})});var r=require("@strivacity/sdk-core/utils/errors");Object.keys(r).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return r[e]}})});var i=require("@strivacity/sdk-core/types");Object.keys(i).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return i[e]}})});var a=require("@strivacity/sdk-core/storages");Object.keys(a).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return a[e]}})});
@@ -0,0 +1,6 @@
1
+ export * from '@strivacity/sdk-core/utils';
2
+ export * from '../errors';
3
+ export * from './sdk';
4
+ export * from './storages';
5
+ export * from './types';
6
+ export * from './utils';
@@ -0,0 +1 @@
1
+ import"../errors.mjs";import"./types.mjs";import{createServerSDK as e}from"./sdk.mjs";import{createSessionIdCookieStorage as t}from"./storages.mjs";import"./utils.mjs";export*from"@strivacity/sdk-core/utils/errors";export*from"@strivacity/sdk-core/types";export*from"@strivacity/sdk-core/utils";export*from"@strivacity/sdk-core/storages";export{e as createServerSDK,t as createSessionIdCookieStorage};
@@ -0,0 +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;
2
+ //# sourceMappingURL=sdk.cjs.map
@@ -0,0 +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,CAAO,GAAK,EAAQ,cACnD,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"}
@@ -0,0 +1,8 @@
1
+ import { SvelteKitServerSDK, SvelteKitServerSDKInitConfig } from './types';
2
+ /**
3
+ * Creates the Strivacity server SDK for SvelteKit: session management, auth route handlers, and the `handle` hook used in `hooks.server.ts`.
4
+ *
5
+ * @param {SvelteKitServerSDKInitConfig} initConfig - The configuration options for initializing the server SDK.
6
+ * @returns {SvelteKitServerSDK} The initialized server SDK instance.
7
+ */
8
+ export declare function createServerSDK(initConfig: SvelteKitServerSDKInitConfig): SvelteKitServerSDK;
@@ -0,0 +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};
2
+ //# sourceMappingURL=sdk.mjs.map
@@ -0,0 +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,CAAO,GAAK,EAAQ,cACnD,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"}
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require("../assets/rolldown-runtime.cjs");let e=require("@strivacity/sdk-core/storages/server");function t(t,n){return(0,e.createSessionIdCookieStorage)({toRequest:e=>e.request},t,n)}exports.createSessionIdCookieStorage=t;var n=require("@strivacity/sdk-core/storages");Object.keys(n).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return n[e]}})});
2
+ //# sourceMappingURL=storages.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storages.cjs","names":[],"sources":["../../src/server/storages.ts"],"sourcesContent":["import type { RequestEvent } from '@sveltejs/kit';\nimport type { ServerStorage, SDKStorage, SessionIdCookieStorageOptions } from './types';\nimport { createSessionIdCookieStorage as createSessionIdCookieStorageBase } from '@strivacity/sdk-core/storages/server';\n\nexport * from '@strivacity/sdk-core/storages';\n\n/**\n * Creates a session storage that puts a random unique id value cookie on the client and keeping the actual session data in the given `storage`.\n *\n * @param {SDKStorage} storage - The storage used to persist session data, keyed by a randomly generated session id.\n * @param {SessionIdCookieStorageOptions} [options] - Options for configuring the session-id cookie storage.\n * @returns {ServerStorage} An object implementing the ServerStorage interface for managing sessions indexed by a session-id cookie.\n */\nexport function createSessionIdCookieStorage(storage: SDKStorage, options?: SessionIdCookieStorageOptions): ServerStorage {\n\treturn createSessionIdCookieStorageBase<RequestEvent>(\n\t\t{\n\t\t\ttoRequest: (event) => event.request,\n\t\t},\n\t\tstorage,\n\t\toptions,\n\t);\n}\n"],"mappings":"mKAaA,SAAgB,EAA6B,EAAqB,EAAwD,CACzH,OAAA,EAAO,EAAA,6BAAA,CACN,CACC,UAAY,GAAU,EAAM,OAC7B,EACA,EACA,CACD,CACD"}
@@ -0,0 +1,10 @@
1
+ import { ServerStorage, SDKStorage, SessionIdCookieStorageOptions } from './types';
2
+ export * from '@strivacity/sdk-core/storages';
3
+ /**
4
+ * Creates a session storage that puts a random unique id value cookie on the client and keeping the actual session data in the given `storage`.
5
+ *
6
+ * @param {SDKStorage} storage - The storage used to persist session data, keyed by a randomly generated session id.
7
+ * @param {SessionIdCookieStorageOptions} [options] - Options for configuring the session-id cookie storage.
8
+ * @returns {ServerStorage} An object implementing the ServerStorage interface for managing sessions indexed by a session-id cookie.
9
+ */
10
+ export declare function createSessionIdCookieStorage(storage: SDKStorage, options?: SessionIdCookieStorageOptions): ServerStorage;
@@ -0,0 +1,2 @@
1
+ import{createSessionIdCookieStorage as e}from"@strivacity/sdk-core/storages/server";export*from"@strivacity/sdk-core/storages";function t(t,n){return e({toRequest:e=>e.request},t,n)}export{t as createSessionIdCookieStorage};
2
+ //# sourceMappingURL=storages.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storages.mjs","names":[],"sources":["../../src/server/storages.ts"],"sourcesContent":["import type { RequestEvent } from '@sveltejs/kit';\nimport type { ServerStorage, SDKStorage, SessionIdCookieStorageOptions } from './types';\nimport { createSessionIdCookieStorage as createSessionIdCookieStorageBase } from '@strivacity/sdk-core/storages/server';\n\nexport * from '@strivacity/sdk-core/storages';\n\n/**\n * Creates a session storage that puts a random unique id value cookie on the client and keeping the actual session data in the given `storage`.\n *\n * @param {SDKStorage} storage - The storage used to persist session data, keyed by a randomly generated session id.\n * @param {SessionIdCookieStorageOptions} [options] - Options for configuring the session-id cookie storage.\n * @returns {ServerStorage} An object implementing the ServerStorage interface for managing sessions indexed by a session-id cookie.\n */\nexport function createSessionIdCookieStorage(storage: SDKStorage, options?: SessionIdCookieStorageOptions): ServerStorage {\n\treturn createSessionIdCookieStorageBase<RequestEvent>(\n\t\t{\n\t\t\ttoRequest: (event) => event.request,\n\t\t},\n\t\tstorage,\n\t\toptions,\n\t);\n}\n"],"mappings":"+HAaA,SAAgB,EAA6B,EAAqB,EAAwD,CACzH,OAAO,EACN,CACC,UAAY,GAAU,EAAM,OAC7B,EACA,EACA,CACD,CACD"}
@@ -0,0 +1 @@
1
+ require("../assets/rolldown-runtime.cjs");var e=require("@strivacity/sdk-core/types");Object.keys(e).forEach(function(t){t!=="default"&&!Object.prototype.hasOwnProperty.call(exports,t)&&Object.defineProperty(exports,t,{enumerable:!0,get:function(){return e[t]}})});
@@ -0,0 +1,35 @@
1
+ import { Handle, RequestEvent } from '@sveltejs/kit';
2
+ import { ServerSDKOptions, ServerSDKInitConfig, SDKStorage, SessionData, CookieOptions, LogoutTokenClaims, BaseServerSDK } from '@strivacity/sdk-core/types';
3
+ export * from '@strivacity/sdk-core/types';
4
+ export type SvelteKitServerStorage = SDKStorage<[
5
+ event?: RequestEvent
6
+ ], [
7
+ event?: RequestEvent,
8
+ cookieOptions?: CookieOptions
9
+ ], [
10
+ event?: RequestEvent,
11
+ cookieOptions?: CookieOptions
12
+ ]> & {
13
+ deleteByLogoutToken?(token: LogoutTokenClaims): Promise<void>;
14
+ };
15
+ export type SvelteKitServerSDKOptions<Storage extends SvelteKitServerStorage = SvelteKitServerStorage, StateStorage extends SDKStorage = SDKStorage> = ServerSDKOptions<RequestEvent, Storage, StateStorage>;
16
+ export type SvelteKitServerSDKInitConfig<Storage extends SvelteKitServerStorage = SvelteKitServerStorage, StateStorage extends SDKStorage = SDKStorage> = ServerSDKInitConfig<RequestEvent> & Partial<SvelteKitServerSDKOptions<Storage, StateStorage>>;
17
+ export type SvelteKitServerSDK = BaseServerSDK<RequestEvent> & {
18
+ /**
19
+ * A SvelteKit `Handle` hook that intercepts and serves the `authUrlPrefix` auth routes.
20
+ * Mount it in `src/hooks.server.ts`, optionally combined with your own hooks via `sequence()`.
21
+ */
22
+ handle: Handle;
23
+ /**
24
+ * Guard for `+page.server.ts`/`+layout.server.ts` `load()` functions: returns the current session, or throws a SvelteKit `redirect()` to the login page if unauthenticated.
25
+ *
26
+ * @param {RequestEvent} event - The SvelteKit request event.
27
+ * @param {Object} [options] - Optional options for the session requirement.
28
+ * @param {string} [options.returnTo] - Optional relative path to redirect to after login. Defaults to the current page.
29
+ * @returns {Promise<SessionData>} A promise that resolves to the current session data if authenticated.
30
+ * @throws {Redirect} Throws a SvelteKit `redirect()` to the login page if unauthenticated.
31
+ */
32
+ requireSession(event: RequestEvent, options?: {
33
+ returnTo?: string;
34
+ }): Promise<SessionData>;
35
+ };
@@ -0,0 +1 @@
1
+ export*from"@strivacity/sdk-core/types";