@openfort/react 0.0.2 → 0.0.3

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/README.md CHANGED
@@ -10,22 +10,18 @@
10
10
  Documentation
11
11
  </a>
12
12
  <span> | </span>
13
- <a href="https://www.openfort.io/docs/reference/api/authentication">
14
- API Docs
15
- </a>
16
- <span> | </span>
17
13
  <a href="https://x.com/openfort_hq">
18
14
  X
19
15
  </a>
20
- <span> | </span>
21
- <a href="https://create-next-app.openfort.xyz/">
16
+ <span> | </span>
17
+ <a href="https://playground.openfort.io/">
22
18
  Demo
23
19
  </a>
24
20
  </h4>
25
21
  </div>
26
22
 
27
23
 
28
- # Openfort Kit
24
+ # Openfort React SDK
29
25
 
30
26
  [![Downloads](https://img.shields.io/npm/dm/@openfort/react.svg)](https://www.npmjs.com/package/@openfort/react)
31
27
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
@@ -53,24 +49,24 @@ Get started with `create` Openfortkit + [wagmi](https://wagmi.sh/) + [viem](http
53
49
  #### npm
54
50
 
55
51
  ```sh
56
- npx create openfortkit
52
+ npx create openfort
57
53
  ```
58
54
 
59
55
  #### yarn
60
56
 
61
57
  ```sh
62
- yarn create openfortkit
58
+ yarn create openfort
63
59
  ```
64
60
 
65
61
  #### pnpm
66
62
 
67
63
  ```sh
68
- pnpm create openfortkit
64
+ pnpm create openfort
69
65
  ```
70
66
 
71
- ### Import `OpenfortKit` to your project
67
+ ### Import `Openfort` to your project
72
68
 
73
- Add OpenfortKit to your already existing project.
69
+ Add Openfort to your already existing project.
74
70
 
75
71
  #### npm
76
72
 
@@ -90,25 +86,21 @@ yarn add @openfort/react @tanstack/react-query wagmi viem
90
86
  pnpm add @openfort/react @tanstack/react-query wagmi viem
91
87
  ```
92
88
 
93
- ## Documentation
94
-
95
- You can find the full OpenfortKit documentation in the Family docs [here]().
96
-
97
89
  ## Examples
98
90
 
99
- There are various runnable examples included in this repository in the [examples folder](https://github.com/openfort-xyz/openfort-kit/tree/main/examples):
91
+ There are various runnable examples included in this repository in the [examples folder](https://github.com/openfort-xyz/openfort-react/tree/main/examples):
100
92
 
101
- - [Create React App Example (TypeScript)](https://github.com/openfort-xyz/openfort-kit/tree/main/examples/cra)
102
- - [Next.js Example (TypeScript)](https://github.com/openfort-xyz/openfort-kit/tree/main/examples/nextjs)
103
- - [Vite Example (TypeScript)](https://github.com/openfort-xyz/openfort-kit/tree/main/examples/vite)
93
+ - [Create React App Example (TypeScript)](https://github.com/openfort-xyz/openfort-react/tree/main/examples/cra)
94
+ - [Next.js Example (TypeScript)](https://github.com/openfort-xyz/openfort-react/tree/main/examples/nextjs)
95
+ - [Vite Example (TypeScript)](https://github.com/openfort-xyz/openfort-react/tree/main/examples/vite)
104
96
 
105
97
  ### Running Examples Locally
106
98
 
107
- Clone the FortKit project and install the necessary dependencies:
99
+ Clone the project and install the necessary dependencies:
108
100
 
109
101
  ```sh
110
102
  $ git clone git@github.com:openfort-xyz/openfort-kit.git
111
- $ cd openfort-kit
103
+ $ cd openfort
112
104
  $ yarn install
113
105
  ```
114
106
 
@@ -1,39 +1,24 @@
1
1
  import { OpenfortHookOptions, OpenfortError } from "../../../types";
2
2
  import { AuthProvider } from "../../../components/Openfort/types";
3
- import { UserWallet } from "../useWallets";
4
- import { type AuthPlayerResponse as OpenfortUser } from '@openfort/openfort-js';
5
- type CallbackResult = StoreCredentialsResult | EmailVerificationResult;
6
- type EmailVerificationResult = {
7
- type: "verifyEmail";
8
- email?: string;
9
- error?: OpenfortError;
10
- };
11
- type StoreCredentialsResult = {
3
+ import { CreateWalletPostAuthOptions } from "./useCreateWalletPostAuth";
4
+ import { EmailVerificationResult } from "./useEmailAuth";
5
+ import { StoreCredentialsResult } from "./useOAuth";
6
+ type CallbackResult = (StoreCredentialsResult & {
12
7
  type: "storeCredentials";
13
- user?: OpenfortUser;
14
- wallet?: UserWallet;
15
- error?: OpenfortError;
16
- };
17
- type VerifyEmailOptions = {
18
- email: string;
19
- state: string;
20
- } & OpenfortHookOptions<EmailVerificationResult>;
21
- type StoreCredentialsOptions = {
22
- player: string;
23
- accessToken: string;
24
- refreshToken: string;
25
- } & OpenfortHookOptions<StoreCredentialsResult>;
8
+ }) | (EmailVerificationResult & {
9
+ type: "verifyEmail";
10
+ });
26
11
  type UseAuthCallbackOptions = {
27
- automaticallyHandleCallback?: boolean;
28
- } & OpenfortHookOptions<CallbackResult>;
29
- export declare const useAuthCallback: ({ automaticallyHandleCallback, ...hookOptions }?: UseAuthCallbackOptions) => {
12
+ enabled?: boolean;
13
+ } & OpenfortHookOptions<CallbackResult> & CreateWalletPostAuthOptions;
14
+ export declare const useAuthCallback: ({ enabled, ...hookOptions }?: UseAuthCallbackOptions) => {
15
+ email: string | null;
16
+ provider: AuthProvider | null;
17
+ verifyEmail: ({ email, state, ...options }: import("./useEmailAuth").VerifyEmailOptions) => Promise<EmailVerificationResult>;
18
+ storeCredentials: ({ player, accessToken, refreshToken, ...options }: import("./useOAuth").StoreCredentialsOptions) => Promise<StoreCredentialsResult>;
30
19
  isLoading: boolean;
31
20
  isError: boolean;
32
21
  isSuccess: boolean;
33
22
  error: OpenfortError | null | undefined;
34
- email: string | null;
35
- provider: AuthProvider | null;
36
- verifyEmail: ({ email, state, ...options }: VerifyEmailOptions) => Promise<EmailVerificationResult>;
37
- storeCredentials: ({ player, accessToken, refreshToken, ...options }: StoreCredentialsOptions) => Promise<StoreCredentialsResult>;
38
23
  };
39
24
  export {};
@@ -1,5 +1,16 @@
1
+ export type CreateWalletPostAuthOptions = {
2
+ /**
3
+ * @default true
4
+ * It will log out the user if there is an error while trying to create a wallet (automatic recovery).
5
+ */
6
+ logoutOnError?: boolean;
7
+ /**
8
+ *
9
+ */
10
+ automaticRecovery?: boolean;
11
+ };
1
12
  export declare const useCreateWalletPostAuth: () => {
2
- tryUseWallet: () => Promise<{
13
+ tryUseWallet: ({ logoutOnError: signOutOnError, automaticRecovery }: CreateWalletPostAuthOptions) => Promise<{
3
14
  error?: import("../../..").OpenfortError;
4
15
  wallet?: import("../useWallets").UserWallet;
5
16
  }>;
@@ -1,5 +1,6 @@
1
1
  import { type AuthPlayerResponse as OpenfortUser } from '@openfort/openfort-js';
2
2
  import { OpenfortHookOptions, OpenfortError } from "../../../types";
3
+ import { CreateWalletPostAuthOptions } from './useCreateWalletPostAuth';
3
4
  import { UserWallet } from '../useWallets';
4
5
  export type EmailAuthResult = {
5
6
  error?: OpenfortError;
@@ -11,13 +12,13 @@ export type SignInEmailOptions = {
11
12
  email: string;
12
13
  password: string;
13
14
  emailVerificationRedirectTo?: string;
14
- } & OpenfortHookOptions<EmailAuthResult>;
15
+ } & OpenfortHookOptions<EmailAuthResult> & CreateWalletPostAuthOptions;
15
16
  export type SignUpEmailOptions = {
16
17
  email: string;
17
18
  password: string;
18
19
  name?: string;
19
20
  emailVerificationRedirectTo?: string;
20
- } & OpenfortHookOptions<EmailAuthResult>;
21
+ } & OpenfortHookOptions<EmailAuthResult> & CreateWalletPostAuthOptions;
21
22
  export type RequestResetPasswordOptions = {
22
23
  email: string;
23
24
  emailVerificationRedirectTo?: string;
@@ -32,9 +33,17 @@ export type LinkEmailOptions = {
32
33
  password: string;
33
34
  emailVerificationRedirectTo?: string;
34
35
  } & OpenfortHookOptions<EmailAuthResult>;
36
+ export type VerifyEmailOptions = {
37
+ email: string;
38
+ state: string;
39
+ } & OpenfortHookOptions<EmailVerificationResult>;
40
+ export type EmailVerificationResult = {
41
+ email?: string;
42
+ error?: OpenfortError;
43
+ };
35
44
  export type UseEmailHookOptions = {
36
45
  emailVerificationRedirectTo?: string;
37
- } & OpenfortHookOptions<EmailAuthResult>;
46
+ } & OpenfortHookOptions<EmailAuthResult | EmailVerificationResult> & CreateWalletPostAuthOptions;
38
47
  export declare const useEmailAuth: (hookOptions?: UseEmailHookOptions) => {
39
48
  requiresEmailVerification: boolean;
40
49
  isAwaitingInput: boolean;
@@ -44,6 +53,7 @@ export declare const useEmailAuth: (hookOptions?: UseEmailHookOptions) => {
44
53
  error: OpenfortError | null | undefined;
45
54
  signInEmail: (options: SignInEmailOptions) => Promise<EmailAuthResult>;
46
55
  signUpEmail: (options: SignUpEmailOptions) => Promise<EmailAuthResult>;
56
+ verifyEmail: ({ email, state, ...options }: VerifyEmailOptions) => Promise<EmailVerificationResult>;
47
57
  linkEmail: (options: LinkEmailOptions) => Promise<EmailAuthResult>;
48
58
  requestResetPassword: (options: RequestResetPasswordOptions) => Promise<EmailAuthResult>;
49
59
  resetPassword: (options: ResetPasswordOptions) => Promise<EmailAuthResult>;
@@ -1,12 +1,13 @@
1
1
  import { type AuthPlayerResponse as OpenfortUser } from '@openfort/openfort-js';
2
2
  import { OpenfortHookOptions, OpenfortError } from "../../../types";
3
+ import { CreateWalletPostAuthOptions } from "./useCreateWalletPostAuth";
3
4
  import { UserWallet } from "../useWallets";
4
5
  export type GuestHookResult = {
5
6
  error?: OpenfortError;
6
7
  user?: OpenfortUser;
7
8
  wallet?: UserWallet;
8
9
  };
9
- export type GuestHookOptions = OpenfortHookOptions<OpenfortUser>;
10
+ export type GuestHookOptions = OpenfortHookOptions<OpenfortUser> & CreateWalletPostAuthOptions;
10
11
  export declare const useGuestAuth: (hookOptions?: GuestHookOptions) => {
11
12
  isLoading: boolean;
12
13
  isError: boolean;
@@ -1,15 +1,28 @@
1
1
  import { AuthProvider } from '../../../components/Openfort/types';
2
2
  import { OpenfortHookOptions, OpenfortError } from '../../../types';
3
+ import { CreateWalletPostAuthOptions } from './useCreateWalletPostAuth';
4
+ import { UserWallet } from "../useWallets";
5
+ import { type AuthPlayerResponse as OpenfortUser } from '@openfort/openfort-js';
3
6
  export type InitializeOAuthOptions = {
4
7
  provider: AuthProvider;
5
8
  redirectTo?: string;
6
9
  } & OpenfortHookOptions;
7
- export type AuthHookOptions = {
8
- redirectTo?: string;
9
- } & OpenfortHookOptions;
10
10
  export type InitOAuthReturnType = {
11
11
  error?: OpenfortError;
12
12
  };
13
+ export type StoreCredentialsResult = {
14
+ user?: OpenfortUser;
15
+ wallet?: UserWallet;
16
+ error?: OpenfortError;
17
+ };
18
+ export type StoreCredentialsOptions = {
19
+ player: string;
20
+ accessToken: string;
21
+ refreshToken: string;
22
+ } & OpenfortHookOptions<StoreCredentialsResult> & CreateWalletPostAuthOptions;
23
+ export type AuthHookOptions = {
24
+ redirectTo?: string;
25
+ } & OpenfortHookOptions<StoreCredentialsResult> & CreateWalletPostAuthOptions;
13
26
  export declare const useOAuth: (hookOptions?: AuthHookOptions) => {
14
27
  isLoading: boolean;
15
28
  isError: boolean;
@@ -17,4 +30,5 @@ export declare const useOAuth: (hookOptions?: AuthHookOptions) => {
17
30
  error: OpenfortError | null | undefined;
18
31
  initOAuth: (options: InitializeOAuthOptions) => Promise<InitOAuthReturnType>;
19
32
  linkOauth: (options: InitializeOAuthOptions) => Promise<InitOAuthReturnType>;
33
+ storeCredentials: ({ player, accessToken, refreshToken, ...options }: StoreCredentialsOptions) => Promise<StoreCredentialsResult>;
20
34
  };
@@ -9,7 +9,8 @@ export type UserWallet = {
9
9
  connector?: Connector;
10
10
  id: string;
11
11
  isAvailable: boolean;
12
- isActive: boolean;
12
+ isActive?: boolean;
13
+ isConnecting?: boolean;
13
14
  };
14
15
  type SetActiveWalletResult = {
15
16
  error?: OpenfortError;
@@ -31,11 +32,21 @@ type CreateWalletOptions = {
31
32
  type WalletOptions = OpenfortHookOptions<SetActiveWalletResult | CreateWalletResult>;
32
33
  export declare function useWallets(hookOptions?: WalletOptions): {
33
34
  exportPrivateKey: () => Promise<string>;
34
- isLoading: boolean;
35
+ error: OpenfortError | null | undefined;
35
36
  isError: boolean;
36
37
  isSuccess: boolean;
37
- error: OpenfortError | null | undefined;
38
- wallets: UserWallet[];
38
+ isCreating: boolean;
39
+ isConnecting: boolean;
40
+ wallets: {
41
+ isConnecting: boolean;
42
+ isActive: boolean;
43
+ address?: `0x${string}`;
44
+ connectorType?: string;
45
+ walletClientType?: string;
46
+ connector?: Connector;
47
+ id: string;
48
+ isAvailable: boolean;
49
+ }[];
39
50
  availableWallets: import("../../wallets/useWallets").WalletProps[];
40
51
  activeWallet: UserWallet | undefined;
41
52
  setActiveWallet: (options: SetActiveWalletOptions | string) => Promise<SetActiveWalletResult>;
package/build/index.es.js CHANGED
@@ -22,7 +22,7 @@ import { createSiweMessage } from 'viem/siwe';
22
22
  import { signMessage } from '@wagmi/core';
23
23
  import { useQuery, useQueryClient } from '@tanstack/react-query';
24
24
 
25
- const OPENFORTKIT_VERSION = '0.0.2';
25
+ const OPENFORTKIT_VERSION = '0.0.3';
26
26
 
27
27
  var OpenfortErrorType;
28
28
  (function (OpenfortErrorType) {
@@ -10941,15 +10941,6 @@ const Providers = () => {
10941
10941
  return (jsxs(PageContent, { children: [(filteredProviders).map((auth) => (jsx(ProviderButtonSwitch, { provider: auth }, auth))), hasExcessProviders && jsx(SocialProvidersButton, {}), jsx(PoweredByFooter, { showDisclaimer: true })] }));
10942
10942
  };
10943
10943
 
10944
- const mapStatus = (status) => {
10945
- return {
10946
- isLoading: status.status === 'loading',
10947
- isError: status.status === 'error',
10948
- isSuccess: status.status === 'success',
10949
- error: status.error
10950
- };
10951
- };
10952
-
10953
10944
  const onSuccess = ({ hookOptions, options, data, }) => {
10954
10945
  var _a, _b, _c, _d;
10955
10946
  (_a = hookOptions === null || hookOptions === void 0 ? void 0 : hookOptions.onSuccess) === null || _a === void 0 ? void 0 : _a.call(hookOptions, data);
@@ -10969,14 +10960,22 @@ const onError = ({ hookOptions, options, error, }) => {
10969
10960
  return { error };
10970
10961
  };
10971
10962
 
10972
- const createOpenfortWallet = ({ address, isActive, }) => ({
10963
+ const createOpenfortWallet = ({ address, }) => ({
10973
10964
  connectorType: "embedded",
10974
10965
  walletClientType: "openfort",
10975
10966
  address,
10976
10967
  id: embeddedWalletId,
10977
10968
  isAvailable: true,
10978
- isActive,
10979
10969
  });
10970
+ const mapStatus$1 = (status) => {
10971
+ return {
10972
+ error: status.error,
10973
+ isError: status.status === 'error',
10974
+ isSuccess: status.status === 'success',
10975
+ isCreating: status.status === 'creating',
10976
+ isConnecting: status.status === 'connecting',
10977
+ };
10978
+ };
10980
10979
  function useWallets(hookOptions = {}) {
10981
10980
  const { user, embeddedState, client } = useOpenfortCore();
10982
10981
  const { walletConfig, log, setOpen, setRoute, setConnector, uiConfig } = useOpenfortKit();
@@ -11056,17 +11055,18 @@ function useWallets(hookOptions = {}) {
11056
11055
  walletClientType: a.walletClientType,
11057
11056
  id: (wallet === null || wallet === void 0 ? void 0 : wallet.id) || a.walletClientType || "unknown",
11058
11057
  isAvailable: !!wallet,
11059
- isActive: (connector === null || connector === void 0 ? void 0 : connector.id) === a.walletClientType && address === a.address,
11060
11058
  };
11061
11059
  }) : [];
11062
11060
  embeddedWallets === null || embeddedWallets === void 0 ? void 0 : embeddedWallets.forEach((wallet) => {
11061
+ // Remove duplicates (different chain ids)
11062
+ if (userWallets.find(w => w.address === (wallet.address)))
11063
+ return;
11063
11064
  userWallets.push(createOpenfortWallet({
11064
11065
  address: wallet.address,
11065
- isActive: wallet.address === address,
11066
11066
  }));
11067
11067
  });
11068
11068
  return userWallets;
11069
- }, [user, address, connector === null || connector === void 0 ? void 0 : connector.id, embeddedWallets]);
11069
+ }, [user === null || user === void 0 ? void 0 : user.linkedAccounts, embeddedWallets]);
11070
11070
  const activeWallet = isConnected && connector ? wallets.find((w) => w.isActive) : undefined;
11071
11071
  useEffect(() => {
11072
11072
  if (connectToConnector)
@@ -11143,7 +11143,8 @@ function useWallets(hookOptions = {}) {
11143
11143
  log("Setting active wallet", { options: optionsObject, chainId });
11144
11144
  if (isOpenfortWallet(optionsObject)) {
11145
11145
  setStatus({
11146
- status: 'loading',
11146
+ status: 'connecting',
11147
+ address: optionsObject.address,
11147
11148
  });
11148
11149
  const { password } = optionsObject;
11149
11150
  if (!walletConfig) {
@@ -11153,12 +11154,13 @@ function useWallets(hookOptions = {}) {
11153
11154
  hookOptions
11154
11155
  });
11155
11156
  }
11156
- log(`Handling recovery with Openfort: password=${password}, chainId=${chainId}`);
11157
+ log(`Handling recovery with Openfort: ${password ? "with password" : "without password"}, chainId=${chainId}`);
11157
11158
  try {
11158
11159
  const accessToken = await client.getAccessToken();
11159
11160
  if (!accessToken) {
11160
11161
  throw new Error("Openfort access token not found");
11161
11162
  }
11163
+ log("Access token");
11162
11164
  const shieldAuthentication = password ? {
11163
11165
  auth: ShieldAuthType.OPENFORT,
11164
11166
  token: accessToken,
@@ -11169,13 +11171,14 @@ function useWallets(hookOptions = {}) {
11169
11171
  await walletConfig.getEncryptionSession() :
11170
11172
  await getEncryptionSession(),
11171
11173
  };
11174
+ log("Shield authentication");
11172
11175
  const recoveryParams = password ? {
11173
11176
  recoveryMethod: RecoveryMethod.PASSWORD,
11174
11177
  password,
11175
11178
  } : {
11176
11179
  recoveryMethod: RecoveryMethod.AUTOMATIC,
11177
11180
  };
11178
- log("Recovery params", recoveryParams, optionsObject.address);
11181
+ log("Recovery params", optionsObject.address);
11179
11182
  if (optionsObject.address) {
11180
11183
  const walletId = (_a = embeddedWallets === null || embeddedWallets === void 0 ? void 0 : embeddedWallets.find((w) => w.address === optionsObject.address && w.chainId === chainId)) === null || _a === void 0 ? void 0 : _a.id;
11181
11184
  if (!walletId) {
@@ -11212,7 +11215,6 @@ function useWallets(hookOptions = {}) {
11212
11215
  data: {
11213
11216
  wallet: createOpenfortWallet({
11214
11217
  address: optionsObject.address,
11215
- isActive: true,
11216
11218
  }),
11217
11219
  },
11218
11220
  options: optionsObject,
@@ -11248,7 +11250,8 @@ function useWallets(hookOptions = {}) {
11248
11250
  }
11249
11251
  else {
11250
11252
  setStatus({
11251
- status: 'loading',
11253
+ status: 'connecting',
11254
+ address: optionsObject.address,
11252
11255
  });
11253
11256
  setConnectToConnector({
11254
11257
  address: optionsObject.address,
@@ -11260,8 +11263,9 @@ function useWallets(hookOptions = {}) {
11260
11263
  const createWallet = useCallback(async ({ password, ...options } = {}) => {
11261
11264
  var _a;
11262
11265
  setStatus({
11263
- status: 'loading',
11266
+ status: 'creating',
11264
11267
  });
11268
+ log("Creating wallet", { password: !!password, options });
11265
11269
  const accessToken = await client.getAccessToken();
11266
11270
  if (!accessToken) {
11267
11271
  return onError({
@@ -11277,10 +11281,7 @@ function useWallets(hookOptions = {}) {
11277
11281
  options,
11278
11282
  });
11279
11283
  }
11280
- const shieldAuthentication = password ? {
11281
- auth: ShieldAuthType.OPENFORT,
11282
- token: accessToken,
11283
- } : {
11284
+ const shieldAuthentication = {
11284
11285
  auth: ShieldAuthType.OPENFORT,
11285
11286
  token: accessToken,
11286
11287
  encryptionSession: walletConfig.getEncryptionSession ?
@@ -11308,18 +11309,21 @@ function useWallets(hookOptions = {}) {
11308
11309
  data: {
11309
11310
  wallet: createOpenfortWallet({
11310
11311
  address: wallet.address,
11311
- isActive: true,
11312
11312
  })
11313
11313
  }
11314
11314
  });
11315
11315
  }, [refetch, client, uiConfig, chainId]);
11316
11316
  return {
11317
- wallets,
11317
+ wallets: wallets.map((w) => ({
11318
+ ...w,
11319
+ isConnecting: status.status === 'connecting' && status.address === w.address,
11320
+ isActive: w.address === address && isConnected && (connector === null || connector === void 0 ? void 0 : connector.id) === w.id,
11321
+ })),
11318
11322
  availableWallets: deviceWallets,
11319
11323
  activeWallet,
11320
11324
  setActiveWallet,
11321
11325
  createWallet,
11322
- ...mapStatus(status),
11326
+ ...mapStatus$1(status),
11323
11327
  exportPrivateKey: client.embeddedWallet.exportPrivateKey,
11324
11328
  };
11325
11329
  }
@@ -11719,6 +11723,7 @@ const OpenfortProvider = ({ children, uiConfig, onConnect, onDisconnect, debugMo
11719
11723
  }, shieldConfiguration: walletConfig ? {
11720
11724
  shieldPublishableKey: walletConfig.shieldPublishableKey,
11721
11725
  shieldEncryptionKey: walletConfig.recoveryMethod === RecoveryMethod.PASSWORD ? walletConfig.shieldEncryptionKey : undefined,
11726
+ debug: debugMode,
11722
11727
  } : undefined, overrides: opts.openfortUrlOverrides, debugMode: debugMode, onConnect: onConnect, onDisconnect: onDisconnect, children: [children, jsx(ConnectModal, { lang: ckLang, theme: ckTheme, mode: (_j = uiConfig === null || uiConfig === void 0 ? void 0 : uiConfig.mode) !== null && _j !== void 0 ? _j : ckMode, customTheme: ckCustomTheme })] }) }) }));
11723
11728
  };
11724
11729
 
@@ -12300,17 +12305,72 @@ const buildCallbackUrl = ({ email, callbackUrl, provider, }) => {
12300
12305
  return redirectUrl.toString();
12301
12306
  };
12302
12307
 
12308
+ const mapStatus = (status) => {
12309
+ return {
12310
+ isLoading: status.status === 'loading',
12311
+ isError: status.status === 'error',
12312
+ isSuccess: status.status === 'success',
12313
+ error: status.error
12314
+ };
12315
+ };
12316
+
12317
+ function useSignOut(hookOptions = {}) {
12318
+ const { client, updateUser, user } = useOpenfortCore();
12319
+ const [status, setStatus] = useState({
12320
+ status: "idle",
12321
+ });
12322
+ const { disconnect } = useDisconnect();
12323
+ const signOut = useCallback(async (options = {}) => {
12324
+ if (!user)
12325
+ return;
12326
+ setStatus({
12327
+ status: 'loading',
12328
+ });
12329
+ try {
12330
+ await client.auth.logout();
12331
+ disconnect();
12332
+ updateUser();
12333
+ setStatus({
12334
+ status: 'success',
12335
+ });
12336
+ return onSuccess({
12337
+ hookOptions,
12338
+ options,
12339
+ data: {},
12340
+ });
12341
+ }
12342
+ catch (error) {
12343
+ setStatus({
12344
+ status: 'error',
12345
+ error: new OpenfortError('Failed to sign out', OpenfortErrorType.AUTHENTICATION_ERROR, { error }),
12346
+ });
12347
+ throw error;
12348
+ }
12349
+ }, [client, user, disconnect, updateUser, setStatus, hookOptions]);
12350
+ return {
12351
+ ...mapStatus(status),
12352
+ signOut,
12353
+ };
12354
+ }
12355
+
12303
12356
  // this hook is used to create a wallet after the user has authenticated
12304
12357
  const useCreateWalletPostAuth = () => {
12305
12358
  const { setActiveWallet } = useWallets();
12306
12359
  const { walletConfig } = useOpenfortKit();
12307
- const tryUseWallet = useCallback(async () => {
12308
- if (!walletConfig || walletConfig.recoveryMethod !== RecoveryMethod.AUTOMATIC)
12360
+ const { signOut } = useSignOut();
12361
+ const tryUseWallet = useCallback(async ({ logoutOnError: signOutOnError = true, automaticRecovery = true }) => {
12362
+ if (!walletConfig || walletConfig.recoveryMethod !== RecoveryMethod.AUTOMATIC || !automaticRecovery) {
12309
12363
  return {};
12310
- return await setActiveWallet({
12364
+ }
12365
+ const wallet = await setActiveWallet({
12311
12366
  connector: embeddedWalletId,
12312
12367
  });
12313
- }, [walletConfig]);
12368
+ if (wallet.error && signOutOnError) {
12369
+ // If there was an error and we should log out, we can call the logout function
12370
+ await signOut();
12371
+ }
12372
+ return wallet;
12373
+ }, [walletConfig, setActiveWallet, signOut]);
12314
12374
  return {
12315
12375
  tryUseWallet,
12316
12376
  };
@@ -12361,7 +12421,10 @@ const useEmailAuth = (hookOptions = {}) => {
12361
12421
  });
12362
12422
  }
12363
12423
  else {
12364
- const { wallet } = await tryUseWallet();
12424
+ const { wallet } = await tryUseWallet({
12425
+ logoutOnError: options.logoutOnError || hookOptions.logoutOnError,
12426
+ automaticRecovery: options.automaticRecovery || hookOptions.automaticRecovery,
12427
+ });
12365
12428
  setStatus({
12366
12429
  status: 'success',
12367
12430
  });
@@ -12491,7 +12554,10 @@ const useEmailAuth = (hookOptions = {}) => {
12491
12554
  });
12492
12555
  }
12493
12556
  else {
12494
- const { wallet } = await tryUseWallet();
12557
+ const { wallet } = await tryUseWallet({
12558
+ logoutOnError: options.logoutOnError || hookOptions.logoutOnError,
12559
+ automaticRecovery: options.automaticRecovery || hookOptions.automaticRecovery,
12560
+ });
12495
12561
  setStatus({
12496
12562
  status: 'success',
12497
12563
  });
@@ -12582,34 +12648,10 @@ const useEmailAuth = (hookOptions = {}) => {
12582
12648
  });
12583
12649
  }
12584
12650
  }, [client, setStatus, updateUser, log, hookOptions]);
12585
- return {
12586
- signInEmail,
12587
- signUpEmail,
12588
- linkEmail,
12589
- requestResetPassword,
12590
- resetPassword,
12591
- reset,
12592
- ...mapStatus(status),
12593
- requiresEmailVerification,
12594
- isAwaitingInput: status.status === 'awaiting-input',
12595
- };
12596
- };
12597
-
12598
- const useAuthCallback = ({ automaticallyHandleCallback = true, // Automatically handle OAuth and email callback
12599
- ...hookOptions } = {}) => {
12600
- const { log } = useOpenfortKit();
12601
- const [status, setStatus] = useState({
12602
- status: "idle",
12603
- });
12604
- const { client, updateUser } = useOpenfortCore();
12605
- const [provider, setProvider] = useState(null);
12606
- const [email, setEmail] = useState(null);
12607
- const { tryUseWallet } = useCreateWalletPostAuth();
12608
12651
  const verifyEmail = useCallback(async ({ email, state, ...options }) => {
12609
12652
  setStatus({
12610
12653
  status: 'loading',
12611
12654
  });
12612
- setEmail(email);
12613
12655
  try {
12614
12656
  await client.auth.verifyEmail({
12615
12657
  email,
@@ -12621,7 +12663,9 @@ const useAuthCallback = ({ automaticallyHandleCallback = true, // Automatically
12621
12663
  return onSuccess({
12622
12664
  hookOptions,
12623
12665
  options,
12624
- data: { email, type: "verifyEmail" },
12666
+ data: {
12667
+ email,
12668
+ },
12625
12669
  });
12626
12670
  }
12627
12671
  catch (e) {
@@ -12631,14 +12675,48 @@ const useAuthCallback = ({ automaticallyHandleCallback = true, // Automatically
12631
12675
  error,
12632
12676
  });
12633
12677
  log("Error verifying email", e);
12634
- onError({
12678
+ return onError({
12635
12679
  hookOptions,
12636
12680
  options,
12637
12681
  error,
12638
12682
  });
12639
- return { error, type: "verifyEmail" };
12640
12683
  }
12641
12684
  }, [client, log, hookOptions]);
12685
+ return {
12686
+ signInEmail,
12687
+ signUpEmail,
12688
+ verifyEmail,
12689
+ linkEmail,
12690
+ requestResetPassword,
12691
+ resetPassword,
12692
+ reset,
12693
+ ...mapStatus(status),
12694
+ requiresEmailVerification,
12695
+ isAwaitingInput: status.status === 'awaiting-input',
12696
+ };
12697
+ };
12698
+
12699
+ const providerToAuthProvider = {
12700
+ // [OAuthProvider.APPLE]: AuthProvider.,
12701
+ // [OAuthProvider.DISCORD]: AuthProvider.,
12702
+ // [OAuthProvider.EPIC_GAMES]: AuthProvider.,
12703
+ [AuthProvider.FACEBOOK]: OAuthProvider.FACEBOOK,
12704
+ [AuthProvider.GOOGLE]: OAuthProvider.GOOGLE,
12705
+ // [OAuthProvider.LINE]: AuthProvider.,
12706
+ [AuthProvider.TWITTER]: OAuthProvider.TWITTER,
12707
+ };
12708
+ function getOAuthProvider(provider) {
12709
+ if (!providerToAuthProvider[provider]) {
12710
+ throw new Error(`Unsupported OAuth provider: ${provider}`);
12711
+ }
12712
+ return providerToAuthProvider[provider];
12713
+ }
12714
+ const useOAuth = (hookOptions = {}) => {
12715
+ const { client, updateUser } = useOpenfortCore();
12716
+ const [status, setStatus] = useState({
12717
+ status: "idle",
12718
+ });
12719
+ const { tryUseWallet } = useCreateWalletPostAuth();
12642
12720
  const storeCredentials = useCallback(async ({ player, accessToken, refreshToken, ...options }) => {
12643
12721
  setStatus({
12644
12722
  status: 'loading',
@@ -12653,7 +12731,10 @@ const useAuthCallback = ({ automaticallyHandleCallback = true, // Automatically
12653
12731
  status: 'success',
12654
12732
  });
12655
12733
  const user = await updateUser() || undefined;
12656
- const { wallet } = await tryUseWallet();
12734
+ const { wallet } = await tryUseWallet({
12735
+ logoutOnError: options.logoutOnError || hookOptions.logoutOnError,
12736
+ automaticRecovery: options.automaticRecovery || hookOptions.automaticRecovery,
12737
+ });
12657
12738
  return onSuccess({
12658
12739
  data: { user, wallet, type: "storeCredentials" },
12659
12740
  hookOptions,
@@ -12666,17 +12747,105 @@ const useAuthCallback = ({ automaticallyHandleCallback = true, // Automatically
12666
12747
  status: 'error',
12667
12748
  error,
12668
12749
  });
12669
- log("Error storing credentials", e);
12670
- onError({
12750
+ return onError({
12671
12751
  hookOptions,
12672
12752
  options,
12673
12753
  error,
12674
12754
  });
12675
- return { error, type: "storeCredentials" };
12676
12755
  }
12677
- }, [client, log, hookOptions]);
12756
+ }, [client, hookOptions]);
12757
+ const initOAuth = useCallback(async (options) => {
12758
+ var _a;
12759
+ const authProvider = options.provider;
12760
+ try {
12761
+ setStatus({
12762
+ status: 'loading',
12763
+ });
12764
+ await client.auth.initOAuth({
12765
+ provider: getOAuthProvider(authProvider),
12766
+ options: {
12767
+ redirectTo: buildCallbackUrl({
12768
+ provider: authProvider,
12769
+ callbackUrl: (_a = hookOptions === null || hookOptions === void 0 ? void 0 : hookOptions.redirectTo) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.redirectTo,
12770
+ })
12771
+ },
12772
+ });
12773
+ return onSuccess({
12774
+ data: {},
12775
+ hookOptions,
12776
+ options,
12777
+ });
12778
+ }
12779
+ catch (e) {
12780
+ const error = new OpenfortError("Failed to login with OAuth", OpenfortErrorType.AUTHENTICATION_ERROR, { error: e });
12781
+ setStatus({
12782
+ status: 'error',
12783
+ error
12784
+ });
12785
+ return onError({
12786
+ hookOptions,
12787
+ options,
12788
+ error,
12789
+ });
12790
+ }
12791
+ }, [client, setStatus, updateUser, hookOptions]);
12792
+ const linkOauth = useCallback(async (options) => {
12793
+ var _a;
12794
+ const authProvider = options.provider;
12795
+ try {
12796
+ setStatus({
12797
+ status: 'loading',
12798
+ });
12799
+ const authToken = await client.getAccessToken();
12800
+ if (!authToken) {
12801
+ throw new OpenfortError("No auth token found", OpenfortErrorType.AUTHENTICATION_ERROR);
12802
+ }
12803
+ await client.auth.initLinkOAuth({
12804
+ authToken,
12805
+ provider: getOAuthProvider(authProvider),
12806
+ options: {
12807
+ redirectTo: buildCallbackUrl({
12808
+ provider: authProvider,
12809
+ callbackUrl: (_a = options === null || options === void 0 ? void 0 : options.redirectTo) !== null && _a !== void 0 ? _a : hookOptions === null || hookOptions === void 0 ? void 0 : hookOptions.redirectTo,
12810
+ })
12811
+ },
12812
+ });
12813
+ return onSuccess({
12814
+ data: {},
12815
+ hookOptions,
12816
+ options,
12817
+ });
12818
+ }
12819
+ catch (e) {
12820
+ const error = new OpenfortError("Failed to link OAuth", OpenfortErrorType.AUTHENTICATION_ERROR, { error: e });
12821
+ setStatus({
12822
+ status: 'error',
12823
+ error
12824
+ });
12825
+ return onError({
12826
+ hookOptions,
12827
+ options,
12828
+ error,
12829
+ });
12830
+ }
12831
+ }, [client, setStatus, updateUser, hookOptions]);
12832
+ return {
12833
+ initOAuth,
12834
+ linkOauth,
12835
+ storeCredentials,
12836
+ ...mapStatus(status),
12837
+ };
12838
+ };
12839
+
12840
+ const useAuthCallback = ({ enabled = true, // Automatically handle OAuth and email callback
12841
+ ...hookOptions } = {}) => {
12842
+ const { log } = useOpenfortKit();
12843
+ const [provider, setProvider] = useState(null);
12844
+ const [email, setEmail] = useState(null);
12845
+ const { verifyEmail, isSuccess: isEmailSuccess, isLoading: isEmailLoading, isError: isEmailError, error: emailError, } = useEmailAuth();
12846
+ const { storeCredentials, isSuccess: isOAuthSuccess, isLoading: isOAuthLoading, isError: isOAuthError, error: oAuthError, } = useOAuth();
12678
12847
  useEffect(() => {
12679
- if (!automaticallyHandleCallback)
12848
+ if (!enabled)
12680
12849
  return;
12681
12850
  (async () => {
12682
12851
  // redirectUrl is not working with query params OF-1013
@@ -12705,7 +12874,26 @@ const useAuthCallback = ({ automaticallyHandleCallback = true, // Automatically
12705
12874
  window.history.replaceState({}, document.title, url.toString());
12706
12875
  };
12707
12876
  log("EmailVerification", state, email);
12708
- await verifyEmail({ email, state });
12877
+ const options = {
12878
+ onSuccess: (data) => {
12879
+ var _a;
12880
+ (_a = hookOptions.onSuccess) === null || _a === void 0 ? void 0 : _a.call(hookOptions, {
12881
+ ...data,
12882
+ type: "verifyEmail",
12883
+ });
12884
+ },
12885
+ onSettled: (data, error) => {
12886
+ var _a;
12887
+ (_a = hookOptions.onSettled) === null || _a === void 0 ? void 0 : _a.call(hookOptions, {
12888
+ ...data,
12889
+ type: "verifyEmail",
12890
+ }, error);
12891
+ },
12892
+ onError: hookOptions.onError,
12893
+ throwOnError: hookOptions.throwOnError,
12894
+ };
12895
+ await verifyEmail({ email, state, ...options });
12896
+ setEmail(email);
12709
12897
  removeParams();
12710
12898
  }
12711
12899
  else {
@@ -12736,7 +12924,25 @@ const useAuthCallback = ({ automaticallyHandleCallback = true, // Automatically
12736
12924
  window.history.replaceState({}, document.title, url.toString());
12737
12925
  };
12738
12926
  log("callback", { player, accessToken, refreshToken });
12739
- await storeCredentials({ player, accessToken, refreshToken });
12927
+ const options = {
12928
+ onSuccess: (data) => {
12929
+ var _a;
12930
+ (_a = hookOptions.onSuccess) === null || _a === void 0 ? void 0 : _a.call(hookOptions, {
12931
+ ...data,
12932
+ type: "storeCredentials",
12933
+ });
12934
+ },
12935
+ onSettled: (data, error) => {
12936
+ var _a;
12937
+ (_a = hookOptions.onSettled) === null || _a === void 0 ? void 0 : _a.call(hookOptions, {
12938
+ ...data,
12939
+ type: "storeCredentials",
12940
+ }, error);
12941
+ },
12942
+ onError: hookOptions.onError,
12943
+ throwOnError: hookOptions.throwOnError,
12944
+ };
12945
+ await storeCredentials({ player, accessToken, refreshToken, ...options });
12740
12946
  removeParams();
12741
12947
  }
12742
12948
  })();
@@ -12746,7 +12952,10 @@ const useAuthCallback = ({ automaticallyHandleCallback = true, // Automatically
12746
12952
  provider,
12747
12953
  verifyEmail,
12748
12954
  storeCredentials,
12749
- ...mapStatus(status),
12955
+ isLoading: isEmailLoading || isOAuthLoading,
12956
+ isError: isEmailError || isOAuthError,
12957
+ isSuccess: isEmailSuccess || isOAuthSuccess,
12958
+ error: emailError || oAuthError,
12750
12959
  };
12751
12960
  };
12752
12961
 
@@ -12764,7 +12973,10 @@ const useGuestAuth = (hookOptions = {}) => {
12764
12973
  const result = await client.auth.signUpGuest();
12765
12974
  const user = result.player;
12766
12975
  await updateUser(user);
12767
- const { wallet } = await tryUseWallet();
12976
+ const { wallet } = await tryUseWallet({
12977
+ logoutOnError: options.logoutOnError || hookOptions.logoutOnError,
12978
+ automaticRecovery: options.automaticRecovery || hookOptions.automaticRecovery,
12979
+ });
12768
12980
  setStatus({
12769
12981
  status: 'success',
12770
12982
  });
@@ -12977,146 +13189,5 @@ const useWalletAuth = (hookOptions = {}) => {
12977
13189
  };
12978
13190
  };
12979
13191
 
12980
- const providerToAuthProvider = {
12981
- // [OAuthProvider.APPLE]: AuthProvider.,
12982
- // [OAuthProvider.DISCORD]: AuthProvider.,
12983
- // [OAuthProvider.EPIC_GAMES]: AuthProvider.,
12984
- [AuthProvider.FACEBOOK]: OAuthProvider.FACEBOOK,
12985
- [AuthProvider.GOOGLE]: OAuthProvider.GOOGLE,
12986
- // [OAuthProvider.LINE]: AuthProvider.,
12987
- [AuthProvider.TWITTER]: OAuthProvider.TWITTER,
12988
- };
12989
- function getOAuthProvider(provider) {
12990
- if (!providerToAuthProvider[provider]) {
12991
- throw new Error(`Unsupported OAuth provider: ${provider}`);
12992
- }
12993
- return providerToAuthProvider[provider];
12994
- }
12995
- const useOAuth = (hookOptions = {}) => {
12996
- const { client, updateUser } = useOpenfortCore();
12997
- const [status, setStatus] = useState({
12998
- status: "idle",
12999
- });
13000
- const initOAuth = useCallback(async (options) => {
13001
- var _a;
13002
- const authProvider = options.provider;
13003
- try {
13004
- setStatus({
13005
- status: 'loading',
13006
- });
13007
- await client.auth.initOAuth({
13008
- provider: getOAuthProvider(authProvider),
13009
- options: {
13010
- redirectTo: buildCallbackUrl({
13011
- provider: authProvider,
13012
- callbackUrl: (_a = hookOptions === null || hookOptions === void 0 ? void 0 : hookOptions.redirectTo) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.redirectTo,
13013
- })
13014
- },
13015
- });
13016
- return onSuccess({
13017
- data: {},
13018
- hookOptions,
13019
- options,
13020
- });
13021
- }
13022
- catch (e) {
13023
- const error = new OpenfortError("Failed to login with OAuth", OpenfortErrorType.AUTHENTICATION_ERROR, { error: e });
13024
- setStatus({
13025
- status: 'error',
13026
- error
13027
- });
13028
- return onError({
13029
- hookOptions,
13030
- options,
13031
- error,
13032
- });
13033
- }
13034
- }, [client, setStatus, updateUser, hookOptions]);
13035
- const linkOauth = useCallback(async (options) => {
13036
- var _a;
13037
- const authProvider = options.provider;
13038
- try {
13039
- setStatus({
13040
- status: 'loading',
13041
- });
13042
- const authToken = await client.getAccessToken();
13043
- if (!authToken) {
13044
- throw new OpenfortError("No auth token found", OpenfortErrorType.AUTHENTICATION_ERROR);
13045
- }
13046
- await client.auth.initLinkOAuth({
13047
- authToken,
13048
- provider: getOAuthProvider(authProvider),
13049
- options: {
13050
- redirectTo: buildCallbackUrl({
13051
- provider: authProvider,
13052
- callbackUrl: (_a = options === null || options === void 0 ? void 0 : options.redirectTo) !== null && _a !== void 0 ? _a : hookOptions === null || hookOptions === void 0 ? void 0 : hookOptions.redirectTo,
13053
- })
13054
- },
13055
- });
13056
- return onSuccess({
13057
- data: {},
13058
- hookOptions,
13059
- options,
13060
- });
13061
- }
13062
- catch (e) {
13063
- const error = new OpenfortError("Failed to link OAuth", OpenfortErrorType.AUTHENTICATION_ERROR, { error: e });
13064
- setStatus({
13065
- status: 'error',
13066
- error
13067
- });
13068
- return onError({
13069
- hookOptions,
13070
- options,
13071
- error,
13072
- });
13073
- }
13074
- }, [client, setStatus, updateUser, hookOptions]);
13075
- return {
13076
- initOAuth,
13077
- linkOauth,
13078
- ...mapStatus(status),
13079
- };
13080
- };
13081
-
13082
- function useSignOut(hookOptions = {}) {
13083
- const { client, updateUser, user } = useOpenfortCore();
13084
- const [status, setStatus] = useState({
13085
- status: "idle",
13086
- });
13087
- const { disconnect } = useDisconnect();
13088
- const signOut = useCallback(async (options = {}) => {
13089
- if (!user)
13090
- return;
13091
- setStatus({
13092
- status: 'loading',
13093
- });
13094
- try {
13095
- await client.auth.logout();
13096
- disconnect();
13097
- updateUser();
13098
- setStatus({
13099
- status: 'success',
13100
- });
13101
- return onSuccess({
13102
- hookOptions,
13103
- options,
13104
- data: {},
13105
- });
13106
- }
13107
- catch (error) {
13108
- setStatus({
13109
- status: 'error',
13110
- error: new OpenfortError('Failed to sign out', OpenfortErrorType.AUTHENTICATION_ERROR, { error }),
13111
- });
13112
- throw error;
13113
- }
13114
- }, [client, user, disconnect, updateUser, setStatus, hookOptions]);
13115
- return {
13116
- ...mapStatus(status),
13117
- signOut,
13118
- };
13119
- }
13120
-
13121
13192
  export { AuthProvider, Avatar, Chain as ChainIcon, OPENFORTKIT_VERSION, OpenfortError, OpenfortErrorType, OpenfortKitButton, OpenfortKitContext, OpenfortKitStatus, OpenfortProvider, embeddedWalletId, defaultConfig as getDefaultConfig, defaultConnectors as getDefaultConnectors, useAuthCallback, useChainIsSupported, useChains, useConnectWithSiwe, useEmailAuth, useGuestAuth, useOAuth, useOpenfortCore as useOpenfort, useSignOut, useStatus, useUI, useUser, useWallet, useWalletAuth, useWallets, wallets };
13122
13193
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- export declare const OPENFORTKIT_VERSION = "0.0.2";
1
+ export declare const OPENFORTKIT_VERSION = "0.0.3";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfort/react",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "author": "Openfort (https://www.openfort.io)",
5
5
  "license": "BSD-2-Clause license",
6
6
  "description": "The easiest way to integrate Openfort to your project.",
@@ -38,7 +38,7 @@
38
38
  "react"
39
39
  ],
40
40
  "dependencies": {
41
- "@openfort/openfort-js": "^0.9.7",
41
+ "@openfort/openfort-js": "^0.9.8",
42
42
  "buffer": "^6.0.3",
43
43
  "detect-browser": "^5.3.0",
44
44
  "framer-motion": "^6.3.11",