@strivacity/sdk-remix 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/LICENSE +1 -1
- package/README.md +5 -5
- package/dist/AuthProvider.cjs +1 -1
- package/dist/AuthProvider.cjs.map +1 -1
- package/dist/AuthProvider.mjs +1 -1
- package/dist/AuthProvider.mjs.map +1 -1
- package/dist/LoginRenderer.cjs +1 -1
- package/dist/LoginRenderer.cjs.map +1 -1
- package/dist/LoginRenderer.d.ts +1 -0
- package/dist/LoginRenderer.mjs +1 -1
- package/dist/LoginRenderer.mjs.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +1 -1
- package/dist/types.d.ts +13 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
## 2.1.0 (2025-11-10)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- extract side-effect from AuthProvider ([0c726f9](https://github.com/Strivacity/sdk-js/commit/0c726f9))
|
|
6
|
+
- webauthn support added ([f1b0fc4](https://github.com/Strivacity/sdk-js/commit/f1b0fc4))
|
|
7
|
+
- entry url added ([808bf81](https://github.com/Strivacity/sdk-js/commit/808bf81))
|
|
8
|
+
- nextjs headless example app added ([0c1dafa](https://github.com/Strivacity/sdk-js/commit/0c1dafa))
|
|
9
|
+
|
|
10
|
+
### 🩹 Fixes
|
|
11
|
+
|
|
12
|
+
- react based framework AuthProvider minor fixes ([bace37d](https://github.com/Strivacity/sdk-js/commit/bace37d))
|
|
13
|
+
- async flow initialization updated ([477df9f](https://github.com/Strivacity/sdk-js/commit/477df9f))
|
|
14
|
+
- react based framework formData calculation fixed ([d4ef6b5](https://github.com/Strivacity/sdk-js/commit/d4ef6b5))
|
|
15
|
+
|
|
16
|
+
### 🧱 Updated Dependencies
|
|
17
|
+
|
|
18
|
+
- Updated sdk-core to 2.1.0
|
|
19
|
+
|
|
1
20
|
# 2.0.0 (2025-09-10)
|
|
2
21
|
|
|
3
22
|
### 🩹 Fixes
|
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2023 Strivacity Inc. <
|
|
3
|
+
Copyright (c) 2023 Strivacity Inc. <opensource@strivacity.com>
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ npm install @strivacity/sdk-remix
|
|
|
19
19
|
Add the `StyAuthProvider` to your `main.tsx` file.
|
|
20
20
|
|
|
21
21
|
```tsx
|
|
22
|
-
import { BrowserRouter, Navigate, Route, Routes } from 'react-router';
|
|
22
|
+
import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom';
|
|
23
23
|
import { StyAuthProvider, type SDKOptions } from '@strivacity/sdk-react';
|
|
24
24
|
|
|
25
25
|
const options: SDKOptions = {
|
|
@@ -82,7 +82,7 @@ The callback page handles the response from the identity provider after successf
|
|
|
82
82
|
|
|
83
83
|
```tsx
|
|
84
84
|
import { useEffect } from 'react';
|
|
85
|
-
import { useNavigate } from 'react-router';
|
|
85
|
+
import { useNavigate } from 'react-router-dom';
|
|
86
86
|
import { useStrivacity } from '@strivacity/sdk-remix';
|
|
87
87
|
|
|
88
88
|
export default function Callback() {
|
|
@@ -171,7 +171,7 @@ This URI must be configured in the Admin Console as an allowed post-logout redir
|
|
|
171
171
|
|
|
172
172
|
```tsx
|
|
173
173
|
import { useEffect } from 'react';
|
|
174
|
-
import { useNavigate } from 'react-router';
|
|
174
|
+
import { useNavigate } from 'react-router-dom';
|
|
175
175
|
import { useStrivacity } from '@strivacity/sdk-remix';
|
|
176
176
|
|
|
177
177
|
export default function Logout() {
|
|
@@ -251,7 +251,7 @@ This example demonstrates how to handle session management, implement callback f
|
|
|
251
251
|
|
|
252
252
|
```tsx
|
|
253
253
|
import { Suspense, useEffect, useState } from 'react';
|
|
254
|
-
import { useNavigate } from 'react-router';
|
|
254
|
+
import { useNavigate } from 'react-router-dom';
|
|
255
255
|
import { useStrivacity, StyLoginRenderer, FallbackError, type LoginFlowState } from '@strivacity/sdk-remix';
|
|
256
256
|
import { widgets } from '@/components/widgets';
|
|
257
257
|
|
|
@@ -348,7 +348,7 @@ This component is essential for handling social login providers (like Google, Fa
|
|
|
348
348
|
|
|
349
349
|
```tsx
|
|
350
350
|
import { useEffect } from 'react';
|
|
351
|
-
import { useNavigate } from 'react-router';
|
|
351
|
+
import { useNavigate } from 'react-router-dom';
|
|
352
352
|
import { useStrivacity } from '@strivacity/sdk-remix';
|
|
353
353
|
|
|
354
354
|
export default function Callback() {
|
package/dist/AuthProvider.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 y=require("react/jsx-runtime"),r=require("react"),S=require("@strivacity/sdk-core"),m=require("./composables.cjs");let e;const A=({options:a,children:T=void 0})=>{const[i,h]=r.useState(!0),[o,b]=r.useState(!1),[c,v]=r.useState(null),[u,f]=r.useState(null),[l,E]=r.useState(null),[d,g]=r.useState(!0),[k,p]=r.useState(null),n=r.useRef([]),t=async()=>{b(await e.isAuthenticated),v(e.idTokenClaims||null),f(e.accessToken||null),E(e.refreshToken||null),g(e.accessTokenExpired),p(e.accessTokenExpirationDate||null),i&&h(!1)};r.useEffect(()=>(e||(e=S.initFlow(a),n.current.push(e.subscribeToEvent("init",t)),n.current.push(e.subscribeToEvent("loggedIn",t)),n.current.push(e.subscribeToEvent("sessionLoaded",t)),n.current.push(e.subscribeToEvent("tokenRefreshed",t)),n.current.push(e.subscribeToEvent("tokenRefreshFailed",t)),n.current.push(e.subscribeToEvent("logoutInitiated",t)),n.current.push(e.subscribeToEvent("tokenRevoked",t)),n.current.push(e.subscribeToEvent("tokenRevokeFailed",t))),()=>{n.current.forEach(s=>s.dispose()),n.current=[]}),[a]);const w=r.useMemo(()=>({sdk:e,loading:i,options:a,isAuthenticated:o,idTokenClaims:c,accessToken:u,refreshToken:l,accessTokenExpired:d,accessTokenExpirationDate:k,login:async s=>{if(e.options.mode==="native")return e.login(s);await e.login(s),await t()},register:async s=>{if(e.options.mode==="native")return e.register(s);await e.register(s),await t()},refresh:async()=>{await e.refresh(),await t()},entry:async s=>await e.entry(s),revoke:async()=>{await e.revoke(),await t()},logout:async s=>{await e.logout(s),await t()},handleCallback:async s=>{await e.handleCallback(s),await t()}}),[e,i,a,c,u,l,d,k,o]);return y.jsx(m.STRIVACITY_SDK.Provider,{value:w,children:T})};exports.StyAuthProvider=A;
|
|
2
2
|
//# sourceMappingURL=AuthProvider.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthProvider.cjs","sources":["../src/AuthProvider.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useMemo, useState } 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\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\
|
|
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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"}
|
package/dist/AuthProvider.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as g}from"react/jsx-runtime";import{useState as r,useRef as y,useEffect as x,useMemo as A}from"react";import{initFlow as R}from"@strivacity/sdk-core";import{STRIVACITY_SDK as C}from"./composables.mjs";let e;const L=({options:a,children:T=void 0})=>{const[o,h]=r(!0),[i,f]=r(!1),[c,v]=r(null),[u,b]=r(null),[l,p]=r(null),[d,E]=r(!0),[k,w]=r(null),n=y([]),t=async()=>{f(await e.isAuthenticated),v(e.idTokenClaims||null),b(e.accessToken||null),p(e.refreshToken||null),E(e.accessTokenExpired),w(e.accessTokenExpirationDate||null),o&&h(!1)};x(()=>(e||(e=R(a),n.current.push(e.subscribeToEvent("init",t)),n.current.push(e.subscribeToEvent("loggedIn",t)),n.current.push(e.subscribeToEvent("sessionLoaded",t)),n.current.push(e.subscribeToEvent("tokenRefreshed",t)),n.current.push(e.subscribeToEvent("tokenRefreshFailed",t)),n.current.push(e.subscribeToEvent("logoutInitiated",t)),n.current.push(e.subscribeToEvent("tokenRevoked",t)),n.current.push(e.subscribeToEvent("tokenRevokeFailed",t))),()=>{n.current.forEach(s=>s.dispose()),n.current=[]}),[a]);const m=A(()=>({sdk:e,loading:o,options:a,isAuthenticated:i,idTokenClaims:c,accessToken:u,refreshToken:l,accessTokenExpired:d,accessTokenExpirationDate:k,login:async s=>{if(e.options.mode==="native")return e.login(s);await e.login(s),await t()},register:async s=>{if(e.options.mode==="native")return e.register(s);await e.register(s),await t()},refresh:async()=>{await e.refresh(),await t()},entry:async s=>await e.entry(s),revoke:async()=>{await e.revoke(),await t()},logout:async s=>{await e.logout(s),await t()},handleCallback:async s=>{await e.handleCallback(s),await t()}}),[e,o,a,c,u,l,d,k,i]);return g(C.Provider,{value:m,children:T})};export{L as StyAuthProvider};
|
|
2
2
|
//# sourceMappingURL=AuthProvider.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthProvider.mjs","sources":["../src/AuthProvider.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useMemo, useState } 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\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\
|
|
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 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={},M=({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(M,{items:n.items,widgets:p,state:y,triggerFallback:b})},u):(b(),null)}else return b(),null})}),Y=U=>{var F,N,O,k,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),[P,E]=c.useState(!1),[R,j]=c.useState({}),[V,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]),W=c.useCallback(()=>{h==null||h()},[h]),$=c.useCallback((o,e,s)=>{z[o]={...z[o],[e]:s===""?null:s},j(i=>({...i,[o]:{...i[o]||{},[e]:s===""?null:s}}))},[]),D=c.useCallback((o,e,s)=>{S(i=>({...i,[o]:{...i[o]||{},[e]:s}}))},[]),H=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 a={},m={};for(const C of l.forms??[])a[C.id]={},m[C.id]={};j(a),S(m)}Object.keys(l.messages??{}).forEach(a=>{var m,C;a==="global"?f==null||f(((C=(m=l.messages)==null?void 0:m.global)==null?void 0:C.text)??""):S(K=>({...K,[a]:l.messages[a]}))}),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:P,forms:R,messages:V,state:t,submitForm:H,triggerFallback:T,triggerClose:W,setFormValue:$,setMessage:D};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={},a={};for(const m of i.forms??[])l[m.id]={},a[m.id]={};j(l),S(a)}Object.keys(i.messages??{}).forEach(l=>{var a,m;l==="global"?f==null||f(((m=(a=i.messages)==null?void 0:a.global)==null?void 0:m.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:(O=(N=(F=t.layout)==null?void 0:F.items)==null?void 0:N[0])==null?void 0:O.formId,type:(k=t.layout)==null?void 0:k.type,tag:"form"},w.jsx(M,{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;
|
|
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);\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\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, 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 setFormValue = useCallback((formId: string, widgetId: string, value: unknown) => {\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(forms[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, onError, onGlobalMessage, onBlockReady],\n\t);\n\n\t// Provide context value\n\tconst contextValue: NativeFlowContextValue = {\n\t\tloading,\n\t\tforms,\n\t\tmessages,\n\t\tstate,\n\t\tsubmitForm,\n\t\ttriggerFallback,\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","StyWidgetRenderer","items","widgets","state","triggerFallback","jsx","Fragment","item","idx","form","_a","f","widget","w","WidgetComponent","LayoutComponent","StyLoginRenderer","props","params","sessionId","onLogin","onFallback","onError","onGlobalMessage","onBlockReady","sdk","useStrivacity","loginHandlerRef","useRef","loading","setLoading","useState","forms","setforms","messages","setmessages","setState","useCallback","hostedUrl","url","FallbackError","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","_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":"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,OACzB,GAAID,EAAK,OAAS,SAAU,CAC3B,MAAME,GAAOC,EAAAP,EAAM,QAAN,YAAAO,EAAa,KAAMC,GAAMA,EAAE,KAAOJ,EAAK,QAC9CK,EAASH,GAAA,YAAAA,EAAM,QAAQ,KAAMI,GAAMA,EAAE,KAAON,EAAK,UAEvD,GAAI,CAACE,GAAQ,CAACG,EACb,OAAAR,EAAA,EACO,KAGR,MAAMU,EAAkBZ,EAAQU,EAAO,IAAI,EAE3C,OAAKE,EAKET,EAAAA,IAACS,EAAA,CAAgD,OAAQL,EAAK,GAAI,OAAQG,CAAA,EAApD,GAAGH,EAAK,EAAE,IAAIG,EAAO,EAAE,EAAqC,GAJxFR,EAAA,EACO,KAGiF,SAC/EG,EAAK,OAAS,YAAcA,EAAK,OAAS,aAAc,CAClE,MAAMQ,EAAkBb,EAAQ,OAEhC,OAAKa,EAMJV,MAACU,GAA0B,OAASR,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,KAMP,KAGD,QAAAA,EAAA,EACO,IACR,CACA,EACF,EAIWY,EAUPC,GAAU,eACf,KAAM,CAAE,OAAAC,EAAQ,QAAAhB,EAAS,UAAAiB,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,CAAC7B,EAAOkC,CAAQ,EAAIL,EAAAA,SAAyB,CAAA,CAAE,EAE/C5B,EAAkBkC,EAAAA,YACtBC,GAAuB,CACvB,MAAMC,EAAMD,GAAapC,EAAM,UAE/B,GAAI,CAACqC,EACJ,MAAM,IAAI,MAAM,wBAAwB,EAGzCnB,GAAA,MAAAA,EAAa,IAAIoB,EAAAA,cAAc,IAAI,IAAID,CAAG,CAAC,EAAC,EAE7C,CAACrC,EAAOkB,CAAU,CAAA,EAGbqB,EAAeJ,EAAAA,YAAY,IAAM,CACtChB,GAAA,MAAAA,GAAU,EACR,CAACA,CAAO,CAAC,EAENqB,EAAeL,EAAAA,YAAY,CAACM,EAAgBC,EAAkBC,IAAmB,CACtF/C,EAAS6C,CAAM,EAAI,CAClB,GAAG7C,EAAS6C,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,CAAA,EACA,EAAE,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,CAAA,EACA,EAAE,EAECG,EAAaX,EAAAA,YAClB,MAAOM,GAAmB,OACzB,GAAI,CACHb,EAAW,EAAI,EAEf,MAAMmB,EAAO,OAAMxC,EAAAkB,EAAgB,UAAhB,YAAAlB,EAAyB,WAAWkC,EAAQO,kBAAgBpD,EAAS6C,CAAM,CAAC,IAE/F,GAAI,MAAMlB,EAAI,gBACbN,GAAA,MAAAA,EAAUM,EAAI,mBACR,CACN,MAAM0B,EAAgB,gBAAgBjD,CAAK,EACrCkD,EAA2B,CAChC,WAAWH,GAAA,YAAAA,EAAM,YAAa/C,EAAM,UACpC,aAAa+C,GAAA,YAAAA,EAAM,cAAe/C,EAAM,YACxC,QAAQ+C,GAAA,YAAAA,EAAM,SAAU/C,EAAM,OAC9B,OAAO+C,GAAA,YAAAA,EAAM,QAAS/C,EAAM,MAC5B,QAAQ+C,GAAA,YAAAA,EAAM,SAAU/C,EAAM,OAC9B,UAAU+C,GAAA,YAAAA,EAAM,WAAY/C,EAAM,SAClC,UAAU+C,GAAA,YAAAA,EAAM,WAAY/C,EAAM,QAAA,EAGnC,GAAIkD,EAAS,SAAWlD,EAAM,OAAQ,CACrC,MAAMmD,EAAyB,CAAA,EACzBC,EAA+B,CAAA,EAErC,UAAW9C,KAAQ4C,EAAS,OAAS,CAAA,EACpCC,EAAS7C,EAAK,EAAE,EAAI,CAAA,EACpB8C,EAAY9C,EAAK,EAAE,EAAI,CAAA,EAGxByB,EAASoB,CAAQ,EACjBlB,EAAYmB,CAAW,CAAA,CAGxB,OAAO,KAAKF,EAAS,UAAY,CAAA,CAAE,EAAE,QAAST,GAAW,SACpDA,IAAW,SACdpB,GAAA,MAAAA,IAAkBgC,GAAA9C,EAAA2C,EAAS,WAAT,YAAA3C,EAAmB,SAAnB,YAAA8C,EAA2B,OAAQ,IAErDpB,EAAaW,IAAU,CACtB,GAAGA,EACH,CAACH,CAAM,EAAGS,EAAS,SAAUT,CAAM,CAAA,EAClC,CACH,CACA,EAEDP,EAASgB,CAAQ,EACjBtB,EAAW,EAAK,EAEhB,WAAW,IAAM,CAChBN,GAAA,MAAAA,EAAe,CAAE,cAAA2B,EAAe,MAAO,gBAAgBC,CAAQ,GAAG,EAChE,CAAC,CAAA,CACL,OACQI,EAAO,CAEf,QAAQ,MAAM,yBAA0BA,CAAK,EAEzCA,aAAiBhB,EAAAA,cACpBpB,GAAA,MAAAA,EAAaoC,GAEblC,GAAA,MAAAA,EAAUkC,EACX,CACD,EAED,CAAC/B,EAAKR,EAAQe,EAAO9B,EAAOiB,EAASC,EAAYC,EAASC,EAASC,EAAiBC,CAAY,CAAA,EAG3FiC,EAAuC,CAC5C,QAAA5B,EACA,MAAAG,EACA,SAAAE,EACA,MAAAhC,EACA,WAAA8C,EACA,gBAAA7C,EACA,aAAAsC,EACA,aAAAC,EACA,WAAAK,CAAA,EAGDW,OAAAA,EAAAA,UAAU,IAAM,CACf/B,EAAgB,QAAUF,EAAI,MAAMR,CAAM,GAEpC,SAAY,OACjB,GAAI,CACH,MAAMgC,EAAO,OAAMxC,EAAAkB,EAAgB,UAAhB,YAAAlB,EAAyB,aAAaS,IACnDiC,EAAgB,gBAAgBjD,CAAK,EACrCkD,EAA2B,CAChC,WAAWH,GAAA,YAAAA,EAAM,YAAa/C,EAAM,UACpC,aAAa+C,GAAA,YAAAA,EAAM,cAAe/C,EAAM,YACxC,QAAQ+C,GAAA,YAAAA,EAAM,SAAU/C,EAAM,OAC9B,OAAO+C,GAAA,YAAAA,EAAM,QAAS/C,EAAM,MAC5B,QAAQ+C,GAAA,YAAAA,EAAM,SAAU/C,EAAM,OAC9B,UAAU+C,GAAA,YAAAA,EAAM,WAAY/C,EAAM,SAClC,UAAU+C,GAAA,YAAAA,EAAM,WAAY/C,EAAM,QAAA,EAGnC,GAAI,MAAMuB,EAAI,gBACbN,GAAA,MAAAA,EAAUM,EAAI,mBACR,CACN,GAAI2B,EAAS,SAAWlD,EAAM,OAAQ,CACrC,MAAMmD,EAAyB,CAAA,EACzBC,EAA+B,CAAA,EAErC,UAAW9C,KAAQ4C,EAAS,OAAS,CAAA,EACpCC,EAAS7C,EAAK,EAAE,EAAI,CAAA,EACpB8C,EAAY9C,EAAK,EAAE,EAAI,CAAA,EAGxByB,EAASoB,CAAQ,EACjBlB,EAAYmB,CAAW,CAAA,CAGxB,OAAO,KAAKF,EAAS,UAAY,CAAA,CAAE,EAAE,QAAST,GAAW,SACpDA,IAAW,SACdpB,GAAA,MAAAA,IAAkBgC,GAAA9C,EAAA2C,EAAS,WAAT,YAAA3C,EAAmB,SAAnB,YAAA8C,EAA2B,OAAQ,IAErDpB,EAAaW,IAAU,CACtB,GAAGA,EACH,CAACH,CAAM,EAAGS,EAAS,SAAUT,CAAM,CAAA,EAClC,CACH,CACA,EAEDP,EAASgB,CAAQ,EAEjB,WAAW,IAAM,CAChB5B,GAAA,MAAAA,EAAe,CAAE,cAAA2B,EAAe,MAAO,gBAAgBC,CAAQ,GAAG,EAChE,CAAC,CAAA,CACL,OACQI,EAAO,CACXA,aAAiBhB,EAAAA,cACpBpB,GAAA,MAAAA,EAAaoC,GAEblC,GAAA,MAAAA,EAAUkC,EACX,CACD,GACD,CAAG,EACD,EAAE,EAGJpD,EAAAA,IAACR,EAAkB,SAAlB,CAA2B,MAAO6D,EAClC,SAAArD,MAAC,MAAA,CAAI,UAAU,iBACb,SAAAF,EAAM,QAAUD,EAAQ,OACtB0D,EAAM,cACN1D,EAAQ,OACR,CACC,QAAS2D,GAAAL,GAAA9C,EAAAP,EAAM,SAAN,YAAAO,EAAc,QAAd,YAAA8C,EAAsB,KAAtB,YAAAK,EAAqC,OAC9C,MAAMC,EAAA3D,EAAM,SAAN,YAAA2D,EAAc,KACpB,IAAK,MAAA,EAENzD,EAAAA,IAACL,EAAA,CAAkB,QAAO+D,EAAA5D,EAAM,SAAN,YAAA4D,EAAc,QAAS,GAAI,QAAA7D,EAAkB,MAAAC,EAAc,gBAAAC,CAAA,CAAkC,CAAA,EAEvHF,EAAQ,QACP0D,EAAM,cAAc1D,EAAQ,OAAO,EACnC,IAAA,CACL,EACD,CAEF"}
|
package/dist/LoginRenderer.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export declare const StyLoginRenderer: React.FC<{
|
|
|
8
8
|
sessionId?: string | null;
|
|
9
9
|
onLogin?: (claims?: IdTokenClaims | null) => void;
|
|
10
10
|
onFallback?: (error: FallbackError) => void;
|
|
11
|
+
onClose?: () => void;
|
|
11
12
|
onError?: (error: any) => void;
|
|
12
13
|
onGlobalMessage?: (message: string) => void;
|
|
13
14
|
onBlockReady?: ({ previousState, state }: {
|
package/dist/LoginRenderer.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as w,Fragment as
|
|
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={},F=({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(F,{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),[H,R]=b(!1),[T,v]=b({}),[M,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]),P=S(()=>{d==null||d()},[d]),q=S((o,e,s)=>{j[o]={...j[o],[e]:s===""?null:s},v(i=>({...i,[o]:{...i[o]||{},[e]:s===""?null:s}}))},[]),J=S((o,e,s)=>{C(i=>({...i,[o]:{...i[o]||{},[e]:s}}))},[]),K=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:H,forms:T,messages:M,state:t,submitForm:K,triggerFallback:O,triggerClose:P,setFormValue:q,setMessage:J};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(F,{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};
|
|
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);\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\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, 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 setFormValue = useCallback((formId: string, widgetId: string, value: unknown) => {\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(forms[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, onError, onGlobalMessage, onBlockReady],\n\t);\n\n\t// Provide context value\n\tconst contextValue: NativeFlowContextValue = {\n\t\tloading,\n\t\tforms,\n\t\tmessages,\n\t\tstate,\n\t\tsubmitForm,\n\t\ttriggerFallback,\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","StyWidgetRenderer","items","widgets","state","triggerFallback","jsx","Fragment","item","idx","form","_a","f","widget","w","WidgetComponent","LayoutComponent","StyLoginRenderer","props","params","sessionId","onLogin","onFallback","onError","onGlobalMessage","onBlockReady","sdk","useStrivacity","loginHandlerRef","useRef","loading","setLoading","useState","forms","setforms","messages","setmessages","setState","useCallback","hostedUrl","url","FallbackError","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","_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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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("@strivacity/sdk-core"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("@strivacity/sdk-core"),i=require("@strivacity/sdk-core/utils/HttpClient"),n=require("@strivacity/sdk-core/storages/LocalStorage"),a=require("@strivacity/sdk-core/storages/SessionStorage"),r=require("@strivacity/sdk-core/utils/credentials"),u=require("./composables.cjs"),c=require("./AuthProvider.cjs"),o=require("./LoginRenderer.cjs");require("react");require("react/jsx-runtime");require("@strivacity/sdk-core/utils/object");Object.defineProperty(exports,"HttpClient",{enumerable:!0,get:()=>i.HttpClient});Object.defineProperty(exports,"LocalStorage",{enumerable:!0,get:()=>n.LocalStorage});Object.defineProperty(exports,"SessionStorage",{enumerable:!0,get:()=>a.SessionStorage});Object.defineProperty(exports,"createCredential",{enumerable:!0,get:()=>r.createCredential});Object.defineProperty(exports,"getCredential",{enumerable:!0,get:()=>r.getCredential});exports.useStrivacity=u.useStrivacity;exports.StyAuthProvider=c.StyAuthProvider;exports.NativeFlowContext=o.NativeFlowContext;exports.StyLoginRenderer=o.StyLoginRenderer;Object.keys(t).forEach(e=>{e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:()=>t[e]})});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export type { NativeFlow } from '@strivacity/sdk-core/flows/NativeFlow';
|
|
|
6
6
|
export { HttpClient } from '@strivacity/sdk-core/utils/HttpClient';
|
|
7
7
|
export { LocalStorage } from '@strivacity/sdk-core/storages/LocalStorage';
|
|
8
8
|
export { SessionStorage } from '@strivacity/sdk-core/storages/SessionStorage';
|
|
9
|
+
export { createCredential, getCredential } from '@strivacity/sdk-core/utils/credentials';
|
|
9
10
|
export { useStrivacity } from './composables';
|
|
10
11
|
export { StyAuthProvider } from './AuthProvider';
|
|
11
12
|
export { StyLoginRenderer, NativeFlowContext } from './LoginRenderer';
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export*from"@strivacity/sdk-core";import{HttpClient as m}from"@strivacity/sdk-core/utils/HttpClient";import{LocalStorage as
|
|
1
|
+
export*from"@strivacity/sdk-core";import{HttpClient as m}from"@strivacity/sdk-core/utils/HttpClient";import{LocalStorage as a}from"@strivacity/sdk-core/storages/LocalStorage";import{SessionStorage as n}from"@strivacity/sdk-core/storages/SessionStorage";import{createCredential as l,getCredential as d}from"@strivacity/sdk-core/utils/credentials";import{useStrivacity as C}from"./composables.mjs";import{StyAuthProvider as s}from"./AuthProvider.mjs";import{NativeFlowContext as y,StyLoginRenderer as u}from"./LoginRenderer.mjs";import"react";import"react/jsx-runtime";import"@strivacity/sdk-core/utils/object";export{m as HttpClient,a as LocalStorage,y as NativeFlowContext,n as SessionStorage,s as StyAuthProvider,u as StyLoginRenderer,l as createCredential,d as getCredential,C as useStrivacity};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/types.d.ts
CHANGED
|
@@ -56,6 +56,10 @@ export type PopupSDK = {
|
|
|
56
56
|
* Registers a new user.
|
|
57
57
|
*/
|
|
58
58
|
register: InstanceType<typeof PopupFlow>['register'];
|
|
59
|
+
/**
|
|
60
|
+
* Initiates the entry process.
|
|
61
|
+
*/
|
|
62
|
+
entry: InstanceType<typeof PopupFlow>['entry'];
|
|
59
63
|
/**
|
|
60
64
|
* Refreshes the user's session.
|
|
61
65
|
*/
|
|
@@ -89,6 +93,10 @@ export type RedirectSDK = {
|
|
|
89
93
|
* Registers a new user.
|
|
90
94
|
*/
|
|
91
95
|
register: InstanceType<typeof RedirectFlow>['register'];
|
|
96
|
+
/**
|
|
97
|
+
* Initiates the entry process.
|
|
98
|
+
*/
|
|
99
|
+
entry: InstanceType<typeof RedirectFlow>['entry'];
|
|
92
100
|
/**
|
|
93
101
|
* Refreshes the user's session.
|
|
94
102
|
*/
|
|
@@ -122,6 +130,10 @@ export type NativeSDK = {
|
|
|
122
130
|
* Registers a new user.
|
|
123
131
|
*/
|
|
124
132
|
register: InstanceType<typeof NativeFlow>['register'];
|
|
133
|
+
/**
|
|
134
|
+
* Initiates the entry process.
|
|
135
|
+
*/
|
|
136
|
+
entry: InstanceType<typeof NativeFlow>['entry'];
|
|
125
137
|
/**
|
|
126
138
|
* Refreshes the user's session.
|
|
127
139
|
*/
|
|
@@ -158,6 +170,7 @@ export type NativeFlowContextValue = {
|
|
|
158
170
|
state: Partial<LoginFlowState>;
|
|
159
171
|
submitForm: (formId: string) => Promise<void>;
|
|
160
172
|
triggerFallback: (hostedUrl?: string) => void;
|
|
173
|
+
triggerClose: () => void;
|
|
161
174
|
setFormValue: (formId: string, widgetId: string, value: unknown) => void;
|
|
162
175
|
setMessage: (formId: string, widgetId: string, value: LoginFlowMessage) => void;
|
|
163
176
|
};
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strivacity/sdk-remix",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Strivacity Remix SDK client",
|
|
7
|
-
"author": "strivacity <
|
|
7
|
+
"author": "strivacity <opensource@strivacity.com>",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@strivacity/sdk-core": "2.
|
|
9
|
+
"@strivacity/sdk-core": "2.1.0"
|
|
10
10
|
},
|
|
11
11
|
"peerDependencies": {
|
|
12
12
|
"react": ">=18"
|