@strivacity/sdk-svelte 3.0.0 → 3.0.2

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/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
1
+ ## 3.0.2 (2026-05-12)
2
+
3
+ ### 🩹 Fixes
4
+
5
+ - language parameter added to the login renderer component ([c8f18d9](https://github.com/Strivacity/sdk-js/commit/c8f18d9))
6
+
7
+ ### 🧱 Updated Dependencies
8
+
9
+ - Updated sdk-core to 3.0.2
10
+
11
+ ## 3.0.1 (2026-04-20)
12
+
13
+ ### 🩹 Fixes
14
+
15
+ - handle language parameter from response body url correctly ([e42294b](https://github.com/Strivacity/sdk-js/commit/e42294b))
16
+
17
+ ### 🧱 Updated Dependencies
18
+
19
+ - Updated sdk-core to 3.0.1
20
+
1
21
  # 3.0.0 (2026-04-09)
2
22
 
3
23
  ### 🚀 Features
package/README.md CHANGED
@@ -233,7 +233,7 @@ export const widgets = {
233
233
 
234
234
  #### Login page example
235
235
 
236
- The login page extracts `session_id` from the URL on load, cleans up the URL, and passes it to the renderer. When a `session_id` is present the renderer calls `startSession(sessionId)` to resume the existing flow instead of starting a new one.
236
+ The login page extracts `session_id` and optionally `language` from the URL on load, cleans up the URL, and passes them to the renderer. When a `session_id` is present the renderer calls `startSession(sessionId)` to resume the existing flow instead of starting a new one. When a `language` parameter is present it is passed to the renderer which uses it for the authentication UI and calls `onlanguagechange` with the resolved language.
237
237
 
238
238
  ```svelte
239
239
  <!-- src/routes/login/+page.svelte -->
@@ -243,10 +243,16 @@ import { StyLoginRenderer, type FallbackError, type LoginFlowState } from '@stri
243
243
  import { widgets } from '$lib/components/widgets';
244
244
 
245
245
  let sessionId: string | null = null;
246
+ let language: string | null = null;
246
247
 
247
248
  if (window.location.search !== '') {
248
249
  const url = new URL(window.location.href);
249
250
  sessionId = url.searchParams.get('session_id');
251
+
252
+ if (url.searchParams.has('language')) {
253
+ language = url.searchParams.get('language');
254
+ }
255
+
250
256
  url.search = '';
251
257
  history.replaceState({}, '', url.toString());
252
258
  }
@@ -280,11 +286,13 @@ const onBlockReady = ({ previousState, state }: { previousState: LoginFlowState;
280
286
  <StyLoginRenderer
281
287
  {widgets}
282
288
  {sessionId}
283
- on:login={onLogin}
284
- on:fallback={({ detail }) => onFallback(detail)}
285
- on:error={({ detail }) => onError(detail)}
286
- on:globalMessage={({ detail }) => onGlobalMessage(detail)}
287
- on:blockReady={({ detail }) => onBlockReady(detail)}
289
+ {language}
290
+ onlanguagechange={(lang) => (language = lang)}
291
+ onlogin={onLogin}
292
+ onfallback={({ detail }) => onFallback(detail)}
293
+ onerror={({ detail }) => onError(detail)}
294
+ onglobalmessage={({ detail }) => onGlobalMessage(detail)}
295
+ onblockready={({ detail }) => onBlockReady(detail)}
288
296
  />
289
297
  ```
290
298
 
@@ -457,6 +465,57 @@ export class MyLogger implements SDKLogging {
457
465
 
458
466
  The `SDKLogging` interface requires `debug`, `info`, `warn`, and `error` methods. The optional `xEventId` property, when set by the SDK, provides a correlation ID to trace related log messages across the authentication flow.
459
467
 
468
+ ## HTTP Client
469
+
470
+ The SDK uses a built-in `fetch`-based HTTP client for all requests. You can replace it with your own implementation by extending `SDKHttpClient` and passing your class via the `httpClient` option. This is useful when you need to attach custom headers (e.g. `x-sty-app-id`) to every outgoing request or route traffic through a proxy.
471
+
472
+ ### Adding custom headers to every request
473
+
474
+ ```svelte
475
+ <script lang="ts">
476
+ import { StyAuthProvider, SDKHttpClient, type HttpClientResponse, type SDKOptions } from '@strivacity/sdk-svelte';
477
+
478
+ class CustomHttpClient extends SDKHttpClient {
479
+ async request<T>(url: string, options?: RequestInit): Promise<HttpClientResponse<T>> {
480
+ const mergedOptions: RequestInit = {
481
+ ...options,
482
+ headers: {
483
+ 'x-sty-app-id': 'my-app',
484
+ ...(options?.headers as Record<string, string>),
485
+ },
486
+ };
487
+
488
+ const response = await fetch(url, mergedOptions);
489
+
490
+ return {
491
+ headers: response.headers,
492
+ ok: response.ok,
493
+ status: response.status,
494
+ statusText: response.statusText,
495
+ url: response.url,
496
+ json: async () => (await response.json()) as T,
497
+ text: async () => await response.text(),
498
+ };
499
+ }
500
+ }
501
+
502
+ const options: SDKOptions = {
503
+ // ...other options
504
+ httpClient: CustomHttpClient,
505
+ };
506
+ </script>
507
+ ```
508
+
509
+ Any header you add inside `request()` is automatically included in every SDK request
510
+
511
+ ### CORS configuration
512
+
513
+ For custom request headers to reach the Strivacity cluster, the cluster must be configured to explicitly allow them. Add the header name(s) to the **Access-Control-Allow-Headers** list in the cluster settings. Without this, browsers will block the preflight `OPTIONS` request and the SDK call will fail with a CORS error.
514
+
515
+ ```
516
+ Access-Control-Allow-Headers: x-sty-app-id, <any other custom headers>
517
+ ```
518
+
460
519
  ## API Documentation
461
520
 
462
521
  ### `useStrivacity` function
@@ -526,14 +585,16 @@ Used in `native` mode to render the authentication UI with your own widget compo
526
585
  - **`params?: NativeParams`**: Additional parameters for the native login flow.
527
586
  - **`widgets?: PartialRecord<WidgetType, SvelteComponent>`**: Custom Svelte components for each widget type used in the flow.
528
587
  - **`sessionId?: string | null`**: Session ID for resuming an existing authentication session.
588
+ - **`language?: string | null`**: Language tag (e.g. `"en-US"`) for the authentication UI. Defaults to `navigator.language`. After the session starts the component calls `onlanguagechange` with the resolved language. See the [Translations](https://docs.strivacity.com/docs/translations) page to learn about language precedence implemented by the product.
529
589
 
530
590
  **Events**
531
591
 
532
- - **`on:login`**: Dispatched on successful authentication. Receives `IdTokenClaims | null`.
533
- - **`on:fallback`**: Dispatched when the native flow needs to fall back to redirect. Receives `FallbackError` with a fallback URL.
534
- - **`on:error`**: Dispatched when an error occurs during authentication.
535
- - **`on:globalMessage`**: Dispatched when the flow wants to display a global message (e.g. account lockout warning).
536
- - **`on:blockReady`**: Dispatched on flow state transitions. Receives `{ previousState: LoginFlowState; state: LoginFlowState }`. Useful for analytics and custom logging.
592
+ - **`onlogin`**: Called on successful authentication. Receives `IdTokenClaims | null`.
593
+ - **`onfallback`**: Called when the native flow needs to fall back to redirect. Receives `FallbackError` with a fallback URL.
594
+ - **`onerror`**: Called when an error occurs during authentication.
595
+ - **`onglobalmessage`**: Called when the flow wants to display a global message (e.g. account lockout warning).
596
+ - **`onblockready`**: Called on flow state transitions. Receives `{ previousState: LoginFlowState; state: LoginFlowState }`. Useful for analytics and custom logging.
597
+ - **`onlanguagechange`**: Called after the session starts with the resolved language string.
537
598
 
538
599
  ## Vulnerability Reporting
539
600
 
@@ -1,2 +1,2 @@
1
- "use strict";require("svelte/internal/disclose-version");const x=require("svelte/internal/client"),N=require("svelte"),S=require("@strivacity/sdk-core"),L=require("@strivacity/sdk-core/utils/object"),z=require("./composables.cjs");function E(d){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(d){for(const c in d)if(c!=="default"){const i=Object.getOwnPropertyDescriptor(d,c);Object.defineProperty(s,c,i.get?i:{enumerable:!0,get:()=>d[c]})}}return s.default=d,Object.freeze(s)}const e=E(x),j=(d,s=e.noop)=>{var c=e.comment(),i=e.first_child(c);e.each(i,17,s,p=>p?.key,(p,t)=>{var g=e.comment(),C=e.first_child(g);{var w=v=>{const _=e.derived(()=>e.get(t).component);var k=e.comment(),F=e.first_child(k);{var U=f=>{var u=e.comment(),h=e.first_child(u);e.component(h,()=>e.get(_),(n,r)=>{r(n,e.spread_props(()=>e.get(t).props,{children:(o,a)=>{j(o,()=>e.get(t).children)},$$slots:{default:!0}}))}),e.append(f,u)},b=f=>{var u=e.comment(),h=e.first_child(u);e.component(h,()=>e.get(_),(n,r)=>{r(n,e.spread_props(()=>e.get(t).props))}),e.append(f,u)};e.if(F,f=>{e.get(t).children?f(U):f(b,!1)})}e.append(v,k)};e.if(C,v=>{e.get(t)&&v(w)})}e.append(p,g)}),e.append(d,c)};var M=e.from_html('<div class="login-renderer"><!></div>');function T(d,s){e.push(s,!0);let c=e.prop(s,"sessionId",3,null);const{sdk:i}=z.useStrivacity(),p=i.login(s.params),t=e.proxy({loading:!1,forms:{},messages:{},state:{},submitForm:async()=>{},triggerFallback:()=>{},triggerClose:()=>{},setFormValue:()=>{},setMessage:()=>{}}),g=(n,r)=>{const o=n||t.state.hostedUrl;if(i.logging?.warn(r?`Triggering fallback due to: ${r}`:"Triggering fallback"),!o){const a=new Error("No hosted URL provided");throw i.logging?.error("Fallback error",a),a}s.onfallback?.(new S.FallbackError(new URL(o)))},C=()=>{s.onclose?.()},w=n=>n.map((r,o)=>{if(r.type==="widget"){const a=t.state.forms?.find(m=>m.id===r.formId),l=a?.widgets.find(m=>m.id===r.widgetId);if(!a||!l)return g(void 0,`Unable to find form or widget for item: formId=${r.formId}, widgetId=${r.widgetId}`),null;const y=s.widgets?.[l.type];return y?{component:y,props:{formId:a.id,config:l},key:`${a.id}.${l.id}`}:(g(void 0,`No component found for widget type ${l.type}`),null)}else if(r.type==="vertical"||r.type==="horizontal"){const a=s.widgets?.layout;return a?{component:a,props:{formId:r.items[0].formId,type:r.type,tag:"div"},children:w(r.items),key:`layout-${o}`}:(g(void 0,"No layout component provided"),null)}else return g(void 0,"Unknown item type in layout"),null}),v=(n,r,o)=>{o===""&&(o=null),t.forms={...t.forms,[n]:{...t.forms[n]||{},[r]:o===""?null:o}}},_=(n,r,o)=>{t.messages={...t.messages,[n]:{...t.messages[n]||{},[r]:o}}},k=async n=>{try{t.loading=!0;const r=await p?.submitForm(n,L.unflattenObject(t.forms[n]));await F(r),t.loading=!1}catch(r){r instanceof S.FallbackError?s.onfallback?.(r):s.onerror?.(r)}},F=async n=>{if(await i.isAuthenticated)s.onlogin?.(i.idTokenClaims);else{const r=JSON.parse(JSON.stringify(t.state)),o={hostedUrl:n?.hostedUrl??t.state.hostedUrl,finalizeUrl:n?.finalizeUrl??t.state.finalizeUrl,screen:n?.screen??t.state.screen,forms:n?.forms??t.state.forms,layout:n?.layout??t.state.layout,messages:n?.messages??{},branding:n?.branding??t.state.branding};if(o.screen!==t.state.screen){t.forms={},t.messages={};for(const a of o.forms??[])t.forms[a.id]={},t.messages[a.id]={}}else i.logging?.info(`Updating screen: ${o.screen}`);Object.keys(o.messages??{}).forEach(a=>{a==="global"?s.onglobalmessage?.(o.messages?.global?.text??""):t.messages[a]=o.messages[a]}),t.state=o,setTimeout(()=>{s.onblockready?.({previousState:r,state:JSON.parse(JSON.stringify(o))})},1)}};t.submitForm=k,t.triggerFallback=g,t.triggerClose=C,t.setFormValue=v,t.setMessage=_,N.setContext("nativeFlowContext",t),N.onMount(async()=>{try{const n=await p?.startSession(c());n&&await F(n)}catch(n){n instanceof S.FallbackError?s.onfallback?.(n):s.onerror?.(n)}});let U=e.derived(()=>t.state.screen&&s.widgets?.layout?w(t.state.layout?.items??[]):[]);var b=M(),f=e.child(b);{var u=n=>{const r=e.derived(()=>s.widgets?.layout);var o=e.comment(),a=e.first_child(o);{let l=e.derived(()=>t.state.layout?.type);e.component(a,()=>e.get(r),(y,m)=>{m(y,{get formId(){return t.state.layout?.items[0].formId},get type(){return e.get(l)},tag:"form",children:(O,I)=>{j(O,()=>e.get(U))},$$slots:{default:!0}})})}e.append(n,o)},h=n=>{var r=e.comment(),o=e.first_child(r);{var a=l=>{const y=e.derived(()=>s.widgets?.loading);var m=e.comment(),O=e.first_child(m);e.component(O,()=>e.get(y),(I,q)=>{q(I,{})}),e.append(l,m)};e.if(o,l=>{s.widgets?.loading&&l(a)},!0)}e.append(n,r)};e.if(f,n=>{t.state.screen&&s.widgets?.layout?n(u):n(h,!1)})}e.reset(b),e.append(d,b),e.pop()}module.exports=T;
1
+ "use strict";require("svelte/internal/disclose-version");const L=require("svelte/internal/client"),j=require("svelte"),I=require("@strivacity/sdk-core"),z=require("@strivacity/sdk-core/utils/object"),E=require("./composables.cjs");function M(g){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(g){for(const f in g)if(f!=="default"){const y=Object.getOwnPropertyDescriptor(g,f);Object.defineProperty(o,f,y.get?y:{enumerable:!0,get:()=>g[f]})}}return o.default=g,Object.freeze(o)}const e=M(L),q=(g,o=e.noop)=>{var f=e.comment(),y=e.first_child(f);e.each(y,17,o,l=>l?.key,(l,d)=>{var t=e.comment(),u=e.first_child(t);{var C=v=>{const _=e.derived(()=>e.get(d).component);var k=e.comment(),U=e.first_child(k);{var F=c=>{var p=e.comment(),h=e.first_child(p);e.component(h,()=>e.get(_),(w,n)=>{n(w,e.spread_props(()=>e.get(d).props,{children:(r,s)=>{q(r,()=>e.get(d).children)},$$slots:{default:!0}}))}),e.append(c,p)},O=c=>{var p=e.comment(),h=e.first_child(p);e.component(h,()=>e.get(_),(w,n)=>{n(w,e.spread_props(()=>e.get(d).props))}),e.append(c,p)};e.if(U,c=>{e.get(d).children?c(F):c(O,!1)})}e.append(v,k)};e.if(u,v=>{e.get(d)&&v(C)})}e.append(l,t)}),e.append(g,f)};var T=e.from_html('<div class="login-renderer"><!></div>');function J(g,o){e.push(o,!0);let f=e.prop(o,"sessionId",3,null),y=e.prop(o,"language",3,null);const{sdk:l}=E.useStrivacity(),d=l.login(o.params),t=e.proxy({loading:!1,forms:{},messages:{},state:{},submitForm:async()=>{},triggerFallback:()=>{},triggerClose:()=>{},setFormValue:()=>{},setMessage:()=>{}}),u=(n,r)=>{const s=n||t.state.hostedUrl;if(l.logging?.warn(r?`Triggering fallback due to: ${r}`:"Triggering fallback"),!s){const a=new Error("No hosted URL provided");throw l.logging?.error("Fallback error",a),a}o.onfallback?.(new I.FallbackError(new URL(s)))},C=()=>{o.onclose?.()},v=n=>n.map((r,s)=>{if(r.type==="widget"){const a=t.state.forms?.find(m=>m.id===r.formId),i=a?.widgets.find(m=>m.id===r.widgetId);if(!a||!i)return u(void 0,`Unable to find form or widget for item: formId=${r.formId}, widgetId=${r.widgetId}`),null;const b=o.widgets?.[i.type];return b?{component:b,props:{formId:a.id,config:i},key:`${a.id}.${i.id}`}:(u(void 0,`No component found for widget type ${i.type}`),null)}else if(r.type==="vertical"||r.type==="horizontal"){const a=o.widgets?.layout;return a?{component:a,props:{formId:r.items[0].formId,type:r.type,tag:"div"},children:v(r.items),key:`layout-${s}`}:(u(void 0,"No layout component provided"),null)}else return u(void 0,"Unknown item type in layout"),null}),_=(n,r,s)=>{s===""&&(s=null),t.forms={...t.forms,[n]:{...t.forms[n]||{},[r]:s===""?null:s}}},k=(n,r,s)=>{t.messages={...t.messages,[n]:{...t.messages[n]||{},[r]:s}}},U=async n=>{try{t.loading=!0;const r=await d?.submitForm(n,z.unflattenObject(t.forms[n]));await F(r),t.loading=!1}catch(r){r instanceof I.FallbackError?o.onfallback?.(r):o.onerror?.(r)}},F=async n=>{if(await l.isAuthenticated)o.onlogin?.(l.idTokenClaims);else{const r=JSON.parse(JSON.stringify(t.state)),s={hostedUrl:n?.hostedUrl??t.state.hostedUrl,finalizeUrl:n?.finalizeUrl??t.state.finalizeUrl,screen:n?.screen??t.state.screen,forms:n?.forms??t.state.forms,layout:n?.layout??t.state.layout,messages:n?.messages??{},branding:n?.branding??t.state.branding};if(s.screen!==t.state.screen){t.forms={},t.messages={};for(const a of s.forms??[])t.forms[a.id]={},t.messages[a.id]={}}else l.logging?.info(`Updating screen: ${s.screen}`);Object.keys(s.messages??{}).forEach(a=>{a==="global"?o.onglobalmessage?.(s.messages?.global?.text??""):t.messages[a]=s.messages[a]}),t.state=s,setTimeout(()=>{o.onblockready?.({previousState:r,state:JSON.parse(JSON.stringify(s))})},1)}};t.submitForm=U,t.triggerFallback=u,t.triggerClose=C,t.setFormValue=_,t.setMessage=k,j.setContext("nativeFlowContext",t),j.onMount(async()=>{try{const n=await d?.startSession(f(),y());o.onlanguagechange?.(d.language),n&&await F(n)}catch(n){n instanceof I.FallbackError?o.onfallback?.(n):o.onerror?.(n)}});let O=e.derived(()=>t.state.screen&&o.widgets?.layout?v(t.state.layout?.items??[]):[]);var c=T(),p=e.child(c);{var h=n=>{const r=e.derived(()=>o.widgets?.layout);var s=e.comment(),a=e.first_child(s);{let i=e.derived(()=>t.state.layout?.type);e.component(a,()=>e.get(r),(b,m)=>{m(b,{get formId(){return t.state.layout?.items[0].formId},get type(){return e.get(i)},tag:"form",children:(S,N)=>{q(S,()=>e.get(O))},$$slots:{default:!0}})})}e.append(n,s)},w=n=>{var r=e.comment(),s=e.first_child(r);{var a=i=>{const b=e.derived(()=>o.widgets?.loading);var m=e.comment(),S=e.first_child(m);e.component(S,()=>e.get(b),(N,x)=>{x(N,{})}),e.append(i,m)};e.if(s,i=>{o.widgets?.loading&&i(a)},!0)}e.append(n,r)};e.if(p,n=>{t.state.screen&&o.widgets?.layout?n(h):n(w,!1)})}e.reset(c),e.append(g,c),e.pop()}module.exports=J;
2
2
  //# sourceMappingURL=LoginRenderer.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoginRenderer.cjs","sources":["../src/LoginRenderer.svelte"],"sourcesContent":["<script lang=\"ts\">\n\t/* eslint-disable @typescript-eslint/no-explicit-any */\n\timport type {\n\t\tNativeParams,\n\t\tPartialRecord,\n\t\tWidgetType,\n\t\tLayoutWidget,\n\t\tLoginFlowState,\n\t\tWidget,\n\t\tIdTokenClaims,\n\t\tLoginFlowMessage,\n\t} from '@strivacity/sdk-core';\n\timport type { NativeContext, NativeFlowContextValue } from './types';\n\timport type { Component } from 'svelte';\n\timport { setContext, onMount } from 'svelte';\n\timport { FallbackError } from '@strivacity/sdk-core';\n\timport { unflattenObject } from '@strivacity/sdk-core/utils/object';\n\timport { useStrivacity } from './composables';\n\n\tlet {\n\t\tparams,\n\t\twidgets,\n\t\tsessionId = null,\n\t\tonlogin,\n\t\tonfallback,\n\t\tonclose,\n\t\tonerror,\n\t\tonglobalmessage,\n\t\tonblockready,\n\t}: {\n\t\tparams?: NativeParams;\n\t\twidgets?: PartialRecord<WidgetType, Component>;\n\t\tsessionId?: string | null;\n\t\tonlogin?: (claims?: IdTokenClaims | null) => void;\n\t\tonfallback?: (error: FallbackError) => void;\n\t\tonclose?: () => void;\n\t\tonerror?: (error: any) => void;\n\t\tonglobalmessage?: (message: string) => void;\n\t\tonblockready?: ({ previousState, state }: { previousState: LoginFlowState; state: LoginFlowState }) => void;\n\t} = $props();\n\n\tconst { sdk } = useStrivacity<NativeContext>();\n\t// svelte-ignore state_referenced_locally\n\tconst loginHandler = sdk.login(params);\n\tconst context = $state<NativeFlowContextValue>({\n\t\tloading: false,\n\t\tforms: {},\n\t\tmessages: {},\n\t\tstate: {},\n\t\tsubmitForm: async () => {},\n\t\ttriggerFallback: () => {},\n\t\ttriggerClose: () => {},\n\t\tsetFormValue: () => {},\n\t\tsetMessage: () => {},\n\t});\n\n\tconst triggerFallback = (hostedUrl?: string, message?: string) => {\n\t\tconst url = hostedUrl || context.state.hostedUrl;\n\n\t\tsdk.logging?.warn(message ? `Triggering fallback due to: ${message}` : 'Triggering fallback');\n\n\t\tif (!url) {\n\t\t\tconst error = new Error('No hosted URL provided');\n\t\t\tsdk.logging?.error('Fallback error', error);\n\t\t\tthrow error;\n\t\t}\n\n\t\tonfallback?.(new FallbackError(new URL(url)));\n\t};\n\n\tconst triggerClose = () => {\n\t\tonclose?.();\n\t};\n\n\tconst renderWidgets = (items: LayoutWidget['items']): Array<any> => {\n\t\treturn items.map((item, idx) => {\n\t\t\tif (item.type === 'widget') {\n\t\t\t\tconst form = context.state.forms?.find((f: any) => f.id === item.formId);\n\t\t\t\tconst widget = form?.widgets.find((w: any) => w.id === item.widgetId);\n\n\t\t\t\tif (!form || !widget) {\n\t\t\t\t\ttriggerFallback(undefined, `Unable to find form or widget for item: formId=${item.formId}, widgetId=${item.widgetId}`);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst WidgetComponent = widgets?.[widget.type as keyof typeof widgets];\n\n\t\t\t\tif (!WidgetComponent) {\n\t\t\t\t\ttriggerFallback(undefined, `No component found for widget type ${widget.type}`);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcomponent: WidgetComponent,\n\t\t\t\t\tprops: { formId: form.id, config: widget },\n\t\t\t\t\tkey: `${form.id}.${widget.id}`,\n\t\t\t\t};\n\t\t\t} else if (item.type === 'vertical' || item.type === 'horizontal') {\n\t\t\t\tconst LayoutComponent = widgets?.layout;\n\n\t\t\t\tif (!LayoutComponent) {\n\t\t\t\t\ttriggerFallback(undefined, 'No layout component provided');\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcomponent: LayoutComponent,\n\t\t\t\t\tprops: { formId: (item.items[0] as Widget).formId, type: item.type, tag: 'div' },\n\t\t\t\t\tchildren: renderWidgets(item.items),\n\t\t\t\t\tkey: `layout-${idx}`,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\ttriggerFallback(undefined, 'Unknown item type in layout');\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t};\n\n\tconst setFormValue = (formId: string, widgetId: string, value: unknown) => {\n\t\tif (value === '') {\n\t\t\tvalue = null;\n\t\t}\n\n\t\tcontext.forms = {\n\t\t\t...context.forms,\n\t\t\t[formId]: { ...(context.forms[formId] || {}), [widgetId]: value === '' ? null : value },\n\t\t};\n\t};\n\n\tconst setMessage = (formId: string, widgetId: string, value: LoginFlowMessage) => {\n\t\tcontext.messages = {\n\t\t\t...context.messages,\n\t\t\t[formId]: { ...(context.messages[formId] || {}), [widgetId]: value },\n\t\t};\n\t};\n\n\tconst submitForm = async (formId: string) => {\n\t\ttry {\n\t\t\tcontext.loading = true;\n\n\t\t\tconst data = await loginHandler?.submitForm(formId, unflattenObject(context.forms[formId]));\n\t\t\tawait handleResponse(data);\n\n\t\t\tcontext.loading = false;\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tonfallback?.(error);\n\t\t\t} else {\n\t\t\t\tonerror?.(error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleResponse = async (data?: LoginFlowState) => {\n\t\tif (await sdk.isAuthenticated) {\n\t\t\tonlogin?.(sdk.idTokenClaims);\n\t\t} else {\n\t\t\tconst previousState = JSON.parse(JSON.stringify(context.state));\n\t\t\tconst newState: LoginFlowState = {\n\t\t\t\thostedUrl: data?.hostedUrl ?? context.state.hostedUrl,\n\t\t\t\tfinalizeUrl: data?.finalizeUrl ?? context.state.finalizeUrl,\n\t\t\t\tscreen: data?.screen ?? context.state.screen,\n\t\t\t\tforms: data?.forms ?? context.state.forms,\n\t\t\t\tlayout: data?.layout ?? context.state.layout,\n\t\t\t\tmessages: data?.messages ?? {},\n\t\t\t\tbranding: data?.branding ?? context.state.branding,\n\t\t\t};\n\n\t\t\tif (newState.screen !== context.state.screen) {\n\t\t\t\tcontext.forms = {};\n\t\t\t\tcontext.messages = {};\n\n\t\t\t\tfor (const form of newState.forms ?? []) {\n\t\t\t\t\tcontext.forms[form.id] = {};\n\t\t\t\t\tcontext.messages[form.id] = {};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsdk.logging?.info(`Updating screen: ${newState.screen}`);\n\t\t\t}\n\n\t\t\tObject.keys(newState.messages ?? {}).forEach((formId) => {\n\t\t\t\tif (formId === 'global') {\n\t\t\t\t\tonglobalmessage?.(newState.messages?.global?.text ?? '');\n\t\t\t\t} else {\n\t\t\t\t\tcontext.messages[formId] = newState.messages![formId];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcontext.state = newState;\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tonblockready?.({ previousState, state: JSON.parse(JSON.stringify(newState)) });\n\t\t\t}, 1);\n\t\t}\n\t};\n\n\tcontext.submitForm = submitForm;\n\tcontext.triggerFallback = triggerFallback;\n\tcontext.triggerClose = triggerClose;\n\tcontext.setFormValue = setFormValue;\n\tcontext.setMessage = setMessage;\n\n\tsetContext('nativeFlowContext', context);\n\n\tonMount(async () => {\n\t\ttry {\n\t\t\tconst data = await loginHandler?.startSession(sessionId);\n\n\t\t\tif (data) {\n\t\t\t\tawait handleResponse(data);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tonfallback?.(error);\n\t\t\t} else {\n\t\t\t\tonerror?.(error);\n\t\t\t}\n\t\t}\n\t});\n\n\tlet renderedWidgets = $derived(context.state.screen && widgets?.layout ? renderWidgets(context.state.layout?.items ?? []) : []);\n</script>\n\n{#snippet renderItems(items: any[])}\n\t{#each items as item (item?.key)}\n\t\t{#if item}\n\t\t\t{@const Component = item.component}\n\t\t\t{#if item.children}\n\t\t\t\t<Component {...item.props}>\n\t\t\t\t\t{@render renderItems(item.children)}\n\t\t\t\t</Component>\n\t\t\t{:else}\n\t\t\t\t<Component {...item.props} />\n\t\t\t{/if}\n\t\t{/if}\n\t{/each}\n{/snippet}\n\n<div class=\"login-renderer\">\n\t{#if context.state.screen && widgets?.layout}\n\t\t{@const LayoutComponent = widgets?.layout}\n\t\t<LayoutComponent formId={(context.state.layout?.items[0] as Widget).formId} type={context.state.layout?.type} tag=\"form\">\n\t\t\t{@render renderItems(renderedWidgets)}\n\t\t</LayoutComponent>\n\t{:else if widgets?.loading}\n\t\t{@const LoadingComponent = widgets?.loading}\n\t\t<LoadingComponent />\n\t{/if}\n</div>\n"],"names":["renderItems","items","$","node","item","Component","Component_1","$$anchor","Component_2","$$render","consequent","alternate","consequent_1","sessionId","sdk","useStrivacity","loginHandler","$$props","context","triggerFallback","hostedUrl","message","url","error","FallbackError","triggerClose","renderWidgets","idx","form","f","widget","w","WidgetComponent","LayoutComponent","setFormValue","formId","widgetId","value","setMessage","submitForm","data","unflattenObject","handleResponse","previousState","newState","setContext","onMount","renderedWidgets","div","root","$0","LayoutComponent_1","LoadingComponent","LoadingComponent_1","consequent_3","consequent_2","alternate_1"],"mappings":"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"}
1
+ {"version":3,"file":"LoginRenderer.cjs","sources":["../src/LoginRenderer.svelte"],"sourcesContent":["<script lang=\"ts\">\n\t/* eslint-disable @typescript-eslint/no-explicit-any */\n\timport type {\n\t\tNativeParams,\n\t\tPartialRecord,\n\t\tWidgetType,\n\t\tLayoutWidget,\n\t\tLoginFlowState,\n\t\tWidget,\n\t\tIdTokenClaims,\n\t\tLoginFlowMessage,\n\t} from '@strivacity/sdk-core';\n\timport type { NativeContext, NativeFlowContextValue } from './types';\n\timport type { Component } from 'svelte';\n\timport { setContext, onMount } from 'svelte';\n\timport { FallbackError } from '@strivacity/sdk-core';\n\timport { unflattenObject } from '@strivacity/sdk-core/utils/object';\n\timport { useStrivacity } from './composables';\n\n\tlet {\n\t\tparams,\n\t\twidgets,\n\t\tsessionId = null,\n\t\tlanguage = null,\n\t\tonlogin,\n\t\tonfallback,\n\t\tonclose,\n\t\tonerror,\n\t\tonglobalmessage,\n\t\tonblockready,\n\t\tonlanguagechange,\n\t}: {\n\t\tparams?: NativeParams;\n\t\twidgets?: PartialRecord<WidgetType, Component>;\n\t\tsessionId?: string | null;\n\t\tlanguage?: string | null;\n\t\tonlogin?: (claims?: IdTokenClaims | null) => void;\n\t\tonfallback?: (error: FallbackError) => void;\n\t\tonclose?: () => void;\n\t\tonerror?: (error: any) => void;\n\t\tonglobalmessage?: (message: string) => void;\n\t\tonblockready?: ({ previousState, state }: { previousState: LoginFlowState; state: LoginFlowState }) => void;\n\t\tonlanguagechange?: (language: string | null) => void;\n\t} = $props();\n\n\tconst { sdk } = useStrivacity<NativeContext>();\n\t// svelte-ignore state_referenced_locally\n\tconst loginHandler = sdk.login(params);\n\tconst context = $state<NativeFlowContextValue>({\n\t\tloading: false,\n\t\tforms: {},\n\t\tmessages: {},\n\t\tstate: {},\n\t\tsubmitForm: async () => {},\n\t\ttriggerFallback: () => {},\n\t\ttriggerClose: () => {},\n\t\tsetFormValue: () => {},\n\t\tsetMessage: () => {},\n\t});\n\n\tconst triggerFallback = (hostedUrl?: string, message?: string) => {\n\t\tconst url = hostedUrl || context.state.hostedUrl;\n\n\t\tsdk.logging?.warn(message ? `Triggering fallback due to: ${message}` : 'Triggering fallback');\n\n\t\tif (!url) {\n\t\t\tconst error = new Error('No hosted URL provided');\n\t\t\tsdk.logging?.error('Fallback error', error);\n\t\t\tthrow error;\n\t\t}\n\n\t\tonfallback?.(new FallbackError(new URL(url)));\n\t};\n\n\tconst triggerClose = () => {\n\t\tonclose?.();\n\t};\n\n\tconst renderWidgets = (items: LayoutWidget['items']): Array<any> => {\n\t\treturn items.map((item, idx) => {\n\t\t\tif (item.type === 'widget') {\n\t\t\t\tconst form = context.state.forms?.find((f: any) => f.id === item.formId);\n\t\t\t\tconst widget = form?.widgets.find((w: any) => w.id === item.widgetId);\n\n\t\t\t\tif (!form || !widget) {\n\t\t\t\t\ttriggerFallback(undefined, `Unable to find form or widget for item: formId=${item.formId}, widgetId=${item.widgetId}`);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst WidgetComponent = widgets?.[widget.type as keyof typeof widgets];\n\n\t\t\t\tif (!WidgetComponent) {\n\t\t\t\t\ttriggerFallback(undefined, `No component found for widget type ${widget.type}`);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcomponent: WidgetComponent,\n\t\t\t\t\tprops: { formId: form.id, config: widget },\n\t\t\t\t\tkey: `${form.id}.${widget.id}`,\n\t\t\t\t};\n\t\t\t} else if (item.type === 'vertical' || item.type === 'horizontal') {\n\t\t\t\tconst LayoutComponent = widgets?.layout;\n\n\t\t\t\tif (!LayoutComponent) {\n\t\t\t\t\ttriggerFallback(undefined, 'No layout component provided');\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcomponent: LayoutComponent,\n\t\t\t\t\tprops: { formId: (item.items[0] as Widget).formId, type: item.type, tag: 'div' },\n\t\t\t\t\tchildren: renderWidgets(item.items),\n\t\t\t\t\tkey: `layout-${idx}`,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\ttriggerFallback(undefined, 'Unknown item type in layout');\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t};\n\n\tconst setFormValue = (formId: string, widgetId: string, value: unknown) => {\n\t\tif (value === '') {\n\t\t\tvalue = null;\n\t\t}\n\n\t\tcontext.forms = {\n\t\t\t...context.forms,\n\t\t\t[formId]: { ...(context.forms[formId] || {}), [widgetId]: value === '' ? null : value },\n\t\t};\n\t};\n\n\tconst setMessage = (formId: string, widgetId: string, value: LoginFlowMessage) => {\n\t\tcontext.messages = {\n\t\t\t...context.messages,\n\t\t\t[formId]: { ...(context.messages[formId] || {}), [widgetId]: value },\n\t\t};\n\t};\n\n\tconst submitForm = async (formId: string) => {\n\t\ttry {\n\t\t\tcontext.loading = true;\n\n\t\t\tconst data = await loginHandler?.submitForm(formId, unflattenObject(context.forms[formId]));\n\t\t\tawait handleResponse(data);\n\n\t\t\tcontext.loading = false;\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tonfallback?.(error);\n\t\t\t} else {\n\t\t\t\tonerror?.(error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleResponse = async (data?: LoginFlowState) => {\n\t\tif (await sdk.isAuthenticated) {\n\t\t\tonlogin?.(sdk.idTokenClaims);\n\t\t} else {\n\t\t\tconst previousState = JSON.parse(JSON.stringify(context.state));\n\t\t\tconst newState: LoginFlowState = {\n\t\t\t\thostedUrl: data?.hostedUrl ?? context.state.hostedUrl,\n\t\t\t\tfinalizeUrl: data?.finalizeUrl ?? context.state.finalizeUrl,\n\t\t\t\tscreen: data?.screen ?? context.state.screen,\n\t\t\t\tforms: data?.forms ?? context.state.forms,\n\t\t\t\tlayout: data?.layout ?? context.state.layout,\n\t\t\t\tmessages: data?.messages ?? {},\n\t\t\t\tbranding: data?.branding ?? context.state.branding,\n\t\t\t};\n\n\t\t\tif (newState.screen !== context.state.screen) {\n\t\t\t\tcontext.forms = {};\n\t\t\t\tcontext.messages = {};\n\n\t\t\t\tfor (const form of newState.forms ?? []) {\n\t\t\t\t\tcontext.forms[form.id] = {};\n\t\t\t\t\tcontext.messages[form.id] = {};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsdk.logging?.info(`Updating screen: ${newState.screen}`);\n\t\t\t}\n\n\t\t\tObject.keys(newState.messages ?? {}).forEach((formId) => {\n\t\t\t\tif (formId === 'global') {\n\t\t\t\t\tonglobalmessage?.(newState.messages?.global?.text ?? '');\n\t\t\t\t} else {\n\t\t\t\t\tcontext.messages[formId] = newState.messages![formId];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcontext.state = newState;\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tonblockready?.({ previousState, state: JSON.parse(JSON.stringify(newState)) });\n\t\t\t}, 1);\n\t\t}\n\t};\n\n\tcontext.submitForm = submitForm;\n\tcontext.triggerFallback = triggerFallback;\n\tcontext.triggerClose = triggerClose;\n\tcontext.setFormValue = setFormValue;\n\tcontext.setMessage = setMessage;\n\n\tsetContext('nativeFlowContext', context);\n\n\tonMount(async () => {\n\t\ttry {\n\t\t\tconst data = await loginHandler?.startSession(sessionId, language);\n\t\t\tonlanguagechange?.(loginHandler.language);\n\n\t\t\tif (data) {\n\t\t\t\tawait handleResponse(data);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tonfallback?.(error);\n\t\t\t} else {\n\t\t\t\tonerror?.(error);\n\t\t\t}\n\t\t}\n\t});\n\n\tlet renderedWidgets = $derived(context.state.screen && widgets?.layout ? renderWidgets(context.state.layout?.items ?? []) : []);\n</script>\n\n{#snippet renderItems(items: any[])}\n\t{#each items as item (item?.key)}\n\t\t{#if item}\n\t\t\t{@const Component = item.component}\n\t\t\t{#if item.children}\n\t\t\t\t<Component {...item.props}>\n\t\t\t\t\t{@render renderItems(item.children)}\n\t\t\t\t</Component>\n\t\t\t{:else}\n\t\t\t\t<Component {...item.props} />\n\t\t\t{/if}\n\t\t{/if}\n\t{/each}\n{/snippet}\n\n<div class=\"login-renderer\">\n\t{#if context.state.screen && widgets?.layout}\n\t\t{@const LayoutComponent = widgets?.layout}\n\t\t<LayoutComponent formId={(context.state.layout?.items[0] as Widget).formId} type={context.state.layout?.type} tag=\"form\">\n\t\t\t{@render renderItems(renderedWidgets)}\n\t\t</LayoutComponent>\n\t{:else if widgets?.loading}\n\t\t{@const LoadingComponent = widgets?.loading}\n\t\t<LoadingComponent />\n\t{/if}\n</div>\n"],"names":["renderItems","items","$","node","item","Component","Component_1","$$anchor","Component_2","$$render","consequent","alternate","consequent_1","sessionId","language","sdk","useStrivacity","loginHandler","$$props","context","triggerFallback","hostedUrl","message","url","error","FallbackError","triggerClose","renderWidgets","idx","form","f","widget","w","WidgetComponent","LayoutComponent","setFormValue","formId","widgetId","value","setMessage","submitForm","data","unflattenObject","handleResponse","previousState","newState","setContext","onMount","renderedWidgets","div","root","$0","LayoutComponent_1","LoadingComponent","LoadingComponent_1","consequent_3","consequent_2","alternate_1"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import"svelte/internal/disclose-version";import*as e from"svelte/internal/client";import{setContext as O,onMount as z}from"svelte";import{FallbackError as S}from"@strivacity/sdk-core";import{unflattenObject as J}from"@strivacity/sdk-core/utils/object";import{useStrivacity as M}from"./composables.mjs";const x=(F,a=e.noop)=>{var h=e.comment(),l=e.first_child(h);e.each(l,17,a,m=>m?.key,(m,t)=>{var d=e.comment(),U=e.first_child(d);{var w=p=>{const _=e.derived(()=>e.get(t).component);var b=e.comment(),k=e.first_child(b);{var C=g=>{var f=e.comment(),v=e.first_child(f);e.component(v,()=>e.get(_),(n,o)=>{o(n,e.spread_props(()=>e.get(t).props,{children:(r,s)=>{x(r,()=>e.get(t).children)},$$slots:{default:!0}}))}),e.append(g,f)},y=g=>{var f=e.comment(),v=e.first_child(f);e.component(v,()=>e.get(_),(n,o)=>{o(n,e.spread_props(()=>e.get(t).props))}),e.append(g,f)};e.if(k,g=>{e.get(t).children?g(C):g(y,!1)})}e.append(p,b)};e.if(U,p=>{e.get(t)&&p(w)})}e.append(m,d)}),e.append(F,h)};var R=e.from_html('<div class="login-renderer"><!></div>');function P(F,a){e.push(a,!0);let h=e.prop(a,"sessionId",3,null);const{sdk:l}=M(),m=l.login(a.params),t=e.proxy({loading:!1,forms:{},messages:{},state:{},submitForm:async()=>{},triggerFallback:()=>{},triggerClose:()=>{},setFormValue:()=>{},setMessage:()=>{}}),d=(n,o)=>{const r=n||t.state.hostedUrl;if(l.logging?.warn(o?`Triggering fallback due to: ${o}`:"Triggering fallback"),!r){const s=new Error("No hosted URL provided");throw l.logging?.error("Fallback error",s),s}a.onfallback?.(new S(new URL(r)))},U=()=>{a.onclose?.()},w=n=>n.map((o,r)=>{if(o.type==="widget"){const s=t.state.forms?.find(c=>c.id===o.formId),i=s?.widgets.find(c=>c.id===o.widgetId);if(!s||!i)return d(void 0,`Unable to find form or widget for item: formId=${o.formId}, widgetId=${o.widgetId}`),null;const u=a.widgets?.[i.type];return u?{component:u,props:{formId:s.id,config:i},key:`${s.id}.${i.id}`}:(d(void 0,`No component found for widget type ${i.type}`),null)}else if(o.type==="vertical"||o.type==="horizontal"){const s=a.widgets?.layout;return s?{component:s,props:{formId:o.items[0].formId,type:o.type,tag:"div"},children:w(o.items),key:`layout-${r}`}:(d(void 0,"No layout component provided"),null)}else return d(void 0,"Unknown item type in layout"),null}),p=(n,o,r)=>{r===""&&(r=null),t.forms={...t.forms,[n]:{...t.forms[n]||{},[o]:r===""?null:r}}},_=(n,o,r)=>{t.messages={...t.messages,[n]:{...t.messages[n]||{},[o]:r}}},b=async n=>{try{t.loading=!0;const o=await m?.submitForm(n,J(t.forms[n]));await k(o),t.loading=!1}catch(o){o instanceof S?a.onfallback?.(o):a.onerror?.(o)}},k=async n=>{if(await l.isAuthenticated)a.onlogin?.(l.idTokenClaims);else{const o=JSON.parse(JSON.stringify(t.state)),r={hostedUrl:n?.hostedUrl??t.state.hostedUrl,finalizeUrl:n?.finalizeUrl??t.state.finalizeUrl,screen:n?.screen??t.state.screen,forms:n?.forms??t.state.forms,layout:n?.layout??t.state.layout,messages:n?.messages??{},branding:n?.branding??t.state.branding};if(r.screen!==t.state.screen){t.forms={},t.messages={};for(const s of r.forms??[])t.forms[s.id]={},t.messages[s.id]={}}else l.logging?.info(`Updating screen: ${r.screen}`);Object.keys(r.messages??{}).forEach(s=>{s==="global"?a.onglobalmessage?.(r.messages?.global?.text??""):t.messages[s]=r.messages[s]}),t.state=r,setTimeout(()=>{a.onblockready?.({previousState:o,state:JSON.parse(JSON.stringify(r))})},1)}};t.submitForm=b,t.triggerFallback=d,t.triggerClose=U,t.setFormValue=p,t.setMessage=_,O("nativeFlowContext",t),z(async()=>{try{const n=await m?.startSession(h());n&&await k(n)}catch(n){n instanceof S?a.onfallback?.(n):a.onerror?.(n)}});let C=e.derived(()=>t.state.screen&&a.widgets?.layout?w(t.state.layout?.items??[]):[]);var y=R(),g=e.child(y);{var f=n=>{const o=e.derived(()=>a.widgets?.layout);var r=e.comment(),s=e.first_child(r);{let i=e.derived(()=>t.state.layout?.type);e.component(s,()=>e.get(o),(u,c)=>{c(u,{get formId(){return t.state.layout?.items[0].formId},get type(){return e.get(i)},tag:"form",children:(I,N)=>{x(I,()=>e.get(C))},$$slots:{default:!0}})})}e.append(n,r)},v=n=>{var o=e.comment(),r=e.first_child(o);{var s=i=>{const u=e.derived(()=>a.widgets?.loading);var c=e.comment(),I=e.first_child(c);e.component(I,()=>e.get(u),(N,L)=>{L(N,{})}),e.append(i,c)};e.if(r,i=>{a.widgets?.loading&&i(s)},!0)}e.append(n,o)};e.if(g,n=>{t.state.screen&&a.widgets?.layout?n(f):n(v,!1)})}e.reset(y),e.append(F,y),e.pop()}export{P as default};
1
+ import"svelte/internal/disclose-version";import*as e from"svelte/internal/client";import{setContext as z,onMount as J}from"svelte";import{FallbackError as N}from"@strivacity/sdk-core";import{unflattenObject as M}from"@strivacity/sdk-core/utils/object";import{useStrivacity as R}from"./composables.mjs";const L=(k,s=e.noop)=>{var h=e.comment(),F=e.first_child(h);e.each(F,17,s,l=>l?.key,(l,d)=>{var t=e.comment(),f=e.first_child(t);{var U=u=>{const w=e.derived(()=>e.get(d).component);var _=e.comment(),C=e.first_child(_);{var b=g=>{var m=e.comment(),y=e.first_child(m);e.component(y,()=>e.get(w),(v,n)=>{n(v,e.spread_props(()=>e.get(d).props,{children:(o,r)=>{L(o,()=>e.get(d).children)},$$slots:{default:!0}}))}),e.append(g,m)},I=g=>{var m=e.comment(),y=e.first_child(m);e.component(y,()=>e.get(w),(v,n)=>{n(v,e.spread_props(()=>e.get(d).props))}),e.append(g,m)};e.if(C,g=>{e.get(d).children?g(b):g(I,!1)})}e.append(u,_)};e.if(f,u=>{e.get(d)&&u(U)})}e.append(l,t)}),e.append(k,h)};var T=e.from_html('<div class="login-renderer"><!></div>');function A(k,s){e.push(s,!0);let h=e.prop(s,"sessionId",3,null),F=e.prop(s,"language",3,null);const{sdk:l}=R(),d=l.login(s.params),t=e.proxy({loading:!1,forms:{},messages:{},state:{},submitForm:async()=>{},triggerFallback:()=>{},triggerClose:()=>{},setFormValue:()=>{},setMessage:()=>{}}),f=(n,o)=>{const r=n||t.state.hostedUrl;if(l.logging?.warn(o?`Triggering fallback due to: ${o}`:"Triggering fallback"),!r){const a=new Error("No hosted URL provided");throw l.logging?.error("Fallback error",a),a}s.onfallback?.(new N(new URL(r)))},U=()=>{s.onclose?.()},u=n=>n.map((o,r)=>{if(o.type==="widget"){const a=t.state.forms?.find(c=>c.id===o.formId),i=a?.widgets.find(c=>c.id===o.widgetId);if(!a||!i)return f(void 0,`Unable to find form or widget for item: formId=${o.formId}, widgetId=${o.widgetId}`),null;const p=s.widgets?.[i.type];return p?{component:p,props:{formId:a.id,config:i},key:`${a.id}.${i.id}`}:(f(void 0,`No component found for widget type ${i.type}`),null)}else if(o.type==="vertical"||o.type==="horizontal"){const a=s.widgets?.layout;return a?{component:a,props:{formId:o.items[0].formId,type:o.type,tag:"div"},children:u(o.items),key:`layout-${r}`}:(f(void 0,"No layout component provided"),null)}else return f(void 0,"Unknown item type in layout"),null}),w=(n,o,r)=>{r===""&&(r=null),t.forms={...t.forms,[n]:{...t.forms[n]||{},[o]:r===""?null:r}}},_=(n,o,r)=>{t.messages={...t.messages,[n]:{...t.messages[n]||{},[o]:r}}},C=async n=>{try{t.loading=!0;const o=await d?.submitForm(n,M(t.forms[n]));await b(o),t.loading=!1}catch(o){o instanceof N?s.onfallback?.(o):s.onerror?.(o)}},b=async n=>{if(await l.isAuthenticated)s.onlogin?.(l.idTokenClaims);else{const o=JSON.parse(JSON.stringify(t.state)),r={hostedUrl:n?.hostedUrl??t.state.hostedUrl,finalizeUrl:n?.finalizeUrl??t.state.finalizeUrl,screen:n?.screen??t.state.screen,forms:n?.forms??t.state.forms,layout:n?.layout??t.state.layout,messages:n?.messages??{},branding:n?.branding??t.state.branding};if(r.screen!==t.state.screen){t.forms={},t.messages={};for(const a of r.forms??[])t.forms[a.id]={},t.messages[a.id]={}}else l.logging?.info(`Updating screen: ${r.screen}`);Object.keys(r.messages??{}).forEach(a=>{a==="global"?s.onglobalmessage?.(r.messages?.global?.text??""):t.messages[a]=r.messages[a]}),t.state=r,setTimeout(()=>{s.onblockready?.({previousState:o,state:JSON.parse(JSON.stringify(r))})},1)}};t.submitForm=C,t.triggerFallback=f,t.triggerClose=U,t.setFormValue=w,t.setMessage=_,z("nativeFlowContext",t),J(async()=>{try{const n=await d?.startSession(h(),F());s.onlanguagechange?.(d.language),n&&await b(n)}catch(n){n instanceof N?s.onfallback?.(n):s.onerror?.(n)}});let I=e.derived(()=>t.state.screen&&s.widgets?.layout?u(t.state.layout?.items??[]):[]);var g=T(),m=e.child(g);{var y=n=>{const o=e.derived(()=>s.widgets?.layout);var r=e.comment(),a=e.first_child(r);{let i=e.derived(()=>t.state.layout?.type);e.component(a,()=>e.get(o),(p,c)=>{c(p,{get formId(){return t.state.layout?.items[0].formId},get type(){return e.get(i)},tag:"form",children:(S,x)=>{L(S,()=>e.get(I))},$$slots:{default:!0}})})}e.append(n,r)},v=n=>{var o=e.comment(),r=e.first_child(o);{var a=i=>{const p=e.derived(()=>s.widgets?.loading);var c=e.comment(),S=e.first_child(c);e.component(S,()=>e.get(p),(x,O)=>{O(x,{})}),e.append(i,c)};e.if(r,i=>{s.widgets?.loading&&i(a)},!0)}e.append(n,o)};e.if(m,n=>{t.state.screen&&s.widgets?.layout?n(y):n(v,!1)})}e.reset(g),e.append(k,g),e.pop()}export{A as default};
2
2
  //# sourceMappingURL=LoginRenderer.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoginRenderer.mjs","sources":["../src/LoginRenderer.svelte"],"sourcesContent":["<script lang=\"ts\">\n\t/* eslint-disable @typescript-eslint/no-explicit-any */\n\timport type {\n\t\tNativeParams,\n\t\tPartialRecord,\n\t\tWidgetType,\n\t\tLayoutWidget,\n\t\tLoginFlowState,\n\t\tWidget,\n\t\tIdTokenClaims,\n\t\tLoginFlowMessage,\n\t} from '@strivacity/sdk-core';\n\timport type { NativeContext, NativeFlowContextValue } from './types';\n\timport type { Component } from 'svelte';\n\timport { setContext, onMount } from 'svelte';\n\timport { FallbackError } from '@strivacity/sdk-core';\n\timport { unflattenObject } from '@strivacity/sdk-core/utils/object';\n\timport { useStrivacity } from './composables';\n\n\tlet {\n\t\tparams,\n\t\twidgets,\n\t\tsessionId = null,\n\t\tonlogin,\n\t\tonfallback,\n\t\tonclose,\n\t\tonerror,\n\t\tonglobalmessage,\n\t\tonblockready,\n\t}: {\n\t\tparams?: NativeParams;\n\t\twidgets?: PartialRecord<WidgetType, Component>;\n\t\tsessionId?: string | null;\n\t\tonlogin?: (claims?: IdTokenClaims | null) => void;\n\t\tonfallback?: (error: FallbackError) => void;\n\t\tonclose?: () => void;\n\t\tonerror?: (error: any) => void;\n\t\tonglobalmessage?: (message: string) => void;\n\t\tonblockready?: ({ previousState, state }: { previousState: LoginFlowState; state: LoginFlowState }) => void;\n\t} = $props();\n\n\tconst { sdk } = useStrivacity<NativeContext>();\n\t// svelte-ignore state_referenced_locally\n\tconst loginHandler = sdk.login(params);\n\tconst context = $state<NativeFlowContextValue>({\n\t\tloading: false,\n\t\tforms: {},\n\t\tmessages: {},\n\t\tstate: {},\n\t\tsubmitForm: async () => {},\n\t\ttriggerFallback: () => {},\n\t\ttriggerClose: () => {},\n\t\tsetFormValue: () => {},\n\t\tsetMessage: () => {},\n\t});\n\n\tconst triggerFallback = (hostedUrl?: string, message?: string) => {\n\t\tconst url = hostedUrl || context.state.hostedUrl;\n\n\t\tsdk.logging?.warn(message ? `Triggering fallback due to: ${message}` : 'Triggering fallback');\n\n\t\tif (!url) {\n\t\t\tconst error = new Error('No hosted URL provided');\n\t\t\tsdk.logging?.error('Fallback error', error);\n\t\t\tthrow error;\n\t\t}\n\n\t\tonfallback?.(new FallbackError(new URL(url)));\n\t};\n\n\tconst triggerClose = () => {\n\t\tonclose?.();\n\t};\n\n\tconst renderWidgets = (items: LayoutWidget['items']): Array<any> => {\n\t\treturn items.map((item, idx) => {\n\t\t\tif (item.type === 'widget') {\n\t\t\t\tconst form = context.state.forms?.find((f: any) => f.id === item.formId);\n\t\t\t\tconst widget = form?.widgets.find((w: any) => w.id === item.widgetId);\n\n\t\t\t\tif (!form || !widget) {\n\t\t\t\t\ttriggerFallback(undefined, `Unable to find form or widget for item: formId=${item.formId}, widgetId=${item.widgetId}`);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst WidgetComponent = widgets?.[widget.type as keyof typeof widgets];\n\n\t\t\t\tif (!WidgetComponent) {\n\t\t\t\t\ttriggerFallback(undefined, `No component found for widget type ${widget.type}`);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcomponent: WidgetComponent,\n\t\t\t\t\tprops: { formId: form.id, config: widget },\n\t\t\t\t\tkey: `${form.id}.${widget.id}`,\n\t\t\t\t};\n\t\t\t} else if (item.type === 'vertical' || item.type === 'horizontal') {\n\t\t\t\tconst LayoutComponent = widgets?.layout;\n\n\t\t\t\tif (!LayoutComponent) {\n\t\t\t\t\ttriggerFallback(undefined, 'No layout component provided');\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcomponent: LayoutComponent,\n\t\t\t\t\tprops: { formId: (item.items[0] as Widget).formId, type: item.type, tag: 'div' },\n\t\t\t\t\tchildren: renderWidgets(item.items),\n\t\t\t\t\tkey: `layout-${idx}`,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\ttriggerFallback(undefined, 'Unknown item type in layout');\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t};\n\n\tconst setFormValue = (formId: string, widgetId: string, value: unknown) => {\n\t\tif (value === '') {\n\t\t\tvalue = null;\n\t\t}\n\n\t\tcontext.forms = {\n\t\t\t...context.forms,\n\t\t\t[formId]: { ...(context.forms[formId] || {}), [widgetId]: value === '' ? null : value },\n\t\t};\n\t};\n\n\tconst setMessage = (formId: string, widgetId: string, value: LoginFlowMessage) => {\n\t\tcontext.messages = {\n\t\t\t...context.messages,\n\t\t\t[formId]: { ...(context.messages[formId] || {}), [widgetId]: value },\n\t\t};\n\t};\n\n\tconst submitForm = async (formId: string) => {\n\t\ttry {\n\t\t\tcontext.loading = true;\n\n\t\t\tconst data = await loginHandler?.submitForm(formId, unflattenObject(context.forms[formId]));\n\t\t\tawait handleResponse(data);\n\n\t\t\tcontext.loading = false;\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tonfallback?.(error);\n\t\t\t} else {\n\t\t\t\tonerror?.(error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleResponse = async (data?: LoginFlowState) => {\n\t\tif (await sdk.isAuthenticated) {\n\t\t\tonlogin?.(sdk.idTokenClaims);\n\t\t} else {\n\t\t\tconst previousState = JSON.parse(JSON.stringify(context.state));\n\t\t\tconst newState: LoginFlowState = {\n\t\t\t\thostedUrl: data?.hostedUrl ?? context.state.hostedUrl,\n\t\t\t\tfinalizeUrl: data?.finalizeUrl ?? context.state.finalizeUrl,\n\t\t\t\tscreen: data?.screen ?? context.state.screen,\n\t\t\t\tforms: data?.forms ?? context.state.forms,\n\t\t\t\tlayout: data?.layout ?? context.state.layout,\n\t\t\t\tmessages: data?.messages ?? {},\n\t\t\t\tbranding: data?.branding ?? context.state.branding,\n\t\t\t};\n\n\t\t\tif (newState.screen !== context.state.screen) {\n\t\t\t\tcontext.forms = {};\n\t\t\t\tcontext.messages = {};\n\n\t\t\t\tfor (const form of newState.forms ?? []) {\n\t\t\t\t\tcontext.forms[form.id] = {};\n\t\t\t\t\tcontext.messages[form.id] = {};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsdk.logging?.info(`Updating screen: ${newState.screen}`);\n\t\t\t}\n\n\t\t\tObject.keys(newState.messages ?? {}).forEach((formId) => {\n\t\t\t\tif (formId === 'global') {\n\t\t\t\t\tonglobalmessage?.(newState.messages?.global?.text ?? '');\n\t\t\t\t} else {\n\t\t\t\t\tcontext.messages[formId] = newState.messages![formId];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcontext.state = newState;\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tonblockready?.({ previousState, state: JSON.parse(JSON.stringify(newState)) });\n\t\t\t}, 1);\n\t\t}\n\t};\n\n\tcontext.submitForm = submitForm;\n\tcontext.triggerFallback = triggerFallback;\n\tcontext.triggerClose = triggerClose;\n\tcontext.setFormValue = setFormValue;\n\tcontext.setMessage = setMessage;\n\n\tsetContext('nativeFlowContext', context);\n\n\tonMount(async () => {\n\t\ttry {\n\t\t\tconst data = await loginHandler?.startSession(sessionId);\n\n\t\t\tif (data) {\n\t\t\t\tawait handleResponse(data);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tonfallback?.(error);\n\t\t\t} else {\n\t\t\t\tonerror?.(error);\n\t\t\t}\n\t\t}\n\t});\n\n\tlet renderedWidgets = $derived(context.state.screen && widgets?.layout ? renderWidgets(context.state.layout?.items ?? []) : []);\n</script>\n\n{#snippet renderItems(items: any[])}\n\t{#each items as item (item?.key)}\n\t\t{#if item}\n\t\t\t{@const Component = item.component}\n\t\t\t{#if item.children}\n\t\t\t\t<Component {...item.props}>\n\t\t\t\t\t{@render renderItems(item.children)}\n\t\t\t\t</Component>\n\t\t\t{:else}\n\t\t\t\t<Component {...item.props} />\n\t\t\t{/if}\n\t\t{/if}\n\t{/each}\n{/snippet}\n\n<div class=\"login-renderer\">\n\t{#if context.state.screen && widgets?.layout}\n\t\t{@const LayoutComponent = widgets?.layout}\n\t\t<LayoutComponent formId={(context.state.layout?.items[0] as Widget).formId} type={context.state.layout?.type} tag=\"form\">\n\t\t\t{@render renderItems(renderedWidgets)}\n\t\t</LayoutComponent>\n\t{:else if widgets?.loading}\n\t\t{@const LoadingComponent = widgets?.loading}\n\t\t<LoadingComponent />\n\t{/if}\n</div>\n"],"names":["renderItems","items","$","node","item","Component","Component_1","$$anchor","Component_2","$$render","consequent","alternate","consequent_1","sessionId","sdk","useStrivacity","loginHandler","$$props","context","triggerFallback","hostedUrl","message","url","error","FallbackError","triggerClose","renderWidgets","idx","form","f","widget","w","WidgetComponent","LayoutComponent","setFormValue","formId","widgetId","value","setMessage","submitForm","data","unflattenObject","handleResponse","previousState","newState","setContext","onMount","renderedWidgets","div","root","$0","LayoutComponent_1","LoadingComponent","LoadingComponent_1","consequent_3","consequent_2","alternate_1"],"mappings":"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"}
1
+ {"version":3,"file":"LoginRenderer.mjs","sources":["../src/LoginRenderer.svelte"],"sourcesContent":["<script lang=\"ts\">\n\t/* eslint-disable @typescript-eslint/no-explicit-any */\n\timport type {\n\t\tNativeParams,\n\t\tPartialRecord,\n\t\tWidgetType,\n\t\tLayoutWidget,\n\t\tLoginFlowState,\n\t\tWidget,\n\t\tIdTokenClaims,\n\t\tLoginFlowMessage,\n\t} from '@strivacity/sdk-core';\n\timport type { NativeContext, NativeFlowContextValue } from './types';\n\timport type { Component } from 'svelte';\n\timport { setContext, onMount } from 'svelte';\n\timport { FallbackError } from '@strivacity/sdk-core';\n\timport { unflattenObject } from '@strivacity/sdk-core/utils/object';\n\timport { useStrivacity } from './composables';\n\n\tlet {\n\t\tparams,\n\t\twidgets,\n\t\tsessionId = null,\n\t\tlanguage = null,\n\t\tonlogin,\n\t\tonfallback,\n\t\tonclose,\n\t\tonerror,\n\t\tonglobalmessage,\n\t\tonblockready,\n\t\tonlanguagechange,\n\t}: {\n\t\tparams?: NativeParams;\n\t\twidgets?: PartialRecord<WidgetType, Component>;\n\t\tsessionId?: string | null;\n\t\tlanguage?: string | null;\n\t\tonlogin?: (claims?: IdTokenClaims | null) => void;\n\t\tonfallback?: (error: FallbackError) => void;\n\t\tonclose?: () => void;\n\t\tonerror?: (error: any) => void;\n\t\tonglobalmessage?: (message: string) => void;\n\t\tonblockready?: ({ previousState, state }: { previousState: LoginFlowState; state: LoginFlowState }) => void;\n\t\tonlanguagechange?: (language: string | null) => void;\n\t} = $props();\n\n\tconst { sdk } = useStrivacity<NativeContext>();\n\t// svelte-ignore state_referenced_locally\n\tconst loginHandler = sdk.login(params);\n\tconst context = $state<NativeFlowContextValue>({\n\t\tloading: false,\n\t\tforms: {},\n\t\tmessages: {},\n\t\tstate: {},\n\t\tsubmitForm: async () => {},\n\t\ttriggerFallback: () => {},\n\t\ttriggerClose: () => {},\n\t\tsetFormValue: () => {},\n\t\tsetMessage: () => {},\n\t});\n\n\tconst triggerFallback = (hostedUrl?: string, message?: string) => {\n\t\tconst url = hostedUrl || context.state.hostedUrl;\n\n\t\tsdk.logging?.warn(message ? `Triggering fallback due to: ${message}` : 'Triggering fallback');\n\n\t\tif (!url) {\n\t\t\tconst error = new Error('No hosted URL provided');\n\t\t\tsdk.logging?.error('Fallback error', error);\n\t\t\tthrow error;\n\t\t}\n\n\t\tonfallback?.(new FallbackError(new URL(url)));\n\t};\n\n\tconst triggerClose = () => {\n\t\tonclose?.();\n\t};\n\n\tconst renderWidgets = (items: LayoutWidget['items']): Array<any> => {\n\t\treturn items.map((item, idx) => {\n\t\t\tif (item.type === 'widget') {\n\t\t\t\tconst form = context.state.forms?.find((f: any) => f.id === item.formId);\n\t\t\t\tconst widget = form?.widgets.find((w: any) => w.id === item.widgetId);\n\n\t\t\t\tif (!form || !widget) {\n\t\t\t\t\ttriggerFallback(undefined, `Unable to find form or widget for item: formId=${item.formId}, widgetId=${item.widgetId}`);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst WidgetComponent = widgets?.[widget.type as keyof typeof widgets];\n\n\t\t\t\tif (!WidgetComponent) {\n\t\t\t\t\ttriggerFallback(undefined, `No component found for widget type ${widget.type}`);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcomponent: WidgetComponent,\n\t\t\t\t\tprops: { formId: form.id, config: widget },\n\t\t\t\t\tkey: `${form.id}.${widget.id}`,\n\t\t\t\t};\n\t\t\t} else if (item.type === 'vertical' || item.type === 'horizontal') {\n\t\t\t\tconst LayoutComponent = widgets?.layout;\n\n\t\t\t\tif (!LayoutComponent) {\n\t\t\t\t\ttriggerFallback(undefined, 'No layout component provided');\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcomponent: LayoutComponent,\n\t\t\t\t\tprops: { formId: (item.items[0] as Widget).formId, type: item.type, tag: 'div' },\n\t\t\t\t\tchildren: renderWidgets(item.items),\n\t\t\t\t\tkey: `layout-${idx}`,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\ttriggerFallback(undefined, 'Unknown item type in layout');\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t};\n\n\tconst setFormValue = (formId: string, widgetId: string, value: unknown) => {\n\t\tif (value === '') {\n\t\t\tvalue = null;\n\t\t}\n\n\t\tcontext.forms = {\n\t\t\t...context.forms,\n\t\t\t[formId]: { ...(context.forms[formId] || {}), [widgetId]: value === '' ? null : value },\n\t\t};\n\t};\n\n\tconst setMessage = (formId: string, widgetId: string, value: LoginFlowMessage) => {\n\t\tcontext.messages = {\n\t\t\t...context.messages,\n\t\t\t[formId]: { ...(context.messages[formId] || {}), [widgetId]: value },\n\t\t};\n\t};\n\n\tconst submitForm = async (formId: string) => {\n\t\ttry {\n\t\t\tcontext.loading = true;\n\n\t\t\tconst data = await loginHandler?.submitForm(formId, unflattenObject(context.forms[formId]));\n\t\t\tawait handleResponse(data);\n\n\t\t\tcontext.loading = false;\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tonfallback?.(error);\n\t\t\t} else {\n\t\t\t\tonerror?.(error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleResponse = async (data?: LoginFlowState) => {\n\t\tif (await sdk.isAuthenticated) {\n\t\t\tonlogin?.(sdk.idTokenClaims);\n\t\t} else {\n\t\t\tconst previousState = JSON.parse(JSON.stringify(context.state));\n\t\t\tconst newState: LoginFlowState = {\n\t\t\t\thostedUrl: data?.hostedUrl ?? context.state.hostedUrl,\n\t\t\t\tfinalizeUrl: data?.finalizeUrl ?? context.state.finalizeUrl,\n\t\t\t\tscreen: data?.screen ?? context.state.screen,\n\t\t\t\tforms: data?.forms ?? context.state.forms,\n\t\t\t\tlayout: data?.layout ?? context.state.layout,\n\t\t\t\tmessages: data?.messages ?? {},\n\t\t\t\tbranding: data?.branding ?? context.state.branding,\n\t\t\t};\n\n\t\t\tif (newState.screen !== context.state.screen) {\n\t\t\t\tcontext.forms = {};\n\t\t\t\tcontext.messages = {};\n\n\t\t\t\tfor (const form of newState.forms ?? []) {\n\t\t\t\t\tcontext.forms[form.id] = {};\n\t\t\t\t\tcontext.messages[form.id] = {};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsdk.logging?.info(`Updating screen: ${newState.screen}`);\n\t\t\t}\n\n\t\t\tObject.keys(newState.messages ?? {}).forEach((formId) => {\n\t\t\t\tif (formId === 'global') {\n\t\t\t\t\tonglobalmessage?.(newState.messages?.global?.text ?? '');\n\t\t\t\t} else {\n\t\t\t\t\tcontext.messages[formId] = newState.messages![formId];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcontext.state = newState;\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tonblockready?.({ previousState, state: JSON.parse(JSON.stringify(newState)) });\n\t\t\t}, 1);\n\t\t}\n\t};\n\n\tcontext.submitForm = submitForm;\n\tcontext.triggerFallback = triggerFallback;\n\tcontext.triggerClose = triggerClose;\n\tcontext.setFormValue = setFormValue;\n\tcontext.setMessage = setMessage;\n\n\tsetContext('nativeFlowContext', context);\n\n\tonMount(async () => {\n\t\ttry {\n\t\t\tconst data = await loginHandler?.startSession(sessionId, language);\n\t\t\tonlanguagechange?.(loginHandler.language);\n\n\t\t\tif (data) {\n\t\t\t\tawait handleResponse(data);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tonfallback?.(error);\n\t\t\t} else {\n\t\t\t\tonerror?.(error);\n\t\t\t}\n\t\t}\n\t});\n\n\tlet renderedWidgets = $derived(context.state.screen && widgets?.layout ? renderWidgets(context.state.layout?.items ?? []) : []);\n</script>\n\n{#snippet renderItems(items: any[])}\n\t{#each items as item (item?.key)}\n\t\t{#if item}\n\t\t\t{@const Component = item.component}\n\t\t\t{#if item.children}\n\t\t\t\t<Component {...item.props}>\n\t\t\t\t\t{@render renderItems(item.children)}\n\t\t\t\t</Component>\n\t\t\t{:else}\n\t\t\t\t<Component {...item.props} />\n\t\t\t{/if}\n\t\t{/if}\n\t{/each}\n{/snippet}\n\n<div class=\"login-renderer\">\n\t{#if context.state.screen && widgets?.layout}\n\t\t{@const LayoutComponent = widgets?.layout}\n\t\t<LayoutComponent formId={(context.state.layout?.items[0] as Widget).formId} type={context.state.layout?.type} tag=\"form\">\n\t\t\t{@render renderItems(renderedWidgets)}\n\t\t</LayoutComponent>\n\t{:else if widgets?.loading}\n\t\t{@const LoadingComponent = widgets?.loading}\n\t\t<LoadingComponent />\n\t{/if}\n</div>\n"],"names":["renderItems","items","$","node","item","Component","Component_1","$$anchor","Component_2","$$render","consequent","alternate","consequent_1","sessionId","language","sdk","useStrivacity","loginHandler","$$props","context","triggerFallback","hostedUrl","message","url","error","FallbackError","triggerClose","renderWidgets","idx","form","f","widget","w","WidgetComponent","LayoutComponent","setFormValue","formId","widgetId","value","setMessage","submitForm","data","unflattenObject","handleResponse","previousState","newState","setContext","onMount","renderedWidgets","div","root","$0","LayoutComponent_1","LoadingComponent","LoadingComponent_1","consequent_3","consequent_2","alternate_1"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strivacity/sdk-svelte",
3
- "version": "3.0.0",
3
+ "version": "3.0.2",
4
4
  "license": "MIT",
5
5
  "description": "Strivacity Svelte SDK client",
6
6
  "author": "strivacity <opensource@strivacity.com>",
@@ -9,7 +9,7 @@
9
9
  "url": "https://github.com/Strivacity/sdk-js"
10
10
  },
11
11
  "dependencies": {
12
- "@strivacity/sdk-core": "3.0.0"
12
+ "@strivacity/sdk-core": "3.0.2"
13
13
  },
14
14
  "peerDependencies": {
15
15
  "svelte": ">=5"