@strivacity/sdk-react 3.0.3 → 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 (59) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +1562 -406
  3. package/dist/assets/rolldown-runtime.cjs +1 -0
  4. package/dist/assets/rolldown-runtime.mjs +1 -0
  5. package/dist/components.cjs +2 -0
  6. package/dist/components.cjs.map +1 -0
  7. package/dist/components.d.ts +11 -0
  8. package/dist/components.mjs +2 -0
  9. package/dist/components.mjs.map +1 -0
  10. package/dist/errors.cjs +2 -0
  11. package/dist/errors.cjs.map +1 -0
  12. package/dist/errors.d.ts +1 -0
  13. package/dist/errors.mjs +2 -0
  14. package/dist/errors.mjs.map +1 -0
  15. package/dist/hooks.cjs +2 -0
  16. package/dist/hooks.cjs.map +1 -0
  17. package/dist/hooks.d.ts +33 -0
  18. package/dist/hooks.mjs +2 -0
  19. package/dist/hooks.mjs.map +1 -0
  20. package/dist/index.cjs +2 -2
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.d.ts +9 -13
  23. package/dist/index.mjs +2 -2
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/storages.cjs +1 -0
  26. package/dist/storages.d.ts +1 -0
  27. package/dist/storages.mjs +1 -0
  28. package/dist/types.cjs +1 -2
  29. package/dist/types.d.ts +147 -110
  30. package/dist/types.mjs +1 -2
  31. package/dist/utils.cjs +1 -0
  32. package/dist/utils.d.ts +1 -0
  33. package/dist/utils.mjs +1 -0
  34. package/package.json +51 -7
  35. package/testing/tests/components.spec.tsx +146 -0
  36. package/testing/tests/errors.spec.ts +10 -0
  37. package/testing/tests/guard.spec.tsx +119 -0
  38. package/testing/tests/hooks.spec.tsx +418 -0
  39. package/testing/tests/index.spec.ts +105 -0
  40. package/testing/tests/storages.spec.ts +10 -0
  41. package/testing/tests/utils.spec.ts +10 -0
  42. package/testing/utils/common.tsx +63 -0
  43. package/dist/AuthProvider.cjs +0 -2
  44. package/dist/AuthProvider.cjs.map +0 -1
  45. package/dist/AuthProvider.d.ts +0 -7
  46. package/dist/AuthProvider.mjs +0 -2
  47. package/dist/AuthProvider.mjs.map +0 -1
  48. package/dist/LoginRenderer.cjs +0 -2
  49. package/dist/LoginRenderer.cjs.map +0 -1
  50. package/dist/LoginRenderer.d.ts +0 -20
  51. package/dist/LoginRenderer.mjs +0 -2
  52. package/dist/LoginRenderer.mjs.map +0 -1
  53. package/dist/composables.cjs +0 -2
  54. package/dist/composables.cjs.map +0 -1
  55. package/dist/composables.d.ts +0 -12
  56. package/dist/composables.mjs +0 -2
  57. package/dist/composables.mjs.map +0 -1
  58. package/dist/types.cjs.map +0 -1
  59. package/dist/types.mjs.map +0 -1
@@ -0,0 +1,63 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { RedirectFlow, SDKContext } from '../../src/types';
3
+ import { act } from 'react';
4
+ import { createRoot, type Root } from 'react-dom/client';
5
+ import { flushPromises } from '@strivacity/testing/mocks/common';
6
+
7
+ export { act };
8
+
9
+ // Tells React it's safe to batch/flush effects synchronously inside act() in this non-DOM-testing-library environment.
10
+ (globalThis as unknown as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true;
11
+
12
+ const mountedRoots: Array<{ root: Root; container: HTMLElement }> = [];
13
+
14
+ export function mount(element: ReactElement): { container: HTMLElement; rerender: (next: ReactElement) => void } {
15
+ const container = document.createElement('div');
16
+ document.body.appendChild(container);
17
+ const root = createRoot(container);
18
+
19
+ try {
20
+ act(() => {
21
+ root.render(element);
22
+ });
23
+ } catch (error) {
24
+ container.remove();
25
+ throw error;
26
+ }
27
+
28
+ mountedRoots.push({ root, container });
29
+
30
+ return {
31
+ container,
32
+ rerender: (next: ReactElement) => {
33
+ act(() => {
34
+ root.render(next);
35
+ });
36
+ },
37
+ };
38
+ }
39
+
40
+ export function cleanupMounts(): void {
41
+ while (mountedRoots.length > 0) {
42
+ const entry = mountedRoots.pop()!;
43
+
44
+ act(() => {
45
+ entry.root.unmount();
46
+ });
47
+ entry.container.remove();
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Lets pending microtasks (promise chains started from an effect) resolve, inside an `act()`
53
+ * call so any resulting state updates are flushed and applied before the assertions that follow.
54
+ */
55
+ export async function flush(): Promise<void> {
56
+ await act(async () => {
57
+ await flushPromises();
58
+ });
59
+ }
60
+
61
+ export function withContext(sdk: RedirectFlow, loading: boolean) {
62
+ return { sdk, loading } as unknown as SDKContext<RedirectFlow>;
63
+ }
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("react/jsx-runtime"),r=require("react"),S=require("@strivacity/sdk-core"),m=require("./composables.cjs");let e;const A=({options:a,children:T=void 0})=>{const[i,h]=r.useState(!0),[o,b]=r.useState(!1),[c,v]=r.useState(null),[u,f]=r.useState(null),[l,E]=r.useState(null),[d,g]=r.useState(!0),[k,p]=r.useState(null),n=r.useRef([]),t=async()=>{b(await e.isAuthenticated),v(e.idTokenClaims||null),f(e.accessToken||null),E(e.refreshToken||null),g(e.accessTokenExpired),p(e.accessTokenExpirationDate||null),i&&h(!1)};r.useEffect(()=>(e||(e=S.initFlow(a),n.current.push(e.subscribeToEvent("init",t)),n.current.push(e.subscribeToEvent("loggedIn",t)),n.current.push(e.subscribeToEvent("sessionLoaded",t)),n.current.push(e.subscribeToEvent("tokenRefreshed",t)),n.current.push(e.subscribeToEvent("tokenRefreshFailed",t)),n.current.push(e.subscribeToEvent("logoutInitiated",t)),n.current.push(e.subscribeToEvent("tokenRevoked",t)),n.current.push(e.subscribeToEvent("tokenRevokeFailed",t))),()=>{n.current.forEach(s=>s.dispose()),n.current=[]}),[a]);const w=r.useMemo(()=>({sdk:e,loading:i,options:a,isAuthenticated:o,idTokenClaims:c,accessToken:u,refreshToken:l,accessTokenExpired:d,accessTokenExpirationDate:k,login:async s=>{if(e.options.mode==="native")return e.login(s);await e.login(s),await t()},register:async s=>{if(e.options.mode==="native")return e.register(s);await e.register(s),await t()},refresh:async()=>{await e.refresh(),await t()},entry:async s=>await e.entry(s),revoke:async()=>{await e.revoke(),await t()},logout:async s=>{await e.logout(s),await t()},handleCallback:async s=>{await e.handleCallback(s),await t()}}),[e,i,a,c,u,l,d,k,o]);return y.jsx(m.STRIVACITY_SDK.Provider,{value:w,children:T})};exports.StyAuthProvider=A;
2
- //# sourceMappingURL=AuthProvider.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthProvider.cjs","sources":["../src/AuthProvider.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useMemo, useState, useRef, useEffect } from 'react';\nimport { initFlow } from '@strivacity/sdk-core';\nimport type { SDKOptions, IdTokenClaims } from '@strivacity/sdk-core';\nimport type { PopupFlow } from '@strivacity/sdk-core/flows/PopupFlow';\nimport type { RedirectFlow } from '@strivacity/sdk-core/flows/RedirectFlow';\nimport type { NativeFlow } from '@strivacity/sdk-core/flows/NativeFlow';\nimport type { PopupContext, RedirectContext, NativeContext, Children } from './types';\nimport { STRIVACITY_SDK } from './composables';\n\nlet sdk: RedirectFlow | PopupFlow | NativeFlow;\n\nexport const StyAuthProvider: FC<{ options: SDKOptions; children?: Children }> = ({\n\toptions,\n\tchildren = undefined,\n}: {\n\toptions: SDKOptions;\n\tchildren?: Children;\n}) => {\n\tconst [loading, setLoading] = useState<boolean>(true);\n\tconst [isAuthenticated, setIsAuthenticated] = useState<boolean>(false);\n\tconst [idTokenClaims, setIdTokenClaims] = useState<IdTokenClaims | null>(null);\n\tconst [accessToken, setAccessToken] = useState<string | null>(null);\n\tconst [refreshToken, setRefreshToken] = useState<string | null>(null);\n\tconst [accessTokenExpired, setAccessTokenExpired] = useState<boolean>(true);\n\tconst [accessTokenExpirationDate, setAccessTokenExpirationDate] = useState<number | null>(null);\n\tconst events = useRef<{ dispose: () => void }[]>([]);\n\n\tconst updateSession = async () => {\n\t\tsetIsAuthenticated(await sdk.isAuthenticated);\n\t\tsetIdTokenClaims(sdk.idTokenClaims || null);\n\t\tsetAccessToken(sdk.accessToken || null);\n\t\tsetRefreshToken(sdk.refreshToken || null);\n\t\tsetAccessTokenExpired(sdk.accessTokenExpired);\n\t\tsetAccessTokenExpirationDate(sdk.accessTokenExpirationDate || null);\n\n\t\tif (loading) {\n\t\t\tsetLoading(false);\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tif (!sdk) {\n\t\t\tsdk = initFlow(options);\n\n\t\t\tevents.current.push(sdk.subscribeToEvent('init', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('loggedIn', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('sessionLoaded', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('tokenRefreshed', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('tokenRefreshFailed', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('logoutInitiated', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('tokenRevoked', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('tokenRevokeFailed', updateSession));\n\t\t}\n\n\t\treturn () => {\n\t\t\tevents.current.forEach((event) => event.dispose());\n\t\t\tevents.current = [];\n\t\t};\n\t}, [options]);\n\n\t// @ts-expect-error: Ignore SDK type mismatch for initFlow\n\tconst value = useMemo<PopupContext | RedirectContext | NativeContext>(() => {\n\t\treturn {\n\t\t\tsdk,\n\t\t\tloading,\n\t\t\toptions,\n\t\t\tisAuthenticated,\n\t\t\tidTokenClaims,\n\t\t\taccessToken,\n\t\t\trefreshToken,\n\t\t\taccessTokenExpired,\n\t\t\taccessTokenExpirationDate,\n\n\t\t\tlogin: async (options?: Parameters<PopupFlow['login'] | RedirectFlow['login'] | NativeFlow['login']>[0]) => {\n\t\t\t\tif (sdk.options.mode === 'native') {\n\t\t\t\t\treturn sdk.login(options);\n\t\t\t\t}\n\n\t\t\t\tawait sdk.login(options);\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\tregister: async (options?: Parameters<PopupFlow['register'] | RedirectFlow['register'] | NativeFlow['register']>[0]) => {\n\t\t\t\tif (sdk.options.mode === 'native') {\n\t\t\t\t\treturn sdk.register(options);\n\t\t\t\t}\n\n\t\t\t\tawait sdk.register(options);\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\trefresh: async () => {\n\t\t\t\tawait sdk.refresh();\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\tentry: async (url?: string) => {\n\t\t\t\treturn await sdk.entry(url);\n\t\t\t},\n\t\t\trevoke: async () => {\n\t\t\t\tawait sdk.revoke();\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\tlogout: async (options?: Parameters<PopupFlow['logout'] | RedirectFlow['logout']>[0]) => {\n\t\t\t\tawait sdk.logout(options);\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\thandleCallback: async (url?: Parameters<PopupFlow['handleCallback'] | RedirectFlow['handleCallback'] | NativeFlow['handleCallback']>[0]) => {\n\t\t\t\tawait sdk.handleCallback(url);\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t};\n\t}, [sdk, loading, options, idTokenClaims, accessToken, refreshToken, accessTokenExpired, accessTokenExpirationDate, isAuthenticated]);\n\n\treturn <STRIVACITY_SDK.Provider value={value}>{children}</STRIVACITY_SDK.Provider>;\n};\n"],"names":["sdk","StyAuthProvider","options","children","loading","setLoading","useState","isAuthenticated","setIsAuthenticated","idTokenClaims","setIdTokenClaims","accessToken","setAccessToken","refreshToken","setRefreshToken","accessTokenExpired","setAccessTokenExpired","accessTokenExpirationDate","setAccessTokenExpirationDate","events","useRef","updateSession","useEffect","initFlow","event","value","useMemo","url","jsx","STRIVACITY_SDK"],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { FC } from 'react';
2
- import { SDKOptions } from '@strivacity/sdk-core';
3
- import { Children } from './types';
4
- export declare const StyAuthProvider: FC<{
5
- options: SDKOptions;
6
- children?: Children;
7
- }>;
@@ -1,2 +0,0 @@
1
- import{jsx as g}from"react/jsx-runtime";import{useState as r,useRef as y,useEffect as x,useMemo as A}from"react";import{initFlow as R}from"@strivacity/sdk-core";import{STRIVACITY_SDK as C}from"./composables.mjs";let e;const L=({options:a,children:T=void 0})=>{const[o,h]=r(!0),[i,f]=r(!1),[c,v]=r(null),[u,b]=r(null),[l,p]=r(null),[d,E]=r(!0),[k,w]=r(null),n=y([]),t=async()=>{f(await e.isAuthenticated),v(e.idTokenClaims||null),b(e.accessToken||null),p(e.refreshToken||null),E(e.accessTokenExpired),w(e.accessTokenExpirationDate||null),o&&h(!1)};x(()=>(e||(e=R(a),n.current.push(e.subscribeToEvent("init",t)),n.current.push(e.subscribeToEvent("loggedIn",t)),n.current.push(e.subscribeToEvent("sessionLoaded",t)),n.current.push(e.subscribeToEvent("tokenRefreshed",t)),n.current.push(e.subscribeToEvent("tokenRefreshFailed",t)),n.current.push(e.subscribeToEvent("logoutInitiated",t)),n.current.push(e.subscribeToEvent("tokenRevoked",t)),n.current.push(e.subscribeToEvent("tokenRevokeFailed",t))),()=>{n.current.forEach(s=>s.dispose()),n.current=[]}),[a]);const m=A(()=>({sdk:e,loading:o,options:a,isAuthenticated:i,idTokenClaims:c,accessToken:u,refreshToken:l,accessTokenExpired:d,accessTokenExpirationDate:k,login:async s=>{if(e.options.mode==="native")return e.login(s);await e.login(s),await t()},register:async s=>{if(e.options.mode==="native")return e.register(s);await e.register(s),await t()},refresh:async()=>{await e.refresh(),await t()},entry:async s=>await e.entry(s),revoke:async()=>{await e.revoke(),await t()},logout:async s=>{await e.logout(s),await t()},handleCallback:async s=>{await e.handleCallback(s),await t()}}),[e,o,a,c,u,l,d,k,i]);return g(C.Provider,{value:m,children:T})};export{L as StyAuthProvider};
2
- //# sourceMappingURL=AuthProvider.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthProvider.mjs","sources":["../src/AuthProvider.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useMemo, useState, useRef, useEffect } from 'react';\nimport { initFlow } from '@strivacity/sdk-core';\nimport type { SDKOptions, IdTokenClaims } from '@strivacity/sdk-core';\nimport type { PopupFlow } from '@strivacity/sdk-core/flows/PopupFlow';\nimport type { RedirectFlow } from '@strivacity/sdk-core/flows/RedirectFlow';\nimport type { NativeFlow } from '@strivacity/sdk-core/flows/NativeFlow';\nimport type { PopupContext, RedirectContext, NativeContext, Children } from './types';\nimport { STRIVACITY_SDK } from './composables';\n\nlet sdk: RedirectFlow | PopupFlow | NativeFlow;\n\nexport const StyAuthProvider: FC<{ options: SDKOptions; children?: Children }> = ({\n\toptions,\n\tchildren = undefined,\n}: {\n\toptions: SDKOptions;\n\tchildren?: Children;\n}) => {\n\tconst [loading, setLoading] = useState<boolean>(true);\n\tconst [isAuthenticated, setIsAuthenticated] = useState<boolean>(false);\n\tconst [idTokenClaims, setIdTokenClaims] = useState<IdTokenClaims | null>(null);\n\tconst [accessToken, setAccessToken] = useState<string | null>(null);\n\tconst [refreshToken, setRefreshToken] = useState<string | null>(null);\n\tconst [accessTokenExpired, setAccessTokenExpired] = useState<boolean>(true);\n\tconst [accessTokenExpirationDate, setAccessTokenExpirationDate] = useState<number | null>(null);\n\tconst events = useRef<{ dispose: () => void }[]>([]);\n\n\tconst updateSession = async () => {\n\t\tsetIsAuthenticated(await sdk.isAuthenticated);\n\t\tsetIdTokenClaims(sdk.idTokenClaims || null);\n\t\tsetAccessToken(sdk.accessToken || null);\n\t\tsetRefreshToken(sdk.refreshToken || null);\n\t\tsetAccessTokenExpired(sdk.accessTokenExpired);\n\t\tsetAccessTokenExpirationDate(sdk.accessTokenExpirationDate || null);\n\n\t\tif (loading) {\n\t\t\tsetLoading(false);\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tif (!sdk) {\n\t\t\tsdk = initFlow(options);\n\n\t\t\tevents.current.push(sdk.subscribeToEvent('init', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('loggedIn', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('sessionLoaded', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('tokenRefreshed', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('tokenRefreshFailed', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('logoutInitiated', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('tokenRevoked', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('tokenRevokeFailed', updateSession));\n\t\t}\n\n\t\treturn () => {\n\t\t\tevents.current.forEach((event) => event.dispose());\n\t\t\tevents.current = [];\n\t\t};\n\t}, [options]);\n\n\t// @ts-expect-error: Ignore SDK type mismatch for initFlow\n\tconst value = useMemo<PopupContext | RedirectContext | NativeContext>(() => {\n\t\treturn {\n\t\t\tsdk,\n\t\t\tloading,\n\t\t\toptions,\n\t\t\tisAuthenticated,\n\t\t\tidTokenClaims,\n\t\t\taccessToken,\n\t\t\trefreshToken,\n\t\t\taccessTokenExpired,\n\t\t\taccessTokenExpirationDate,\n\n\t\t\tlogin: async (options?: Parameters<PopupFlow['login'] | RedirectFlow['login'] | NativeFlow['login']>[0]) => {\n\t\t\t\tif (sdk.options.mode === 'native') {\n\t\t\t\t\treturn sdk.login(options);\n\t\t\t\t}\n\n\t\t\t\tawait sdk.login(options);\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\tregister: async (options?: Parameters<PopupFlow['register'] | RedirectFlow['register'] | NativeFlow['register']>[0]) => {\n\t\t\t\tif (sdk.options.mode === 'native') {\n\t\t\t\t\treturn sdk.register(options);\n\t\t\t\t}\n\n\t\t\t\tawait sdk.register(options);\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\trefresh: async () => {\n\t\t\t\tawait sdk.refresh();\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\tentry: async (url?: string) => {\n\t\t\t\treturn await sdk.entry(url);\n\t\t\t},\n\t\t\trevoke: async () => {\n\t\t\t\tawait sdk.revoke();\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\tlogout: async (options?: Parameters<PopupFlow['logout'] | RedirectFlow['logout']>[0]) => {\n\t\t\t\tawait sdk.logout(options);\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\thandleCallback: async (url?: Parameters<PopupFlow['handleCallback'] | RedirectFlow['handleCallback'] | NativeFlow['handleCallback']>[0]) => {\n\t\t\t\tawait sdk.handleCallback(url);\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t};\n\t}, [sdk, loading, options, idTokenClaims, accessToken, refreshToken, accessTokenExpired, accessTokenExpirationDate, isAuthenticated]);\n\n\treturn <STRIVACITY_SDK.Provider value={value}>{children}</STRIVACITY_SDK.Provider>;\n};\n"],"names":["sdk","StyAuthProvider","options","children","loading","setLoading","useState","isAuthenticated","setIsAuthenticated","idTokenClaims","setIdTokenClaims","accessToken","setAccessToken","refreshToken","setRefreshToken","accessTokenExpired","setAccessTokenExpired","accessTokenExpirationDate","setAccessTokenExpirationDate","events","useRef","updateSession","useEffect","initFlow","event","value","useMemo","url","jsx","STRIVACITY_SDK"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("react/jsx-runtime"),r=require("react"),x=require("@strivacity/sdk-core"),V=require("@strivacity/sdk-core/utils/object"),W=require("./composables.cjs"),z=r.createContext(null),j={},T=({items:U,widgets:b,state:d,triggerFallback:f})=>g.jsx(g.Fragment,{children:U.map((l,p)=>{if(l.type==="widget"){const a=d.forms?.find(m=>m.id===l.formId),c=a?.widgets.find(m=>m.id===l.widgetId);if(!a||!c)return f(void 0,`Unable to find form or widget for item: formId=${l.formId}, widgetId=${l.widgetId}`),null;const w=b[c.type];return w?g.jsx(w,{formId:a.id,config:c},`${a.id}.${c.id}`):(f(void 0,`No component found for widget type ${c.type}`),null)}else if(l.type==="vertical"||l.type==="horizontal"){const a=b.layout;return a?g.jsx(a,{formId:l.items[0].formId,type:l.type,children:g.jsx(T,{items:l.items,widgets:b,state:d,triggerFallback:f})},p):(f(void 0,"No layout component provided"),null)}else return f(void 0,"Unknown item type in layout"),null})}),B=U=>{const{params:b,widgets:d,sessionId:f,language:l,onLogin:p,onFallback:a,onClose:c,onError:w,onGlobalMessage:m,onBlockReady:k,onLanguageChange:$}={params:{},widgets:{},sessionId:null,language:null,...U},{sdk:u}=W.useStrivacity(),C=r.useRef(null),[M,v]=r.useState(!1),[F,S]=r.useState({}),[N,h]=r.useState({}),[e,E]=r.useState({}),R=r.useCallback((t,n)=>{const o=t||e.hostedUrl;if(u.logging?.warn(n?`Triggering fallback due to: ${n}`:"Triggering fallback"),!o){const s=new Error("No hosted URL provided");throw u.logging?.error("Fallback error",s),s}a?.(new x.FallbackError(new URL(o)))},[e,a]),q=r.useCallback(()=>{c?.()},[c]),O=r.useCallback((t,n,o)=>{j[t]={...j[t],[n]:o===""?null:o},S(s=>({...s,[t]:{...s[t]||{},[n]:o===""?null:o}}))},[]),I=r.useCallback((t,n,o)=>{h(s=>({...s,[t]:{...s[t]||{},[n]:o}}))},[]),A=r.useCallback(async t=>{try{v(!0);const n=await C.current?.submitForm(t,V.unflattenObject(j[t]));if(await u.isAuthenticated)p?.(u.idTokenClaims);else{const o=structuredClone(e),s={hostedUrl:n?.hostedUrl??e.hostedUrl,finalizeUrl:n?.finalizeUrl??e.finalizeUrl,screen:n?.screen??e.screen,forms:n?.forms??e.forms,layout:n?.layout??e.layout,messages:n?.messages??{},branding:n?.branding??e.branding};if(s.screen!==e.screen){const i={},y={};for(const L of s.forms??[])i[L.id]={},y[L.id]={};S(i),h(y)}else u.logging?.info(`Updating screen: ${s.screen}`);Object.keys(s.messages??{}).forEach(i=>{i==="global"?m?.(s.messages?.global?.text??""):h(y=>({...y,[i]:s.messages[i]}))}),E(s),v(!1),setTimeout(()=>{k?.({previousState:o,state:structuredClone(s)})},1)}}catch(n){n instanceof x.FallbackError?a?.(n):w?.(n)}},[u,b,F,e,p,a,c,w,m,k]),P={loading:M,forms:F,messages:N,state:e,submitForm:A,triggerFallback:R,triggerClose:q,setFormValue:O,setMessage:I};return r.useEffect(()=>{C.current=u.login(b),(async()=>{try{const t=await C.current?.startSession(f,l),n=structuredClone(e),o={hostedUrl:t?.hostedUrl??e.hostedUrl,finalizeUrl:t?.finalizeUrl??e.finalizeUrl,screen:t?.screen??e.screen,forms:t?.forms??e.forms,layout:t?.layout??e.layout,messages:t?.messages??{},branding:t?.branding??e.branding};if($?.(C.current?.language??null),await u.isAuthenticated)p?.(u.idTokenClaims);else{if(o.screen!==e.screen){const s={},i={};for(const y of o.forms??[])s[y.id]={},i[y.id]={};S(s),h(i)}Object.keys(o.messages??{}).forEach(s=>{s==="global"?m?.(o.messages?.global?.text??""):h(i=>({...i,[s]:o.messages[s]}))}),E(o),setTimeout(()=>{k?.({previousState:n,state:structuredClone(o)})},1)}}catch(t){t instanceof x.FallbackError?a?.(t):w?.(t)}})()},[]),g.jsx(z.Provider,{value:P,children:g.jsx("div",{className:"login-renderer",children:e.screen&&d.layout?r.createElement(d.layout,{formId:e.layout?.items?.[0]?.formId,type:e.layout?.type,tag:"form"},g.jsx(T,{items:e.layout?.items??[],widgets:d,state:e,triggerFallback:R})):d.loading?r.createElement(d.loading):null})})};exports.NativeFlowContext=z;exports.StyLoginRenderer=B;
2
- //# sourceMappingURL=LoginRenderer.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoginRenderer.cjs","sources":["../src/LoginRenderer.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { NativeParams, PartialRecord, WidgetType, LayoutWidget, LoginFlowState, Widget, IdTokenClaims, LoginFlowMessage } from '@strivacity/sdk-core';\nimport type { NativeContext, NativeFlowContextValue } from './types';\nimport React, { useRef, useState, useEffect, createContext, useCallback } from 'react';\nimport { FallbackError } from '@strivacity/sdk-core';\nimport { unflattenObject } from '@strivacity/sdk-core/utils/object';\nimport { useStrivacity } from './composables';\n\nexport const NativeFlowContext = createContext<NativeFlowContextValue | null>(null);\nconst formData: Record<string, Record<string, unknown>> = {};\n\nconst StyWidgetRenderer: React.FC<{\n\titems: LayoutWidget['items'];\n\twidgets: PartialRecord<WidgetType, React.ComponentType<any>>;\n\tstate: LoginFlowState;\n\ttriggerFallback: (hostedUrl?: string, message?: string) => void;\n}> = ({ items, widgets, state, triggerFallback }) => {\n\treturn (\n\t\t<>\n\t\t\t{items.map((item, idx) => {\n\t\t\t\tif (item.type === 'widget') {\n\t\t\t\t\tconst form = state.forms?.find((f) => f.id === item.formId);\n\t\t\t\t\tconst widget = form?.widgets.find((w) => w.id === item.widgetId);\n\n\t\t\t\t\tif (!form || !widget) {\n\t\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\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst WidgetComponent = widgets[widget.type];\n\n\t\t\t\t\tif (!WidgetComponent) {\n\t\t\t\t\t\ttriggerFallback(undefined, `No component found for widget type ${widget.type}`);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn <WidgetComponent key={`${form.id}.${widget.id}`} formId={form.id} config={widget} />;\n\t\t\t\t} else if (item.type === 'vertical' || item.type === 'horizontal') {\n\t\t\t\t\tconst LayoutComponent = widgets.layout;\n\n\t\t\t\t\tif (!LayoutComponent) {\n\t\t\t\t\t\ttriggerFallback(undefined, 'No layout component provided');\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<LayoutComponent key={idx} formId={(item.items[0] as Widget).formId} type={item.type}>\n\t\t\t\t\t\t\t<StyWidgetRenderer items={item.items} widgets={widgets} state={state} triggerFallback={triggerFallback} />\n\t\t\t\t\t\t</LayoutComponent>\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\ttriggerFallback(undefined, 'Unknown item type in layout');\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t})}\n\t\t</>\n\t);\n};\n\nexport const StyLoginRenderer: React.FC<{\n\tparams?: NativeParams;\n\twidgets?: PartialRecord<WidgetType, React.ComponentType<any>>;\n\tsessionId?: string | null;\n\tlanguage?: string | null;\n\tonLogin?: (claims?: IdTokenClaims | null) => void;\n\tonFallback?: (error: FallbackError) => void;\n\tonClose?: () => void;\n\tonError?: (error: any) => void;\n\tonGlobalMessage?: (message: string) => void;\n\tonBlockReady?: ({ previousState, state }: { previousState: LoginFlowState; state: LoginFlowState }) => void;\n\tonLanguageChange?: (language: string | null) => void;\n}> = (props) => {\n\tconst { params, widgets, sessionId, language, onLogin, onFallback, onClose, onError, onGlobalMessage, onBlockReady, onLanguageChange } = {\n\t\tparams: {},\n\t\twidgets: {},\n\t\tsessionId: null,\n\t\tlanguage: null,\n\t\t...props,\n\t};\n\tconst { sdk } = useStrivacity<NativeContext>();\n\tconst loginHandlerRef = useRef<ReturnType<(typeof sdk)['login']> | null>(null);\n\n\tconst [loading, setLoading] = useState(false);\n\tconst [forms, setForms] = useState<Record<string, Record<string, unknown>>>({});\n\tconst [messages, setMessages] = useState<Record<string, Record<string, LoginFlowMessage>>>({});\n\tconst [state, setState] = useState<LoginFlowState>({});\n\n\tconst triggerFallback = useCallback(\n\t\t(hostedUrl?: string, message?: string) => {\n\t\t\tconst url = hostedUrl || state.hostedUrl;\n\n\t\t\tsdk.logging?.warn(message ? `Triggering fallback due to: ${message}` : 'Triggering fallback');\n\n\t\t\tif (!url) {\n\t\t\t\tconst error = new Error('No hosted URL provided');\n\t\t\t\tsdk.logging?.error('Fallback error', error);\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tonFallback?.(new FallbackError(new URL(url)));\n\t\t},\n\t\t[state, onFallback],\n\t);\n\n\tconst triggerClose = useCallback(() => {\n\t\tonClose?.();\n\t}, [onClose]);\n\n\tconst setFormValue = useCallback((formId: string, widgetId: string, value: unknown) => {\n\t\tformData[formId] = {\n\t\t\t...formData[formId],\n\t\t\t[widgetId]: value === '' ? null : value,\n\t\t};\n\n\t\tsetForms((prev) => ({\n\t\t\t...prev,\n\t\t\t[formId]: { ...(prev[formId] || {}), [widgetId]: value === '' ? null : value },\n\t\t}));\n\t}, []);\n\n\tconst setMessage = useCallback((formId: string, widgetId: string, value: LoginFlowMessage) => {\n\t\tsetMessages((prev) => ({\n\t\t\t...prev,\n\t\t\t[formId]: { ...(prev[formId] || {}), [widgetId]: value },\n\t\t}));\n\t}, []);\n\n\tconst submitForm = useCallback(\n\t\tasync (formId: string) => {\n\t\t\ttry {\n\t\t\t\tsetLoading(true);\n\n\t\t\t\tconst data = await loginHandlerRef.current?.submitForm(formId, unflattenObject(formData[formId]));\n\n\t\t\t\tif (await sdk.isAuthenticated) {\n\t\t\t\t\tonLogin?.(sdk.idTokenClaims);\n\t\t\t\t} else {\n\t\t\t\t\tconst previousState = structuredClone(state);\n\t\t\t\t\tconst newState: LoginFlowState = {\n\t\t\t\t\t\thostedUrl: data?.hostedUrl ?? state.hostedUrl,\n\t\t\t\t\t\tfinalizeUrl: data?.finalizeUrl ?? state.finalizeUrl,\n\t\t\t\t\t\tscreen: data?.screen ?? state.screen,\n\t\t\t\t\t\tforms: data?.forms ?? state.forms,\n\t\t\t\t\t\tlayout: data?.layout ?? state.layout,\n\t\t\t\t\t\tmessages: data?.messages ?? {},\n\t\t\t\t\t\tbranding: data?.branding ?? state.branding,\n\t\t\t\t\t};\n\n\t\t\t\t\tif (newState.screen !== state.screen) {\n\t\t\t\t\t\tconst newForms: typeof forms = {};\n\t\t\t\t\t\tconst newMessages: typeof messages = {};\n\n\t\t\t\t\t\tfor (const form of newState.forms ?? []) {\n\t\t\t\t\t\t\tnewForms[form.id] = {};\n\t\t\t\t\t\t\tnewMessages[form.id] = {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetForms(newForms);\n\t\t\t\t\t\tsetMessages(newMessages);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsdk.logging?.info(`Updating screen: ${newState.screen}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tObject.keys(newState.messages ?? {}).forEach((formId) => {\n\t\t\t\t\t\tif (formId === 'global') {\n\t\t\t\t\t\t\tonGlobalMessage?.(newState.messages?.global?.text ?? '');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetMessages((prev) => ({\n\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t[formId]: newState.messages![formId],\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tsetState(newState);\n\t\t\t\t\tsetLoading(false);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tonBlockReady?.({ previousState, state: structuredClone(newState) });\n\t\t\t\t\t}, 1);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof FallbackError) {\n\t\t\t\t\tonFallback?.(error);\n\t\t\t\t} else {\n\t\t\t\t\tonError?.(error);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[sdk, params, forms, state, onLogin, onFallback, onClose, onError, onGlobalMessage, onBlockReady],\n\t);\n\n\tconst contextValue: NativeFlowContextValue = {\n\t\tloading,\n\t\tforms,\n\t\tmessages,\n\t\tstate,\n\t\tsubmitForm,\n\t\ttriggerFallback,\n\t\ttriggerClose,\n\t\tsetFormValue,\n\t\tsetMessage,\n\t};\n\n\tuseEffect(() => {\n\t\tloginHandlerRef.current = sdk.login(params);\n\n\t\tvoid (async () => {\n\t\t\ttry {\n\t\t\t\tconst data = await loginHandlerRef.current?.startSession(sessionId, language);\n\t\t\t\tconst previousState = structuredClone(state);\n\t\t\t\tconst newState: LoginFlowState = {\n\t\t\t\t\thostedUrl: data?.hostedUrl ?? state.hostedUrl,\n\t\t\t\t\tfinalizeUrl: data?.finalizeUrl ?? state.finalizeUrl,\n\t\t\t\t\tscreen: data?.screen ?? state.screen,\n\t\t\t\t\tforms: data?.forms ?? state.forms,\n\t\t\t\t\tlayout: data?.layout ?? state.layout,\n\t\t\t\t\tmessages: data?.messages ?? {},\n\t\t\t\t\tbranding: data?.branding ?? state.branding,\n\t\t\t\t};\n\n\t\t\t\tonLanguageChange?.(loginHandlerRef.current?.language ?? null);\n\n\t\t\t\tif (await sdk.isAuthenticated) {\n\t\t\t\t\tonLogin?.(sdk.idTokenClaims);\n\t\t\t\t} else {\n\t\t\t\t\tif (newState.screen !== state.screen) {\n\t\t\t\t\t\tconst newForms: typeof forms = {};\n\t\t\t\t\t\tconst newMessages: typeof messages = {};\n\n\t\t\t\t\t\tfor (const form of newState.forms ?? []) {\n\t\t\t\t\t\t\tnewForms[form.id] = {};\n\t\t\t\t\t\t\tnewMessages[form.id] = {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetForms(newForms);\n\t\t\t\t\t\tsetMessages(newMessages);\n\t\t\t\t\t}\n\n\t\t\t\t\tObject.keys(newState.messages ?? {}).forEach((formId) => {\n\t\t\t\t\t\tif (formId === 'global') {\n\t\t\t\t\t\t\tonGlobalMessage?.(newState.messages?.global?.text ?? '');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetMessages((prev) => ({\n\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t[formId]: newState.messages![formId],\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tsetState(newState);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tonBlockReady?.({ previousState, state: structuredClone(newState) });\n\t\t\t\t\t}, 1);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof FallbackError) {\n\t\t\t\t\tonFallback?.(error);\n\t\t\t\t} else {\n\t\t\t\t\tonError?.(error);\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\t}, []);\n\n\treturn (\n\t\t<NativeFlowContext.Provider value={contextValue}>\n\t\t\t<div className=\"login-renderer\">\n\t\t\t\t{state.screen && widgets.layout\n\t\t\t\t\t? React.createElement(\n\t\t\t\t\t\t\twidgets.layout,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tformId: (state.layout?.items?.[0] as Widget)?.formId,\n\t\t\t\t\t\t\t\ttype: state.layout?.type,\n\t\t\t\t\t\t\t\ttag: 'form',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t<StyWidgetRenderer items={state.layout?.items ?? []} widgets={widgets} state={state} triggerFallback={triggerFallback} />,\n\t\t\t\t\t\t)\n\t\t\t\t\t: widgets.loading\n\t\t\t\t\t\t? React.createElement(widgets.loading)\n\t\t\t\t\t\t: null}\n\t\t\t</div>\n\t\t</NativeFlowContext.Provider>\n\t);\n};\n"],"names":["NativeFlowContext","createContext","formData","StyWidgetRenderer","items","widgets","state","triggerFallback","jsx","Fragment","item","idx","form","f","widget","w","WidgetComponent","LayoutComponent","StyLoginRenderer","props","params","sessionId","language","onLogin","onFallback","onClose","onError","onGlobalMessage","onBlockReady","onLanguageChange","sdk","useStrivacity","loginHandlerRef","useRef","loading","setLoading","useState","forms","setForms","messages","setMessages","setState","useCallback","hostedUrl","message","url","error","FallbackError","triggerClose","setFormValue","formId","widgetId","value","prev","setMessage","submitForm","data","unflattenObject","previousState","newState","newForms","newMessages","contextValue","useEffect","React"],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import { NativeParams, PartialRecord, WidgetType, LoginFlowState, IdTokenClaims, FallbackError } from '@strivacity/sdk-core';
2
- import { NativeFlowContextValue } from './types';
3
- import { default as React } from 'react';
4
- export declare const NativeFlowContext: React.Context<NativeFlowContextValue | null>;
5
- export declare const StyLoginRenderer: React.FC<{
6
- params?: NativeParams;
7
- widgets?: PartialRecord<WidgetType, React.ComponentType<any>>;
8
- sessionId?: string | null;
9
- language?: string | null;
10
- onLogin?: (claims?: IdTokenClaims | null) => void;
11
- onFallback?: (error: FallbackError) => void;
12
- onClose?: () => void;
13
- onError?: (error: any) => void;
14
- onGlobalMessage?: (message: string) => void;
15
- onBlockReady?: ({ previousState, state }: {
16
- previousState: LoginFlowState;
17
- state: LoginFlowState;
18
- }) => void;
19
- onLanguageChange?: (language: string | null) => void;
20
- }>;
@@ -1,2 +0,0 @@
1
- import{jsx as m,Fragment as D}from"react/jsx-runtime";import T,{createContext as G,useRef as H,useState as C,useCallback as b,useEffect as P}from"react";import{FallbackError as E}from"@strivacity/sdk-core";import{unflattenObject as q}from"@strivacity/sdk-core/utils/object";import{useStrivacity as J}from"./composables.mjs";const K=G(null),F={},M=({items:k,widgets:y,state:d,triggerFallback:u})=>m(D,{children:k.map((a,w)=>{if(a.type==="widget"){const r=d.forms?.find(g=>g.id===a.formId),i=r?.widgets.find(g=>g.id===a.widgetId);if(!r||!i)return u(void 0,`Unable to find form or widget for item: formId=${a.formId}, widgetId=${a.widgetId}`),null;const p=y[i.type];return p?m(p,{formId:r.id,config:i},`${r.id}.${i.id}`):(u(void 0,`No component found for widget type ${i.type}`),null)}else if(a.type==="vertical"||a.type==="horizontal"){const r=y.layout;return r?m(r,{formId:a.items[0].formId,type:a.type,children:m(M,{items:a.items,widgets:y,state:d,triggerFallback:u})},w):(u(void 0,"No layout component provided"),null)}else return u(void 0,"Unknown item type in layout"),null})}),ee=k=>{const{params:y,widgets:d,sessionId:u,language:a,onLogin:w,onFallback:r,onClose:i,onError:p,onGlobalMessage:g,onBlockReady:v,onLanguageChange:N}={params:{},widgets:{},sessionId:null,language:null,...k},{sdk:c}=J(),U=H(null),[j,R]=C(!1),[x,S]=C({}),[I,h]=C({}),[e,z]=C({}),L=b((t,s)=>{const n=t||e.hostedUrl;if(c.logging?.warn(s?`Triggering fallback due to: ${s}`:"Triggering fallback"),!n){const o=new Error("No hosted URL provided");throw c.logging?.error("Fallback error",o),o}r?.(new E(new URL(n)))},[e,r]),O=b(()=>{i?.()},[i]),A=b((t,s,n)=>{F[t]={...F[t],[s]:n===""?null:n},S(o=>({...o,[t]:{...o[t]||{},[s]:n===""?null:n}}))},[]),V=b((t,s,n)=>{h(o=>({...o,[t]:{...o[t]||{},[s]:n}}))},[]),W=b(async t=>{try{R(!0);const s=await U.current?.submitForm(t,q(F[t]));if(await c.isAuthenticated)w?.(c.idTokenClaims);else{const n=structuredClone(e),o={hostedUrl:s?.hostedUrl??e.hostedUrl,finalizeUrl:s?.finalizeUrl??e.finalizeUrl,screen:s?.screen??e.screen,forms:s?.forms??e.forms,layout:s?.layout??e.layout,messages:s?.messages??{},branding:s?.branding??e.branding};if(o.screen!==e.screen){const l={},f={};for(const $ of o.forms??[])l[$.id]={},f[$.id]={};S(l),h(f)}else c.logging?.info(`Updating screen: ${o.screen}`);Object.keys(o.messages??{}).forEach(l=>{l==="global"?g?.(o.messages?.global?.text??""):h(f=>({...f,[l]:o.messages[l]}))}),z(o),R(!1),setTimeout(()=>{v?.({previousState:n,state:structuredClone(o)})},1)}}catch(s){s instanceof E?r?.(s):p?.(s)}},[c,y,x,e,w,r,i,p,g,v]),B={loading:j,forms:x,messages:I,state:e,submitForm:W,triggerFallback:L,triggerClose:O,setFormValue:A,setMessage:V};return P(()=>{U.current=c.login(y),(async()=>{try{const t=await U.current?.startSession(u,a),s=structuredClone(e),n={hostedUrl:t?.hostedUrl??e.hostedUrl,finalizeUrl:t?.finalizeUrl??e.finalizeUrl,screen:t?.screen??e.screen,forms:t?.forms??e.forms,layout:t?.layout??e.layout,messages:t?.messages??{},branding:t?.branding??e.branding};if(N?.(U.current?.language??null),await c.isAuthenticated)w?.(c.idTokenClaims);else{if(n.screen!==e.screen){const o={},l={};for(const f of n.forms??[])o[f.id]={},l[f.id]={};S(o),h(l)}Object.keys(n.messages??{}).forEach(o=>{o==="global"?g?.(n.messages?.global?.text??""):h(l=>({...l,[o]:n.messages[o]}))}),z(n),setTimeout(()=>{v?.({previousState:s,state:structuredClone(n)})},1)}}catch(t){t instanceof E?r?.(t):p?.(t)}})()},[]),m(K.Provider,{value:B,children:m("div",{className:"login-renderer",children:e.screen&&d.layout?T.createElement(d.layout,{formId:e.layout?.items?.[0]?.formId,type:e.layout?.type,tag:"form"},m(M,{items:e.layout?.items??[],widgets:d,state:e,triggerFallback:L})):d.loading?T.createElement(d.loading):null})})};export{K as NativeFlowContext,ee as StyLoginRenderer};
2
- //# sourceMappingURL=LoginRenderer.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoginRenderer.mjs","sources":["../src/LoginRenderer.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { NativeParams, PartialRecord, WidgetType, LayoutWidget, LoginFlowState, Widget, IdTokenClaims, LoginFlowMessage } from '@strivacity/sdk-core';\nimport type { NativeContext, NativeFlowContextValue } from './types';\nimport React, { useRef, useState, useEffect, createContext, useCallback } from 'react';\nimport { FallbackError } from '@strivacity/sdk-core';\nimport { unflattenObject } from '@strivacity/sdk-core/utils/object';\nimport { useStrivacity } from './composables';\n\nexport const NativeFlowContext = createContext<NativeFlowContextValue | null>(null);\nconst formData: Record<string, Record<string, unknown>> = {};\n\nconst StyWidgetRenderer: React.FC<{\n\titems: LayoutWidget['items'];\n\twidgets: PartialRecord<WidgetType, React.ComponentType<any>>;\n\tstate: LoginFlowState;\n\ttriggerFallback: (hostedUrl?: string, message?: string) => void;\n}> = ({ items, widgets, state, triggerFallback }) => {\n\treturn (\n\t\t<>\n\t\t\t{items.map((item, idx) => {\n\t\t\t\tif (item.type === 'widget') {\n\t\t\t\t\tconst form = state.forms?.find((f) => f.id === item.formId);\n\t\t\t\t\tconst widget = form?.widgets.find((w) => w.id === item.widgetId);\n\n\t\t\t\t\tif (!form || !widget) {\n\t\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\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst WidgetComponent = widgets[widget.type];\n\n\t\t\t\t\tif (!WidgetComponent) {\n\t\t\t\t\t\ttriggerFallback(undefined, `No component found for widget type ${widget.type}`);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn <WidgetComponent key={`${form.id}.${widget.id}`} formId={form.id} config={widget} />;\n\t\t\t\t} else if (item.type === 'vertical' || item.type === 'horizontal') {\n\t\t\t\t\tconst LayoutComponent = widgets.layout;\n\n\t\t\t\t\tif (!LayoutComponent) {\n\t\t\t\t\t\ttriggerFallback(undefined, 'No layout component provided');\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<LayoutComponent key={idx} formId={(item.items[0] as Widget).formId} type={item.type}>\n\t\t\t\t\t\t\t<StyWidgetRenderer items={item.items} widgets={widgets} state={state} triggerFallback={triggerFallback} />\n\t\t\t\t\t\t</LayoutComponent>\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\ttriggerFallback(undefined, 'Unknown item type in layout');\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t})}\n\t\t</>\n\t);\n};\n\nexport const StyLoginRenderer: React.FC<{\n\tparams?: NativeParams;\n\twidgets?: PartialRecord<WidgetType, React.ComponentType<any>>;\n\tsessionId?: string | null;\n\tlanguage?: string | null;\n\tonLogin?: (claims?: IdTokenClaims | null) => void;\n\tonFallback?: (error: FallbackError) => void;\n\tonClose?: () => void;\n\tonError?: (error: any) => void;\n\tonGlobalMessage?: (message: string) => void;\n\tonBlockReady?: ({ previousState, state }: { previousState: LoginFlowState; state: LoginFlowState }) => void;\n\tonLanguageChange?: (language: string | null) => void;\n}> = (props) => {\n\tconst { params, widgets, sessionId, language, onLogin, onFallback, onClose, onError, onGlobalMessage, onBlockReady, onLanguageChange } = {\n\t\tparams: {},\n\t\twidgets: {},\n\t\tsessionId: null,\n\t\tlanguage: null,\n\t\t...props,\n\t};\n\tconst { sdk } = useStrivacity<NativeContext>();\n\tconst loginHandlerRef = useRef<ReturnType<(typeof sdk)['login']> | null>(null);\n\n\tconst [loading, setLoading] = useState(false);\n\tconst [forms, setForms] = useState<Record<string, Record<string, unknown>>>({});\n\tconst [messages, setMessages] = useState<Record<string, Record<string, LoginFlowMessage>>>({});\n\tconst [state, setState] = useState<LoginFlowState>({});\n\n\tconst triggerFallback = useCallback(\n\t\t(hostedUrl?: string, message?: string) => {\n\t\t\tconst url = hostedUrl || state.hostedUrl;\n\n\t\t\tsdk.logging?.warn(message ? `Triggering fallback due to: ${message}` : 'Triggering fallback');\n\n\t\t\tif (!url) {\n\t\t\t\tconst error = new Error('No hosted URL provided');\n\t\t\t\tsdk.logging?.error('Fallback error', error);\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tonFallback?.(new FallbackError(new URL(url)));\n\t\t},\n\t\t[state, onFallback],\n\t);\n\n\tconst triggerClose = useCallback(() => {\n\t\tonClose?.();\n\t}, [onClose]);\n\n\tconst setFormValue = useCallback((formId: string, widgetId: string, value: unknown) => {\n\t\tformData[formId] = {\n\t\t\t...formData[formId],\n\t\t\t[widgetId]: value === '' ? null : value,\n\t\t};\n\n\t\tsetForms((prev) => ({\n\t\t\t...prev,\n\t\t\t[formId]: { ...(prev[formId] || {}), [widgetId]: value === '' ? null : value },\n\t\t}));\n\t}, []);\n\n\tconst setMessage = useCallback((formId: string, widgetId: string, value: LoginFlowMessage) => {\n\t\tsetMessages((prev) => ({\n\t\t\t...prev,\n\t\t\t[formId]: { ...(prev[formId] || {}), [widgetId]: value },\n\t\t}));\n\t}, []);\n\n\tconst submitForm = useCallback(\n\t\tasync (formId: string) => {\n\t\t\ttry {\n\t\t\t\tsetLoading(true);\n\n\t\t\t\tconst data = await loginHandlerRef.current?.submitForm(formId, unflattenObject(formData[formId]));\n\n\t\t\t\tif (await sdk.isAuthenticated) {\n\t\t\t\t\tonLogin?.(sdk.idTokenClaims);\n\t\t\t\t} else {\n\t\t\t\t\tconst previousState = structuredClone(state);\n\t\t\t\t\tconst newState: LoginFlowState = {\n\t\t\t\t\t\thostedUrl: data?.hostedUrl ?? state.hostedUrl,\n\t\t\t\t\t\tfinalizeUrl: data?.finalizeUrl ?? state.finalizeUrl,\n\t\t\t\t\t\tscreen: data?.screen ?? state.screen,\n\t\t\t\t\t\tforms: data?.forms ?? state.forms,\n\t\t\t\t\t\tlayout: data?.layout ?? state.layout,\n\t\t\t\t\t\tmessages: data?.messages ?? {},\n\t\t\t\t\t\tbranding: data?.branding ?? state.branding,\n\t\t\t\t\t};\n\n\t\t\t\t\tif (newState.screen !== state.screen) {\n\t\t\t\t\t\tconst newForms: typeof forms = {};\n\t\t\t\t\t\tconst newMessages: typeof messages = {};\n\n\t\t\t\t\t\tfor (const form of newState.forms ?? []) {\n\t\t\t\t\t\t\tnewForms[form.id] = {};\n\t\t\t\t\t\t\tnewMessages[form.id] = {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetForms(newForms);\n\t\t\t\t\t\tsetMessages(newMessages);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsdk.logging?.info(`Updating screen: ${newState.screen}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tObject.keys(newState.messages ?? {}).forEach((formId) => {\n\t\t\t\t\t\tif (formId === 'global') {\n\t\t\t\t\t\t\tonGlobalMessage?.(newState.messages?.global?.text ?? '');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetMessages((prev) => ({\n\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t[formId]: newState.messages![formId],\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tsetState(newState);\n\t\t\t\t\tsetLoading(false);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tonBlockReady?.({ previousState, state: structuredClone(newState) });\n\t\t\t\t\t}, 1);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof FallbackError) {\n\t\t\t\t\tonFallback?.(error);\n\t\t\t\t} else {\n\t\t\t\t\tonError?.(error);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[sdk, params, forms, state, onLogin, onFallback, onClose, onError, onGlobalMessage, onBlockReady],\n\t);\n\n\tconst contextValue: NativeFlowContextValue = {\n\t\tloading,\n\t\tforms,\n\t\tmessages,\n\t\tstate,\n\t\tsubmitForm,\n\t\ttriggerFallback,\n\t\ttriggerClose,\n\t\tsetFormValue,\n\t\tsetMessage,\n\t};\n\n\tuseEffect(() => {\n\t\tloginHandlerRef.current = sdk.login(params);\n\n\t\tvoid (async () => {\n\t\t\ttry {\n\t\t\t\tconst data = await loginHandlerRef.current?.startSession(sessionId, language);\n\t\t\t\tconst previousState = structuredClone(state);\n\t\t\t\tconst newState: LoginFlowState = {\n\t\t\t\t\thostedUrl: data?.hostedUrl ?? state.hostedUrl,\n\t\t\t\t\tfinalizeUrl: data?.finalizeUrl ?? state.finalizeUrl,\n\t\t\t\t\tscreen: data?.screen ?? state.screen,\n\t\t\t\t\tforms: data?.forms ?? state.forms,\n\t\t\t\t\tlayout: data?.layout ?? state.layout,\n\t\t\t\t\tmessages: data?.messages ?? {},\n\t\t\t\t\tbranding: data?.branding ?? state.branding,\n\t\t\t\t};\n\n\t\t\t\tonLanguageChange?.(loginHandlerRef.current?.language ?? null);\n\n\t\t\t\tif (await sdk.isAuthenticated) {\n\t\t\t\t\tonLogin?.(sdk.idTokenClaims);\n\t\t\t\t} else {\n\t\t\t\t\tif (newState.screen !== state.screen) {\n\t\t\t\t\t\tconst newForms: typeof forms = {};\n\t\t\t\t\t\tconst newMessages: typeof messages = {};\n\n\t\t\t\t\t\tfor (const form of newState.forms ?? []) {\n\t\t\t\t\t\t\tnewForms[form.id] = {};\n\t\t\t\t\t\t\tnewMessages[form.id] = {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetForms(newForms);\n\t\t\t\t\t\tsetMessages(newMessages);\n\t\t\t\t\t}\n\n\t\t\t\t\tObject.keys(newState.messages ?? {}).forEach((formId) => {\n\t\t\t\t\t\tif (formId === 'global') {\n\t\t\t\t\t\t\tonGlobalMessage?.(newState.messages?.global?.text ?? '');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetMessages((prev) => ({\n\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t[formId]: newState.messages![formId],\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tsetState(newState);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tonBlockReady?.({ previousState, state: structuredClone(newState) });\n\t\t\t\t\t}, 1);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof FallbackError) {\n\t\t\t\t\tonFallback?.(error);\n\t\t\t\t} else {\n\t\t\t\t\tonError?.(error);\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\t}, []);\n\n\treturn (\n\t\t<NativeFlowContext.Provider value={contextValue}>\n\t\t\t<div className=\"login-renderer\">\n\t\t\t\t{state.screen && widgets.layout\n\t\t\t\t\t? React.createElement(\n\t\t\t\t\t\t\twidgets.layout,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tformId: (state.layout?.items?.[0] as Widget)?.formId,\n\t\t\t\t\t\t\t\ttype: state.layout?.type,\n\t\t\t\t\t\t\t\ttag: 'form',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t<StyWidgetRenderer items={state.layout?.items ?? []} widgets={widgets} state={state} triggerFallback={triggerFallback} />,\n\t\t\t\t\t\t)\n\t\t\t\t\t: widgets.loading\n\t\t\t\t\t\t? React.createElement(widgets.loading)\n\t\t\t\t\t\t: null}\n\t\t\t</div>\n\t\t</NativeFlowContext.Provider>\n\t);\n};\n"],"names":["NativeFlowContext","createContext","formData","StyWidgetRenderer","items","widgets","state","triggerFallback","jsx","Fragment","item","idx","form","f","widget","w","WidgetComponent","LayoutComponent","StyLoginRenderer","props","params","sessionId","language","onLogin","onFallback","onClose","onError","onGlobalMessage","onBlockReady","onLanguageChange","sdk","useStrivacity","loginHandlerRef","useRef","loading","setLoading","useState","forms","setForms","messages","setMessages","setState","useCallback","hostedUrl","message","url","error","FallbackError","triggerClose","setFormValue","formId","widgetId","value","prev","setMessage","submitForm","data","unflattenObject","previousState","newState","newForms","newMessages","contextValue","useEffect","React"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react"),r=e.createContext(null),n=()=>{const t=e.useContext(r);if(!t)throw new Error("Missing Strivacity SDK context");return t};exports.STRIVACITY_SDK=r;exports.useStrivacity=n;
2
- //# sourceMappingURL=composables.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"composables.cjs","sources":["../src/composables.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { PopupContext, RedirectContext, NativeContext } from './types';\n\nexport const STRIVACITY_SDK = createContext<PopupContext | RedirectContext | NativeContext>(null!);\n\n/**\n * Hook to access the Strivacity SDK context\n *\n * @template T Extends either PopupContext, RedirectContext or NativeContext.\n *\n * @returns {T} The current Strivacity SDK context.\n *\n * @throws {Error} If the context is not provided by an AuthProvider.\n */\nexport const useStrivacity = <T extends PopupContext | RedirectContext | NativeContext>() => {\n\tconst context = useContext(STRIVACITY_SDK);\n\n\tif (!context) {\n\t\tthrow new Error('Missing Strivacity SDK context');\n\t}\n\n\treturn context as T;\n};\n"],"names":["STRIVACITY_SDK","createContext","useStrivacity","context","useContext"],"mappings":"yGAGaA,EAAiBC,EAAAA,cAA8D,IAAK,EAWpFC,EAAgB,IAAgE,CAC5F,MAAMC,EAAUC,EAAAA,WAAWJ,CAAc,EAEzC,GAAI,CAACG,EACJ,MAAM,IAAI,MAAM,gCAAgC,EAGjD,OAAOA,CACR"}
@@ -1,12 +0,0 @@
1
- import { PopupContext, RedirectContext, NativeContext } from './types';
2
- export declare const STRIVACITY_SDK: import('react').Context<PopupContext | RedirectContext | NativeContext>;
3
- /**
4
- * Hook to access the Strivacity SDK context
5
- *
6
- * @template T Extends either PopupContext, RedirectContext or NativeContext.
7
- *
8
- * @returns {T} The current Strivacity SDK context.
9
- *
10
- * @throws {Error} If the context is not provided by an AuthProvider.
11
- */
12
- export declare const useStrivacity: <T extends PopupContext | RedirectContext | NativeContext>() => T;
@@ -1,2 +0,0 @@
1
- import{createContext as o,useContext as r}from"react";const e=o(null),c=()=>{const t=r(e);if(!t)throw new Error("Missing Strivacity SDK context");return t};export{e as STRIVACITY_SDK,c as useStrivacity};
2
- //# sourceMappingURL=composables.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"composables.mjs","sources":["../src/composables.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { PopupContext, RedirectContext, NativeContext } from './types';\n\nexport const STRIVACITY_SDK = createContext<PopupContext | RedirectContext | NativeContext>(null!);\n\n/**\n * Hook to access the Strivacity SDK context\n *\n * @template T Extends either PopupContext, RedirectContext or NativeContext.\n *\n * @returns {T} The current Strivacity SDK context.\n *\n * @throws {Error} If the context is not provided by an AuthProvider.\n */\nexport const useStrivacity = <T extends PopupContext | RedirectContext | NativeContext>() => {\n\tconst context = useContext(STRIVACITY_SDK);\n\n\tif (!context) {\n\t\tthrow new Error('Missing Strivacity SDK context');\n\t}\n\n\treturn context as T;\n};\n"],"names":["STRIVACITY_SDK","createContext","useStrivacity","context","useContext"],"mappings":"sDAGO,MAAMA,EAAiBC,EAA8D,IAAK,EAWpFC,EAAgB,IAAgE,CAC5F,MAAMC,EAAUC,EAAWJ,CAAc,EAEzC,GAAI,CAACG,EACJ,MAAM,IAAI,MAAM,gCAAgC,EAGjD,OAAOA,CACR"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}