@strivacity/sdk-remix 2.0.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,32 @@
1
+ ## 2.1.1 (2025-11-19)
2
+
3
+ ### 🩹 Fixes
4
+
5
+ - type module removed from package.json files ([9b2fb1f](https://github.com/Strivacity/sdk-js/commit/9b2fb1f))
6
+
7
+ ### 🧱 Updated Dependencies
8
+
9
+ - Updated sdk-core to 2.1.1
10
+
11
+ ## 2.1.0 (2025-11-10)
12
+
13
+ ### 🚀 Features
14
+
15
+ - extract side-effect from AuthProvider ([0c726f9](https://github.com/Strivacity/sdk-js/commit/0c726f9))
16
+ - webauthn support added ([f1b0fc4](https://github.com/Strivacity/sdk-js/commit/f1b0fc4))
17
+ - entry url added ([808bf81](https://github.com/Strivacity/sdk-js/commit/808bf81))
18
+ - nextjs headless example app added ([0c1dafa](https://github.com/Strivacity/sdk-js/commit/0c1dafa))
19
+
20
+ ### 🩹 Fixes
21
+
22
+ - react based framework AuthProvider minor fixes ([bace37d](https://github.com/Strivacity/sdk-js/commit/bace37d))
23
+ - async flow initialization updated ([477df9f](https://github.com/Strivacity/sdk-js/commit/477df9f))
24
+ - react based framework formData calculation fixed ([d4ef6b5](https://github.com/Strivacity/sdk-js/commit/d4ef6b5))
25
+
26
+ ### 🧱 Updated Dependencies
27
+
28
+ - Updated sdk-core to 2.1.0
29
+
1
30
  # 2.0.0 (2025-09-10)
2
31
 
3
32
  ### 🩹 Fixes
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 Strivacity Inc. <info@strivacity.com>
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() {
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("react/jsx-runtime"),n=require("react"),y=require("@strivacity/sdk-core"),m=require("./composables.cjs");let e;const A=({options:a,children:k=void 0})=>{const[i,T]=n.useState(!0),[o,b]=n.useState(!1),[r,v]=n.useState(null),[c,g]=n.useState(null),[u,f]=n.useState(null),[l,h]=n.useState(!0),[d,w]=n.useState(null),t=async()=>{b(await e.isAuthenticated),v(e.idTokenClaims||null),g(e.accessToken||null),f(e.refreshToken||null),h(e.accessTokenExpired),w(e.accessTokenExpirationDate||null),i&&T(!1)},E=n.useMemo(()=>(e||(e=y.initFlow(a),e.subscribeToEvent("init",t),e.subscribeToEvent("loggedIn",t),e.subscribeToEvent("sessionLoaded",t),e.subscribeToEvent("tokenRefreshed",t),e.subscribeToEvent("tokenRefreshFailed",t),e.subscribeToEvent("logoutInitiated",t),e.subscribeToEvent("tokenRevoked",t),e.subscribeToEvent("tokenRevokeFailed",t)),{sdk:e,loading:i,options:a,isAuthenticated:o,idTokenClaims:r,accessToken:c,refreshToken:u,accessTokenExpired:l,accessTokenExpirationDate:d,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()},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,r,c,u,l,d,o]);return S.jsx(m.STRIVACITY_SDK.Provider,{value:E,children:k})};exports.StyAuthProvider=A;
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\t// @ts-expect-error: Ignore SDK type mismatch for initFlow\n\tconst value = useMemo<PopupContext | RedirectContext | NativeContext>(() => {\n\t\tif (!sdk) {\n\t\t\tsdk = initFlow(options);\n\n\t\t\tsdk.subscribeToEvent('init', updateSession);\n\t\t\tsdk.subscribeToEvent('loggedIn', updateSession);\n\t\t\tsdk.subscribeToEvent('sessionLoaded', updateSession);\n\t\t\tsdk.subscribeToEvent('tokenRefreshed', updateSession);\n\t\t\tsdk.subscribeToEvent('tokenRefreshFailed', updateSession);\n\t\t\tsdk.subscribeToEvent('logoutInitiated', updateSession);\n\t\t\tsdk.subscribeToEvent('tokenRevoked', updateSession);\n\t\t\tsdk.subscribeToEvent('tokenRevokeFailed', updateSession);\n\t\t}\n\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\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","updateSession","value","useMemo","initFlow","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,EAExFa,EAAgB,SAAY,CACjCX,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,CACjB,EAIKe,EAAQC,EAAAA,QAAwD,KAChErB,IACJA,EAAMsB,EAAAA,SAASpB,CAAO,EAEtBF,EAAI,iBAAiB,OAAQmB,CAAa,EAC1CnB,EAAI,iBAAiB,WAAYmB,CAAa,EAC9CnB,EAAI,iBAAiB,gBAAiBmB,CAAa,EACnDnB,EAAI,iBAAiB,iBAAkBmB,CAAa,EACpDnB,EAAI,iBAAiB,qBAAsBmB,CAAa,EACxDnB,EAAI,iBAAiB,kBAAmBmB,CAAa,EACrDnB,EAAI,iBAAiB,eAAgBmB,CAAa,EAClDnB,EAAI,iBAAiB,oBAAqBmB,CAAa,GAGjD,CACN,IAAAnB,EACA,QAAAI,EACA,QAAAF,EACA,gBAAAK,EACA,cAAAE,EACA,YAAAE,EACA,aAAAE,EACA,mBAAAE,EACA,0BAAAE,EAEA,MAAO,MAAOf,GAA8F,CAC3G,GAAIF,EAAI,QAAQ,OAAS,SACxB,OAAOA,EAAI,MAAME,CAAO,EAGzB,MAAMF,EAAI,MAAME,CAAO,EACvB,MAAMiB,EAAA,CAAc,EAErB,SAAU,MAAOjB,GAAuG,CACvH,GAAIF,EAAI,QAAQ,OAAS,SACxB,OAAOA,EAAI,SAASE,CAAO,EAG5B,MAAMF,EAAI,SAASE,CAAO,EAC1B,MAAMiB,EAAA,CAAc,EAErB,QAAS,SAAY,CACpB,MAAMnB,EAAI,QAAA,EACV,MAAMmB,EAAA,CAAc,EAErB,OAAQ,SAAY,CACnB,MAAMnB,EAAI,OAAA,EACV,MAAMmB,EAAA,CAAc,EAErB,OAAQ,MAAOjB,GAA0E,CACxF,MAAMF,EAAI,OAAOE,CAAO,EACxB,MAAMiB,EAAA,CAAc,EAErB,eAAgB,MAAOI,GAAqH,CAC3I,MAAMvB,EAAI,eAAeuB,CAAG,EAC5B,MAAMJ,EAAA,CAAc,CACrB,GAEC,CAACnB,EAAKI,EAASF,EAASO,EAAeE,EAAaE,EAAcE,EAAoBE,EAA2BV,CAAe,CAAC,EAEpI,OAAOiB,EAAAA,IAACC,EAAAA,eAAe,SAAf,CAAwB,MAAAL,EAAe,SAAAjB,CAAA,CAAS,CACzD"}
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,2 +1,2 @@
1
- import{jsx as h}from"react/jsx-runtime";import{useState as n,useMemo as p}from"react";import{initFlow as x}from"@strivacity/sdk-core";import{STRIVACITY_SDK as y}from"./composables.mjs";let e;const S=({options:o,children:k=void 0})=>{const[a,T]=n(!0),[i,b]=n(!1),[r,v]=n(null),[c,f]=n(null),[l,m]=n(null),[u,w]=n(!0),[d,E]=n(null),t=async()=>{b(await e.isAuthenticated),v(e.idTokenClaims||null),f(e.accessToken||null),m(e.refreshToken||null),w(e.accessTokenExpired),E(e.accessTokenExpirationDate||null),a&&T(!1)},g=p(()=>(e||(e=x(o),e.subscribeToEvent("init",t),e.subscribeToEvent("loggedIn",t),e.subscribeToEvent("sessionLoaded",t),e.subscribeToEvent("tokenRefreshed",t),e.subscribeToEvent("tokenRefreshFailed",t),e.subscribeToEvent("logoutInitiated",t),e.subscribeToEvent("tokenRevoked",t),e.subscribeToEvent("tokenRevokeFailed",t)),{sdk:e,loading:a,options:o,isAuthenticated:i,idTokenClaims:r,accessToken:c,refreshToken:l,accessTokenExpired:u,accessTokenExpirationDate:d,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()},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,a,o,r,c,l,u,d,i]);return h(y.Provider,{value:g,children:k})};export{S as StyAuthProvider};
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\t// @ts-expect-error: Ignore SDK type mismatch for initFlow\n\tconst value = useMemo<PopupContext | RedirectContext | NativeContext>(() => {\n\t\tif (!sdk) {\n\t\t\tsdk = initFlow(options);\n\n\t\t\tsdk.subscribeToEvent('init', updateSession);\n\t\t\tsdk.subscribeToEvent('loggedIn', updateSession);\n\t\t\tsdk.subscribeToEvent('sessionLoaded', updateSession);\n\t\t\tsdk.subscribeToEvent('tokenRefreshed', updateSession);\n\t\t\tsdk.subscribeToEvent('tokenRefreshFailed', updateSession);\n\t\t\tsdk.subscribeToEvent('logoutInitiated', updateSession);\n\t\t\tsdk.subscribeToEvent('tokenRevoked', updateSession);\n\t\t\tsdk.subscribeToEvent('tokenRevokeFailed', updateSession);\n\t\t}\n\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\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","updateSession","value","useMemo","initFlow","url","jsx","STRIVACITY_SDK"],"mappings":"yLAUA,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,EAExFa,EAAgB,SAAY,CACjCX,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,CACjB,EAIKe,EAAQC,EAAwD,KAChErB,IACJA,EAAMsB,EAASpB,CAAO,EAEtBF,EAAI,iBAAiB,OAAQmB,CAAa,EAC1CnB,EAAI,iBAAiB,WAAYmB,CAAa,EAC9CnB,EAAI,iBAAiB,gBAAiBmB,CAAa,EACnDnB,EAAI,iBAAiB,iBAAkBmB,CAAa,EACpDnB,EAAI,iBAAiB,qBAAsBmB,CAAa,EACxDnB,EAAI,iBAAiB,kBAAmBmB,CAAa,EACrDnB,EAAI,iBAAiB,eAAgBmB,CAAa,EAClDnB,EAAI,iBAAiB,oBAAqBmB,CAAa,GAGjD,CACN,IAAAnB,EACA,QAAAI,EACA,QAAAF,EACA,gBAAAK,EACA,cAAAE,EACA,YAAAE,EACA,aAAAE,EACA,mBAAAE,EACA,0BAAAE,EAEA,MAAO,MAAOf,GAA8F,CAC3G,GAAIF,EAAI,QAAQ,OAAS,SACxB,OAAOA,EAAI,MAAME,CAAO,EAGzB,MAAMF,EAAI,MAAME,CAAO,EACvB,MAAMiB,EAAA,CAAc,EAErB,SAAU,MAAOjB,GAAuG,CACvH,GAAIF,EAAI,QAAQ,OAAS,SACxB,OAAOA,EAAI,SAASE,CAAO,EAG5B,MAAMF,EAAI,SAASE,CAAO,EAC1B,MAAMiB,EAAA,CAAc,EAErB,QAAS,SAAY,CACpB,MAAMnB,EAAI,QAAA,EACV,MAAMmB,EAAA,CAAc,EAErB,OAAQ,SAAY,CACnB,MAAMnB,EAAI,OAAA,EACV,MAAMmB,EAAA,CAAc,EAErB,OAAQ,MAAOjB,GAA0E,CACxF,MAAMF,EAAI,OAAOE,CAAO,EACxB,MAAMiB,EAAA,CAAc,EAErB,eAAgB,MAAOI,GAAqH,CAC3I,MAAMvB,EAAI,eAAeuB,CAAG,EAC5B,MAAMJ,EAAA,CAAc,CACrB,GAEC,CAACnB,EAAKI,EAASF,EAASO,EAAeE,EAAaE,EAAcE,EAAoBE,EAA2BV,CAAe,CAAC,EAEpI,OAAOiB,EAACC,EAAe,SAAf,CAAwB,MAAAL,EAAe,SAAAjB,CAAA,CAAS,CACzD"}
1
+ {"version":3,"file":"AuthProvider.mjs","sources":["../src/AuthProvider.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useMemo, useState, useRef, useEffect } from 'react';\nimport { initFlow } from '@strivacity/sdk-core';\nimport type { SDKOptions, IdTokenClaims } from '@strivacity/sdk-core';\nimport type { PopupFlow } from '@strivacity/sdk-core/flows/PopupFlow';\nimport type { RedirectFlow } from '@strivacity/sdk-core/flows/RedirectFlow';\nimport type { NativeFlow } from '@strivacity/sdk-core/flows/NativeFlow';\nimport type { PopupContext, RedirectContext, NativeContext, Children } from './types';\nimport { STRIVACITY_SDK } from './composables';\n\nlet sdk: RedirectFlow | PopupFlow | NativeFlow;\n\nexport const StyAuthProvider: FC<{ options: SDKOptions; children?: Children }> = ({\n\toptions,\n\tchildren = undefined,\n}: {\n\toptions: SDKOptions;\n\tchildren?: Children;\n}) => {\n\tconst [loading, setLoading] = useState<boolean>(true);\n\tconst [isAuthenticated, setIsAuthenticated] = useState<boolean>(false);\n\tconst [idTokenClaims, setIdTokenClaims] = useState<IdTokenClaims | null>(null);\n\tconst [accessToken, setAccessToken] = useState<string | null>(null);\n\tconst [refreshToken, setRefreshToken] = useState<string | null>(null);\n\tconst [accessTokenExpired, setAccessTokenExpired] = useState<boolean>(true);\n\tconst [accessTokenExpirationDate, setAccessTokenExpirationDate] = useState<number | null>(null);\n\tconst events = useRef<{ dispose: () => void }[]>([]);\n\n\tconst updateSession = async () => {\n\t\tsetIsAuthenticated(await sdk.isAuthenticated);\n\t\tsetIdTokenClaims(sdk.idTokenClaims || null);\n\t\tsetAccessToken(sdk.accessToken || null);\n\t\tsetRefreshToken(sdk.refreshToken || null);\n\t\tsetAccessTokenExpired(sdk.accessTokenExpired);\n\t\tsetAccessTokenExpirationDate(sdk.accessTokenExpirationDate || null);\n\n\t\tif (loading) {\n\t\t\tsetLoading(false);\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tif (!sdk) {\n\t\t\tsdk = initFlow(options);\n\n\t\t\tevents.current.push(sdk.subscribeToEvent('init', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('loggedIn', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('sessionLoaded', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('tokenRefreshed', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('tokenRefreshFailed', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('logoutInitiated', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('tokenRevoked', updateSession));\n\t\t\tevents.current.push(sdk.subscribeToEvent('tokenRevokeFailed', updateSession));\n\t\t}\n\n\t\treturn () => {\n\t\t\tevents.current.forEach((event) => event.dispose());\n\t\t\tevents.current = [];\n\t\t};\n\t}, [options]);\n\n\t// @ts-expect-error: Ignore SDK type mismatch for initFlow\n\tconst value = useMemo<PopupContext | RedirectContext | NativeContext>(() => {\n\t\treturn {\n\t\t\tsdk,\n\t\t\tloading,\n\t\t\toptions,\n\t\t\tisAuthenticated,\n\t\t\tidTokenClaims,\n\t\t\taccessToken,\n\t\t\trefreshToken,\n\t\t\taccessTokenExpired,\n\t\t\taccessTokenExpirationDate,\n\n\t\t\tlogin: async (options?: Parameters<PopupFlow['login'] | RedirectFlow['login'] | NativeFlow['login']>[0]) => {\n\t\t\t\tif (sdk.options.mode === 'native') {\n\t\t\t\t\treturn sdk.login(options);\n\t\t\t\t}\n\n\t\t\t\tawait sdk.login(options);\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\tregister: async (options?: Parameters<PopupFlow['register'] | RedirectFlow['register'] | NativeFlow['register']>[0]) => {\n\t\t\t\tif (sdk.options.mode === 'native') {\n\t\t\t\t\treturn sdk.register(options);\n\t\t\t\t}\n\n\t\t\t\tawait sdk.register(options);\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\trefresh: async () => {\n\t\t\t\tawait sdk.refresh();\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\tentry: async (url?: string) => {\n\t\t\t\treturn await sdk.entry(url);\n\t\t\t},\n\t\t\trevoke: async () => {\n\t\t\t\tawait sdk.revoke();\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\tlogout: async (options?: Parameters<PopupFlow['logout'] | RedirectFlow['logout']>[0]) => {\n\t\t\t\tawait sdk.logout(options);\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t\thandleCallback: async (url?: Parameters<PopupFlow['handleCallback'] | RedirectFlow['handleCallback'] | NativeFlow['handleCallback']>[0]) => {\n\t\t\t\tawait sdk.handleCallback(url);\n\t\t\t\tawait updateSession();\n\t\t\t},\n\t\t};\n\t}, [sdk, loading, options, idTokenClaims, accessToken, refreshToken, accessTokenExpired, accessTokenExpirationDate, isAuthenticated]);\n\n\treturn <STRIVACITY_SDK.Provider value={value}>{children}</STRIVACITY_SDK.Provider>;\n};\n"],"names":["sdk","StyAuthProvider","options","children","loading","setLoading","useState","isAuthenticated","setIsAuthenticated","idTokenClaims","setIdTokenClaims","accessToken","setAccessToken","refreshToken","setRefreshToken","accessTokenExpired","setAccessTokenExpired","accessTokenExpirationDate","setAccessTokenExpirationDate","events","useRef","updateSession","useEffect","initFlow","event","value","useMemo","url","jsx","STRIVACITY_SDK"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("react/jsx-runtime"),u=require("react"),v=require("@strivacity/sdk-core"),D=require("@strivacity/sdk-core/utils/object"),J=require("./composables.cjs"),k=u.createContext(null),A=({items:U,widgets:C,state:y,triggerFallback:w})=>h.jsx(h.Fragment,{children:U.map((n,l)=>{var g;if(n.type==="widget"){const r=(g=y.forms)==null?void 0:g.find(b=>b.id===n.formId),f=r==null?void 0:r.widgets.find(b=>b.id===n.widgetId);if(!r||!f)return w(),null;const d=C[f.type];return d?h.jsx(d,{formId:r.id,config:f},`${r.id}.${f.id}`):(w(),null)}else if(n.type==="vertical"||n.type==="horizontal"){const r=C.layout;return r?h.jsx(r,{formId:n.items[0].formId,type:n.type,children:h.jsx(A,{items:n.items,widgets:C,state:y,triggerFallback:w})},l):(w(),null)}else return w(),null})}),K=U=>{var q,T,N,O,L;const{params:C,widgets:y,sessionId:w,onLogin:n,onFallback:l,onError:g,onGlobalMessage:r,onBlockReady:f}={params:{},widgets:{},sessionId:null,...U},{sdk:d}=J.useStrivacity(),b=u.useRef(null),[I,z]=u.useState(!1),[x,j]=u.useState({}),[P,S]=u.useState({}),[t,E]=u.useState({}),R=u.useCallback(c=>{const e=c||t.hostedUrl;if(!e)throw new Error("No hosted URL provided");l==null||l(new v.FallbackError(new URL(e)))},[t,l]),V=u.useCallback((c,e,s)=>{j(o=>({...o,[c]:{...o[c]||{},[e]:s===""?null:s}}))},[]),W=u.useCallback((c,e,s)=>{S(o=>({...o,[c]:{...o[c]||{},[e]:s}}))},[]),$=u.useCallback(async c=>{var e;try{z(!0);const s=await((e=b.current)==null?void 0:e.submitForm(c,D.unflattenObject(x[c])));if(await d.isAuthenticated)n==null||n(d.idTokenClaims);else{const o=structuredClone(t),i={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(i.screen!==t.screen){const m={},a={};for(const p of i.forms??[])m[p.id]={},a[p.id]={};j(m),S(a)}Object.keys(i.messages??{}).forEach(m=>{var a,p;m==="global"?r==null||r(((p=(a=i.messages)==null?void 0:a.global)==null?void 0:p.text)??""):S(H=>({...H,[m]:i.messages[m]}))}),E(i),z(!1),setTimeout(()=>{f==null||f({previousState:o,state:structuredClone(i)})},1)}}catch(s){console.error("Error submitting form:",s),s instanceof v.FallbackError?l==null||l(s):g==null||g(s)}},[d,C,x,t,n,l,g,r,f]),F={loading:I,forms:x,messages:P,state:t,submitForm:$,triggerFallback:R,setFormValue:V,setMessage:W};return u.useEffect(()=>{b.current=d.login(C),(async()=>{var c;try{const e=await((c=b.current)==null?void 0:c.startSession(w)),s=structuredClone(t),o={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(o.screen!==t.screen){const i={},m={};for(const a of o.forms??[])i[a.id]={},m[a.id]={};j(i),S(m)}Object.keys(o.messages??{}).forEach(i=>{var m,a;i==="global"?r==null||r(((a=(m=o.messages)==null?void 0:m.global)==null?void 0:a.text)??""):S(p=>({...p,[i]:o.messages[i]}))}),E(o),setTimeout(()=>{f==null||f({previousState:s,state:structuredClone(o)})},1)}}catch(e){e instanceof v.FallbackError?l==null||l(e):g==null||g(e)}})()},[]),h.jsx(k.Provider,{value:F,children:h.jsx("div",{className:"login-renderer",children:t.screen&&y.layout?u.createElement(y.layout,{formId:(N=(T=(q=t.layout)==null?void 0:q.items)==null?void 0:T[0])==null?void 0:N.formId,type:(O=t.layout)==null?void 0:O.type,tag:"form"},h.jsx(A,{items:((L=t.layout)==null?void 0:L.items)??[],widgets:y,state:t,triggerFallback:R})):y.loading?u.createElement(y.loading):null})})};exports.NativeFlowContext=k;exports.StyLoginRenderer=K;
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":"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"}
@@ -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 }: {
@@ -1,2 +1,2 @@
1
- import{jsx as w,Fragment as Q}from"react/jsx-runtime";import V,{createContext as X,useRef as Y,useState as S,useCallback as b,useEffect as Z}from"react";import{FallbackError as E}from"@strivacity/sdk-core";import{unflattenObject as _}from"@strivacity/sdk-core/utils/object";import{useStrivacity as F}from"./composables.mjs";const M=X(null),W=({items:v,widgets:U,state:a,triggerFallback:y})=>w(Q,{children:v.map((n,l)=>{var g;if(n.type==="widget"){const r=(g=a.forms)==null?void 0:g.find(h=>h.id===n.formId),u=r==null?void 0:r.widgets.find(h=>h.id===n.widgetId);if(!r||!u)return y(),null;const d=U[u.type];return d?w(d,{formId:r.id,config:u},`${r.id}.${u.id}`):(y(),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(W,{items:n.items,widgets:U,state:a,triggerFallback:y})},l):(y(),null)}else return y(),null})}),te=v=>{var N,O,A,I,L;const{params:U,widgets:a,sessionId:y,onLogin:n,onFallback:l,onError:g,onGlobalMessage:r,onBlockReady:u}={params:{},widgets:{},sessionId:null,...v},{sdk:d}=F(),h=Y(null),[$,j]=S(!1),[x,z]=S({}),[H,C]=S({}),[t,R]=S({}),T=b(c=>{const e=c||t.hostedUrl;if(!e)throw new Error("No hosted URL provided");l==null||l(new E(new URL(e)))},[t,l]),P=b((c,e,s)=>{z(o=>({...o,[c]:{...o[c]||{},[e]:s===""?null:s}}))},[]),q=b((c,e,s)=>{C(o=>({...o,[c]:{...o[c]||{},[e]:s}}))},[]),D=b(async c=>{var e;try{j(!0);const s=await((e=h.current)==null?void 0:e.submitForm(c,_(x[c])));if(await d.isAuthenticated)n==null||n(d.idTokenClaims);else{const o=structuredClone(t),i={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(i.screen!==t.screen){const m={},f={};for(const p of i.forms??[])m[p.id]={},f[p.id]={};z(m),C(f)}Object.keys(i.messages??{}).forEach(m=>{var f,p;m==="global"?r==null||r(((p=(f=i.messages)==null?void 0:f.global)==null?void 0:p.text)??""):C(K=>({...K,[m]:i.messages[m]}))}),R(i),j(!1),setTimeout(()=>{u==null||u({previousState:o,state:structuredClone(i)})},1)}}catch(s){console.error("Error submitting form:",s),s instanceof E?l==null||l(s):g==null||g(s)}},[d,U,x,t,n,l,g,r,u]),J={loading:$,forms:x,messages:H,state:t,submitForm:D,triggerFallback:T,setFormValue:P,setMessage:q};return Z(()=>{h.current=d.login(U),(async()=>{var c;try{const e=await((c=h.current)==null?void 0:c.startSession(y)),s=structuredClone(t),o={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(o.screen!==t.screen){const i={},m={};for(const f of o.forms??[])i[f.id]={},m[f.id]={};z(i),C(m)}Object.keys(o.messages??{}).forEach(i=>{var m,f;i==="global"?r==null||r(((f=(m=o.messages)==null?void 0:m.global)==null?void 0:f.text)??""):C(p=>({...p,[i]:o.messages[i]}))}),R(o),setTimeout(()=>{u==null||u({previousState:s,state:structuredClone(o)})},1)}}catch(e){e instanceof E?l==null||l(e):g==null||g(e)}})()},[]),w(M.Provider,{value:J,children:w("div",{className:"login-renderer",children:t.screen&&a.layout?V.createElement(a.layout,{formId:(A=(O=(N=t.layout)==null?void 0:N.items)==null?void 0:O[0])==null?void 0:A.formId,type:(I=t.layout)==null?void 0:I.type,tag:"form"},w(W,{items:((L=t.layout)==null?void 0:L.items)??[],widgets:a,state:t,triggerFallback:T})):a.loading?V.createElement(a.loading):null})})};export{M as NativeFlowContext,te as StyLoginRenderer};
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"),o=require("@strivacity/sdk-core/utils/HttpClient"),i=require("@strivacity/sdk-core/storages/LocalStorage"),n=require("@strivacity/sdk-core/storages/SessionStorage"),u=require("./composables.cjs"),a=require("./AuthProvider.cjs"),r=require("./LoginRenderer.cjs");require("react");require("react/jsx-runtime");require("@strivacity/sdk-core/utils/object");Object.defineProperty(exports,"HttpClient",{enumerable:!0,get:()=>o.HttpClient});Object.defineProperty(exports,"LocalStorage",{enumerable:!0,get:()=>i.LocalStorage});Object.defineProperty(exports,"SessionStorage",{enumerable:!0,get:()=>n.SessionStorage});exports.useStrivacity=u.useStrivacity;exports.StyAuthProvider=a.StyAuthProvider;exports.NativeFlowContext=r.NativeFlowContext;exports.StyLoginRenderer=r.StyLoginRenderer;Object.keys(t).forEach(e=>{e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:()=>t[e]})});
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 f}from"@strivacity/sdk-core/storages/LocalStorage";import{SessionStorage as a}from"@strivacity/sdk-core/storages/SessionStorage";import{useStrivacity as g}from"./composables.mjs";import{StyAuthProvider as s}from"./AuthProvider.mjs";import{NativeFlowContext as y,StyLoginRenderer as c}from"./LoginRenderer.mjs";import"react";import"react/jsx-runtime";import"@strivacity/sdk-core/utils/object";export{m as HttpClient,f as LocalStorage,y as NativeFlowContext,a as SessionStorage,s as StyAuthProvider,c as StyLoginRenderer,g as useStrivacity};
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,11 @@
1
1
  {
2
2
  "name": "@strivacity/sdk-remix",
3
- "version": "2.0.0",
4
- "type": "module",
3
+ "version": "2.1.1",
5
4
  "license": "MIT",
6
5
  "description": "Strivacity Remix SDK client",
7
- "author": "strivacity <info@strivacity.com>",
6
+ "author": "strivacity <opensource@strivacity.com>",
8
7
  "dependencies": {
9
- "@strivacity/sdk-core": "2.0.0"
8
+ "@strivacity/sdk-core": "2.1.1"
10
9
  },
11
10
  "peerDependencies": {
12
11
  "react": ">=18"