@strivacity/sdk-remix 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 +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":"yMAUA,IAAIA,EAEG,MAAMC,EAAoE,CAAC,CACjF,QAAAC,EACA,SAAAC,EAAW,MACZ,IAGM,CACL,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAkB,EAAI,EAC9C,CAACC,EAAiBC,CAAkB,EAAIF,EAAAA,SAAkB,EAAK,EAC/D,CAACG,EAAeC,CAAgB,EAAIJ,EAAAA,SAA+B,IAAI,EACvE,CAACK,EAAaC,CAAc,EAAIN,EAAAA,SAAwB,IAAI,EAC5D,CAACO,EAAcC,CAAe,EAAIR,EAAAA,SAAwB,IAAI,EAC9D,CAACS,EAAoBC,CAAqB,EAAIV,EAAAA,SAAkB,EAAI,EACpE,CAACW,EAA2BC,CAA4B,EAAIZ,EAAAA,SAAwB,IAAI,EACxFa,EAASC,EAAAA,OAAkC,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,
|
|
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":"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,
|
|
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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"}
|
package/dist/LoginRenderer.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
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),[M,k]=r.useState(!1),[E,U]=r.useState({}),[q,C]=r.useState({}),[e,F]=r.useState({}),R=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]}))}),F(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:M,forms:E,messages:q,state:e,submitForm:A,triggerFallback:R,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]}))}),F(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:R})):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","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","React"],"mappings":"wPAQaA,EAAoBC,EAAAA,cAA6C,IAAI,EAC5EC,EAAoD,CAAA,EAEpDC,EAKD,CAAC,CAAE,MAAAC,EAAO,QAAAC,EAAS,MAAAC,EAAO,gBAAAC,KAE7BC,EAAAA,IAAAC,EAAAA,SAAA,CACE,SAAAL,EAAM,IAAI,CAACM,EAAMC,IAAQ,CACzB,GAAID,EAAK,OAAS,SAAU,CAC3B,MAAME,EAAON,EAAM,OAAO,KAAMO,GAAMA,EAAE,KAAOH,EAAK,MAAM,EACpDI,EAASF,GAAM,QAAQ,KAAMG,GAAMA,EAAE,KAAOL,EAAK,QAAQ,EAE/D,GAAI,CAACE,GAAQ,CAACE,EACb,OAAAP,EAAA,EACO,KAGR,MAAMS,EAAkBX,EAAQS,EAAO,IAAI,EAE3C,OAAKE,EAKER,EAAAA,IAACQ,EAAA,CAAgD,OAAQJ,EAAK,GAAI,OAAQE,CAAA,EAApD,GAAGF,EAAK,EAAE,IAAIE,EAAO,EAAE,EAAqC,GAJxFP,EAAA,EACO,KAIT,SAAWG,EAAK,OAAS,YAAcA,EAAK,OAAS,aAAc,CAClE,MAAMO,EAAkBZ,EAAQ,OAEhC,OAAKY,EAMJT,MAACS,GAA0B,OAASP,EAAK,MAAM,CAAC,EAAa,OAAQ,KAAMA,EAAK,KAC/E,SAAAF,EAAAA,IAACL,EAAA,CAAkB,MAAOO,EAAK,MAAO,QAAAL,EAAkB,MAAAC,EAAc,gBAAAC,EAAkC,GADnFI,CAEtB,GAPAJ,EAAA,EACO,KAQT,KACC,QAAAA,EAAA,EACO,IAET,CAAC,CAAA,CACF,EAIWW,EAUPC,GAAU,CACf,KAAM,CAAE,OAAAC,EAAQ,QAAAf,EAAS,UAAAgB,EAAW,QAAAC,EAAS,WAAAC,EAAY,QAAAC,EAAS,QAAAC,EAAS,gBAAAC,EAAiB,aAAAC,GAAiB,CAC5G,OAAQ,CAAA,EACR,QAAS,CAAA,EACT,UAAW,KACX,GAAGR,CAAA,EAEE,CAAE,IAAAS,CAAA,EAAQC,gBAAA,EACVC,EAAkBC,EAAAA,OAAiD,IAAI,EAEvE,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAK,EACtC,CAACC,EAAOC,CAAQ,EAAIF,EAAAA,SAAkD,CAAA,CAAE,EACxE,CAACG,EAAUC,CAAW,EAAIJ,EAAAA,SAA2D,CAAA,CAAE,EACvF,CAAC5B,EAAOiC,CAAQ,EAAIL,EAAAA,SAAyB,CAAA,CAAE,EAE/C3B,EAAkBiC,EAAAA,YACtBC,GAAuB,CACvB,MAAMC,EAAMD,GAAanC,EAAM,UAE/B,GAAI,CAACoC,EACJ,MAAM,IAAI,MAAM,wBAAwB,EAGzCnB,IAAa,IAAIoB,EAAAA,cAAc,IAAI,IAAID,CAAG,CAAC,CAAC,CAC7C,EACA,CAACpC,EAAOiB,CAAU,CAAA,EAGbqB,EAAeJ,EAAAA,YAAY,IAAM,CACtChB,IAAA,CACD,EAAG,CAACA,CAAO,CAAC,EAENqB,EAAeL,EAAAA,YAAY,CAACM,EAAgBC,EAAkBC,IAAmB,CACtF9C,EAAS4C,CAAM,EAAI,CAClB,GAAG5C,EAAS4C,CAAM,EAClB,CAACC,CAAQ,EAAGC,IAAU,GAAK,KAAOA,CAAA,EAGnCZ,EAAUa,IAAU,CACnB,GAAGA,EACH,CAACH,CAAM,EAAG,CAAE,GAAIG,EAAKH,CAAM,GAAK,GAAK,CAACC,CAAQ,EAAGC,IAAU,GAAK,KAAOA,CAAA,CAAM,EAC5E,CACH,EAAG,CAAA,CAAE,EAECE,EAAaV,EAAAA,YAAY,CAACM,EAAgBC,EAAkBC,IAA4B,CAC7FV,EAAaW,IAAU,CACtB,GAAGA,EACH,CAACH,CAAM,EAAG,CAAE,GAAIG,EAAKH,CAAM,GAAK,CAAA,EAAK,CAACC,CAAQ,EAAGC,CAAA,CAAM,EACtD,CACH,EAAG,CAAA,CAAE,EAECG,EAAaX,EAAAA,YAClB,MAAOM,GAAmB,CACzB,GAAI,CACHb,EAAW,EAAI,EAEf,MAAMmB,EAAO,MAAMtB,EAAgB,SAAS,WAAWgB,EAAQO,kBAAgBnD,EAAS4C,CAAM,CAAC,CAAC,EAEhG,GAAI,MAAMlB,EAAI,gBACbN,IAAUM,EAAI,aAAa,MACrB,CACN,MAAM0B,EAAgB,gBAAgBhD,CAAK,EACrCiD,EAA2B,CAChC,UAAWH,GAAM,WAAa9C,EAAM,UACpC,YAAa8C,GAAM,aAAe9C,EAAM,YACxC,OAAQ8C,GAAM,QAAU9C,EAAM,OAC9B,MAAO8C,GAAM,OAAS9C,EAAM,MAC5B,OAAQ8C,GAAM,QAAU9C,EAAM,OAC9B,SAAU8C,GAAM,UAAY9C,EAAM,SAClC,SAAU8C,GAAM,UAAY9C,EAAM,QAAA,EAGnC,GAAIiD,EAAS,SAAWjD,EAAM,OAAQ,CACrC,MAAMkD,EAAyB,CAAA,EACzBC,EAA+B,CAAA,EAErC,UAAW7C,KAAQ2C,EAAS,OAAS,CAAA,EACpCC,EAAS5C,EAAK,EAAE,EAAI,CAAA,EACpB6C,EAAY7C,EAAK,EAAE,EAAI,CAAA,EAGxBwB,EAASoB,CAAQ,EACjBlB,EAAYmB,CAAW,CACxB,CAEA,OAAO,KAAKF,EAAS,UAAY,CAAA,CAAE,EAAE,QAAST,GAAW,CACpDA,IAAW,SACdpB,IAAkB6B,EAAS,UAAU,QAAQ,MAAQ,EAAE,EAEvDjB,EAAaW,IAAU,CACtB,GAAGA,EACH,CAACH,CAAM,EAAGS,EAAS,SAAUT,CAAM,CAAA,EAClC,CAEJ,CAAC,EAEDP,EAASgB,CAAQ,EACjBtB,EAAW,EAAK,EAEhB,WAAW,IAAM,CAChBN,IAAe,CAAE,cAAA2B,EAAe,MAAO,gBAAgBC,CAAQ,EAAG,CACnE,EAAG,CAAC,CACL,CACD,OAASG,EAAO,CAEf,QAAQ,MAAM,yBAA0BA,CAAK,EAEzCA,aAAiBf,EAAAA,cACpBpB,IAAamC,CAAK,EAElBjC,IAAUiC,CAAK,CAEjB,CACD,EACA,CAAC9B,EAAKR,EAAQe,EAAO7B,EAAOgB,EAASC,EAAYC,EAASC,EAASC,EAAiBC,CAAY,CAAA,EAG3FgC,EAAuC,CAC5C,QAAA3B,EACA,MAAAG,EACA,SAAAE,EACA,MAAA/B,EACA,WAAA6C,EACA,gBAAA5C,EACA,aAAAqC,EACA,aAAAC,EACA,WAAAK,CAAA,EAGDU,OAAAA,EAAAA,UAAU,IAAM,CACf9B,EAAgB,QAAUF,EAAI,MAAMR,CAAM,GAEpC,SAAY,CACjB,GAAI,CACH,MAAMgC,EAAO,MAAMtB,EAAgB,SAAS,aAAaT,CAAS,EAC5DiC,EAAgB,gBAAgBhD,CAAK,EACrCiD,EAA2B,CAChC,UAAWH,GAAM,WAAa9C,EAAM,UACpC,YAAa8C,GAAM,aAAe9C,EAAM,YACxC,OAAQ8C,GAAM,QAAU9C,EAAM,OAC9B,MAAO8C,GAAM,OAAS9C,EAAM,MAC5B,OAAQ8C,GAAM,QAAU9C,EAAM,OAC9B,SAAU8C,GAAM,UAAY9C,EAAM,SAClC,SAAU8C,GAAM,UAAY9C,EAAM,QAAA,EAGnC,GAAI,MAAMsB,EAAI,gBACbN,IAAUM,EAAI,aAAa,MACrB,CACN,GAAI2B,EAAS,SAAWjD,EAAM,OAAQ,CACrC,MAAMkD,EAAyB,CAAA,EACzBC,EAA+B,CAAA,EAErC,UAAW7C,KAAQ2C,EAAS,OAAS,CAAA,EACpCC,EAAS5C,EAAK,EAAE,EAAI,CAAA,EACpB6C,EAAY7C,EAAK,EAAE,EAAI,CAAA,EAGxBwB,EAASoB,CAAQ,EACjBlB,EAAYmB,CAAW,CACxB,CAEA,OAAO,KAAKF,EAAS,UAAY,CAAA,CAAE,EAAE,QAAST,GAAW,CACpDA,IAAW,SACdpB,IAAkB6B,EAAS,UAAU,QAAQ,MAAQ,EAAE,EAEvDjB,EAAaW,IAAU,CACtB,GAAGA,EACH,CAACH,CAAM,EAAGS,EAAS,SAAUT,CAAM,CAAA,EAClC,CAEJ,CAAC,EAEDP,EAASgB,CAAQ,EAEjB,WAAW,IAAM,CAChB5B,IAAe,CAAE,cAAA2B,EAAe,MAAO,gBAAgBC,CAAQ,EAAG,CACnE,EAAG,CAAC,CACL,CACD,OAASG,EAAO,CACXA,aAAiBf,EAAAA,cACpBpB,IAAamC,CAAK,EAElBjC,IAAUiC,CAAK,CAEjB,CACD,GAAA,CACD,EAAG,CAAA,CAAE,EAGJlD,EAAAA,IAACR,EAAkB,SAAlB,CAA2B,MAAO2D,EAClC,SAAAnD,MAAC,MAAA,CAAI,UAAU,iBACb,SAAAF,EAAM,QAAUD,EAAQ,OACtBwD,EAAM,cACNxD,EAAQ,OACR,CACC,OAASC,EAAM,QAAQ,QAAQ,CAAC,GAAc,OAC9C,KAAMA,EAAM,QAAQ,KACpB,IAAK,MAAA,EAENE,EAAAA,IAACL,EAAA,CAAkB,MAAOG,EAAM,QAAQ,OAAS,GAAI,QAAAD,EAAkB,MAAAC,EAAc,gBAAAC,CAAA,CAAkC,CAAA,EAEvHF,EAAQ,QACPwD,EAAM,cAAcxD,EAAQ,OAAO,EACnC,IAAA,CACL,EACD,CAEF"}
|
package/dist/LoginRenderer.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as g,Fragment as B}from"react/jsx-runtime";import M,{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={},j=({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(j,{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),[F,E]=U({}),[N,w]=U({}),[e,k]=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]}))}),k(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,F,e,r,d,a,c,h,m]),$={loading:T,forms:F,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]}))}),k(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?M.createElement(i.layout,{formId:e.layout?.items?.[0]?.formId,type:e.layout?.type,tag:"form"},g(j,{items:e.layout?.items??[],widgets:i,state:e,triggerFallback:L})):i.loading?M.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","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","React"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strivacity/sdk-remix",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Strivacity Remix 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.
|
|
12
|
+
"@strivacity/sdk-core": "2.1.2"
|
|
9
13
|
},
|
|
10
14
|
"peerDependencies": {
|
|
11
15
|
"react": ">=18"
|