@strivacity/sdk-next 2.1.1 → 2.1.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,9 @@
1
+ ## 2.1.2 (2026-01-13)
2
+
3
+ ### 🧱 Updated Dependencies
4
+
5
+ - Updated sdk-core to 2.1.2
6
+
1
7
  ## 2.1.1 (2025-11-19)
2
8
 
3
9
  ### 🩹 Fixes
@@ -1 +1 @@
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
+ {"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 +1 @@
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
+ {"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":"oNAUA,IAAIA,EAEG,MAAMC,EAAoE,CAAC,CACjF,QAAAC,EACA,SAAAC,EAAW,MACZ,IAGM,CACL,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAkB,EAAI,EAC9C,CAACC,EAAiBC,CAAkB,EAAIF,EAAkB,EAAK,EAC/D,CAACG,EAAeC,CAAgB,EAAIJ,EAA+B,IAAI,EACvE,CAACK,EAAaC,CAAc,EAAIN,EAAwB,IAAI,EAC5D,CAACO,EAAcC,CAAe,EAAIR,EAAwB,IAAI,EAC9D,CAACS,EAAoBC,CAAqB,EAAIV,EAAkB,EAAI,EACpE,CAACW,EAA2BC,CAA4B,EAAIZ,EAAwB,IAAI,EACxFa,EAASC,EAAkC,EAAE,EAE7CC,EAAgB,SAAY,CACjCb,EAAmB,MAAMR,EAAI,eAAe,EAC5CU,EAAiBV,EAAI,eAAiB,IAAI,EAC1CY,EAAeZ,EAAI,aAAe,IAAI,EACtCc,EAAgBd,EAAI,cAAgB,IAAI,EACxCgB,EAAsBhB,EAAI,kBAAkB,EAC5CkB,EAA6BlB,EAAI,2BAA6B,IAAI,EAE9DI,GACHC,EAAW,EAAK,CAElB,EAEAiB,EAAU,KACJtB,IACJA,EAAMuB,EAASrB,CAAO,EAEtBiB,EAAO,QAAQ,KAAKnB,EAAI,iBAAiB,OAAQqB,CAAa,CAAC,EAC/DF,EAAO,QAAQ,KAAKnB,EAAI,iBAAiB,WAAYqB,CAAa,CAAC,EACnEF,EAAO,QAAQ,KAAKnB,EAAI,iBAAiB,gBAAiBqB,CAAa,CAAC,EACxEF,EAAO,QAAQ,KAAKnB,EAAI,iBAAiB,iBAAkBqB,CAAa,CAAC,EACzEF,EAAO,QAAQ,KAAKnB,EAAI,iBAAiB,qBAAsBqB,CAAa,CAAC,EAC7EF,EAAO,QAAQ,KAAKnB,EAAI,iBAAiB,kBAAmBqB,CAAa,CAAC,EAC1EF,EAAO,QAAQ,KAAKnB,EAAI,iBAAiB,eAAgBqB,CAAa,CAAC,EACvEF,EAAO,QAAQ,KAAKnB,EAAI,iBAAiB,oBAAqBqB,CAAa,CAAC,GAGtE,IAAM,CACZF,EAAO,QAAQ,QAASK,GAAUA,EAAM,SAAS,EACjDL,EAAO,QAAU,CAAA,CAClB,GACE,CAACjB,CAAO,CAAC,EAGZ,MAAMuB,EAAQC,EAAwD,KAC9D,CACN,IAAA1B,EACA,QAAAI,EACA,QAAAF,EACA,gBAAAK,EACA,cAAAE,EACA,YAAAE,EACA,aAAAE,EACA,mBAAAE,EACA,0BAAAE,EAEA,MAAO,MAAOf,GAA8F,CAC3G,GAAIF,EAAI,QAAQ,OAAS,SACxB,OAAOA,EAAI,MAAME,CAAO,EAGzB,MAAMF,EAAI,MAAME,CAAO,EACvB,MAAMmB,EAAA,CACP,EACA,SAAU,MAAOnB,GAAuG,CACvH,GAAIF,EAAI,QAAQ,OAAS,SACxB,OAAOA,EAAI,SAASE,CAAO,EAG5B,MAAMF,EAAI,SAASE,CAAO,EAC1B,MAAMmB,EAAA,CACP,EACA,QAAS,SAAY,CACpB,MAAMrB,EAAI,QAAA,EACV,MAAMqB,EAAA,CACP,EACA,MAAO,MAAOM,GACN,MAAM3B,EAAI,MAAM2B,CAAG,EAE3B,OAAQ,SAAY,CACnB,MAAM3B,EAAI,OAAA,EACV,MAAMqB,EAAA,CACP,EACA,OAAQ,MAAOnB,GAA0E,CACxF,MAAMF,EAAI,OAAOE,CAAO,EACxB,MAAMmB,EAAA,CACP,EACA,eAAgB,MAAOM,GAAqH,CAC3I,MAAM3B,EAAI,eAAe2B,CAAG,EAC5B,MAAMN,EAAA,CACP,CAAA,GAEC,CAACrB,EAAKI,EAASF,EAASO,EAAeE,EAAaE,EAAcE,EAAoBE,EAA2BV,CAAe,CAAC,EAEpI,OAAOqB,EAACC,EAAe,SAAf,CAAwB,MAAAJ,EAAe,SAAAtB,CAAA,CAAS,CACzD"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("react/jsx-runtime"),c=require("react"),v=require("@strivacity/sdk-core"),Q=require("@strivacity/sdk-core/utils/object"),X=require("./composables.cjs"),A=c.createContext(null),z={},P=({items:U,widgets:p,state:y,triggerFallback:b})=>w.jsx(w.Fragment,{children:U.map((n,u)=>{var h;if(n.type==="widget"){const r=(h=y.forms)==null?void 0:h.find(d=>d.id===n.formId),f=r==null?void 0:r.widgets.find(d=>d.id===n.widgetId);if(!r||!f)return b(),null;const g=p[f.type];return g?w.jsx(g,{formId:r.id,config:f},`${r.id}.${f.id}`):(b(),null)}else if(n.type==="vertical"||n.type==="horizontal"){const r=p.layout;return r?w.jsx(r,{formId:n.items[0].formId,type:n.type,children:w.jsx(P,{items:n.items,widgets:p,state:y,triggerFallback:b})},u):(b(),null)}else return b(),null})}),Y=U=>{var N,O,k,F,L;const{params:p,widgets:y,sessionId:b,onLogin:n,onFallback:u,onClose:h,onError:r,onGlobalMessage:f,onBlockReady:g}={params:{},widgets:{},sessionId:null,...U},{sdk:d}=X.useStrivacity(),x=c.useRef(null),[V,E]=c.useState(!1),[R,j]=c.useState({}),[W,S]=c.useState({}),[t,q]=c.useState({}),T=c.useCallback(o=>{const e=o||t.hostedUrl;if(!e)throw new Error("No hosted URL provided");u==null||u(new v.FallbackError(new URL(e)))},[t,u]),$=c.useCallback(()=>{h==null||h()},[h]),D=c.useCallback((o,e,s)=>{z[o]={...z[o],[e]:s===""?null:s},j(i=>({...i,[o]:{...i[o]||{},[e]:s===""?null:s}}))},[]),H=c.useCallback((o,e,s)=>{S(i=>({...i,[o]:{...i[o]||{},[e]:s}}))},[]),M=c.useCallback(async o=>{var e;try{E(!0);const s=await((e=x.current)==null?void 0:e.submitForm(o,Q.unflattenObject(z[o])));if(await d.isAuthenticated)n==null||n(d.idTokenClaims);else{const i=structuredClone(t),l={hostedUrl:(s==null?void 0:s.hostedUrl)??t.hostedUrl,finalizeUrl:(s==null?void 0:s.finalizeUrl)??t.finalizeUrl,screen:(s==null?void 0:s.screen)??t.screen,forms:(s==null?void 0:s.forms)??t.forms,layout:(s==null?void 0:s.layout)??t.layout,messages:(s==null?void 0:s.messages)??t.messages,branding:(s==null?void 0:s.branding)??t.branding};if(l.screen!==t.screen){const m={},a={};for(const C of l.forms??[])m[C.id]={},a[C.id]={};j(m),S(a)}Object.keys(l.messages??{}).forEach(m=>{var a,C;m==="global"?f==null||f(((C=(a=l.messages)==null?void 0:a.global)==null?void 0:C.text)??""):S(K=>({...K,[m]:l.messages[m]}))}),q(l),E(!1),setTimeout(()=>{g==null||g({previousState:i,state:structuredClone(l)})},1)}}catch(s){console.error("Error submitting form:",s),s instanceof v.FallbackError?u==null||u(s):r==null||r(s)}},[d,p,R,t,n,u,h,r,f,g]),J={loading:V,forms:R,messages:W,state:t,submitForm:M,triggerFallback:T,triggerClose:$,setFormValue:D,setMessage:H};return c.useEffect(()=>{x.current=d.login(p),(async()=>{var o;try{const e=await((o=x.current)==null?void 0:o.startSession(b)),s=structuredClone(t),i={hostedUrl:(e==null?void 0:e.hostedUrl)??t.hostedUrl,finalizeUrl:(e==null?void 0:e.finalizeUrl)??t.finalizeUrl,screen:(e==null?void 0:e.screen)??t.screen,forms:(e==null?void 0:e.forms)??t.forms,layout:(e==null?void 0:e.layout)??t.layout,messages:(e==null?void 0:e.messages)??t.messages,branding:(e==null?void 0:e.branding)??t.branding};if(await d.isAuthenticated)n==null||n(d.idTokenClaims);else{if(i.screen!==t.screen){const l={},m={};for(const a of i.forms??[])l[a.id]={},m[a.id]={};j(l),S(m)}Object.keys(i.messages??{}).forEach(l=>{var m,a;l==="global"?f==null||f(((a=(m=i.messages)==null?void 0:m.global)==null?void 0:a.text)??""):S(C=>({...C,[l]:i.messages[l]}))}),q(i),setTimeout(()=>{g==null||g({previousState:s,state:structuredClone(i)})},1)}}catch(e){e instanceof v.FallbackError?u==null||u(e):r==null||r(e)}})()},[]),w.jsx(A.Provider,{value:J,children:w.jsx("div",{className:"login-renderer",children:t.screen&&y.layout?c.createElement(y.layout,{formId:(k=(O=(N=t.layout)==null?void 0:N.items)==null?void 0:O[0])==null?void 0:k.formId,type:(F=t.layout)==null?void 0:F.type,tag:"form"},w.jsx(P,{items:((L=t.layout)==null?void 0:L.items)??[],widgets:y,state:t,triggerFallback:T})):y.loading?c.createElement(y.loading):null})})};exports.NativeFlowContext=A;exports.StyLoginRenderer=Y;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=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={},L=({items:p,widgets:b,state:c,triggerFallback:f})=>d.jsx(d.Fragment,{children:p.map((a,m)=>{if(a.type==="widget"){const l=c.forms?.find(g=>g.id===a.formId),u=l?.widgets.find(g=>g.id===a.widgetId);if(!l||!u)return f(),null;const h=b[u.type];return h?d.jsx(h,{formId:l.id,config:u},`${l.id}.${u.id}`):(f(),null)}else if(a.type==="vertical"||a.type==="horizontal"){const l=b.layout;return l?d.jsx(l,{formId:a.items[0].formId,type:a.type,children:d.jsx(L,{items:a.items,widgets:b,state:c,triggerFallback:f})},m):(f(),null)}else return f(),null})}),$=p=>{const{params:b,widgets:c,sessionId:f,onLogin:a,onFallback:m,onClose:l,onError:u,onGlobalMessage:h,onBlockReady:g}={params:{},widgets:{},sessionId:null,...p},{sdk:w}=W.useStrivacity(),S=r.useRef(null),[q,k]=r.useState(!1),[E,U]=r.useState({}),[M,C]=r.useState({}),[e,R]=r.useState({}),F=r.useCallback(s=>{const t=s||e.hostedUrl;if(!t)throw new Error("No hosted URL provided");m?.(new x.FallbackError(new URL(t)))},[e,m]),T=r.useCallback(()=>{l?.()},[l]),N=r.useCallback((s,t,o)=>{j[s]={...j[s],[t]:o===""?null:o},U(n=>({...n,[s]:{...n[s]||{},[t]:o===""?null:o}}))},[]),O=r.useCallback((s,t,o)=>{C(n=>({...n,[s]:{...n[s]||{},[t]:o}}))},[]),A=r.useCallback(async s=>{try{k(!0);const t=await S.current?.submitForm(s,V.unflattenObject(j[s]));if(await w.isAuthenticated)a?.(w.idTokenClaims);else{const o=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??e.messages,branding:t?.branding??e.branding};if(n.screen!==e.screen){const i={},y={};for(const v of n.forms??[])i[v.id]={},y[v.id]={};U(i),C(y)}Object.keys(n.messages??{}).forEach(i=>{i==="global"?h?.(n.messages?.global?.text??""):C(y=>({...y,[i]:n.messages[i]}))}),R(n),k(!1),setTimeout(()=>{g?.({previousState:o,state:structuredClone(n)})},1)}}catch(t){console.error("Error submitting form:",t),t instanceof x.FallbackError?m?.(t):u?.(t)}},[w,b,E,e,a,m,l,u,h,g]),P={loading:q,forms:E,messages:M,state:e,submitForm:A,triggerFallback:F,triggerClose:T,setFormValue:N,setMessage:O};return r.useEffect(()=>{S.current=w.login(b),(async()=>{try{const s=await S.current?.startSession(f),t=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??e.messages,branding:s?.branding??e.branding};if(await w.isAuthenticated)a?.(w.idTokenClaims);else{if(o.screen!==e.screen){const n={},i={};for(const y of o.forms??[])n[y.id]={},i[y.id]={};U(n),C(i)}Object.keys(o.messages??{}).forEach(n=>{n==="global"?h?.(o.messages?.global?.text??""):C(i=>({...i,[n]:o.messages[n]}))}),R(o),setTimeout(()=>{g?.({previousState:t,state:structuredClone(o)})},1)}}catch(s){s instanceof x.FallbackError?m?.(s):u?.(s)}})()},[]),d.jsx(z.Provider,{value:P,children:d.jsx("div",{className:"login-renderer",children:e.screen&&c.layout?r.createElement(c.layout,{formId:e.layout?.items?.[0]?.formId,type:e.layout?.type,tag:"form"},d.jsx(L,{items:e.layout?.items??[],widgets:c,state:e,triggerFallback:F})):c.loading?r.createElement(c.loading):null})})};exports.NativeFlowContext=z;exports.StyLoginRenderer=$;
2
2
  //# sourceMappingURL=LoginRenderer.cjs.map
@@ -1 +1 @@
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) => 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();\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();\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();\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();\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\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}> = (props) => {\n\tconst { params, widgets, sessionId, onLogin, onFallback, onClose, onError, onGlobalMessage, onBlockReady } = {\n\t\tparams: {},\n\t\twidgets: {},\n\t\tsessionId: 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) => {\n\t\t\tconst url = hostedUrl || state.hostedUrl;\n\n\t\t\tif (!url) {\n\t\t\t\tthrow new Error('No hosted URL provided');\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 ?? state.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}\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\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('Error submitting form:', error);\n\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);\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 ?? state.messages,\n\t\t\t\t\tbranding: data?.branding ?? state.branding,\n\t\t\t\t};\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","_a","f","widget","w","WidgetComponent","LayoutComponent","StyLoginRenderer","props","params","sessionId","onLogin","onFallback","onClose","onError","onGlobalMessage","onBlockReady","sdk","useStrivacity","loginHandlerRef","useRef","loading","setLoading","useState","forms","setForms","messages","setMessages","setState","useCallback","hostedUrl","url","FallbackError","triggerClose","setFormValue","formId","widgetId","value","prev","setMessage","submitForm","data","unflattenObject","previousState","newState","newForms","newMessages","_b","error","contextValue","useEffect","newforms","newmessages","React","_c","_d","_e"],"mappings":"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"}
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) => 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();\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();\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();\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();\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\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}> = (props) => {\n\tconst { params, widgets, sessionId, onLogin, onFallback, onClose, onError, onGlobalMessage, onBlockReady } = {\n\t\tparams: {},\n\t\twidgets: {},\n\t\tsessionId: 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) => {\n\t\t\tconst url = hostedUrl || state.hostedUrl;\n\n\t\t\tif (!url) {\n\t\t\t\tthrow new Error('No hosted URL provided');\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 ?? state.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}\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\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('Error submitting form:', error);\n\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);\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 ?? state.messages,\n\t\t\t\t\tbranding: data?.branding ?? state.branding,\n\t\t\t\t};\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","onLogin","onFallback","onClose","onError","onGlobalMessage","onBlockReady","sdk","useStrivacity","loginHandlerRef","useRef","loading","setLoading","useState","forms","setForms","messages","setMessages","setState","useCallback","hostedUrl","url","FallbackError","triggerClose","setFormValue","formId","widgetId","value","prev","setMessage","submitForm","data","unflattenObject","previousState","newState","newForms","newMessages","error","contextValue","useEffect","newforms","newmessages","React"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{jsx as w,Fragment as Y}from"react/jsx-runtime";import D,{createContext as Z,useRef as _,useState as b,useCallback as S,useEffect as I}from"react";import{FallbackError as E}from"@strivacity/sdk-core";import{unflattenObject as B}from"@strivacity/sdk-core/utils/object";import{useStrivacity as G}from"./composables.mjs";const k=Z(null),j={},H=({items:x,widgets:U,state:y,triggerFallback:h})=>w(Y,{children:x.map((n,c)=>{var d;if(n.type==="widget"){const r=(d=y.forms)==null?void 0:d.find(a=>a.id===n.formId),u=r==null?void 0:r.widgets.find(a=>a.id===n.widgetId);if(!r||!u)return h(),null;const g=U[u.type];return g?w(g,{formId:r.id,config:u},`${r.id}.${u.id}`):(h(),null)}else if(n.type==="vertical"||n.type==="horizontal"){const r=U.layout;return r?w(r,{formId:n.items[0].formId,type:n.type,children:w(H,{items:n.items,widgets:U,state:y,triggerFallback:h})},c):(h(),null)}else return h(),null})}),oe=x=>{var A,L,V,W,$;const{params:U,widgets:y,sessionId:h,onLogin:n,onFallback:c,onClose:d,onError:r,onGlobalMessage:u,onBlockReady:g}={params:{},widgets:{},sessionId:null,...x},{sdk:a}=G(),z=_(null),[P,R]=b(!1),[T,v]=b({}),[q,C]=b({}),[t,N]=b({}),O=S(o=>{const e=o||t.hostedUrl;if(!e)throw new Error("No hosted URL provided");c==null||c(new E(new URL(e)))},[t,c]),F=S(()=>{d==null||d()},[d]),J=S((o,e,s)=>{j[o]={...j[o],[e]:s===""?null:s},v(i=>({...i,[o]:{...i[o]||{},[e]:s===""?null:s}}))},[]),K=S((o,e,s)=>{C(i=>({...i,[o]:{...i[o]||{},[e]:s}}))},[]),M=S(async o=>{var e;try{R(!0);const s=await((e=z.current)==null?void 0:e.submitForm(o,B(j[o])));if(await a.isAuthenticated)n==null||n(a.idTokenClaims);else{const i=structuredClone(t),l={hostedUrl:(s==null?void 0:s.hostedUrl)??t.hostedUrl,finalizeUrl:(s==null?void 0:s.finalizeUrl)??t.finalizeUrl,screen:(s==null?void 0:s.screen)??t.screen,forms:(s==null?void 0:s.forms)??t.forms,layout:(s==null?void 0:s.layout)??t.layout,messages:(s==null?void 0:s.messages)??t.messages,branding:(s==null?void 0:s.branding)??t.branding};if(l.screen!==t.screen){const m={},f={};for(const p of l.forms??[])m[p.id]={},f[p.id]={};v(m),C(f)}Object.keys(l.messages??{}).forEach(m=>{var f,p;m==="global"?u==null||u(((p=(f=l.messages)==null?void 0:f.global)==null?void 0:p.text)??""):C(X=>({...X,[m]:l.messages[m]}))}),N(l),R(!1),setTimeout(()=>{g==null||g({previousState:i,state:structuredClone(l)})},1)}}catch(s){console.error("Error submitting form:",s),s instanceof E?c==null||c(s):r==null||r(s)}},[a,U,T,t,n,c,d,r,u,g]),Q={loading:P,forms:T,messages:q,state:t,submitForm:M,triggerFallback:O,triggerClose:F,setFormValue:J,setMessage:K};return I(()=>{z.current=a.login(U),(async()=>{var o;try{const e=await((o=z.current)==null?void 0:o.startSession(h)),s=structuredClone(t),i={hostedUrl:(e==null?void 0:e.hostedUrl)??t.hostedUrl,finalizeUrl:(e==null?void 0:e.finalizeUrl)??t.finalizeUrl,screen:(e==null?void 0:e.screen)??t.screen,forms:(e==null?void 0:e.forms)??t.forms,layout:(e==null?void 0:e.layout)??t.layout,messages:(e==null?void 0:e.messages)??t.messages,branding:(e==null?void 0:e.branding)??t.branding};if(await a.isAuthenticated)n==null||n(a.idTokenClaims);else{if(i.screen!==t.screen){const l={},m={};for(const f of i.forms??[])l[f.id]={},m[f.id]={};v(l),C(m)}Object.keys(i.messages??{}).forEach(l=>{var m,f;l==="global"?u==null||u(((f=(m=i.messages)==null?void 0:m.global)==null?void 0:f.text)??""):C(p=>({...p,[l]:i.messages[l]}))}),N(i),setTimeout(()=>{g==null||g({previousState:s,state:structuredClone(i)})},1)}}catch(e){e instanceof E?c==null||c(e):r==null||r(e)}})()},[]),w(k.Provider,{value:Q,children:w("div",{className:"login-renderer",children:t.screen&&y.layout?D.createElement(y.layout,{formId:(V=(L=(A=t.layout)==null?void 0:A.items)==null?void 0:L[0])==null?void 0:V.formId,type:(W=t.layout)==null?void 0:W.type,tag:"form"},w(H,{items:(($=t.layout)==null?void 0:$.items)??[],widgets:y,state:t,triggerFallback:O})):y.loading?D.createElement(y.loading):null})})};export{k as NativeFlowContext,oe as StyLoginRenderer};
1
+ import{jsx as g,Fragment as B}from"react/jsx-runtime";import j,{createContext as D,useRef as G,useState as U,useCallback as b,useEffect as H}from"react";import{FallbackError as R}from"@strivacity/sdk-core";import{unflattenObject as P}from"@strivacity/sdk-core/utils/object";import{useStrivacity as q}from"./composables.mjs";const J=D(null),x={},M=({items:C,widgets:y,state:i,triggerFallback:u})=>g(B,{children:C.map((r,d)=>{if(r.type==="widget"){const a=i.forms?.find(m=>m.id===r.formId),c=a?.widgets.find(m=>m.id===r.widgetId);if(!a||!c)return u(),null;const h=y[c.type];return h?g(h,{formId:a.id,config:c},`${a.id}.${c.id}`):(u(),null)}else if(r.type==="vertical"||r.type==="horizontal"){const a=y.layout;return a?g(a,{formId:r.items[0].formId,type:r.type,children:g(M,{items:r.items,widgets:y,state:i,triggerFallback:u})},d):(u(),null)}else return u(),null})}),_=C=>{const{params:y,widgets:i,sessionId:u,onLogin:r,onFallback:d,onClose:a,onError:c,onGlobalMessage:h,onBlockReady:m}={params:{},widgets:{},sessionId:null,...C},{sdk:p}=q(),S=G(null),[T,z]=U(!1),[k,E]=U({}),[N,w]=U({}),[e,F]=U({}),L=b(s=>{const t=s||e.hostedUrl;if(!t)throw new Error("No hosted URL provided");d?.(new R(new URL(t)))},[e,d]),O=b(()=>{a?.()},[a]),A=b((s,t,n)=>{x[s]={...x[s],[t]:n===""?null:n},E(o=>({...o,[s]:{...o[s]||{},[t]:n===""?null:n}}))},[]),V=b((s,t,n)=>{w(o=>({...o,[s]:{...o[s]||{},[t]:n}}))},[]),W=b(async s=>{try{z(!0);const t=await S.current?.submitForm(s,P(x[s]));if(await p.isAuthenticated)r?.(p.idTokenClaims);else{const 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??e.messages,branding:t?.branding??e.branding};if(o.screen!==e.screen){const l={},f={};for(const v of o.forms??[])l[v.id]={},f[v.id]={};E(l),w(f)}Object.keys(o.messages??{}).forEach(l=>{l==="global"?h?.(o.messages?.global?.text??""):w(f=>({...f,[l]:o.messages[l]}))}),F(o),z(!1),setTimeout(()=>{m?.({previousState:n,state:structuredClone(o)})},1)}}catch(t){console.error("Error submitting form:",t),t instanceof R?d?.(t):c?.(t)}},[p,y,k,e,r,d,a,c,h,m]),$={loading:T,forms:k,messages:N,state:e,submitForm:W,triggerFallback:L,triggerClose:O,setFormValue:A,setMessage:V};return H(()=>{S.current=p.login(y),(async()=>{try{const s=await S.current?.startSession(u),t=structuredClone(e),n={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??e.messages,branding:s?.branding??e.branding};if(await p.isAuthenticated)r?.(p.idTokenClaims);else{if(n.screen!==e.screen){const o={},l={};for(const f of n.forms??[])o[f.id]={},l[f.id]={};E(o),w(l)}Object.keys(n.messages??{}).forEach(o=>{o==="global"?h?.(n.messages?.global?.text??""):w(l=>({...l,[o]:n.messages[o]}))}),F(n),setTimeout(()=>{m?.({previousState:t,state:structuredClone(n)})},1)}}catch(s){s instanceof R?d?.(s):c?.(s)}})()},[]),g(J.Provider,{value:$,children:g("div",{className:"login-renderer",children:e.screen&&i.layout?j.createElement(i.layout,{formId:e.layout?.items?.[0]?.formId,type:e.layout?.type,tag:"form"},g(M,{items:e.layout?.items??[],widgets:i,state:e,triggerFallback:L})):i.loading?j.createElement(i.loading):null})})};export{J as NativeFlowContext,_ as StyLoginRenderer};
2
2
  //# sourceMappingURL=LoginRenderer.mjs.map
@@ -1 +1 @@
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) => 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();\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();\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();\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();\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\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}> = (props) => {\n\tconst { params, widgets, sessionId, onLogin, onFallback, onClose, onError, onGlobalMessage, onBlockReady } = {\n\t\tparams: {},\n\t\twidgets: {},\n\t\tsessionId: 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) => {\n\t\t\tconst url = hostedUrl || state.hostedUrl;\n\n\t\t\tif (!url) {\n\t\t\t\tthrow new Error('No hosted URL provided');\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 ?? state.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}\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\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('Error submitting form:', error);\n\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);\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 ?? state.messages,\n\t\t\t\t\tbranding: data?.branding ?? state.branding,\n\t\t\t\t};\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","_a","f","widget","w","WidgetComponent","LayoutComponent","StyLoginRenderer","props","params","sessionId","onLogin","onFallback","onClose","onError","onGlobalMessage","onBlockReady","sdk","useStrivacity","loginHandlerRef","useRef","loading","setLoading","useState","forms","setForms","messages","setMessages","setState","useCallback","hostedUrl","url","FallbackError","triggerClose","setFormValue","formId","widgetId","value","prev","setMessage","submitForm","data","unflattenObject","previousState","newState","newForms","newMessages","_b","error","contextValue","useEffect","newforms","newmessages","React","_c","_d","_e"],"mappings":"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"}
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) => 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();\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();\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();\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();\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\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}> = (props) => {\n\tconst { params, widgets, sessionId, onLogin, onFallback, onClose, onError, onGlobalMessage, onBlockReady } = {\n\t\tparams: {},\n\t\twidgets: {},\n\t\tsessionId: 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) => {\n\t\t\tconst url = hostedUrl || state.hostedUrl;\n\n\t\t\tif (!url) {\n\t\t\t\tthrow new Error('No hosted URL provided');\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 ?? state.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}\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\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('Error submitting form:', error);\n\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);\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 ?? state.messages,\n\t\t\t\t\tbranding: data?.branding ?? state.branding,\n\t\t\t\t};\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","onLogin","onFallback","onClose","onError","onGlobalMessage","onBlockReady","sdk","useStrivacity","loginHandlerRef","useRef","loading","setLoading","useState","forms","setForms","messages","setMessages","setState","useCallback","hostedUrl","url","FallbackError","triggerClose","setFormValue","formId","widgetId","value","prev","setMessage","submitForm","data","unflattenObject","previousState","newState","newForms","newMessages","error","contextValue","useEffect","newforms","newmessages","React"],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,15 @@
1
1
  {
2
2
  "name": "@strivacity/sdk-next",
3
- "version": "2.1.1",
3
+ "version": "2.1.2",
4
4
  "license": "MIT",
5
5
  "description": "Strivacity Next.js SDK client",
6
6
  "author": "strivacity <opensource@strivacity.com>",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/Strivacity/sdk-js"
10
+ },
7
11
  "dependencies": {
8
- "@strivacity/sdk-core": "2.1.1"
12
+ "@strivacity/sdk-core": "2.1.2"
9
13
  },
10
14
  "peerDependencies": {
11
15
  "next": ">=13"