@yieldfabric/wallet 0.2.6 → 0.2.7
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/dist/index.cjs +721 -698
- package/dist/index.d.cts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +80 -57
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
'use strict';
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var React39 = require('react');
|
|
11
11
|
var jsxRuntime = require('react/jsx-runtime');
|
|
12
12
|
var avererWebsdk = require('@averer/averer-websdk');
|
|
13
13
|
var sha3 = require('js-sha3');
|
|
@@ -20,7 +20,7 @@ var zod = require('zod');
|
|
|
20
20
|
|
|
21
21
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
22
22
|
|
|
23
|
-
var
|
|
23
|
+
var React39__default = /*#__PURE__*/_interopDefault(React39);
|
|
24
24
|
var sha3__default = /*#__PURE__*/_interopDefault(sha3);
|
|
25
25
|
var theme__default = /*#__PURE__*/_interopDefault(theme);
|
|
26
26
|
|
|
@@ -4966,7 +4966,7 @@ function WalletConfigProvider({ config, children }) {
|
|
|
4966
4966
|
return /* @__PURE__ */ jsxRuntime.jsx(WalletConfigContext.Provider, { value: config, children });
|
|
4967
4967
|
}
|
|
4968
4968
|
function useWalletConfig() {
|
|
4969
|
-
return
|
|
4969
|
+
return React39.useContext(WalletConfigContext);
|
|
4970
4970
|
}
|
|
4971
4971
|
function useTokenStore() {
|
|
4972
4972
|
const { tokenStore } = useWalletConfig();
|
|
@@ -4993,19 +4993,19 @@ var WalletConfigContext;
|
|
|
4993
4993
|
var init_WalletConfigContext = __esm({
|
|
4994
4994
|
"src/providers/WalletConfigContext.tsx"() {
|
|
4995
4995
|
init_jwtClaims();
|
|
4996
|
-
WalletConfigContext =
|
|
4996
|
+
WalletConfigContext = React39.createContext({});
|
|
4997
4997
|
}
|
|
4998
4998
|
});
|
|
4999
4999
|
function ProviderConfigProvider({
|
|
5000
5000
|
children,
|
|
5001
5001
|
platform
|
|
5002
5002
|
}) {
|
|
5003
|
-
const [state, setState] =
|
|
5003
|
+
const [state, setState] = React39.useState({
|
|
5004
5004
|
config: null,
|
|
5005
5005
|
isLoading: true,
|
|
5006
5006
|
error: null
|
|
5007
5007
|
});
|
|
5008
|
-
|
|
5008
|
+
React39.useEffect(() => {
|
|
5009
5009
|
let cancelled = false;
|
|
5010
5010
|
(async () => {
|
|
5011
5011
|
try {
|
|
@@ -5046,12 +5046,12 @@ function ProviderConfigProvider({
|
|
|
5046
5046
|
return /* @__PURE__ */ jsxRuntime.jsx(ProviderConfigContext.Provider, { value: state, children });
|
|
5047
5047
|
}
|
|
5048
5048
|
function useProviderConfig() {
|
|
5049
|
-
return
|
|
5049
|
+
return React39.useContext(ProviderConfigContext);
|
|
5050
5050
|
}
|
|
5051
5051
|
var ProviderConfigContext, AUTH_BASE5;
|
|
5052
5052
|
var init_ProviderConfigContext = __esm({
|
|
5053
5053
|
"src/providers/ProviderConfigContext.tsx"() {
|
|
5054
|
-
ProviderConfigContext =
|
|
5054
|
+
ProviderConfigContext = React39.createContext({
|
|
5055
5055
|
config: null,
|
|
5056
5056
|
isLoading: true,
|
|
5057
5057
|
error: null
|
|
@@ -5261,7 +5261,7 @@ __export(SignupFlow_exports, {
|
|
|
5261
5261
|
default: () => SignupFlow_default
|
|
5262
5262
|
});
|
|
5263
5263
|
function useRegisterConflictPatch() {
|
|
5264
|
-
|
|
5264
|
+
React39.useEffect(() => {
|
|
5265
5265
|
const original = window.fetch;
|
|
5266
5266
|
window.fetch = async function patchedFetch(input, init) {
|
|
5267
5267
|
const response = await original.call(window, input, init);
|
|
@@ -5284,7 +5284,7 @@ function useRegisterConflictPatch() {
|
|
|
5284
5284
|
}, []);
|
|
5285
5285
|
}
|
|
5286
5286
|
function useAvererCssVars() {
|
|
5287
|
-
|
|
5287
|
+
React39.useEffect(() => {
|
|
5288
5288
|
const root = document.documentElement;
|
|
5289
5289
|
const prior = [];
|
|
5290
5290
|
for (const [name, value] of Object.entries(AVERER_CSS_VARS)) {
|
|
@@ -5416,12 +5416,12 @@ var init_SignupFlow = __esm({
|
|
|
5416
5416
|
};
|
|
5417
5417
|
AvererSigninConsumer = ({ appName, onComplete, onError, platform }) => {
|
|
5418
5418
|
const wallet = avererWebsdk.useAvererWallet();
|
|
5419
|
-
const walletRef =
|
|
5420
|
-
|
|
5419
|
+
const walletRef = React39.useRef(wallet);
|
|
5420
|
+
React39.useEffect(() => {
|
|
5421
5421
|
walletRef.current = wallet;
|
|
5422
5422
|
}, [wallet]);
|
|
5423
|
-
const widgetWrapRef =
|
|
5424
|
-
|
|
5423
|
+
const widgetWrapRef = React39.useRef(null);
|
|
5424
|
+
React39.useEffect(() => {
|
|
5425
5425
|
const root = widgetWrapRef.current;
|
|
5426
5426
|
if (!root) return;
|
|
5427
5427
|
const OVERRIDE_CSS = `
|
|
@@ -5916,8 +5916,8 @@ function decide(snapshot, ctx) {
|
|
|
5916
5916
|
}
|
|
5917
5917
|
function useOnboardingState(identityRequired = false, planApplicable = false, identityProviders = [], kycVerifiesEmail = false) {
|
|
5918
5918
|
const identityProvidersKey = JSON.stringify(identityProviders);
|
|
5919
|
-
const previousIdentityProvidersKey =
|
|
5920
|
-
const [state, setState] =
|
|
5919
|
+
const previousIdentityProvidersKey = React39.useRef(identityProvidersKey);
|
|
5920
|
+
const [state, setState] = React39.useState(() => {
|
|
5921
5921
|
const cached = cachedSnapshotFor(identityProvidersKey, identityProviders);
|
|
5922
5922
|
if (cached) {
|
|
5923
5923
|
return {
|
|
@@ -5932,7 +5932,7 @@ function useOnboardingState(identityRequired = false, planApplicable = false, id
|
|
|
5932
5932
|
}
|
|
5933
5933
|
return { status: "checking", snapshot: null };
|
|
5934
5934
|
});
|
|
5935
|
-
|
|
5935
|
+
React39.useEffect(() => {
|
|
5936
5936
|
if (state.status !== "checking") return;
|
|
5937
5937
|
let cancelled = false;
|
|
5938
5938
|
(async () => {
|
|
@@ -5967,14 +5967,14 @@ function useOnboardingState(identityRequired = false, planApplicable = false, id
|
|
|
5967
5967
|
cancelled = true;
|
|
5968
5968
|
};
|
|
5969
5969
|
}, [state.status, identityRequired, identityProvidersKey, planApplicable]);
|
|
5970
|
-
|
|
5970
|
+
React39.useEffect(() => {
|
|
5971
5971
|
const notify = () => setState({ status: "checking", snapshot: null });
|
|
5972
5972
|
subscribers.add(notify);
|
|
5973
5973
|
return () => {
|
|
5974
5974
|
subscribers.delete(notify);
|
|
5975
5975
|
};
|
|
5976
5976
|
}, []);
|
|
5977
|
-
|
|
5977
|
+
React39.useEffect(() => {
|
|
5978
5978
|
if (previousIdentityProvidersKey.current !== identityProvidersKey) {
|
|
5979
5979
|
previousIdentityProvidersKey.current = identityProvidersKey;
|
|
5980
5980
|
setState({ status: "checking", snapshot: null });
|
|
@@ -6018,14 +6018,14 @@ function clearDynamicSession() {
|
|
|
6018
6018
|
|
|
6019
6019
|
// src/react/AuthContext.tsx
|
|
6020
6020
|
init_WalletConfigContext();
|
|
6021
|
-
var WalletAuthContext =
|
|
6021
|
+
var WalletAuthContext = React39.createContext(void 0);
|
|
6022
6022
|
function WalletAuthProvider({ children }) {
|
|
6023
6023
|
const { onSessionBootstrapped, onBeforeLogout } = useWalletConfig();
|
|
6024
|
-
const [user, setUser] =
|
|
6025
|
-
const [isLoading, setIsLoading] =
|
|
6026
|
-
const [error, setError] =
|
|
6027
|
-
const [retryTick, setRetryTick] =
|
|
6028
|
-
const retryWhenOnline =
|
|
6024
|
+
const [user, setUser] = React39.useState(null);
|
|
6025
|
+
const [isLoading, setIsLoading] = React39.useState(true);
|
|
6026
|
+
const [error, setError] = React39.useState(null);
|
|
6027
|
+
const [retryTick, setRetryTick] = React39.useState(0);
|
|
6028
|
+
const retryWhenOnline = React39.useCallback(() => {
|
|
6029
6029
|
if (typeof window === "undefined") return;
|
|
6030
6030
|
const once = () => {
|
|
6031
6031
|
window.removeEventListener("online", once);
|
|
@@ -6034,7 +6034,7 @@ function WalletAuthProvider({ children }) {
|
|
|
6034
6034
|
window.addEventListener("online", once);
|
|
6035
6035
|
}, []);
|
|
6036
6036
|
const isAuthenticated = exports.authService.isAuthenticated();
|
|
6037
|
-
|
|
6037
|
+
React39.useEffect(() => {
|
|
6038
6038
|
const loadUserData = async () => {
|
|
6039
6039
|
if (isAuthenticated) {
|
|
6040
6040
|
try {
|
|
@@ -6064,12 +6064,12 @@ function WalletAuthProvider({ children }) {
|
|
|
6064
6064
|
};
|
|
6065
6065
|
loadUserData();
|
|
6066
6066
|
}, [isAuthenticated, retryTick]);
|
|
6067
|
-
|
|
6067
|
+
React39.useEffect(() => {
|
|
6068
6068
|
if (user?.id) {
|
|
6069
6069
|
invalidateWalletCount();
|
|
6070
6070
|
}
|
|
6071
6071
|
}, [user?.id]);
|
|
6072
|
-
|
|
6072
|
+
React39.useEffect(() => {
|
|
6073
6073
|
return () => {
|
|
6074
6074
|
tokenRenewalService.stopRenewal();
|
|
6075
6075
|
};
|
|
@@ -6166,7 +6166,7 @@ function WalletAuthProvider({ children }) {
|
|
|
6166
6166
|
return /* @__PURE__ */ jsxRuntime.jsx(WalletAuthContext.Provider, { value, children });
|
|
6167
6167
|
}
|
|
6168
6168
|
function useAuth() {
|
|
6169
|
-
const context =
|
|
6169
|
+
const context = React39.useContext(WalletAuthContext);
|
|
6170
6170
|
if (context === void 0) {
|
|
6171
6171
|
throw new Error("useAuth must be used within a <WalletAuthProvider>");
|
|
6172
6172
|
}
|
|
@@ -6469,8 +6469,8 @@ function loadModule() {
|
|
|
6469
6469
|
return inflight;
|
|
6470
6470
|
}
|
|
6471
6471
|
function useAvererModule() {
|
|
6472
|
-
const [mod, setMod] =
|
|
6473
|
-
|
|
6472
|
+
const [mod, setMod] = React39.useState(cachedModule);
|
|
6473
|
+
React39.useEffect(() => {
|
|
6474
6474
|
if (mod) return;
|
|
6475
6475
|
let cancelled = false;
|
|
6476
6476
|
loadModule().then((resolved) => {
|
|
@@ -6489,7 +6489,7 @@ function AvererWalletBridgeInner({
|
|
|
6489
6489
|
children
|
|
6490
6490
|
}) {
|
|
6491
6491
|
const wallet = mod.useAvererWallet();
|
|
6492
|
-
|
|
6492
|
+
React39.useEffect(() => {
|
|
6493
6493
|
walletRef.current = wallet ?? null;
|
|
6494
6494
|
}, [wallet, walletRef]);
|
|
6495
6495
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children });
|
|
@@ -6504,8 +6504,8 @@ function LazyAvererSdkGate({
|
|
|
6504
6504
|
const { AvererSdkProvider: AvererSdkProvider3 } = mod;
|
|
6505
6505
|
return /* @__PURE__ */ jsxRuntime.jsx(AvererSdkProvider3, { configId, children: /* @__PURE__ */ jsxRuntime.jsx(AvererWalletBridgeInner, { mod, walletRef, children }) });
|
|
6506
6506
|
}
|
|
6507
|
-
var WalletSignerContext =
|
|
6508
|
-
var SilentSdkBoundary = class extends
|
|
6507
|
+
var WalletSignerContext = React39.createContext(null);
|
|
6508
|
+
var SilentSdkBoundary = class extends React39.Component {
|
|
6509
6509
|
constructor() {
|
|
6510
6510
|
super(...arguments);
|
|
6511
6511
|
this.state = { hasError: false };
|
|
@@ -6525,10 +6525,10 @@ var SilentSdkBoundary = class extends React55.Component {
|
|
|
6525
6525
|
}
|
|
6526
6526
|
};
|
|
6527
6527
|
function usePathname() {
|
|
6528
|
-
const [path, setPath] =
|
|
6528
|
+
const [path, setPath] = React39.useState(
|
|
6529
6529
|
() => typeof window !== "undefined" ? window.location.pathname : "/"
|
|
6530
6530
|
);
|
|
6531
|
-
|
|
6531
|
+
React39.useEffect(() => {
|
|
6532
6532
|
if (typeof window === "undefined") return;
|
|
6533
6533
|
const onChange = () => setPath(window.location.pathname);
|
|
6534
6534
|
window.addEventListener("popstate", onChange);
|
|
@@ -6574,10 +6574,10 @@ function WalletSignerProvider({ children }) {
|
|
|
6574
6574
|
const { isAuthenticated } = useAuth();
|
|
6575
6575
|
const { disableGlobalSigner } = useWalletConfig();
|
|
6576
6576
|
const configId = config?.auth?.settings?.averer?.config_id ?? "";
|
|
6577
|
-
const walletRef =
|
|
6577
|
+
const walletRef = React39.useRef(null);
|
|
6578
6578
|
const pathname = usePathname();
|
|
6579
6579
|
const skipSdkRoute = pathname === "/login" || pathname === "/mcp/login" || pathname.startsWith("/onboarding");
|
|
6580
|
-
const signMessage =
|
|
6580
|
+
const signMessage = React39.useCallback(
|
|
6581
6581
|
async (messageHex, providerHint, ctxOrAddress) => {
|
|
6582
6582
|
const ctx = typeof ctxOrAddress === "string" ? { address: ctxOrAddress } : ctxOrAddress ?? {};
|
|
6583
6583
|
const hint = (providerHint || "").toLowerCase();
|
|
@@ -6625,7 +6625,7 @@ function WalletSignerProvider({ children }) {
|
|
|
6625
6625
|
},
|
|
6626
6626
|
[]
|
|
6627
6627
|
);
|
|
6628
|
-
const getEoaTransport =
|
|
6628
|
+
const getEoaTransport = React39.useCallback(
|
|
6629
6629
|
async (providerHint) => {
|
|
6630
6630
|
if (providerHint === "passkey") {
|
|
6631
6631
|
throw new Error("EOA operations are not supported for passkey keys.");
|
|
@@ -6653,7 +6653,7 @@ function WalletSignerProvider({ children }) {
|
|
|
6653
6653
|
},
|
|
6654
6654
|
[]
|
|
6655
6655
|
);
|
|
6656
|
-
const sendTransaction =
|
|
6656
|
+
const sendTransaction = React39.useCallback(
|
|
6657
6657
|
async (tx, providerHint) => {
|
|
6658
6658
|
const transport = await getEoaTransport(providerHint);
|
|
6659
6659
|
const txHash = await transport.request("eth_sendTransaction", [tx]);
|
|
@@ -6664,14 +6664,14 @@ function WalletSignerProvider({ children }) {
|
|
|
6664
6664
|
},
|
|
6665
6665
|
[getEoaTransport]
|
|
6666
6666
|
);
|
|
6667
|
-
const request =
|
|
6667
|
+
const request = React39.useCallback(
|
|
6668
6668
|
async (method, params, providerHint) => {
|
|
6669
6669
|
const transport = await getEoaTransport(providerHint);
|
|
6670
6670
|
return transport.request(method, params);
|
|
6671
6671
|
},
|
|
6672
6672
|
[getEoaTransport]
|
|
6673
6673
|
);
|
|
6674
|
-
const value =
|
|
6674
|
+
const value = React39.useMemo(
|
|
6675
6675
|
() => ({ signMessage, sendTransaction, request }),
|
|
6676
6676
|
[signMessage, sendTransaction, request]
|
|
6677
6677
|
);
|
|
@@ -6681,7 +6681,7 @@ function WalletSignerProvider({ children }) {
|
|
|
6681
6681
|
return /* @__PURE__ */ jsxRuntime.jsx(WalletSignerContext.Provider, { value, children: /* @__PURE__ */ jsxRuntime.jsx(SilentSdkBoundary, { fallback: children, children: /* @__PURE__ */ jsxRuntime.jsx(LazyAvererSdkGate, { configId, walletRef, children }) }) });
|
|
6682
6682
|
}
|
|
6683
6683
|
function useWalletSigner() {
|
|
6684
|
-
const ctx =
|
|
6684
|
+
const ctx = React39.useContext(WalletSignerContext);
|
|
6685
6685
|
if (!ctx) {
|
|
6686
6686
|
throw new Error("useWalletSigner must be used inside <WalletSignerProvider>");
|
|
6687
6687
|
}
|
|
@@ -7824,13 +7824,13 @@ function getWebSocketChannelManager(url, getAccessToken) {
|
|
|
7824
7824
|
init_config();
|
|
7825
7825
|
init_jwtClaims();
|
|
7826
7826
|
init_WalletConfigContext();
|
|
7827
|
-
var SignatureQueueContext =
|
|
7827
|
+
var SignatureQueueContext = React39.createContext(null);
|
|
7828
7828
|
function SignatureQueueProvider({ children }) {
|
|
7829
7829
|
const value = useSignatureQueueInternal();
|
|
7830
7830
|
return /* @__PURE__ */ jsxRuntime.jsx(SignatureQueueContext.Provider, { value, children });
|
|
7831
7831
|
}
|
|
7832
7832
|
function useSignatureQueue() {
|
|
7833
|
-
const ctx =
|
|
7833
|
+
const ctx = React39.useContext(SignatureQueueContext);
|
|
7834
7834
|
const fallback = useSignatureQueueInternal(ctx !== null);
|
|
7835
7835
|
return ctx ?? fallback;
|
|
7836
7836
|
}
|
|
@@ -7838,12 +7838,12 @@ function useSignatureQueueInternal(inert = false) {
|
|
|
7838
7838
|
const { user, isAuthenticated } = useAuth();
|
|
7839
7839
|
const { webSocketUrl } = useWalletConfig();
|
|
7840
7840
|
const tokenStore = useTokenStore();
|
|
7841
|
-
const [pending, setPending] =
|
|
7842
|
-
const [pendingList, setPendingList] =
|
|
7843
|
-
const [currentMessage, setCurrentMessage] =
|
|
7844
|
-
const [drawerOpen, setDrawerOpen] =
|
|
7845
|
-
const surfacedRef =
|
|
7846
|
-
const fetchAndSetPending =
|
|
7841
|
+
const [pending, setPending] = React39.useState(null);
|
|
7842
|
+
const [pendingList, setPendingList] = React39.useState([]);
|
|
7843
|
+
const [currentMessage, setCurrentMessage] = React39.useState(null);
|
|
7844
|
+
const [drawerOpen, setDrawerOpen] = React39.useState(false);
|
|
7845
|
+
const surfacedRef = React39.useRef(/* @__PURE__ */ new Set());
|
|
7846
|
+
const fetchAndSetPending = React39.useCallback(async () => {
|
|
7847
7847
|
if (inert || !user?.id) return;
|
|
7848
7848
|
try {
|
|
7849
7849
|
const awaiting = await messagesService.getMessagesAwaitingSignature(user.id);
|
|
@@ -7865,7 +7865,7 @@ function useSignatureQueueInternal(inert = false) {
|
|
|
7865
7865
|
console.warn("[useSignatureQueue] refresh failed");
|
|
7866
7866
|
}
|
|
7867
7867
|
}, [inert, user?.id]);
|
|
7868
|
-
|
|
7868
|
+
React39.useEffect(() => {
|
|
7869
7869
|
if (inert) return;
|
|
7870
7870
|
if (!isAuthenticated || !user?.id) return;
|
|
7871
7871
|
if (!getActiveChainId()) return;
|
|
@@ -7921,7 +7921,7 @@ function useSignatureQueueInternal(inert = false) {
|
|
|
7921
7921
|
}
|
|
7922
7922
|
};
|
|
7923
7923
|
}, [inert, isAuthenticated, user?.id, webSocketUrl, fetchAndSetPending, tokenStore]);
|
|
7924
|
-
const openSigner =
|
|
7924
|
+
const openSigner = React39.useCallback(
|
|
7925
7925
|
(message) => {
|
|
7926
7926
|
const target = message ?? pending;
|
|
7927
7927
|
if (!target) return;
|
|
@@ -7930,14 +7930,14 @@ function useSignatureQueueInternal(inert = false) {
|
|
|
7930
7930
|
},
|
|
7931
7931
|
[pending]
|
|
7932
7932
|
);
|
|
7933
|
-
const closeSigner =
|
|
7933
|
+
const closeSigner = React39.useCallback(() => {
|
|
7934
7934
|
setDrawerOpen(false);
|
|
7935
7935
|
setCurrentMessage(null);
|
|
7936
7936
|
}, []);
|
|
7937
|
-
const dismissPending =
|
|
7937
|
+
const dismissPending = React39.useCallback(() => {
|
|
7938
7938
|
setPending(null);
|
|
7939
7939
|
}, []);
|
|
7940
|
-
|
|
7940
|
+
React39.useEffect(() => {
|
|
7941
7941
|
if (inert) return;
|
|
7942
7942
|
if (!isAuthenticated) {
|
|
7943
7943
|
setDrawerOpen(false);
|
|
@@ -8681,15 +8681,15 @@ init_delegationScopes();
|
|
|
8681
8681
|
init_tokenManager();
|
|
8682
8682
|
init_jwtClaims();
|
|
8683
8683
|
init_jwtPayload();
|
|
8684
|
-
var AppAuthContext =
|
|
8684
|
+
var AppAuthContext = React39.createContext(void 0);
|
|
8685
8685
|
function AppAuthProvider({ children }) {
|
|
8686
8686
|
const walletAuth = useAuth();
|
|
8687
8687
|
const { isAuthenticated, user, isLoading: walletLoading } = walletAuth;
|
|
8688
|
-
const [groups, setGroups] =
|
|
8689
|
-
const [groupsLoaded, setGroupsLoaded] =
|
|
8690
|
-
const [delegationToken, setDelegationToken] =
|
|
8691
|
-
const [delegationSession, setDelegationSession] =
|
|
8692
|
-
|
|
8688
|
+
const [groups, setGroups] = React39.useState([]);
|
|
8689
|
+
const [groupsLoaded, setGroupsLoaded] = React39.useState(false);
|
|
8690
|
+
const [delegationToken, setDelegationToken] = React39.useState(null);
|
|
8691
|
+
const [delegationSession, setDelegationSession] = React39.useState(null);
|
|
8692
|
+
React39.useEffect(() => {
|
|
8693
8693
|
if (!isAuthenticated) {
|
|
8694
8694
|
setGroups([]);
|
|
8695
8695
|
setGroupsLoaded(false);
|
|
@@ -8720,7 +8720,7 @@ function AppAuthProvider({ children }) {
|
|
|
8720
8720
|
cancelled = true;
|
|
8721
8721
|
};
|
|
8722
8722
|
}, [isAuthenticated, walletLoading, user]);
|
|
8723
|
-
|
|
8723
|
+
React39.useEffect(() => {
|
|
8724
8724
|
if (!isAuthenticated) {
|
|
8725
8725
|
setDelegationToken(null);
|
|
8726
8726
|
setDelegationSession(null);
|
|
@@ -8733,7 +8733,7 @@ function AppAuthProvider({ children }) {
|
|
|
8733
8733
|
sync();
|
|
8734
8734
|
return exports.tokenManager.subscribe(sync);
|
|
8735
8735
|
}, [isAuthenticated]);
|
|
8736
|
-
const refreshGroups =
|
|
8736
|
+
const refreshGroups = React39.useCallback(async () => {
|
|
8737
8737
|
if (!isAuthenticated) return;
|
|
8738
8738
|
try {
|
|
8739
8739
|
const userGroups = await groupsService.getUserGroups();
|
|
@@ -8743,7 +8743,7 @@ function AppAuthProvider({ children }) {
|
|
|
8743
8743
|
console.warn("AppAuthContext.refreshGroups failed:", err);
|
|
8744
8744
|
}
|
|
8745
8745
|
}, [isAuthenticated]);
|
|
8746
|
-
const createDelegationToken =
|
|
8746
|
+
const createDelegationToken = React39.useCallback(async (group) => {
|
|
8747
8747
|
const response = await exports.delegationService.createDelegationToken({
|
|
8748
8748
|
group_id: group.id,
|
|
8749
8749
|
delegation_scope: [...exports.DEFAULT_APP_DELEGATION_SCOPE],
|
|
@@ -8760,7 +8760,7 @@ function AppAuthProvider({ children }) {
|
|
|
8760
8760
|
expiresAt: expirationTime
|
|
8761
8761
|
});
|
|
8762
8762
|
}, []);
|
|
8763
|
-
const assumeOwnedGroup =
|
|
8763
|
+
const assumeOwnedGroup = React39.useCallback(async (group, signerKeyId, delegationScope = exports.DEFAULT_OWNED_GROUP_DELEGATION_SCOPE) => {
|
|
8764
8764
|
const parent = exports.tokenManager.getDelegationSessionMetadata();
|
|
8765
8765
|
const parentToken = exports.tokenManager.getDelegationToken();
|
|
8766
8766
|
if (parent?.kind !== "direct" || !parentToken) {
|
|
@@ -8811,11 +8811,11 @@ function AppAuthProvider({ children }) {
|
|
|
8811
8811
|
});
|
|
8812
8812
|
return response;
|
|
8813
8813
|
}, []);
|
|
8814
|
-
const returnToParent =
|
|
8815
|
-
const clearDelegationToken =
|
|
8814
|
+
const returnToParent = React39.useCallback(() => exports.tokenManager.restoreParentDelegationSession(), []);
|
|
8815
|
+
const clearDelegationToken = React39.useCallback(() => {
|
|
8816
8816
|
exports.tokenManager.clearDelegationToken();
|
|
8817
8817
|
}, []);
|
|
8818
|
-
const value =
|
|
8818
|
+
const value = React39.useMemo(
|
|
8819
8819
|
() => ({
|
|
8820
8820
|
...walletAuth,
|
|
8821
8821
|
groups,
|
|
@@ -8844,42 +8844,42 @@ function AppAuthProvider({ children }) {
|
|
|
8844
8844
|
return /* @__PURE__ */ jsxRuntime.jsx(AppAuthContext.Provider, { value, children });
|
|
8845
8845
|
}
|
|
8846
8846
|
function useAuthContext() {
|
|
8847
|
-
const ctx =
|
|
8847
|
+
const ctx = React39.useContext(AppAuthContext);
|
|
8848
8848
|
if (!ctx) {
|
|
8849
8849
|
throw new Error("useAuthContext must be used within an <AppAuthProvider>");
|
|
8850
8850
|
}
|
|
8851
8851
|
return ctx;
|
|
8852
8852
|
}
|
|
8853
|
-
var WalletCenterContext =
|
|
8853
|
+
var WalletCenterContext = React39.createContext(null);
|
|
8854
8854
|
function WalletCenterProvider({ children }) {
|
|
8855
|
-
const [isOpen, setIsOpen] =
|
|
8856
|
-
const [requestedView, setRequestedView] =
|
|
8857
|
-
const [host, setHostElement] =
|
|
8858
|
-
const [hostOptions, setHostOptions] =
|
|
8859
|
-
const [hostTitle, setHostTitle] =
|
|
8860
|
-
const setHost =
|
|
8855
|
+
const [isOpen, setIsOpen] = React39.useState(false);
|
|
8856
|
+
const [requestedView, setRequestedView] = React39.useState("menu");
|
|
8857
|
+
const [host, setHostElement] = React39.useState(null);
|
|
8858
|
+
const [hostOptions, setHostOptions] = React39.useState({});
|
|
8859
|
+
const [hostTitle, setHostTitle] = React39.useState(null);
|
|
8860
|
+
const setHost = React39.useCallback((next) => {
|
|
8861
8861
|
setHostElement((current) => {
|
|
8862
8862
|
if (current === next) return current;
|
|
8863
8863
|
if (!next) setHostTitle(null);
|
|
8864
8864
|
return next;
|
|
8865
8865
|
});
|
|
8866
8866
|
}, []);
|
|
8867
|
-
const openWalletCenter =
|
|
8867
|
+
const openWalletCenter = React39.useCallback((view = "menu") => {
|
|
8868
8868
|
setRequestedView(view);
|
|
8869
8869
|
setIsOpen(true);
|
|
8870
8870
|
}, []);
|
|
8871
|
-
const closeWalletCenter =
|
|
8871
|
+
const closeWalletCenter = React39.useCallback(() => {
|
|
8872
8872
|
setIsOpen(false);
|
|
8873
8873
|
setRequestedView("menu");
|
|
8874
8874
|
}, []);
|
|
8875
|
-
const value =
|
|
8875
|
+
const value = React39.useMemo(
|
|
8876
8876
|
() => ({ isOpen, requestedView, openWalletCenter, closeWalletCenter, host, setHost, hostOptions, setHostOptions, hostTitle, setHostTitle }),
|
|
8877
8877
|
[isOpen, requestedView, openWalletCenter, closeWalletCenter, host, setHost, hostOptions, hostTitle]
|
|
8878
8878
|
);
|
|
8879
8879
|
return /* @__PURE__ */ jsxRuntime.jsx(WalletCenterContext.Provider, { value, children });
|
|
8880
8880
|
}
|
|
8881
8881
|
function useWalletCenter() {
|
|
8882
|
-
const value =
|
|
8882
|
+
const value = React39.useContext(WalletCenterContext);
|
|
8883
8883
|
if (!value) {
|
|
8884
8884
|
throw new Error("useWalletCenter must be used within <WalletProvider>.");
|
|
8885
8885
|
}
|
|
@@ -8896,7 +8896,7 @@ init_WalletConfigContext();
|
|
|
8896
8896
|
init_WalletConfigContext();
|
|
8897
8897
|
function RedirectTo({ href, replace = true }) {
|
|
8898
8898
|
const navigate = useWalletNavigate();
|
|
8899
|
-
|
|
8899
|
+
React39.useEffect(() => {
|
|
8900
8900
|
navigate(href, { replace });
|
|
8901
8901
|
}, []);
|
|
8902
8902
|
return null;
|
|
@@ -9172,14 +9172,14 @@ var _GlobalNotificationService = class _GlobalNotificationService {
|
|
|
9172
9172
|
_GlobalNotificationService.instance = null;
|
|
9173
9173
|
var GlobalNotificationService = _GlobalNotificationService;
|
|
9174
9174
|
var globalNotificationService_default = GlobalNotificationService;
|
|
9175
|
-
var EntitySSEContext =
|
|
9175
|
+
var EntitySSEContext = React39.createContext(void 0);
|
|
9176
9176
|
var EntitySSEProvider = ({ children }) => {
|
|
9177
9177
|
const { user } = useAuthContext();
|
|
9178
|
-
const [connected, setConnected] =
|
|
9179
|
-
const [currentEntityId, setCurrentEntityId] =
|
|
9180
|
-
const unsubRef =
|
|
9181
|
-
const handlersRef =
|
|
9182
|
-
const [activityLog, setActivityLog] =
|
|
9178
|
+
const [connected, setConnected] = React39.useState(false);
|
|
9179
|
+
const [currentEntityId, setCurrentEntityId] = React39.useState(user?.id || null);
|
|
9180
|
+
const unsubRef = React39.useRef(null);
|
|
9181
|
+
const handlersRef = React39.useRef(/* @__PURE__ */ new Map());
|
|
9182
|
+
const [activityLog, setActivityLog] = React39.useState(() => {
|
|
9183
9183
|
try {
|
|
9184
9184
|
const stored = localStorage.getItem("sse_activity_log");
|
|
9185
9185
|
return stored ? JSON.parse(stored) : [];
|
|
@@ -9187,7 +9187,7 @@ var EntitySSEProvider = ({ children }) => {
|
|
|
9187
9187
|
return [];
|
|
9188
9188
|
}
|
|
9189
9189
|
});
|
|
9190
|
-
|
|
9190
|
+
React39.useEffect(() => {
|
|
9191
9191
|
if (user?.id) {
|
|
9192
9192
|
if (!currentEntityId) {
|
|
9193
9193
|
setCurrentEntityId(user.id);
|
|
@@ -9196,7 +9196,7 @@ var EntitySSEProvider = ({ children }) => {
|
|
|
9196
9196
|
setCurrentEntityId(null);
|
|
9197
9197
|
}
|
|
9198
9198
|
}, [user?.id, currentEntityId]);
|
|
9199
|
-
|
|
9199
|
+
React39.useEffect(() => {
|
|
9200
9200
|
const handleEntitySwitch = (event) => {
|
|
9201
9201
|
const { actingAs } = event.detail;
|
|
9202
9202
|
if (!actingAs) return;
|
|
@@ -9221,7 +9221,7 @@ var EntitySSEProvider = ({ children }) => {
|
|
|
9221
9221
|
window.removeEventListener("entitySwitched", handleEntitySwitch);
|
|
9222
9222
|
};
|
|
9223
9223
|
}, [currentEntityId]);
|
|
9224
|
-
|
|
9224
|
+
React39.useEffect(() => {
|
|
9225
9225
|
if (!currentEntityId) return;
|
|
9226
9226
|
unsubRef.current?.();
|
|
9227
9227
|
const unsub = subscribeEntityEvents(
|
|
@@ -9321,7 +9321,7 @@ var EntitySSEProvider = ({ children }) => {
|
|
|
9321
9321
|
setConnected(false);
|
|
9322
9322
|
};
|
|
9323
9323
|
}, [currentEntityId]);
|
|
9324
|
-
const subscribeToEvent =
|
|
9324
|
+
const subscribeToEvent = React39.useCallback(
|
|
9325
9325
|
(eventType, handler) => {
|
|
9326
9326
|
if (!handlersRef.current.has(eventType)) {
|
|
9327
9327
|
handlersRef.current.set(eventType, /* @__PURE__ */ new Set());
|
|
@@ -9347,7 +9347,7 @@ var EntitySSEProvider = ({ children }) => {
|
|
|
9347
9347
|
return /* @__PURE__ */ jsxRuntime.jsx(EntitySSEContext.Provider, { value: contextValue, children });
|
|
9348
9348
|
};
|
|
9349
9349
|
var useEntitySSE = () => {
|
|
9350
|
-
const context =
|
|
9350
|
+
const context = React39.useContext(EntitySSEContext);
|
|
9351
9351
|
if (context === void 0) {
|
|
9352
9352
|
throw new Error("useEntitySSE must be used within an EntitySSEProvider");
|
|
9353
9353
|
}
|
|
@@ -9576,19 +9576,19 @@ var GroupOwnershipPanel = ({
|
|
|
9576
9576
|
onChanged,
|
|
9577
9577
|
className = ""
|
|
9578
9578
|
}) => {
|
|
9579
|
-
const [relationships, setRelationships] =
|
|
9580
|
-
const [parentGroupId, setParentGroupId] =
|
|
9581
|
-
const [loading, setLoading] =
|
|
9582
|
-
const [submittingId, setSubmittingId] =
|
|
9583
|
-
const [error, setError] =
|
|
9579
|
+
const [relationships, setRelationships] = React39.useState([]);
|
|
9580
|
+
const [parentGroupId, setParentGroupId] = React39.useState("");
|
|
9581
|
+
const [loading, setLoading] = React39.useState(false);
|
|
9582
|
+
const [submittingId, setSubmittingId] = React39.useState(null);
|
|
9583
|
+
const [error, setError] = React39.useState(null);
|
|
9584
9584
|
const isOwner = currentRole === "owner";
|
|
9585
9585
|
const isDirectChildContext = activeDirectGroupId === childGroup.id;
|
|
9586
9586
|
const canMutate = isOwner && isDirectChildContext && accountReady && Boolean(chainId);
|
|
9587
|
-
const labelById =
|
|
9587
|
+
const labelById = React39.useMemo(
|
|
9588
9588
|
() => new Map(availableParentGroups.map((group) => [group.id, group.name])),
|
|
9589
9589
|
[availableParentGroups]
|
|
9590
9590
|
);
|
|
9591
|
-
const loadRelationships =
|
|
9591
|
+
const loadRelationships = React39.useCallback(async () => {
|
|
9592
9592
|
if (!chainId) {
|
|
9593
9593
|
setRelationships([]);
|
|
9594
9594
|
return;
|
|
@@ -9608,7 +9608,7 @@ var GroupOwnershipPanel = ({
|
|
|
9608
9608
|
setLoading(false);
|
|
9609
9609
|
}
|
|
9610
9610
|
}, [chainId, childGroup.id]);
|
|
9611
|
-
|
|
9611
|
+
React39.useEffect(() => {
|
|
9612
9612
|
void loadRelationships();
|
|
9613
9613
|
}, [loadRelationships]);
|
|
9614
9614
|
const commit = async (relationship) => {
|
|
@@ -9975,7 +9975,7 @@ function writeStoredPendingSponsorship(pending) {
|
|
|
9975
9975
|
} catch {
|
|
9976
9976
|
}
|
|
9977
9977
|
}
|
|
9978
|
-
var WizardContext =
|
|
9978
|
+
var WizardContext = React39.createContext(null);
|
|
9979
9979
|
function WizardProvider({
|
|
9980
9980
|
initialPathname = "/onboarding",
|
|
9981
9981
|
onComplete,
|
|
@@ -9985,18 +9985,18 @@ function WizardProvider({
|
|
|
9985
9985
|
}) {
|
|
9986
9986
|
const { onNavigate: hostNavigate, ...restConfig } = useWalletConfig();
|
|
9987
9987
|
const { bootstrapSession } = useAuth();
|
|
9988
|
-
const [pendingSponsorship, setPendingSponsorship] =
|
|
9989
|
-
const [pathname, setPathname] =
|
|
9988
|
+
const [pendingSponsorship, setPendingSponsorship] = React39.useState(readStoredPendingSponsorship);
|
|
9989
|
+
const [pathname, setPathname] = React39.useState(
|
|
9990
9990
|
() => pendingSponsorship ? "/onboarding/sponsorship" : initialPathname
|
|
9991
9991
|
);
|
|
9992
|
-
const [state, setStateValue] =
|
|
9993
|
-
const [planSelection, setPlanSelection] =
|
|
9992
|
+
const [state, setStateValue] = React39.useState(void 0);
|
|
9993
|
+
const [planSelection, setPlanSelection] = React39.useState(
|
|
9994
9994
|
readOnboardingPlanSelectionHint
|
|
9995
9995
|
);
|
|
9996
|
-
const pendingSponsorshipRef =
|
|
9996
|
+
const pendingSponsorshipRef = React39__default.default.useRef(
|
|
9997
9997
|
pendingSponsorship
|
|
9998
9998
|
);
|
|
9999
|
-
const stageSponsorship =
|
|
9999
|
+
const stageSponsorship = React39.useCallback((groupId, destination) => {
|
|
10000
10000
|
const normalizedGroupId = canonicalSponsorGroupId(groupId);
|
|
10001
10001
|
const userId = currentRegularUserId();
|
|
10002
10002
|
if (!userId) {
|
|
@@ -10014,7 +10014,7 @@ function WizardProvider({
|
|
|
10014
10014
|
writeStoredPendingSponsorship(next);
|
|
10015
10015
|
return next;
|
|
10016
10016
|
}, []);
|
|
10017
|
-
const selectPlan =
|
|
10017
|
+
const selectPlan = React39.useCallback((plan, catalogVersion) => {
|
|
10018
10018
|
const next = {
|
|
10019
10019
|
planId: plan.id,
|
|
10020
10020
|
ownerType: plan.owner_type,
|
|
@@ -10024,7 +10024,7 @@ function WizardProvider({
|
|
|
10024
10024
|
setPlanSelection(next);
|
|
10025
10025
|
writeOnboardingPlanSelectionHint(next);
|
|
10026
10026
|
}, []);
|
|
10027
|
-
const hydratePlanSelection =
|
|
10027
|
+
const hydratePlanSelection = React39.useCallback(
|
|
10028
10028
|
(plan, catalogVersion, selectedAt = Date.now()) => {
|
|
10029
10029
|
setPlanSelection({
|
|
10030
10030
|
planId: plan.id,
|
|
@@ -10036,11 +10036,11 @@ function WizardProvider({
|
|
|
10036
10036
|
},
|
|
10037
10037
|
[]
|
|
10038
10038
|
);
|
|
10039
|
-
const clearPlanSelection =
|
|
10039
|
+
const clearPlanSelection = React39.useCallback(() => {
|
|
10040
10040
|
setPlanSelection(null);
|
|
10041
10041
|
clearOnboardingPlanSelectionHint();
|
|
10042
10042
|
}, []);
|
|
10043
|
-
const syncPlanIntent =
|
|
10043
|
+
const syncPlanIntent = React39.useCallback(async () => {
|
|
10044
10044
|
if (!planSelection || !exports.authService.isAuthenticated()) return null;
|
|
10045
10045
|
const response = await onboardingPlanService.selectIntent(planSelection.planId);
|
|
10046
10046
|
const current = response.intent?.current_plan;
|
|
@@ -10056,7 +10056,7 @@ function WizardProvider({
|
|
|
10056
10056
|
}
|
|
10057
10057
|
return response;
|
|
10058
10058
|
}, [planSelection]);
|
|
10059
|
-
const navigate =
|
|
10059
|
+
const navigate = React39.useCallback(
|
|
10060
10060
|
(to, opts) => {
|
|
10061
10061
|
if (to.startsWith("/onboarding")) {
|
|
10062
10062
|
setPathname(to);
|
|
@@ -10086,7 +10086,7 @@ function WizardProvider({
|
|
|
10086
10086
|
},
|
|
10087
10087
|
[clearPlanSelection, hostNavigate, onComplete]
|
|
10088
10088
|
);
|
|
10089
|
-
const continueAuthenticated =
|
|
10089
|
+
const continueAuthenticated = React39.useCallback(async (destination, expectedSponsor) => {
|
|
10090
10090
|
await bootstrapSession();
|
|
10091
10091
|
if (expectedSponsor && !exports.authService.hasExactSponsoredSession(expectedSponsor)) {
|
|
10092
10092
|
throw new Error(
|
|
@@ -10101,12 +10101,12 @@ function WizardProvider({
|
|
|
10101
10101
|
}
|
|
10102
10102
|
navigate(destination);
|
|
10103
10103
|
}, [bootstrapSession, navigate, syncPlanIntent]);
|
|
10104
|
-
const discardSponsorship =
|
|
10104
|
+
const discardSponsorship = React39.useCallback(() => {
|
|
10105
10105
|
pendingSponsorshipRef.current = null;
|
|
10106
10106
|
setPendingSponsorship(null);
|
|
10107
10107
|
clearStoredPendingSponsorship();
|
|
10108
10108
|
}, []);
|
|
10109
|
-
const finishSponsorship =
|
|
10109
|
+
const finishSponsorship = React39.useCallback(async () => {
|
|
10110
10110
|
const pending = pendingSponsorshipRef.current;
|
|
10111
10111
|
if (!pending) {
|
|
10112
10112
|
throw new Error("No platform sponsorship continuation is awaiting completion.");
|
|
@@ -10132,7 +10132,7 @@ function WizardProvider({
|
|
|
10132
10132
|
clearStoredPendingSponsorship();
|
|
10133
10133
|
navigate(pending.destination);
|
|
10134
10134
|
}, [bootstrapSession, navigate, syncPlanIntent]);
|
|
10135
|
-
const completeAuthentication =
|
|
10135
|
+
const completeAuthentication = React39.useCallback(async (result, destination, effectivePlatform) => {
|
|
10136
10136
|
const currentUserId = currentRegularUserId();
|
|
10137
10137
|
if (!currentUserId || currentUserId !== result.user_id) {
|
|
10138
10138
|
throw new Error("The returned authentication session did not match the signed-in user.");
|
|
@@ -10170,11 +10170,11 @@ function WizardProvider({
|
|
|
10170
10170
|
}
|
|
10171
10171
|
await continueAuthenticated(destination);
|
|
10172
10172
|
}, [bootstrapSession, continueAuthenticated, finishSponsorship, stageSponsorship]);
|
|
10173
|
-
const params =
|
|
10173
|
+
const params = React39.useMemo(() => {
|
|
10174
10174
|
const provider = matchProviderParam(pathname);
|
|
10175
10175
|
return provider ? { provider } : {};
|
|
10176
10176
|
}, [pathname]);
|
|
10177
|
-
const wizardValue =
|
|
10177
|
+
const wizardValue = React39.useMemo(
|
|
10178
10178
|
() => ({
|
|
10179
10179
|
pathname,
|
|
10180
10180
|
state,
|
|
@@ -10212,7 +10212,7 @@ function WizardProvider({
|
|
|
10212
10212
|
discardSponsorship
|
|
10213
10213
|
]
|
|
10214
10214
|
);
|
|
10215
|
-
const overriddenConfig =
|
|
10215
|
+
const overriddenConfig = React39.useMemo(
|
|
10216
10216
|
() => ({
|
|
10217
10217
|
...restConfig,
|
|
10218
10218
|
onNavigate: (href, opts) => navigate(href, { replace: opts?.replace })
|
|
@@ -10240,7 +10240,7 @@ function matchProviderParam(pathname) {
|
|
|
10240
10240
|
return match ? match[1] : void 0;
|
|
10241
10241
|
}
|
|
10242
10242
|
function useWizard() {
|
|
10243
|
-
const ctx =
|
|
10243
|
+
const ctx = React39.useContext(WizardContext);
|
|
10244
10244
|
if (!ctx) {
|
|
10245
10245
|
throw new Error(
|
|
10246
10246
|
"Wizard hooks must be used inside <WizardProvider> (mounted by <OnboardingWizard>)."
|
|
@@ -10258,7 +10258,7 @@ function useWizardParams() {
|
|
|
10258
10258
|
}
|
|
10259
10259
|
function WizardRedirect({ to, replace }) {
|
|
10260
10260
|
const navigate = useWizardNavigate();
|
|
10261
|
-
|
|
10261
|
+
React39.useEffect(() => {
|
|
10262
10262
|
navigate(to, { replace });
|
|
10263
10263
|
}, []);
|
|
10264
10264
|
return null;
|
|
@@ -10375,20 +10375,20 @@ var DEFAULT_MESSAGES = {
|
|
|
10375
10375
|
retryButtonText: "Try again"
|
|
10376
10376
|
}
|
|
10377
10377
|
};
|
|
10378
|
-
var BrandingContext =
|
|
10378
|
+
var BrandingContext = React39.createContext(null);
|
|
10379
10379
|
var ROOT_BRANDING = {
|
|
10380
10380
|
logo: DEFAULT_LOGO(),
|
|
10381
10381
|
messages: DEFAULT_MESSAGES
|
|
10382
10382
|
};
|
|
10383
10383
|
function useBranding() {
|
|
10384
|
-
return
|
|
10384
|
+
return React39.useContext(BrandingContext) ?? ROOT_BRANDING;
|
|
10385
10385
|
}
|
|
10386
10386
|
function BrandingProvider({
|
|
10387
10387
|
branding,
|
|
10388
10388
|
children
|
|
10389
10389
|
}) {
|
|
10390
|
-
const parent =
|
|
10391
|
-
const value =
|
|
10390
|
+
const parent = React39.useContext(BrandingContext) ?? ROOT_BRANDING;
|
|
10391
|
+
const value = React39.useMemo(() => {
|
|
10392
10392
|
if (!branding) return parent;
|
|
10393
10393
|
const { logo, logoSize, messages } = branding;
|
|
10394
10394
|
return {
|
|
@@ -10536,11 +10536,11 @@ init_ProviderConfigContext();
|
|
|
10536
10536
|
// src/react/useOnboardingRouting.ts
|
|
10537
10537
|
init_authService();
|
|
10538
10538
|
function useOnboardingState2() {
|
|
10539
|
-
const [state, setState] =
|
|
10539
|
+
const [state, setState] = React39.useState({
|
|
10540
10540
|
step: "unknown",
|
|
10541
10541
|
isLoading: true
|
|
10542
10542
|
});
|
|
10543
|
-
|
|
10543
|
+
React39.useEffect(() => {
|
|
10544
10544
|
let cancelled = false;
|
|
10545
10545
|
(async () => {
|
|
10546
10546
|
if (!exports.authService.isAuthenticated()) {
|
|
@@ -10716,11 +10716,11 @@ function SelectPlan({
|
|
|
10716
10716
|
const wizardPlatform = useWizardPlatform();
|
|
10717
10717
|
const { config, isLoading: configLoading } = useProviderConfig();
|
|
10718
10718
|
const { isAuthenticated, isLoading: authLoading } = useAuth();
|
|
10719
|
-
const [catalog, setCatalog] =
|
|
10720
|
-
const [error, setError] =
|
|
10721
|
-
const [attempt, setAttempt] =
|
|
10719
|
+
const [catalog, setCatalog] = React39.useState(null);
|
|
10720
|
+
const [error, setError] = React39.useState(null);
|
|
10721
|
+
const [attempt, setAttempt] = React39.useState(0);
|
|
10722
10722
|
const platformTagged = !!(wizardPlatform ?? config?.platform?.group_id);
|
|
10723
|
-
|
|
10723
|
+
React39.useEffect(() => {
|
|
10724
10724
|
if (configLoading || authLoading || platformTagged || isAuthenticated) return;
|
|
10725
10725
|
let disposed = false;
|
|
10726
10726
|
setCatalog(null);
|
|
@@ -10736,7 +10736,7 @@ function SelectPlan({
|
|
|
10736
10736
|
disposed = true;
|
|
10737
10737
|
};
|
|
10738
10738
|
}, [attempt, authLoading, configLoading, isAuthenticated, platformTagged]);
|
|
10739
|
-
|
|
10739
|
+
React39.useEffect(() => {
|
|
10740
10740
|
if (platformTagged || catalog && !catalog.prepaid_credits_enabled) {
|
|
10741
10741
|
clearPlanSelection();
|
|
10742
10742
|
}
|
|
@@ -10933,9 +10933,9 @@ async function signInWithPasskey(opts = {}) {
|
|
|
10933
10933
|
return await res.json();
|
|
10934
10934
|
}
|
|
10935
10935
|
function PasskeyMethodButton({ mode, chainId, onSuccess, onError, platform }) {
|
|
10936
|
-
const [supported, setSupported] =
|
|
10937
|
-
const [busy, setBusy] =
|
|
10938
|
-
|
|
10936
|
+
const [supported, setSupported] = React39.useState(true);
|
|
10937
|
+
const [busy, setBusy] = React39.useState(false);
|
|
10938
|
+
React39.useEffect(() => {
|
|
10939
10939
|
const ok = typeof window !== "undefined" && !!window.PublicKeyCredential;
|
|
10940
10940
|
setSupported(ok);
|
|
10941
10941
|
}, []);
|
|
@@ -11026,9 +11026,9 @@ var ChooserCard = ({ onSelect, isPrimary }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
|
11026
11026
|
onSelect
|
|
11027
11027
|
}
|
|
11028
11028
|
);
|
|
11029
|
-
var LazyAvererSignupFlow =
|
|
11029
|
+
var LazyAvererSignupFlow = React39.lazy(() => Promise.resolve().then(() => (init_SignupFlow(), SignupFlow_exports)));
|
|
11030
11030
|
var SignupFlow2 = (props) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
11031
|
-
|
|
11031
|
+
React39.Suspense,
|
|
11032
11032
|
{
|
|
11033
11033
|
fallback: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-screen flex items-center justify-center bg-background text-text-secondary text-[13px]", children: "Loading Averer\u2026" }),
|
|
11034
11034
|
children: /* @__PURE__ */ jsxRuntime.jsx(LazyAvererSignupFlow, { ...props })
|
|
@@ -11045,9 +11045,9 @@ var AvererAuth = {
|
|
|
11045
11045
|
// squeezed into LoginLayout's narrow column.
|
|
11046
11046
|
customLayout: true
|
|
11047
11047
|
};
|
|
11048
|
-
var LazyAvererKycFlow =
|
|
11048
|
+
var LazyAvererKycFlow = React39.lazy(() => Promise.resolve().then(() => (init_KycFlow(), KycFlow_exports)));
|
|
11049
11049
|
var KycFlow2 = (props) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
11050
|
-
|
|
11050
|
+
React39.Suspense,
|
|
11051
11051
|
{
|
|
11052
11052
|
fallback: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center text-[12px] text-text-secondary", children: "Loading Averer\u2026" }),
|
|
11053
11053
|
children: /* @__PURE__ */ jsxRuntime.jsx(LazyAvererKycFlow, { ...props })
|
|
@@ -11066,8 +11066,8 @@ function SdkGate({
|
|
|
11066
11066
|
hasConfig = true,
|
|
11067
11067
|
configHint
|
|
11068
11068
|
}) {
|
|
11069
|
-
const [state, setState] =
|
|
11070
|
-
|
|
11069
|
+
const [state, setState] = React39.useState({ status: "loading" });
|
|
11070
|
+
React39.useEffect(() => {
|
|
11071
11071
|
let cancelled = false;
|
|
11072
11072
|
(async () => {
|
|
11073
11073
|
try {
|
|
@@ -11207,8 +11207,8 @@ var DynamicCompleter = ({ sdk, action, onError }) => {
|
|
|
11207
11207
|
const ctx = sdk.useDynamicContext();
|
|
11208
11208
|
const wallet = ctx.primaryWallet;
|
|
11209
11209
|
const dynamicUser = ctx.user;
|
|
11210
|
-
const [done, setDone] =
|
|
11211
|
-
|
|
11210
|
+
const [done, setDone] = React39__default.default.useState(false);
|
|
11211
|
+
React39__default.default.useEffect(() => {
|
|
11212
11212
|
if (done || !wallet?.address) return;
|
|
11213
11213
|
setDone(true);
|
|
11214
11214
|
(async () => {
|
|
@@ -11303,9 +11303,9 @@ var ChooserCard3 = ({ onSelect, isPrimary }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
|
11303
11303
|
}
|
|
11304
11304
|
);
|
|
11305
11305
|
var SignupFlow4 = ({ onComplete, onError, platform }) => {
|
|
11306
|
-
const [email, setEmail] =
|
|
11307
|
-
const [password, setPassword] =
|
|
11308
|
-
const [submitting, setSubmitting] =
|
|
11306
|
+
const [email, setEmail] = React39.useState("");
|
|
11307
|
+
const [password, setPassword] = React39.useState("");
|
|
11308
|
+
const [submitting, setSubmitting] = React39.useState(false);
|
|
11309
11309
|
async function submit(e) {
|
|
11310
11310
|
e.preventDefault();
|
|
11311
11311
|
setSubmitting(true);
|
|
@@ -11461,7 +11461,7 @@ var ChooserCard4 = ({ onSelect, isPrimary }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
|
11461
11461
|
}
|
|
11462
11462
|
);
|
|
11463
11463
|
var SignupFlow5 = ({ onComplete, onError, platform }) => {
|
|
11464
|
-
const [busy, setBusy] =
|
|
11464
|
+
const [busy, setBusy] = React39.useState(false);
|
|
11465
11465
|
async function trigger() {
|
|
11466
11466
|
setBusy(true);
|
|
11467
11467
|
try {
|
|
@@ -11633,8 +11633,8 @@ var KycFlow3 = ({ onComplete, onError, instanceId }) => {
|
|
|
11633
11633
|
const settings = config?.kyc.settings[providerId];
|
|
11634
11634
|
const publishableKey = settings?.publishable_key;
|
|
11635
11635
|
const requiredForCompletion = settings?.required_for_completion ?? false;
|
|
11636
|
-
const [stage, setStage] =
|
|
11637
|
-
|
|
11636
|
+
const [stage, setStage] = React39__default.default.useState({ kind: "idle" });
|
|
11637
|
+
React39__default.default.useEffect(() => {
|
|
11638
11638
|
let cancelled = false;
|
|
11639
11639
|
(async () => {
|
|
11640
11640
|
try {
|
|
@@ -11658,7 +11658,7 @@ var KycFlow3 = ({ onComplete, onError, instanceId }) => {
|
|
|
11658
11658
|
cancelled = true;
|
|
11659
11659
|
};
|
|
11660
11660
|
}, []);
|
|
11661
|
-
|
|
11661
|
+
React39__default.default.useEffect(() => {
|
|
11662
11662
|
if (stage.kind !== "pending-poll") return;
|
|
11663
11663
|
let cancelled = false;
|
|
11664
11664
|
const pollOnce = async () => {
|
|
@@ -11910,14 +11910,14 @@ function useIdentityStatusPoll(opts) {
|
|
|
11910
11910
|
provider,
|
|
11911
11911
|
credentialType
|
|
11912
11912
|
} = opts;
|
|
11913
|
-
const [stuckHint, setStuckHint] =
|
|
11914
|
-
const onVerifiedRef =
|
|
11915
|
-
const onRejectedRef =
|
|
11916
|
-
|
|
11913
|
+
const [stuckHint, setStuckHint] = React39__default.default.useState(false);
|
|
11914
|
+
const onVerifiedRef = React39__default.default.useRef(onVerified);
|
|
11915
|
+
const onRejectedRef = React39__default.default.useRef(onRejected);
|
|
11916
|
+
React39__default.default.useEffect(() => {
|
|
11917
11917
|
onVerifiedRef.current = onVerified;
|
|
11918
11918
|
onRejectedRef.current = onRejected;
|
|
11919
11919
|
}, [onVerified, onRejected]);
|
|
11920
|
-
|
|
11920
|
+
React39__default.default.useEffect(() => {
|
|
11921
11921
|
if (!active) {
|
|
11922
11922
|
setStuckHint(false);
|
|
11923
11923
|
return;
|
|
@@ -12055,12 +12055,12 @@ var KycFlow4 = ({ onComplete, onError, instanceId, subject }) => {
|
|
|
12055
12055
|
const groupId = subject?.kind === "group" ? subject.id : void 0;
|
|
12056
12056
|
const configuredLevel = config?.kyc.settings[providerId]?.level_name?.trim();
|
|
12057
12057
|
const levelName = configuredLevel || "id-and-liveness";
|
|
12058
|
-
const [token, setToken] =
|
|
12059
|
-
const [stage, setStage] =
|
|
12060
|
-
const [attempt, setAttempt] =
|
|
12061
|
-
const submittedRef =
|
|
12062
|
-
const applicantIdRef =
|
|
12063
|
-
|
|
12058
|
+
const [token, setToken] = React39__default.default.useState(null);
|
|
12059
|
+
const [stage, setStage] = React39__default.default.useState({ kind: "init" });
|
|
12060
|
+
const [attempt, setAttempt] = React39__default.default.useState(0);
|
|
12061
|
+
const submittedRef = React39__default.default.useRef(false);
|
|
12062
|
+
const applicantIdRef = React39__default.default.useRef(void 0);
|
|
12063
|
+
React39__default.default.useEffect(() => {
|
|
12064
12064
|
let cancelled = false;
|
|
12065
12065
|
submittedRef.current = false;
|
|
12066
12066
|
(async () => {
|
|
@@ -12290,8 +12290,8 @@ function OnboardingChooseMethod({ chrome } = {}) {
|
|
|
12290
12290
|
const { config, isLoading, error: configError } = useProviderConfig();
|
|
12291
12291
|
const wizardPlatform = useWizardPlatform();
|
|
12292
12292
|
const { completeAuthentication } = useWizardAuthentication();
|
|
12293
|
-
const [busyId, setBusyId] =
|
|
12294
|
-
const [error, setError] =
|
|
12293
|
+
const [busyId, setBusyId] = React39.useState(null);
|
|
12294
|
+
const [error, setError] = React39.useState(null);
|
|
12295
12295
|
if (isLoading) {
|
|
12296
12296
|
return /* @__PURE__ */ jsxRuntime.jsx(StepShell, { chrome, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center text-[12px] text-text-secondary", children: "Loading sign-up options\u2026" }) });
|
|
12297
12297
|
}
|
|
@@ -12387,7 +12387,7 @@ function FloatField({
|
|
|
12387
12387
|
adornment,
|
|
12388
12388
|
disabled
|
|
12389
12389
|
}) {
|
|
12390
|
-
const id =
|
|
12390
|
+
const id = React39.useId();
|
|
12391
12391
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
12392
12392
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12393
12393
|
"input",
|
|
@@ -12440,16 +12440,16 @@ function OnboardingEmailSignup({ chrome } = {}) {
|
|
|
12440
12440
|
const { config } = useProviderConfig();
|
|
12441
12441
|
const { completeAuthentication } = useWizardAuthentication();
|
|
12442
12442
|
const platform = wizardPlatform ?? config?.platform?.group_id;
|
|
12443
|
-
const [email, setEmail] =
|
|
12444
|
-
const [password, setPassword] =
|
|
12445
|
-
const [confirmPassword, setConfirmPassword] =
|
|
12446
|
-
const [phase, setPhase] =
|
|
12443
|
+
const [email, setEmail] = React39.useState("");
|
|
12444
|
+
const [password, setPassword] = React39.useState("");
|
|
12445
|
+
const [confirmPassword, setConfirmPassword] = React39.useState("");
|
|
12446
|
+
const [phase, setPhase] = React39.useState(null);
|
|
12447
12447
|
const submitting = phase !== null;
|
|
12448
|
-
const [error, setError] =
|
|
12449
|
-
const [emailExists, setEmailExists] =
|
|
12448
|
+
const [error, setError] = React39.useState(null);
|
|
12449
|
+
const [emailExists, setEmailExists] = React39.useState(false);
|
|
12450
12450
|
const invite = useWizardInvite();
|
|
12451
12451
|
const emailLocked = !!invite?.email;
|
|
12452
|
-
|
|
12452
|
+
React39.useEffect(() => {
|
|
12453
12453
|
if (invite?.email) setEmail(invite.email);
|
|
12454
12454
|
}, [invite?.email]);
|
|
12455
12455
|
function validate() {
|
|
@@ -12658,18 +12658,18 @@ init_onboardingClient();
|
|
|
12658
12658
|
function EmailVerify({ chrome } = {}) {
|
|
12659
12659
|
const navigate = useWizardNavigate();
|
|
12660
12660
|
const { refreshUser, logout } = useAuth();
|
|
12661
|
-
const [status, setStatus] =
|
|
12662
|
-
const [phase, setPhase] =
|
|
12663
|
-
const [code, setCode] =
|
|
12664
|
-
const [newEmail, setNewEmail] =
|
|
12665
|
-
const [notice, setNotice] =
|
|
12666
|
-
const [error, setError] =
|
|
12667
|
-
const autoStartRef =
|
|
12668
|
-
const completionTimerRef =
|
|
12661
|
+
const [status, setStatus] = React39.useState(null);
|
|
12662
|
+
const [phase, setPhase] = React39.useState("loading");
|
|
12663
|
+
const [code, setCode] = React39.useState("");
|
|
12664
|
+
const [newEmail, setNewEmail] = React39.useState("");
|
|
12665
|
+
const [notice, setNotice] = React39.useState(null);
|
|
12666
|
+
const [error, setError] = React39.useState(null);
|
|
12667
|
+
const autoStartRef = React39.useRef(false);
|
|
12668
|
+
const completionTimerRef = React39.useRef(null);
|
|
12669
12669
|
const email = status?.email ?? "";
|
|
12670
|
-
const maskedEmail =
|
|
12670
|
+
const maskedEmail = React39.useMemo(() => maskEmail(email), [email]);
|
|
12671
12671
|
const busy = phase === "sending" || phase === "checking" || phase === "updating-email";
|
|
12672
|
-
const completeSoon =
|
|
12672
|
+
const completeSoon = React39.useCallback((message) => {
|
|
12673
12673
|
setNotice(message ?? "Email confirmed. Taking you to the next setup step.");
|
|
12674
12674
|
setError(null);
|
|
12675
12675
|
setPhase("success");
|
|
@@ -12679,7 +12679,7 @@ function EmailVerify({ chrome } = {}) {
|
|
|
12679
12679
|
navigate("/onboarding/wallets");
|
|
12680
12680
|
}, 850);
|
|
12681
12681
|
}, [navigate]);
|
|
12682
|
-
const loadStatus =
|
|
12682
|
+
const loadStatus = React39.useCallback(async () => {
|
|
12683
12683
|
const next = await getMyEmailVerificationStatus();
|
|
12684
12684
|
setStatus(next);
|
|
12685
12685
|
if (next.verified) {
|
|
@@ -12689,7 +12689,7 @@ function EmailVerify({ chrome } = {}) {
|
|
|
12689
12689
|
setPhase("ready");
|
|
12690
12690
|
return next;
|
|
12691
12691
|
}, [completeSoon]);
|
|
12692
|
-
const sendCode =
|
|
12692
|
+
const sendCode = React39.useCallback(async () => {
|
|
12693
12693
|
setPhase("sending");
|
|
12694
12694
|
setError(null);
|
|
12695
12695
|
try {
|
|
@@ -12715,7 +12715,7 @@ function EmailVerify({ chrome } = {}) {
|
|
|
12715
12715
|
setPhase("ready");
|
|
12716
12716
|
}
|
|
12717
12717
|
}, []);
|
|
12718
|
-
|
|
12718
|
+
React39.useEffect(() => {
|
|
12719
12719
|
let cancelled = false;
|
|
12720
12720
|
(async () => {
|
|
12721
12721
|
setPhase("loading");
|
|
@@ -12740,7 +12740,7 @@ function EmailVerify({ chrome } = {}) {
|
|
|
12740
12740
|
if (completionTimerRef.current) window.clearTimeout(completionTimerRef.current);
|
|
12741
12741
|
};
|
|
12742
12742
|
}, [completeSoon]);
|
|
12743
|
-
|
|
12743
|
+
React39.useEffect(() => {
|
|
12744
12744
|
if (!status || status.verified || status.is_synthetic || status.pending || autoStartRef.current) return;
|
|
12745
12745
|
autoStartRef.current = true;
|
|
12746
12746
|
void sendCode();
|
|
@@ -12985,7 +12985,7 @@ function ProviderSignup({ chrome } = {}) {
|
|
|
12985
12985
|
const { config, isLoading } = useProviderConfig();
|
|
12986
12986
|
const wizardPlatform = useWizardPlatform();
|
|
12987
12987
|
const { completeAuthentication } = useWizardAuthentication();
|
|
12988
|
-
const [error, setError] =
|
|
12988
|
+
const [error, setError] = React39.useState(null);
|
|
12989
12989
|
if (isLoading) {
|
|
12990
12990
|
return /* @__PURE__ */ jsxRuntime.jsx(StepShell, { chrome, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center text-[12px] text-text-secondary", children: "Loading\u2026" }) });
|
|
12991
12991
|
}
|
|
@@ -13180,8 +13180,8 @@ function AvatarImageUpload({
|
|
|
13180
13180
|
hintClassName = "text-[10px] text-text-secondary",
|
|
13181
13181
|
errorClassName = "text-[11px] text-status-error-text"
|
|
13182
13182
|
}) {
|
|
13183
|
-
const inputRef =
|
|
13184
|
-
const [error, setError] =
|
|
13183
|
+
const inputRef = React39.useRef(null);
|
|
13184
|
+
const [error, setError] = React39.useState(null);
|
|
13185
13185
|
const hasPhoto = !!value;
|
|
13186
13186
|
async function handleRemove() {
|
|
13187
13187
|
setError(null);
|
|
@@ -13256,28 +13256,28 @@ function useTapToCancel({
|
|
|
13256
13256
|
cancellingLabel = "Cancelling\u2026",
|
|
13257
13257
|
onCancel
|
|
13258
13258
|
}) {
|
|
13259
|
-
const [isCancelling, setIsCancelling] =
|
|
13260
|
-
const timeoutRef =
|
|
13261
|
-
const clear =
|
|
13259
|
+
const [isCancelling, setIsCancelling] = React39.useState(false);
|
|
13260
|
+
const timeoutRef = React39.useRef(null);
|
|
13261
|
+
const clear = React39.useCallback(() => {
|
|
13262
13262
|
if (timeoutRef.current !== null) {
|
|
13263
13263
|
window.clearTimeout(timeoutRef.current);
|
|
13264
13264
|
timeoutRef.current = null;
|
|
13265
13265
|
}
|
|
13266
13266
|
}, []);
|
|
13267
|
-
const handlePointerDown =
|
|
13267
|
+
const handlePointerDown = React39.useCallback(() => {
|
|
13268
13268
|
if (!submitting) return;
|
|
13269
13269
|
timeoutRef.current = window.setTimeout(() => {
|
|
13270
13270
|
setIsCancelling(true);
|
|
13271
13271
|
}, LONG_PRESS_MS);
|
|
13272
13272
|
}, [submitting]);
|
|
13273
|
-
const handlePointerUp =
|
|
13273
|
+
const handlePointerUp = React39.useCallback(() => {
|
|
13274
13274
|
clear();
|
|
13275
13275
|
if (isCancelling && onCancel) {
|
|
13276
13276
|
onCancel();
|
|
13277
13277
|
}
|
|
13278
13278
|
setIsCancelling(false);
|
|
13279
13279
|
}, [clear, isCancelling, onCancel]);
|
|
13280
|
-
const handlePointerLeave =
|
|
13280
|
+
const handlePointerLeave = React39.useCallback(() => {
|
|
13281
13281
|
clear();
|
|
13282
13282
|
setIsCancelling(false);
|
|
13283
13283
|
}, [clear]);
|
|
@@ -13308,27 +13308,27 @@ function emailLocalPart(email) {
|
|
|
13308
13308
|
function OnboardingProfile({ chrome } = {}) {
|
|
13309
13309
|
const navigate = useWizardNavigate();
|
|
13310
13310
|
const { refreshUser } = useAuth();
|
|
13311
|
-
const [firstName, setFirstName] =
|
|
13312
|
-
const [lastName, setLastName] =
|
|
13313
|
-
const [dob, setDob] =
|
|
13314
|
-
const [addressLine1, setAddressLine1] =
|
|
13315
|
-
const [addressLine2, setAddressLine2] =
|
|
13316
|
-
const [addressCity, setAddressCity] =
|
|
13317
|
-
const [addressRegion, setAddressRegion] =
|
|
13318
|
-
const [addressPostalCode, setAddressPostalCode] =
|
|
13319
|
-
const [addressCountry, setAddressCountry] =
|
|
13320
|
-
const [displayName, setDisplayName] =
|
|
13321
|
-
const [displayNameEdited, setDisplayNameEdited] =
|
|
13322
|
-
const [submitting, setSubmitting] =
|
|
13323
|
-
const [error, setError] =
|
|
13324
|
-
const [loaded, setLoaded] =
|
|
13325
|
-
const [fallbackName, setFallbackName] =
|
|
13326
|
-
const [avatarChoice, setAvatarChoice] =
|
|
13327
|
-
const [avatarUrl, setAvatarUrl] =
|
|
13328
|
-
const [avatarTouched, setAvatarTouched] =
|
|
13329
|
-
const [avatarUrlTouched, setAvatarUrlTouched] =
|
|
13330
|
-
const [accountEmail, setAccountEmail] =
|
|
13331
|
-
|
|
13311
|
+
const [firstName, setFirstName] = React39.useState(null);
|
|
13312
|
+
const [lastName, setLastName] = React39.useState(null);
|
|
13313
|
+
const [dob, setDob] = React39.useState(null);
|
|
13314
|
+
const [addressLine1, setAddressLine1] = React39.useState(null);
|
|
13315
|
+
const [addressLine2, setAddressLine2] = React39.useState(null);
|
|
13316
|
+
const [addressCity, setAddressCity] = React39.useState(null);
|
|
13317
|
+
const [addressRegion, setAddressRegion] = React39.useState(null);
|
|
13318
|
+
const [addressPostalCode, setAddressPostalCode] = React39.useState(null);
|
|
13319
|
+
const [addressCountry, setAddressCountry] = React39.useState(null);
|
|
13320
|
+
const [displayName, setDisplayName] = React39.useState("");
|
|
13321
|
+
const [displayNameEdited, setDisplayNameEdited] = React39.useState(false);
|
|
13322
|
+
const [submitting, setSubmitting] = React39.useState(false);
|
|
13323
|
+
const [error, setError] = React39.useState(null);
|
|
13324
|
+
const [loaded, setLoaded] = React39.useState(false);
|
|
13325
|
+
const [fallbackName, setFallbackName] = React39.useState("You");
|
|
13326
|
+
const [avatarChoice, setAvatarChoice] = React39.useState(null);
|
|
13327
|
+
const [avatarUrl, setAvatarUrl] = React39.useState(null);
|
|
13328
|
+
const [avatarTouched, setAvatarTouched] = React39.useState(false);
|
|
13329
|
+
const [avatarUrlTouched, setAvatarUrlTouched] = React39.useState(false);
|
|
13330
|
+
const [accountEmail, setAccountEmail] = React39.useState(null);
|
|
13331
|
+
React39.useEffect(() => {
|
|
13332
13332
|
if (!exports.authService.isAuthenticated()) {
|
|
13333
13333
|
setLoaded(true);
|
|
13334
13334
|
return;
|
|
@@ -13386,7 +13386,7 @@ function OnboardingProfile({ chrome } = {}) {
|
|
|
13386
13386
|
};
|
|
13387
13387
|
}, []);
|
|
13388
13388
|
const autoDerivedDisplayName = [firstName, lastName].map((s) => (s || "").trim()).filter(Boolean).join(" ");
|
|
13389
|
-
|
|
13389
|
+
React39.useEffect(() => {
|
|
13390
13390
|
if (!displayNameEdited) {
|
|
13391
13391
|
setDisplayName(autoDerivedDisplayName);
|
|
13392
13392
|
}
|
|
@@ -13582,7 +13582,7 @@ function IdentityVerify({
|
|
|
13582
13582
|
} = {}) {
|
|
13583
13583
|
const navigate = useWizardNavigate();
|
|
13584
13584
|
const { config, isLoading } = useProviderConfig();
|
|
13585
|
-
const [error, setError] =
|
|
13585
|
+
const [error, setError] = React39.useState(null);
|
|
13586
13586
|
const primaryId = config?.kyc.primary;
|
|
13587
13587
|
const allowedIdentityProviders = userIdentityStatusScopes(config);
|
|
13588
13588
|
const gate = useOnboardingState(
|
|
@@ -15036,20 +15036,20 @@ function AddWalletsStep({ chrome } = {}) {
|
|
|
15036
15036
|
const navigate = useWizardNavigate();
|
|
15037
15037
|
const { bootstrapSession, user } = useAuth();
|
|
15038
15038
|
const { config } = useProviderConfig();
|
|
15039
|
-
const [keys, setKeys] =
|
|
15040
|
-
const [loading, setLoading] =
|
|
15041
|
-
const [busy, setBusy] =
|
|
15042
|
-
const [error, setError] =
|
|
15043
|
-
const [lastFailedAction, setLastFailedAction] =
|
|
15044
|
-
const [status, setStatus] =
|
|
15045
|
-
const [autoAdvanceArmed, setAutoAdvanceArmed] =
|
|
15046
|
-
const [emailDraft, setEmailDraft] =
|
|
15047
|
-
const [showDynamic, setShowDynamic] =
|
|
15048
|
-
const [walletsOpen, setWalletsOpen] =
|
|
15039
|
+
const [keys, setKeys] = React39.useState([]);
|
|
15040
|
+
const [loading, setLoading] = React39.useState(true);
|
|
15041
|
+
const [busy, setBusy] = React39.useState(null);
|
|
15042
|
+
const [error, setError] = React39.useState(null);
|
|
15043
|
+
const [lastFailedAction, setLastFailedAction] = React39.useState(null);
|
|
15044
|
+
const [status, setStatus] = React39.useState(null);
|
|
15045
|
+
const [autoAdvanceArmed, setAutoAdvanceArmed] = React39.useState(false);
|
|
15046
|
+
const [emailDraft, setEmailDraft] = React39.useState("");
|
|
15047
|
+
const [showDynamic, setShowDynamic] = React39.useState(false);
|
|
15048
|
+
const [walletsOpen, setWalletsOpen] = React39.useState(false);
|
|
15049
15049
|
const hasSyntheticEmail = !!user?.email && user.email.toLowerCase().endsWith("@external.yieldfabric.local");
|
|
15050
15050
|
const { snapshot: gateSnapshot } = useOnboardingState();
|
|
15051
15051
|
const emailOk = !!gateSnapshot && snapshotEmailOk(gateSnapshot);
|
|
15052
|
-
const refresh =
|
|
15052
|
+
const refresh = React39.useCallback(async (opts = {}) => {
|
|
15053
15053
|
try {
|
|
15054
15054
|
if (opts.invalidate ?? !opts.silent) {
|
|
15055
15055
|
invalidateWalletCount();
|
|
@@ -15067,7 +15067,7 @@ function AddWalletsStep({ chrome } = {}) {
|
|
|
15067
15067
|
setLoading(false);
|
|
15068
15068
|
}
|
|
15069
15069
|
}, []);
|
|
15070
|
-
|
|
15070
|
+
React39.useEffect(() => {
|
|
15071
15071
|
refresh({ invalidate: true });
|
|
15072
15072
|
}, [refresh]);
|
|
15073
15073
|
const keyCount = keys.length;
|
|
@@ -15202,7 +15202,7 @@ function AddWalletsStep({ chrome } = {}) {
|
|
|
15202
15202
|
setBusy(null);
|
|
15203
15203
|
}
|
|
15204
15204
|
}
|
|
15205
|
-
const goOn =
|
|
15205
|
+
const goOn = React39.useCallback(async () => {
|
|
15206
15206
|
setBusy("continue");
|
|
15207
15207
|
setLastFailedAction(null);
|
|
15208
15208
|
try {
|
|
@@ -15230,16 +15230,16 @@ function AddWalletsStep({ chrome } = {}) {
|
|
|
15230
15230
|
setBusy(null);
|
|
15231
15231
|
}
|
|
15232
15232
|
}, [bootstrapSession, config, navigate, user?.role]);
|
|
15233
|
-
const onContinue =
|
|
15233
|
+
const onContinue = React39.useCallback(async () => {
|
|
15234
15234
|
if (!canContinue) return;
|
|
15235
15235
|
await goOn();
|
|
15236
15236
|
}, [canContinue, goOn]);
|
|
15237
|
-
const onSkip =
|
|
15237
|
+
const onSkip = React39.useCallback(async () => {
|
|
15238
15238
|
if (!user?.id) return;
|
|
15239
15239
|
deferKeyStep(user.id);
|
|
15240
15240
|
await goOn();
|
|
15241
15241
|
}, [goOn, user?.id]);
|
|
15242
|
-
|
|
15242
|
+
React39.useEffect(() => {
|
|
15243
15243
|
if (!autoAdvanceArmed || !canContinue || busy) return;
|
|
15244
15244
|
const timeout = window.setTimeout(() => {
|
|
15245
15245
|
setAutoAdvanceArmed(false);
|
|
@@ -15473,10 +15473,10 @@ var Drawer = ({
|
|
|
15473
15473
|
panelStyle,
|
|
15474
15474
|
contentStyle
|
|
15475
15475
|
}) => {
|
|
15476
|
-
const titleId =
|
|
15477
|
-
const panelRef =
|
|
15478
|
-
const closeButtonRef =
|
|
15479
|
-
|
|
15476
|
+
const titleId = React39.useId();
|
|
15477
|
+
const panelRef = React39.useRef(null);
|
|
15478
|
+
const closeButtonRef = React39.useRef(null);
|
|
15479
|
+
React39.useEffect(() => {
|
|
15480
15480
|
if (!isOpen || typeof document === "undefined") return;
|
|
15481
15481
|
const previouslyFocused = document.activeElement;
|
|
15482
15482
|
const bodyOverflow = document.body.style.overflow;
|
|
@@ -15747,12 +15747,12 @@ var EXPLANATIONS = {
|
|
|
15747
15747
|
manual: "Save a card for this billing profile. It is only charged for metered usage \u2014 nothing is charged now."
|
|
15748
15748
|
};
|
|
15749
15749
|
var CardCollectForm = ({ stripeLoader, session, onSaved, onError, groupId }) => {
|
|
15750
|
-
const mountRef =
|
|
15751
|
-
const stripeRef =
|
|
15752
|
-
const elementsRef =
|
|
15753
|
-
const [ready, setReady] =
|
|
15754
|
-
const [submitting, setSubmitting] =
|
|
15755
|
-
|
|
15750
|
+
const mountRef = React39.useRef(null);
|
|
15751
|
+
const stripeRef = React39.useRef(null);
|
|
15752
|
+
const elementsRef = React39.useRef(null);
|
|
15753
|
+
const [ready, setReady] = React39.useState(false);
|
|
15754
|
+
const [submitting, setSubmitting] = React39.useState(false);
|
|
15755
|
+
React39.useEffect(() => {
|
|
15756
15756
|
let cancelled = false;
|
|
15757
15757
|
let element = null;
|
|
15758
15758
|
(async () => {
|
|
@@ -15782,7 +15782,7 @@ var CardCollectForm = ({ stripeLoader, session, onSaved, onError, groupId }) =>
|
|
|
15782
15782
|
}
|
|
15783
15783
|
};
|
|
15784
15784
|
}, [session.client_secret]);
|
|
15785
|
-
const submit =
|
|
15785
|
+
const submit = React39.useCallback(async () => {
|
|
15786
15786
|
const stripe = stripeRef.current;
|
|
15787
15787
|
const elements = elementsRef.current;
|
|
15788
15788
|
if (!stripe || !elements || submitting) return;
|
|
@@ -15837,9 +15837,9 @@ var AddCardDialog = ({
|
|
|
15837
15837
|
groupId,
|
|
15838
15838
|
source = "manual"
|
|
15839
15839
|
}) => {
|
|
15840
|
-
const [stage, setStage] =
|
|
15841
|
-
const [attempt, setAttempt] =
|
|
15842
|
-
|
|
15840
|
+
const [stage, setStage] = React39.useState({ kind: "creating" });
|
|
15841
|
+
const [attempt, setAttempt] = React39.useState(0);
|
|
15842
|
+
React39.useEffect(() => {
|
|
15843
15843
|
if (!isOpen) return;
|
|
15844
15844
|
let cancelled = false;
|
|
15845
15845
|
setStage({ kind: "creating" });
|
|
@@ -15868,7 +15868,7 @@ var AddCardDialog = ({
|
|
|
15868
15868
|
cancelled = true;
|
|
15869
15869
|
};
|
|
15870
15870
|
}, [isOpen, groupId, attempt]);
|
|
15871
|
-
const openPortal =
|
|
15871
|
+
const openPortal = React39.useCallback(async () => {
|
|
15872
15872
|
try {
|
|
15873
15873
|
const url = await exports.billingService.createPortalSession(void 0, groupId);
|
|
15874
15874
|
window.location.assign(url);
|
|
@@ -15947,8 +15947,8 @@ var AddCardDialog = ({
|
|
|
15947
15947
|
};
|
|
15948
15948
|
function AddCardStep({ chrome } = {}) {
|
|
15949
15949
|
const navigate = useWizardNavigate();
|
|
15950
|
-
const [dialogOpen, setDialogOpen] =
|
|
15951
|
-
const [saved, setSaved] =
|
|
15950
|
+
const [dialogOpen, setDialogOpen] = React39.useState(true);
|
|
15951
|
+
const [saved, setSaved] = React39.useState(false);
|
|
15952
15952
|
const handleSuccess = () => {
|
|
15953
15953
|
setSaved(true);
|
|
15954
15954
|
setDialogOpen(false);
|
|
@@ -16026,7 +16026,7 @@ function Field({
|
|
|
16026
16026
|
value,
|
|
16027
16027
|
copyable
|
|
16028
16028
|
}) {
|
|
16029
|
-
const [copied, setCopied] =
|
|
16029
|
+
const [copied, setCopied] = React39__default.default.useState(false);
|
|
16030
16030
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
16031
16031
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] uppercase tracking-wider text-text-secondary", children: label }),
|
|
16032
16032
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-0.5 flex items-center gap-2", children: [
|
|
@@ -16090,14 +16090,16 @@ var STAGE_COPY = {
|
|
|
16090
16090
|
not_applicable: { title: "Finishing up", body: "" }
|
|
16091
16091
|
};
|
|
16092
16092
|
var AccountOpeningPanel = ({ onContinue, continueLabel = "Continue" }) => {
|
|
16093
|
-
const [status, setStatus] =
|
|
16094
|
-
const [impatient, setImpatient] =
|
|
16095
|
-
const
|
|
16096
|
-
const
|
|
16097
|
-
|
|
16093
|
+
const [status, setStatus] = React39__default.default.useState(null);
|
|
16094
|
+
const [impatient, setImpatient] = React39__default.default.useState(false);
|
|
16095
|
+
const [unavailable, setUnavailable] = React39__default.default.useState(false);
|
|
16096
|
+
const [attempt, setAttempt] = React39__default.default.useState(0);
|
|
16097
|
+
const activationStarted = React39__default.default.useRef(false);
|
|
16098
|
+
const onContinueRef = React39__default.default.useRef(onContinue);
|
|
16099
|
+
React39__default.default.useEffect(() => {
|
|
16098
16100
|
onContinueRef.current = onContinue;
|
|
16099
16101
|
}, [onContinue]);
|
|
16100
|
-
|
|
16102
|
+
React39__default.default.useEffect(() => {
|
|
16101
16103
|
let cancelled = false;
|
|
16102
16104
|
let timer;
|
|
16103
16105
|
const startedAt = Date.now();
|
|
@@ -16105,8 +16107,9 @@ var AccountOpeningPanel = ({ onContinue, continueLabel = "Continue" }) => {
|
|
|
16105
16107
|
if (cancelled) return;
|
|
16106
16108
|
let terminal = false;
|
|
16107
16109
|
try {
|
|
16108
|
-
const next = await fetchAccountOpeningStatus();
|
|
16110
|
+
const next = await withDeadline(fetchAccountOpeningStatus(), "Account opening status");
|
|
16109
16111
|
if (cancelled) return;
|
|
16112
|
+
setUnavailable(false);
|
|
16110
16113
|
setStatus(next);
|
|
16111
16114
|
if (next.status === "not_started") {
|
|
16112
16115
|
onContinueRef.current();
|
|
@@ -16123,6 +16126,8 @@ var AccountOpeningPanel = ({ onContinue, continueLabel = "Continue" }) => {
|
|
|
16123
16126
|
);
|
|
16124
16127
|
}
|
|
16125
16128
|
} catch {
|
|
16129
|
+
if (cancelled) return;
|
|
16130
|
+
setUnavailable(true);
|
|
16126
16131
|
}
|
|
16127
16132
|
if (cancelled || terminal) return;
|
|
16128
16133
|
const waited = Date.now() - startedAt;
|
|
@@ -16134,8 +16139,20 @@ var AccountOpeningPanel = ({ onContinue, continueLabel = "Continue" }) => {
|
|
|
16134
16139
|
cancelled = true;
|
|
16135
16140
|
if (timer !== void 0) window.clearTimeout(timer);
|
|
16136
16141
|
};
|
|
16137
|
-
}, []);
|
|
16138
|
-
if (!status)
|
|
16142
|
+
}, [attempt]);
|
|
16143
|
+
if (unavailable || !status) {
|
|
16144
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 text-center", role: "status", "aria-live": "polite", children: [
|
|
16145
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { children: unavailable ? "We couldn\u2019t check your account right now." : "Checking your account\u2026" }),
|
|
16146
|
+
unavailable && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
16147
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12px] text-text-secondary", children: "You can try again or continue. Your account details will be available when setup finishes." }),
|
|
16148
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "min-h-[44px] w-full rounded-lg bg-cta px-4 py-2.5 text-on-cta", onClick: () => {
|
|
16149
|
+
setUnavailable(false);
|
|
16150
|
+
setAttempt((value) => value + 1);
|
|
16151
|
+
}, children: "Try again" }),
|
|
16152
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "min-h-[44px] w-full", onClick: onContinue, children: continueLabel })
|
|
16153
|
+
] })
|
|
16154
|
+
] });
|
|
16155
|
+
}
|
|
16139
16156
|
if (status.status === "ready" && status.account) {
|
|
16140
16157
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", role: "status", "aria-live": "polite", children: [
|
|
16141
16158
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
@@ -16193,14 +16210,14 @@ var AccountOpeningPanel = ({ onContinue, continueLabel = "Continue" }) => {
|
|
|
16193
16210
|
init_authService();
|
|
16194
16211
|
var WALLET_AWAKENING_MS = 1100;
|
|
16195
16212
|
var TOTAL_MS = 3e3;
|
|
16196
|
-
function OnboardingWelcomeMoment({ chrome } = {}) {
|
|
16213
|
+
function OnboardingWelcomeMoment({ chrome, deferAccountOpening = false } = {}) {
|
|
16197
16214
|
const navigate = useWizardNavigate();
|
|
16198
16215
|
const { messages } = useBranding();
|
|
16199
|
-
const [name, setName] =
|
|
16200
|
-
const [walletShort, setWalletShort] =
|
|
16201
|
-
const [phase, setPhase] =
|
|
16202
|
-
const [accountOpened, setAccountOpened] =
|
|
16203
|
-
|
|
16216
|
+
const [name, setName] = React39.useState("");
|
|
16217
|
+
const [walletShort, setWalletShort] = React39.useState(null);
|
|
16218
|
+
const [phase, setPhase] = React39.useState("wallet");
|
|
16219
|
+
const [accountOpened, setAccountOpened] = React39.useState(deferAccountOpening);
|
|
16220
|
+
React39.useEffect(() => {
|
|
16204
16221
|
let cancelled = false;
|
|
16205
16222
|
(async () => {
|
|
16206
16223
|
const token = exports.authService.getAccessToken();
|
|
@@ -16233,7 +16250,7 @@ function OnboardingWelcomeMoment({ chrome } = {}) {
|
|
|
16233
16250
|
cancelled = true;
|
|
16234
16251
|
};
|
|
16235
16252
|
}, []);
|
|
16236
|
-
|
|
16253
|
+
React39.useEffect(() => {
|
|
16237
16254
|
if (!accountOpened) return;
|
|
16238
16255
|
const swap = window.setTimeout(() => setPhase("welcome"), WALLET_AWAKENING_MS);
|
|
16239
16256
|
const route = window.setTimeout(() => navigate("/home"), TOTAL_MS);
|
|
@@ -16443,39 +16460,39 @@ function ChoosePlan({
|
|
|
16443
16460
|
hydratePlanSelection,
|
|
16444
16461
|
clearPlanSelection
|
|
16445
16462
|
} = useWizardPlanIntent();
|
|
16446
|
-
const [catalog, setCatalog] =
|
|
16447
|
-
const [selected, setSelected] =
|
|
16448
|
-
const [selectedCatalogVersion, setSelectedCatalogVersion] =
|
|
16449
|
-
const [loading, setLoading] =
|
|
16450
|
-
const [busy, setBusy] =
|
|
16451
|
-
const [error, setError] =
|
|
16452
|
-
const [loadAttempt, setLoadAttempt] =
|
|
16453
|
-
const [completed, setCompleted] =
|
|
16454
|
-
const [leave, setLeave] =
|
|
16455
|
-
const [serverRequired, setServerRequired] =
|
|
16456
|
-
const [returnPending, setReturnPending] =
|
|
16463
|
+
const [catalog, setCatalog] = React39.useState(null);
|
|
16464
|
+
const [selected, setSelected] = React39.useState(null);
|
|
16465
|
+
const [selectedCatalogVersion, setSelectedCatalogVersion] = React39.useState(null);
|
|
16466
|
+
const [loading, setLoading] = React39.useState(true);
|
|
16467
|
+
const [busy, setBusy] = React39.useState(false);
|
|
16468
|
+
const [error, setError] = React39.useState(null);
|
|
16469
|
+
const [loadAttempt, setLoadAttempt] = React39.useState(0);
|
|
16470
|
+
const [completed, setCompleted] = React39.useState(false);
|
|
16471
|
+
const [leave, setLeave] = React39.useState(false);
|
|
16472
|
+
const [serverRequired, setServerRequired] = React39.useState(false);
|
|
16473
|
+
const [returnPending, setReturnPending] = React39.useState(() => {
|
|
16457
16474
|
const marker = readCreditCheckoutReturnMarker();
|
|
16458
16475
|
return marker?.kind === "plan" && !marker.groupId;
|
|
16459
16476
|
});
|
|
16460
|
-
const [returnRetryRequired, setReturnRetryRequired] =
|
|
16461
|
-
const initialAppliedProofRef =
|
|
16462
|
-
const appliedProofRef =
|
|
16463
|
-
const appliedPlanIdRef =
|
|
16477
|
+
const [returnRetryRequired, setReturnRetryRequired] = React39.useState(false);
|
|
16478
|
+
const initialAppliedProofRef = React39.useRef(readAppliedPlanProof());
|
|
16479
|
+
const appliedProofRef = React39.useRef(initialAppliedProofRef.current);
|
|
16480
|
+
const appliedPlanIdRef = React39.useRef(
|
|
16464
16481
|
initialAppliedProofRef.current?.purchasedPlanId ?? null
|
|
16465
16482
|
);
|
|
16466
|
-
const expectedPlanIdRef =
|
|
16483
|
+
const expectedPlanIdRef = React39.useRef(null);
|
|
16467
16484
|
const initialMismatch = initialAppliedProofRef.current?.intendedPlanId && initialAppliedProofRef.current.intendedPlanId !== initialAppliedProofRef.current.purchasedPlanId ? {
|
|
16468
16485
|
purchasedPlanId: initialAppliedProofRef.current.purchasedPlanId,
|
|
16469
16486
|
intendedPlanId: initialAppliedProofRef.current.intendedPlanId
|
|
16470
16487
|
} : null;
|
|
16471
|
-
const [appliedMismatch, setAppliedMismatch] =
|
|
16488
|
+
const [appliedMismatch, setAppliedMismatch] = React39.useState(
|
|
16472
16489
|
initialMismatch
|
|
16473
16490
|
);
|
|
16474
|
-
const appliedMismatchRef =
|
|
16491
|
+
const appliedMismatchRef = React39.useRef(initialMismatch);
|
|
16475
16492
|
expectedPlanIdRef.current = selected?.id ?? planSelection?.planId ?? null;
|
|
16476
16493
|
const directSelfPayApplicable = !(wizardPlatform ?? config?.platform?.group_id) && !personalSessionHasGroupPayer();
|
|
16477
16494
|
const planRequired = required || serverRequired;
|
|
16478
|
-
|
|
16495
|
+
React39.useEffect(() => {
|
|
16479
16496
|
if (!directSelfPayApplicable) return;
|
|
16480
16497
|
let disposed = false;
|
|
16481
16498
|
setLoading(true);
|
|
@@ -16565,7 +16582,7 @@ function ChoosePlan({
|
|
|
16565
16582
|
required,
|
|
16566
16583
|
returnPending
|
|
16567
16584
|
]);
|
|
16568
|
-
|
|
16585
|
+
React39.useEffect(() => {
|
|
16569
16586
|
const handleApplied = (event) => {
|
|
16570
16587
|
const detail = event.detail;
|
|
16571
16588
|
if (detail.kind !== "plan" || detail.groupId || !detail.creditPlanId) return;
|
|
@@ -16599,7 +16616,7 @@ function ChoosePlan({
|
|
|
16599
16616
|
window.addEventListener(exports.CREDIT_CHECKOUT_SYNCED_EVENT, handleApplied);
|
|
16600
16617
|
return () => window.removeEventListener(exports.CREDIT_CHECKOUT_SYNCED_EVENT, handleApplied);
|
|
16601
16618
|
}, []);
|
|
16602
|
-
|
|
16619
|
+
React39.useEffect(() => {
|
|
16603
16620
|
const matchesPersonalPlanReturn = (event) => {
|
|
16604
16621
|
const detail = event.detail;
|
|
16605
16622
|
const marker = readCreditCheckoutReturnMarker();
|
|
@@ -16630,7 +16647,7 @@ function ChoosePlan({
|
|
|
16630
16647
|
);
|
|
16631
16648
|
};
|
|
16632
16649
|
}, []);
|
|
16633
|
-
|
|
16650
|
+
React39.useEffect(() => {
|
|
16634
16651
|
if (!returnPending) return;
|
|
16635
16652
|
const timer = window.setInterval(() => {
|
|
16636
16653
|
const marker = readCreditCheckoutReturnMarker();
|
|
@@ -17132,20 +17149,20 @@ function SponsorshipConsent({
|
|
|
17132
17149
|
stageSponsorship,
|
|
17133
17150
|
finishSponsorship
|
|
17134
17151
|
} = useWizardAuthentication();
|
|
17135
|
-
const [sponsorship, setSponsorship] =
|
|
17136
|
-
const [exactSession, setExactSession] =
|
|
17137
|
-
const [agreed, setAgreed] =
|
|
17138
|
-
const [loading, setLoading] =
|
|
17139
|
-
const [busy, setBusy] =
|
|
17140
|
-
const [error, setError] =
|
|
17141
|
-
const [loadAttempt, setLoadAttempt] =
|
|
17142
|
-
const destination =
|
|
17152
|
+
const [sponsorship, setSponsorship] = React39.useState(null);
|
|
17153
|
+
const [exactSession, setExactSession] = React39.useState(false);
|
|
17154
|
+
const [agreed, setAgreed] = React39.useState(false);
|
|
17155
|
+
const [loading, setLoading] = React39.useState(true);
|
|
17156
|
+
const [busy, setBusy] = React39.useState(false);
|
|
17157
|
+
const [error, setError] = React39.useState(null);
|
|
17158
|
+
const [loadAttempt, setLoadAttempt] = React39.useState(0);
|
|
17159
|
+
const destination = React39.useMemo(() => {
|
|
17143
17160
|
if (pendingSponsorship?.groupId === groupId) {
|
|
17144
17161
|
return pendingSponsorship.destination;
|
|
17145
17162
|
}
|
|
17146
17163
|
return fallbackDestination;
|
|
17147
17164
|
}, [fallbackDestination, groupId, pendingSponsorship]);
|
|
17148
|
-
const loadCurrent =
|
|
17165
|
+
const loadCurrent = React39.useCallback(async (driftMessage) => {
|
|
17149
17166
|
setLoading(true);
|
|
17150
17167
|
if (!driftMessage) setError(null);
|
|
17151
17168
|
try {
|
|
@@ -17168,7 +17185,7 @@ function SponsorshipConsent({
|
|
|
17168
17185
|
setLoading(false);
|
|
17169
17186
|
}
|
|
17170
17187
|
}, [destination, groupId, stageSponsorship]);
|
|
17171
|
-
|
|
17188
|
+
React39.useEffect(() => {
|
|
17172
17189
|
let cancelled = false;
|
|
17173
17190
|
setLoading(true);
|
|
17174
17191
|
setError(null);
|
|
@@ -17371,7 +17388,8 @@ function OnboardingWizard({
|
|
|
17371
17388
|
invite,
|
|
17372
17389
|
platform,
|
|
17373
17390
|
onSelectPlatform,
|
|
17374
|
-
sponsorshipConsent = "wizard"
|
|
17391
|
+
sponsorshipConsent = "wizard",
|
|
17392
|
+
billingMode = "automatic"
|
|
17375
17393
|
}) {
|
|
17376
17394
|
return /* @__PURE__ */ jsxRuntime.jsx(BrandingProvider, { branding, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
17377
17395
|
WizardProvider,
|
|
@@ -17385,7 +17403,8 @@ function OnboardingWizard({
|
|
|
17385
17403
|
{
|
|
17386
17404
|
chrome,
|
|
17387
17405
|
onSelectPlatform,
|
|
17388
|
-
sponsorshipConsent
|
|
17406
|
+
sponsorshipConsent,
|
|
17407
|
+
billingMode
|
|
17389
17408
|
}
|
|
17390
17409
|
)
|
|
17391
17410
|
}
|
|
@@ -17415,7 +17434,8 @@ function gateToPath(status) {
|
|
|
17415
17434
|
function WizardRouter({
|
|
17416
17435
|
chrome,
|
|
17417
17436
|
onSelectPlatform,
|
|
17418
|
-
sponsorshipConsent = "wizard"
|
|
17437
|
+
sponsorshipConsent = "wizard",
|
|
17438
|
+
billingMode = "automatic"
|
|
17419
17439
|
}) {
|
|
17420
17440
|
const pathname = useWizardPathname();
|
|
17421
17441
|
const { config } = useProviderConfig();
|
|
@@ -17424,7 +17444,7 @@ function WizardRouter({
|
|
|
17424
17444
|
const effectivePlatform = wizardPlatform ?? config?.platform?.group_id ?? pendingSponsorship?.groupId;
|
|
17425
17445
|
const primaryKycId = config?.kyc.primary;
|
|
17426
17446
|
const identityRequired = !!(primaryKycId && config?.kyc.enabled.includes(primaryKycId) && config?.kyc.settings[primaryKycId]?.required_for_completion);
|
|
17427
|
-
const planApplicable = !effectivePlatform && !personalSessionHasGroupPayer();
|
|
17447
|
+
const planApplicable = billingMode !== "host" && !effectivePlatform && !personalSessionHasGroupPayer();
|
|
17428
17448
|
const allowedIdentityProviders = userIdentityStatusScopes(config);
|
|
17429
17449
|
const gate = useOnboardingState(
|
|
17430
17450
|
identityRequired,
|
|
@@ -17435,11 +17455,14 @@ function WizardRouter({
|
|
|
17435
17455
|
identityRequired && primaryKycVerifiesEmail(config)
|
|
17436
17456
|
);
|
|
17437
17457
|
const hostOwnsSponsorshipConsent = sponsorshipConsent === "host";
|
|
17438
|
-
|
|
17458
|
+
React39__default.default.useEffect(() => {
|
|
17439
17459
|
if (hostOwnsSponsorshipConsent && pendingSponsorship) {
|
|
17440
17460
|
discardSponsorship();
|
|
17441
17461
|
}
|
|
17442
17462
|
}, [hostOwnsSponsorshipConsent, pendingSponsorship, discardSponsorship]);
|
|
17463
|
+
if (!planApplicable && ["/onboarding", "/onboarding/pricing", "/onboarding/plan", "/onboarding/card"].includes(pathname)) {
|
|
17464
|
+
return /* @__PURE__ */ jsxRuntime.jsx(WizardRedirect, { to: "/onboarding/choose", replace: true });
|
|
17465
|
+
}
|
|
17443
17466
|
const sponsorshipContext = !hostOwnsSponsorshipConsent && !!effectivePlatform && (pendingSponsorship !== null || exports.authService.isAuthenticated() && !exports.authService.hasExactSponsoredSession(effectivePlatform));
|
|
17444
17467
|
const exactSponsorship = !!effectivePlatform && exports.authService.hasExactSponsoredSession(effectivePlatform);
|
|
17445
17468
|
const gateCanAnswer = exports.authService.isAuthenticated() && !!exports.tokenManager.getAccessToken();
|
|
@@ -17523,7 +17546,7 @@ function WizardRouter({
|
|
|
17523
17546
|
}
|
|
17524
17547
|
);
|
|
17525
17548
|
if (pathname === "/onboarding/welcome")
|
|
17526
|
-
return /* @__PURE__ */ jsxRuntime.jsx(OnboardingWelcomeMoment, { chrome });
|
|
17549
|
+
return /* @__PURE__ */ jsxRuntime.jsx(OnboardingWelcomeMoment, { chrome, deferAccountOpening: billingMode === "host" });
|
|
17527
17550
|
if (pathname === "/onboarding")
|
|
17528
17551
|
return /* @__PURE__ */ jsxRuntime.jsx(SelectPlan, { chrome, platformPlansAvailable: !!onSelectPlatform });
|
|
17529
17552
|
if (pathname.startsWith("/onboarding/"))
|
|
@@ -17651,7 +17674,7 @@ function builtinProviderDisplayName(id) {
|
|
|
17651
17674
|
}
|
|
17652
17675
|
}
|
|
17653
17676
|
function useProviderDisplayName(config) {
|
|
17654
|
-
return
|
|
17677
|
+
return React39__default.default.useCallback(
|
|
17655
17678
|
(id) => {
|
|
17656
17679
|
const labelled = config?.kyc?.settings?.[id]?.label ?? config?.auth?.settings?.[id]?.label;
|
|
17657
17680
|
const trimmed = typeof labelled === "string" ? labelled.trim() : "";
|
|
@@ -17721,26 +17744,26 @@ var OnboardingPolicySection = ({
|
|
|
17721
17744
|
groupId,
|
|
17722
17745
|
sponsorshipEpoch = 0
|
|
17723
17746
|
}) => {
|
|
17724
|
-
const [deployConfig, setDeployConfig] =
|
|
17747
|
+
const [deployConfig, setDeployConfig] = React39.useState(null);
|
|
17725
17748
|
const providerDisplayName = useProviderDisplayName(deployConfig);
|
|
17726
|
-
const [deployLoading, setDeployLoading] =
|
|
17727
|
-
const [profiles, setProfiles] =
|
|
17728
|
-
const [catalogRefreshed, setCatalogRefreshed] =
|
|
17729
|
-
const [loading, setLoading] =
|
|
17730
|
-
const [hidden, setHidden] =
|
|
17731
|
-
const [platformActive, setPlatformActive] =
|
|
17732
|
-
const [loadError, setLoadError] =
|
|
17733
|
-
const [saving, setSaving] =
|
|
17734
|
-
const [saved, setSaved] =
|
|
17735
|
-
const [saveError, setSaveError] =
|
|
17736
|
-
const [profileName, setProfileName] =
|
|
17737
|
-
const [requireEmail, setRequireEmail] =
|
|
17738
|
-
const [customize, setCustomize] =
|
|
17739
|
-
const [selectedProviders, setSelectedProviders] =
|
|
17740
|
-
const [authPrimary, setAuthPrimary] =
|
|
17741
|
-
const [kycPrimary, setKycPrimary] =
|
|
17742
|
-
const [uxSteps, setUxSteps] =
|
|
17743
|
-
|
|
17749
|
+
const [deployLoading, setDeployLoading] = React39.useState(true);
|
|
17750
|
+
const [profiles, setProfiles] = React39.useState([]);
|
|
17751
|
+
const [catalogRefreshed, setCatalogRefreshed] = React39.useState(false);
|
|
17752
|
+
const [loading, setLoading] = React39.useState(true);
|
|
17753
|
+
const [hidden, setHidden] = React39.useState(false);
|
|
17754
|
+
const [platformActive, setPlatformActive] = React39.useState(null);
|
|
17755
|
+
const [loadError, setLoadError] = React39.useState(null);
|
|
17756
|
+
const [saving, setSaving] = React39.useState(false);
|
|
17757
|
+
const [saved, setSaved] = React39.useState(false);
|
|
17758
|
+
const [saveError, setSaveError] = React39.useState(null);
|
|
17759
|
+
const [profileName, setProfileName] = React39.useState("");
|
|
17760
|
+
const [requireEmail, setRequireEmail] = React39.useState(false);
|
|
17761
|
+
const [customize, setCustomize] = React39.useState(false);
|
|
17762
|
+
const [selectedProviders, setSelectedProviders] = React39.useState([]);
|
|
17763
|
+
const [authPrimary, setAuthPrimary] = React39.useState("");
|
|
17764
|
+
const [kycPrimary, setKycPrimary] = React39.useState("");
|
|
17765
|
+
const [uxSteps, setUxSteps] = React39.useState({});
|
|
17766
|
+
React39.useEffect(() => {
|
|
17744
17767
|
let cancelled = false;
|
|
17745
17768
|
(async () => {
|
|
17746
17769
|
try {
|
|
@@ -17759,7 +17782,7 @@ var OnboardingPolicySection = ({
|
|
|
17759
17782
|
cancelled = true;
|
|
17760
17783
|
};
|
|
17761
17784
|
}, []);
|
|
17762
|
-
const applyResponse =
|
|
17785
|
+
const applyResponse = React39.useCallback((p) => {
|
|
17763
17786
|
const pol = p.policy;
|
|
17764
17787
|
setProfileName(p.verification_profile ?? "");
|
|
17765
17788
|
setRequireEmail(pol?.require_email ?? false);
|
|
@@ -17769,8 +17792,8 @@ var OnboardingPolicySection = ({
|
|
|
17769
17792
|
setKycPrimary(pol?.kyc_primary ?? "");
|
|
17770
17793
|
setUxSteps(pol?.ux_steps ?? {});
|
|
17771
17794
|
}, []);
|
|
17772
|
-
const loadGen =
|
|
17773
|
-
const load =
|
|
17795
|
+
const loadGen = React39.useRef(0);
|
|
17796
|
+
const load = React39.useCallback(async () => {
|
|
17774
17797
|
const gen = ++loadGen.current;
|
|
17775
17798
|
setLoading(true);
|
|
17776
17799
|
setLoadError(null);
|
|
@@ -17793,16 +17816,16 @@ var OnboardingPolicySection = ({
|
|
|
17793
17816
|
if (gen === loadGen.current) setLoading(false);
|
|
17794
17817
|
}
|
|
17795
17818
|
}, [groupId, applyResponse]);
|
|
17796
|
-
|
|
17819
|
+
React39.useEffect(() => {
|
|
17797
17820
|
setHidden(false);
|
|
17798
17821
|
setSaved(false);
|
|
17799
17822
|
setSaveError(null);
|
|
17800
17823
|
setCatalogRefreshed(false);
|
|
17801
17824
|
void load();
|
|
17802
17825
|
}, [load]);
|
|
17803
|
-
const [probeRetry, setProbeRetry] =
|
|
17804
|
-
const probedGroupRef =
|
|
17805
|
-
|
|
17826
|
+
const [probeRetry, setProbeRetry] = React39.useState(0);
|
|
17827
|
+
const probedGroupRef = React39.useRef(null);
|
|
17828
|
+
React39.useEffect(() => {
|
|
17806
17829
|
let cancelled = false;
|
|
17807
17830
|
if (probedGroupRef.current !== groupId) {
|
|
17808
17831
|
setPlatformActive(null);
|
|
@@ -17817,7 +17840,7 @@ var OnboardingPolicySection = ({
|
|
|
17817
17840
|
cancelled = true;
|
|
17818
17841
|
};
|
|
17819
17842
|
}, [groupId, sponsorshipEpoch, probeRetry]);
|
|
17820
|
-
const markDirty =
|
|
17843
|
+
const markDirty = React39.useCallback(() => {
|
|
17821
17844
|
setSaved(false);
|
|
17822
17845
|
setSaveError(null);
|
|
17823
17846
|
}, []);
|
|
@@ -17868,7 +17891,7 @@ var OnboardingPolicySection = ({
|
|
|
17868
17891
|
return null;
|
|
17869
17892
|
};
|
|
17870
17893
|
const anyBlockedToggle = !loading && profileGroups.some((g) => groupVendors(g).some((v) => vendorToggleTarget(g, v) === null));
|
|
17871
|
-
|
|
17894
|
+
React39.useEffect(() => {
|
|
17872
17895
|
if (!anyBlockedToggle || catalogRefreshed) return;
|
|
17873
17896
|
setCatalogRefreshed(true);
|
|
17874
17897
|
onboardingPolicyService.listVerificationProfiles().then((v) => setProfiles(v.profiles)).catch(() => {
|
|
@@ -17907,7 +17930,7 @@ var OnboardingPolicySection = ({
|
|
|
17907
17930
|
...requireEmail ? [{ label: "Verify email" }] : [],
|
|
17908
17931
|
...profileName && identityStepLabel ? [{ label: identityStepLabel, detail: identityStepDetail }] : []
|
|
17909
17932
|
];
|
|
17910
|
-
const save =
|
|
17933
|
+
const save = React39.useCallback(async () => {
|
|
17911
17934
|
if (customize && selectedProviders.length === 0) {
|
|
17912
17935
|
setSaveError("Select at least one sign-in method, or turn customization off.");
|
|
17913
17936
|
return;
|
|
@@ -17987,7 +18010,7 @@ var OnboardingPolicySection = ({
|
|
|
17987
18010
|
)
|
|
17988
18011
|
] }) }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
|
|
17989
18012
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-2.5 gap-y-1.5 rounded-lg border border-primary/20 bg-primary/[0.04] px-3.5 py-2.5", children: [
|
|
17990
|
-
journeySteps.map((step, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18013
|
+
journeySteps.map((step, i) => /* @__PURE__ */ jsxRuntime.jsxs(React39__default.default.Fragment, { children: [
|
|
17991
18014
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "text-[12px] text-text-muted/60", children: "\u203A" }),
|
|
17992
18015
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
|
|
17993
18016
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-4 w-4 items-center justify-center rounded-full bg-primary/20 text-[9px] font-bold text-primary", children: i + 1 }),
|
|
@@ -18846,7 +18869,7 @@ function formatBigNumberString(value) {
|
|
|
18846
18869
|
return { withSeparators, sci: `~${mantissa}e${exp}` };
|
|
18847
18870
|
}
|
|
18848
18871
|
function ExpandableString({ value }) {
|
|
18849
|
-
const [expanded, setExpanded] =
|
|
18872
|
+
const [expanded, setExpanded] = React39.useState(false);
|
|
18850
18873
|
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex flex-wrap items-baseline gap-2", children: [
|
|
18851
18874
|
expanded ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono text-[10px] text-text-secondary break-all", children: value }) : /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-text-muted", children: [
|
|
18852
18875
|
"[",
|
|
@@ -18932,7 +18955,7 @@ function PrettyObject({
|
|
|
18932
18955
|
depth,
|
|
18933
18956
|
keyHint
|
|
18934
18957
|
}) {
|
|
18935
|
-
const [showEmpty, setShowEmpty] =
|
|
18958
|
+
const [showEmpty, setShowEmpty] = React39.useState(false);
|
|
18936
18959
|
const entries = Object.entries(value);
|
|
18937
18960
|
const present = entries.filter(([, v]) => !isEmptyValue(v));
|
|
18938
18961
|
const empty = entries.filter(([, v]) => isEmptyValue(v));
|
|
@@ -19020,24 +19043,24 @@ function PrettyJson({
|
|
|
19020
19043
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-text-secondary", children: String(value) });
|
|
19021
19044
|
}
|
|
19022
19045
|
function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId, entityType = "user", selectorRegistry, addressLabels, renderSimpleSummary, mode = "sign", onRetry, onSwitchToSign }) {
|
|
19023
|
-
const [unsignedTransaction, setUnsignedTransaction] =
|
|
19024
|
-
const [loading, setLoading] =
|
|
19025
|
-
const [error, setError] =
|
|
19026
|
-
const [reviewWarning, setReviewWarning] =
|
|
19027
|
-
const [signing, setSigning] =
|
|
19028
|
-
const [selectedKey, setSelectedKey] =
|
|
19029
|
-
const [availableKeys, setAvailableKeys] =
|
|
19030
|
-
const [keysLoading, setKeysLoading] =
|
|
19031
|
-
const [keysError, setKeysError] =
|
|
19032
|
-
const [policyAuthorizedKeyIds, setPolicyAuthorizedKeyIds] =
|
|
19033
|
-
const [expandedTxData, setExpandedTxData] =
|
|
19034
|
-
const [view, setView] =
|
|
19035
|
-
const [cancelling, setCancelling] =
|
|
19036
|
-
const [cancelError, setCancelError] =
|
|
19046
|
+
const [unsignedTransaction, setUnsignedTransaction] = React39.useState(null);
|
|
19047
|
+
const [loading, setLoading] = React39.useState(true);
|
|
19048
|
+
const [error, setError] = React39.useState(null);
|
|
19049
|
+
const [reviewWarning, setReviewWarning] = React39.useState(null);
|
|
19050
|
+
const [signing, setSigning] = React39.useState(false);
|
|
19051
|
+
const [selectedKey, setSelectedKey] = React39.useState(null);
|
|
19052
|
+
const [availableKeys, setAvailableKeys] = React39.useState([]);
|
|
19053
|
+
const [keysLoading, setKeysLoading] = React39.useState(false);
|
|
19054
|
+
const [keysError, setKeysError] = React39.useState(null);
|
|
19055
|
+
const [policyAuthorizedKeyIds, setPolicyAuthorizedKeyIds] = React39.useState([]);
|
|
19056
|
+
const [expandedTxData, setExpandedTxData] = React39.useState(/* @__PURE__ */ new Set());
|
|
19057
|
+
const [view, setView] = React39.useState("simple");
|
|
19058
|
+
const [cancelling, setCancelling] = React39.useState(false);
|
|
19059
|
+
const [cancelError, setCancelError] = React39.useState(null);
|
|
19037
19060
|
const walletSigner = useWalletSigner();
|
|
19038
19061
|
const tokenStore = useTokenStore();
|
|
19039
19062
|
const delegationTokenForSigning = tokenStore.getDelegationToken();
|
|
19040
|
-
const ownedSignerState =
|
|
19063
|
+
const ownedSignerState = React39.useMemo(() => {
|
|
19041
19064
|
try {
|
|
19042
19065
|
return {
|
|
19043
19066
|
binding: nftOwnedSignerBinding(delegationTokenForSigning),
|
|
@@ -19066,7 +19089,7 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
|
|
|
19066
19089
|
setCancelling(false);
|
|
19067
19090
|
}
|
|
19068
19091
|
};
|
|
19069
|
-
|
|
19092
|
+
React39.useEffect(() => {
|
|
19070
19093
|
setError(null);
|
|
19071
19094
|
setReviewWarning(null);
|
|
19072
19095
|
setKeysError(null);
|
|
@@ -19076,7 +19099,7 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
|
|
|
19076
19099
|
setKeysError(null);
|
|
19077
19100
|
};
|
|
19078
19101
|
}, [message.id]);
|
|
19079
|
-
|
|
19102
|
+
React39.useEffect(() => {
|
|
19080
19103
|
const fetchUnsignedTransaction = async () => {
|
|
19081
19104
|
try {
|
|
19082
19105
|
setLoading(true);
|
|
@@ -19199,7 +19222,7 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
|
|
|
19199
19222
|
mode,
|
|
19200
19223
|
delegationTokenForSigning
|
|
19201
19224
|
]);
|
|
19202
|
-
|
|
19225
|
+
React39.useEffect(() => {
|
|
19203
19226
|
if (mode === "inspect") {
|
|
19204
19227
|
setKeysLoading(false);
|
|
19205
19228
|
return;
|
|
@@ -19264,7 +19287,7 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
|
|
|
19264
19287
|
ownedSignerBinding,
|
|
19265
19288
|
ownedSignerState.error
|
|
19266
19289
|
]);
|
|
19267
|
-
|
|
19290
|
+
React39.useEffect(() => {
|
|
19268
19291
|
if (mode === "inspect") {
|
|
19269
19292
|
setPolicyAuthorizedKeyIds([]);
|
|
19270
19293
|
return;
|
|
@@ -19288,7 +19311,7 @@ function SignaturePreviewDrawer({ message, onClose, onSignatureConfirmed, userId
|
|
|
19288
19311
|
cancelled = true;
|
|
19289
19312
|
};
|
|
19290
19313
|
}, [message?.id, mode]);
|
|
19291
|
-
|
|
19314
|
+
React39.useEffect(() => {
|
|
19292
19315
|
if (availableKeys.length === 0) {
|
|
19293
19316
|
if (selectedKey) setSelectedKey(null);
|
|
19294
19317
|
return;
|
|
@@ -20106,8 +20129,8 @@ function InspectFooter({
|
|
|
20106
20129
|
onRetry,
|
|
20107
20130
|
onSwitchToSign
|
|
20108
20131
|
}) {
|
|
20109
|
-
const [retrying, setRetrying] =
|
|
20110
|
-
const [actionError, setActionError] =
|
|
20132
|
+
const [retrying, setRetrying] = React39.useState(false);
|
|
20133
|
+
const [actionError, setActionError] = React39.useState(null);
|
|
20111
20134
|
const status = effectiveStatus(message);
|
|
20112
20135
|
const color = statusToColor(status);
|
|
20113
20136
|
const txHash = message.response?.deployment_tx_hash || message.response?.transaction_hash;
|
|
@@ -20246,8 +20269,8 @@ var GWEI_DISPLAY_THRESHOLD = BigInt("100000000000000");
|
|
|
20246
20269
|
var NATIVE_SYMBOL = "ETH";
|
|
20247
20270
|
var USD_PER_GAS = 0.01 / 21e3;
|
|
20248
20271
|
function useGasPricing() {
|
|
20249
|
-
const [pricing, setPricing] =
|
|
20250
|
-
|
|
20272
|
+
const [pricing, setPricing] = React39.useState(null);
|
|
20273
|
+
React39.useEffect(() => {
|
|
20251
20274
|
let mounted = true;
|
|
20252
20275
|
void exports.billingService.getGasPricing().then((p) => {
|
|
20253
20276
|
if (mounted) setPricing(p);
|
|
@@ -20381,12 +20404,12 @@ var Toast = ({
|
|
|
20381
20404
|
icon,
|
|
20382
20405
|
action
|
|
20383
20406
|
}) => {
|
|
20384
|
-
const [progress, setProgress] =
|
|
20385
|
-
const [isVisible, setIsVisible] =
|
|
20386
|
-
|
|
20407
|
+
const [progress, setProgress] = React39.useState(100);
|
|
20408
|
+
const [isVisible, setIsVisible] = React39.useState(false);
|
|
20409
|
+
React39.useEffect(() => {
|
|
20387
20410
|
requestAnimationFrame(() => setIsVisible(true));
|
|
20388
20411
|
}, []);
|
|
20389
|
-
|
|
20412
|
+
React39.useEffect(() => {
|
|
20390
20413
|
if (duration > 0) {
|
|
20391
20414
|
const interval = setInterval(() => {
|
|
20392
20415
|
setProgress((prev) => {
|
|
@@ -20531,7 +20554,7 @@ function SignatureWorkflow({
|
|
|
20531
20554
|
dismissPending,
|
|
20532
20555
|
refreshPending
|
|
20533
20556
|
} = useSignatureQueue();
|
|
20534
|
-
|
|
20557
|
+
React39.useEffect(() => {
|
|
20535
20558
|
if (!notify || !pending) return;
|
|
20536
20559
|
const cleanup = notify({
|
|
20537
20560
|
id: `signature-${pending.id}`,
|
|
@@ -20681,7 +20704,7 @@ async function resolveKey(userId, selection) {
|
|
|
20681
20704
|
function useGenericSigner() {
|
|
20682
20705
|
const { user } = useAuth();
|
|
20683
20706
|
const { signMessage: signWithWallet } = useWalletSigner();
|
|
20684
|
-
const sign =
|
|
20707
|
+
const sign = React39.useCallback(
|
|
20685
20708
|
async (hash32Hex, opts = {}) => {
|
|
20686
20709
|
if (!user) throw new Error("useGenericSigner: no authenticated user");
|
|
20687
20710
|
const selection = opts.keySelection ?? { mode: "default" };
|
|
@@ -20748,10 +20771,10 @@ function PhoneVerification({
|
|
|
20748
20771
|
readOnly = false,
|
|
20749
20772
|
valueClassName
|
|
20750
20773
|
}) {
|
|
20751
|
-
const [phone, setPhone] =
|
|
20752
|
-
const [editing, setEditing] =
|
|
20753
|
-
const [saving, setSaving] =
|
|
20754
|
-
const [error, setError] =
|
|
20774
|
+
const [phone, setPhone] = React39.useState(profile.phone_e164 ?? "");
|
|
20775
|
+
const [editing, setEditing] = React39.useState(!profile.phone_e164);
|
|
20776
|
+
const [saving, setSaving] = React39.useState(false);
|
|
20777
|
+
const [error, setError] = React39.useState(null);
|
|
20755
20778
|
async function save() {
|
|
20756
20779
|
if (!isValidE164(phone)) {
|
|
20757
20780
|
setError("Please enter a phone number in E.164 format (e.g. +14155550101).");
|
|
@@ -20879,10 +20902,10 @@ function Profile({ classNames: propClassNames } = {}) {
|
|
|
20879
20902
|
...propClassNames ?? {}
|
|
20880
20903
|
});
|
|
20881
20904
|
const { isLoading: configLoading } = useProviderConfig();
|
|
20882
|
-
const [profile, setProfile] =
|
|
20883
|
-
const [loading, setLoading] =
|
|
20884
|
-
const [topError, setTopError] =
|
|
20885
|
-
|
|
20905
|
+
const [profile, setProfile] = React39.useState(null);
|
|
20906
|
+
const [loading, setLoading] = React39.useState(true);
|
|
20907
|
+
const [topError, setTopError] = React39.useState(null);
|
|
20908
|
+
React39.useEffect(() => {
|
|
20886
20909
|
let cancelled = false;
|
|
20887
20910
|
(async () => {
|
|
20888
20911
|
try {
|
|
@@ -20927,13 +20950,13 @@ function Profile({ classNames: propClassNames } = {}) {
|
|
|
20927
20950
|
] });
|
|
20928
20951
|
}
|
|
20929
20952
|
var IdentitySection = ({ profile, onSaved, classNames }) => {
|
|
20930
|
-
const [displayName, setDisplayName] =
|
|
20953
|
+
const [displayName, setDisplayName] = React39.useState(
|
|
20931
20954
|
profile.display_name === PLACEHOLDER_DISPLAY_NAME ? "" : profile.display_name
|
|
20932
20955
|
);
|
|
20933
|
-
const [avatarChoice, setAvatarChoice] =
|
|
20934
|
-
const [avatarUrl, setAvatarUrl] =
|
|
20935
|
-
const [busy, setBusy] =
|
|
20936
|
-
const [err, setErr] =
|
|
20956
|
+
const [avatarChoice, setAvatarChoice] = React39.useState(profile.avatar_choice);
|
|
20957
|
+
const [avatarUrl, setAvatarUrl] = React39.useState(profile.avatar_url);
|
|
20958
|
+
const [busy, setBusy] = React39.useState(false);
|
|
20959
|
+
const [err, setErr] = React39.useState(null);
|
|
20937
20960
|
const [saved, flashSaved] = useSavedFlash();
|
|
20938
20961
|
const dirty = displayName !== (profile.display_name === PLACEHOLDER_DISPLAY_NAME ? "" : profile.display_name) || avatarChoice !== profile.avatar_choice || (avatarUrl ?? "") !== (profile.avatar_url ?? "");
|
|
20939
20962
|
async function save() {
|
|
@@ -21174,12 +21197,12 @@ var SaveButton = ({ onClick, busy, disabled, saved = false, classNames }) => /*
|
|
|
21174
21197
|
}
|
|
21175
21198
|
);
|
|
21176
21199
|
function useSavedFlash(ms = 1800) {
|
|
21177
|
-
const [saved, setSaved] =
|
|
21178
|
-
const timer =
|
|
21179
|
-
|
|
21200
|
+
const [saved, setSaved] = React39.useState(false);
|
|
21201
|
+
const timer = React39__default.default.useRef(null);
|
|
21202
|
+
React39.useEffect(() => () => {
|
|
21180
21203
|
if (timer.current) clearTimeout(timer.current);
|
|
21181
21204
|
}, []);
|
|
21182
|
-
const flash =
|
|
21205
|
+
const flash = React39__default.default.useCallback(() => {
|
|
21183
21206
|
setSaved(true);
|
|
21184
21207
|
if (timer.current) clearTimeout(timer.current);
|
|
21185
21208
|
timer.current = setTimeout(() => setSaved(false), ms);
|
|
@@ -21448,14 +21471,14 @@ function isEoaKey(key) {
|
|
|
21448
21471
|
function useKeyBalance(handle, options = {}) {
|
|
21449
21472
|
const { pollIntervalMs = 15e3, enabled = true } = options;
|
|
21450
21473
|
const { request } = useWalletSigner();
|
|
21451
|
-
const [wei, setWei] =
|
|
21452
|
-
const [loading, setLoading] =
|
|
21453
|
-
const [error, setError] =
|
|
21454
|
-
const requestRef =
|
|
21474
|
+
const [wei, setWei] = React39.useState(null);
|
|
21475
|
+
const [loading, setLoading] = React39.useState(false);
|
|
21476
|
+
const [error, setError] = React39.useState(null);
|
|
21477
|
+
const requestRef = React39.useRef(request);
|
|
21455
21478
|
requestRef.current = request;
|
|
21456
|
-
const handleRef =
|
|
21479
|
+
const handleRef = React39.useRef(handle);
|
|
21457
21480
|
handleRef.current = handle;
|
|
21458
|
-
const fetchOnce =
|
|
21481
|
+
const fetchOnce = React39.useCallback(async () => {
|
|
21459
21482
|
const h = handleRef.current;
|
|
21460
21483
|
if (!h) {
|
|
21461
21484
|
setWei(null);
|
|
@@ -21475,7 +21498,7 @@ function useKeyBalance(handle, options = {}) {
|
|
|
21475
21498
|
setLoading(false);
|
|
21476
21499
|
}
|
|
21477
21500
|
}, []);
|
|
21478
|
-
|
|
21501
|
+
React39.useEffect(() => {
|
|
21479
21502
|
if (!enabled || !handle) {
|
|
21480
21503
|
setWei(null);
|
|
21481
21504
|
setError(null);
|
|
@@ -21493,17 +21516,17 @@ function useKeyBalance(handle, options = {}) {
|
|
|
21493
21516
|
function useEoaSend(handle, options = {}) {
|
|
21494
21517
|
const { timeoutMs = 9e4, pollIntervalMs = 3e3, onConfirmed } = options;
|
|
21495
21518
|
const { sendTransaction, request } = useWalletSigner();
|
|
21496
|
-
const [status, setStatus] =
|
|
21497
|
-
const [txHash, setTxHash] =
|
|
21498
|
-
const [error, setError] =
|
|
21499
|
-
const abortRef =
|
|
21500
|
-
const reset =
|
|
21519
|
+
const [status, setStatus] = React39.useState("idle");
|
|
21520
|
+
const [txHash, setTxHash] = React39.useState(null);
|
|
21521
|
+
const [error, setError] = React39.useState(null);
|
|
21522
|
+
const abortRef = React39.useRef(false);
|
|
21523
|
+
const reset = React39.useCallback(() => {
|
|
21501
21524
|
abortRef.current = true;
|
|
21502
21525
|
setStatus("idle");
|
|
21503
21526
|
setTxHash(null);
|
|
21504
21527
|
setError(null);
|
|
21505
21528
|
}, []);
|
|
21506
|
-
const send =
|
|
21529
|
+
const send = React39.useCallback(
|
|
21507
21530
|
async (input) => {
|
|
21508
21531
|
if (!handle) {
|
|
21509
21532
|
setError("No EOA selected.");
|
|
@@ -21594,14 +21617,14 @@ var SendFromKey = ({
|
|
|
21594
21617
|
maxWei,
|
|
21595
21618
|
onClose
|
|
21596
21619
|
}) => {
|
|
21597
|
-
const [to, setTo] =
|
|
21598
|
-
const [amount, setAmount] =
|
|
21620
|
+
const [to, setTo] = React39.useState("");
|
|
21621
|
+
const [amount, setAmount] = React39.useState("");
|
|
21599
21622
|
const { status, txHash, error, send, reset } = useEoaSend(handle, {
|
|
21600
21623
|
onConfirmed: () => {
|
|
21601
21624
|
}
|
|
21602
21625
|
});
|
|
21603
21626
|
const toValid = ADDRESS_RE2.test(to);
|
|
21604
|
-
const amountValid =
|
|
21627
|
+
const amountValid = React39.useMemo(() => {
|
|
21605
21628
|
if (!amount) return false;
|
|
21606
21629
|
if (!/^\d*\.?\d*$/.test(amount.trim())) return false;
|
|
21607
21630
|
return Number(amount) > 0;
|
|
@@ -21826,7 +21849,7 @@ var KeyBalances = ({
|
|
|
21826
21849
|
}) => {
|
|
21827
21850
|
const configuredClassNames = useWalletConfig().ui?.security;
|
|
21828
21851
|
const classNames = { ...configuredClassNames ?? {}, ...propClassNames ?? {} };
|
|
21829
|
-
const [sendOpen, setSendOpen] =
|
|
21852
|
+
const [sendOpen, setSendOpen] = React39.useState(false);
|
|
21830
21853
|
const { wei, loading, error } = useKeyBalance(handle);
|
|
21831
21854
|
const formatted = wei === null ? null : formatUnits(wei, 18, 6);
|
|
21832
21855
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -21876,13 +21899,13 @@ var ChangePasswordModal = ({
|
|
|
21876
21899
|
onClose,
|
|
21877
21900
|
onChanged
|
|
21878
21901
|
}) => {
|
|
21879
|
-
const [current, setCurrent] =
|
|
21880
|
-
const [next, setNext] =
|
|
21881
|
-
const [confirm, setConfirm] =
|
|
21882
|
-
const [submitting, setSubmitting] =
|
|
21883
|
-
const [serverError, setServerError] =
|
|
21884
|
-
const [success, setSuccess] =
|
|
21885
|
-
const issues =
|
|
21902
|
+
const [current, setCurrent] = React39.useState("");
|
|
21903
|
+
const [next, setNext] = React39.useState("");
|
|
21904
|
+
const [confirm, setConfirm] = React39.useState("");
|
|
21905
|
+
const [submitting, setSubmitting] = React39.useState(false);
|
|
21906
|
+
const [serverError, setServerError] = React39.useState(null);
|
|
21907
|
+
const [success, setSuccess] = React39.useState(false);
|
|
21908
|
+
const issues = React39.useMemo(() => {
|
|
21886
21909
|
const out = [];
|
|
21887
21910
|
if (!current) out.push({ field: "current", message: "Required." });
|
|
21888
21911
|
if (!next) {
|
|
@@ -22045,7 +22068,7 @@ function PasswordField({
|
|
|
22045
22068
|
autoComplete,
|
|
22046
22069
|
autoFocus
|
|
22047
22070
|
}) {
|
|
22048
|
-
const [reveal, setReveal] =
|
|
22071
|
+
const [reveal, setReveal] = React39.useState(false);
|
|
22049
22072
|
const touched = value.length > 0;
|
|
22050
22073
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
|
|
22051
22074
|
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-[10px] uppercase tracking-wide text-text-muted", children: label }),
|
|
@@ -22175,32 +22198,32 @@ function SecurityPage() {
|
|
|
22175
22198
|
const configuredClassNames = useWalletConfig().ui?.security;
|
|
22176
22199
|
const classNames = resolveSecurityClasses(configuredClassNames);
|
|
22177
22200
|
const navigate = useWalletNavigate();
|
|
22178
|
-
const [keys, setKeys] =
|
|
22179
|
-
const [loading, setLoading] =
|
|
22180
|
-
const [error, setError] =
|
|
22181
|
-
const [info, setInfo] =
|
|
22182
|
-
const [showAdvanced, setShowAdvanced] =
|
|
22183
|
-
const [lockdown, setLockdown] =
|
|
22184
|
-
const [busy, setBusy] =
|
|
22185
|
-
const [rotateTarget, setRotateTarget] =
|
|
22186
|
-
const [rotateNewKind, setRotateNewKind] =
|
|
22187
|
-
const [rotateStep, setRotateStep] =
|
|
22188
|
-
const [rotateNewAddress, setRotateNewAddress] =
|
|
22189
|
-
const [rotateNewKeyId, setRotateNewKeyId] =
|
|
22190
|
-
const [rotateAccount, setRotateAccount] =
|
|
22191
|
-
const [rotateAddStatus, setRotateAddStatus] =
|
|
22192
|
-
const [rotateOperationMessageId, setRotateOperationMessageId] =
|
|
22193
|
-
const [passwordModalOpen, setPasswordModalOpen] =
|
|
22194
|
-
const [editingLabelKeyId, setEditingLabelKeyId] =
|
|
22195
|
-
const [labelDraft, setLabelDraft] =
|
|
22196
|
-
const [apiKeys, setApiKeys] =
|
|
22197
|
-
const [apiKeysLoading, setApiKeysLoading] =
|
|
22198
|
-
const [generateOpen, setGenerateOpen] =
|
|
22199
|
-
const [generateName, setGenerateName] =
|
|
22200
|
-
const [generateDescription, setGenerateDescription] =
|
|
22201
|
-
const [freshApiKey, setFreshApiKey] =
|
|
22202
|
-
const [freshApiKeyCopied, setFreshApiKeyCopied] =
|
|
22203
|
-
const refresh =
|
|
22201
|
+
const [keys, setKeys] = React39.useState([]);
|
|
22202
|
+
const [loading, setLoading] = React39.useState(true);
|
|
22203
|
+
const [error, setError] = React39.useState(null);
|
|
22204
|
+
const [info, setInfo] = React39.useState(null);
|
|
22205
|
+
const [showAdvanced, setShowAdvanced] = React39.useState(false);
|
|
22206
|
+
const [lockdown, setLockdown] = React39.useState(null);
|
|
22207
|
+
const [busy, setBusy] = React39.useState(null);
|
|
22208
|
+
const [rotateTarget, setRotateTarget] = React39.useState(null);
|
|
22209
|
+
const [rotateNewKind, setRotateNewKind] = React39.useState(null);
|
|
22210
|
+
const [rotateStep, setRotateStep] = React39.useState("pick");
|
|
22211
|
+
const [rotateNewAddress, setRotateNewAddress] = React39.useState(null);
|
|
22212
|
+
const [rotateNewKeyId, setRotateNewKeyId] = React39.useState(null);
|
|
22213
|
+
const [rotateAccount, setRotateAccount] = React39.useState(null);
|
|
22214
|
+
const [rotateAddStatus, setRotateAddStatus] = React39.useState(null);
|
|
22215
|
+
const [rotateOperationMessageId, setRotateOperationMessageId] = React39.useState(null);
|
|
22216
|
+
const [passwordModalOpen, setPasswordModalOpen] = React39.useState(false);
|
|
22217
|
+
const [editingLabelKeyId, setEditingLabelKeyId] = React39.useState(null);
|
|
22218
|
+
const [labelDraft, setLabelDraft] = React39.useState("");
|
|
22219
|
+
const [apiKeys, setApiKeys] = React39.useState([]);
|
|
22220
|
+
const [apiKeysLoading, setApiKeysLoading] = React39.useState(true);
|
|
22221
|
+
const [generateOpen, setGenerateOpen] = React39.useState(false);
|
|
22222
|
+
const [generateName, setGenerateName] = React39.useState("");
|
|
22223
|
+
const [generateDescription, setGenerateDescription] = React39.useState("");
|
|
22224
|
+
const [freshApiKey, setFreshApiKey] = React39.useState(null);
|
|
22225
|
+
const [freshApiKeyCopied, setFreshApiKeyCopied] = React39.useState(false);
|
|
22226
|
+
const refresh = React39.useCallback(async (opts) => {
|
|
22204
22227
|
setError(null);
|
|
22205
22228
|
try {
|
|
22206
22229
|
if (opts?.invalidate !== false) invalidateWalletCount();
|
|
@@ -22216,10 +22239,10 @@ function SecurityPage() {
|
|
|
22216
22239
|
setLoading(false);
|
|
22217
22240
|
}
|
|
22218
22241
|
}, []);
|
|
22219
|
-
|
|
22242
|
+
React39.useEffect(() => {
|
|
22220
22243
|
void refresh({ invalidate: false });
|
|
22221
22244
|
}, [refresh]);
|
|
22222
|
-
const refreshApiKeys =
|
|
22245
|
+
const refreshApiKeys = React39.useCallback(async () => {
|
|
22223
22246
|
try {
|
|
22224
22247
|
const list = await apiKeysService.list();
|
|
22225
22248
|
setApiKeys(list);
|
|
@@ -22229,7 +22252,7 @@ function SecurityPage() {
|
|
|
22229
22252
|
setApiKeysLoading(false);
|
|
22230
22253
|
}
|
|
22231
22254
|
}, []);
|
|
22232
|
-
|
|
22255
|
+
React39.useEffect(() => {
|
|
22233
22256
|
refreshApiKeys();
|
|
22234
22257
|
}, [refreshApiKeys]);
|
|
22235
22258
|
const userControlledCount = keys.length;
|
|
@@ -23513,42 +23536,42 @@ var GroupsView = ({
|
|
|
23513
23536
|
clearDelegationToken,
|
|
23514
23537
|
user
|
|
23515
23538
|
} = useAuthContext();
|
|
23516
|
-
const [busyId, setBusyId] =
|
|
23517
|
-
const [error, setError] =
|
|
23518
|
-
const [refreshing, setRefreshing] =
|
|
23519
|
-
const [creating, setCreating] =
|
|
23520
|
-
const [createOpen, setCreateOpen] =
|
|
23521
|
-
const [newGroupName, setNewGroupName] =
|
|
23522
|
-
const [newGroupDescription, setNewGroupDescription] =
|
|
23523
|
-
const [newGroupType, setNewGroupType] =
|
|
23524
|
-
const [newGroupLegalEntity, setNewGroupLegalEntity] =
|
|
23525
|
-
const [selectedGroupId, setSelectedGroupId] =
|
|
23526
|
-
const [ownedGroups, setOwnedGroups] =
|
|
23527
|
-
const [ownedGroupsLoading, setOwnedGroupsLoading] =
|
|
23528
|
-
const [ownedGroupsError, setOwnedGroupsError] =
|
|
23529
|
-
const [activeOwnedGroup, setActiveOwnedGroup] =
|
|
23530
|
-
const [operatorKeys, setOperatorKeys] =
|
|
23531
|
-
const [operatorKeysLoading, setOperatorKeysLoading] =
|
|
23532
|
-
const [selectedOperatorKeyId, setSelectedOperatorKeyId] =
|
|
23533
|
-
const [relationshipChildGroupId, setRelationshipChildGroupId] =
|
|
23534
|
-
const [relationshipAdvancing, setRelationshipAdvancing] =
|
|
23535
|
-
const [relationshipProgress, setRelationshipProgress] =
|
|
23539
|
+
const [busyId, setBusyId] = React39.useState(null);
|
|
23540
|
+
const [error, setError] = React39.useState(null);
|
|
23541
|
+
const [refreshing, setRefreshing] = React39.useState(false);
|
|
23542
|
+
const [creating, setCreating] = React39.useState(false);
|
|
23543
|
+
const [createOpen, setCreateOpen] = React39.useState(false);
|
|
23544
|
+
const [newGroupName, setNewGroupName] = React39.useState("");
|
|
23545
|
+
const [newGroupDescription, setNewGroupDescription] = React39.useState("");
|
|
23546
|
+
const [newGroupType, setNewGroupType] = React39.useState("Team");
|
|
23547
|
+
const [newGroupLegalEntity, setNewGroupLegalEntity] = React39.useState(false);
|
|
23548
|
+
const [selectedGroupId, setSelectedGroupId] = React39.useState(null);
|
|
23549
|
+
const [ownedGroups, setOwnedGroups] = React39.useState([]);
|
|
23550
|
+
const [ownedGroupsLoading, setOwnedGroupsLoading] = React39.useState(false);
|
|
23551
|
+
const [ownedGroupsError, setOwnedGroupsError] = React39.useState(null);
|
|
23552
|
+
const [activeOwnedGroup, setActiveOwnedGroup] = React39.useState(null);
|
|
23553
|
+
const [operatorKeys, setOperatorKeys] = React39.useState([]);
|
|
23554
|
+
const [operatorKeysLoading, setOperatorKeysLoading] = React39.useState(false);
|
|
23555
|
+
const [selectedOperatorKeyId, setSelectedOperatorKeyId] = React39.useState("");
|
|
23556
|
+
const [relationshipChildGroupId, setRelationshipChildGroupId] = React39.useState("");
|
|
23557
|
+
const [relationshipAdvancing, setRelationshipAdvancing] = React39.useState(false);
|
|
23558
|
+
const [relationshipProgress, setRelationshipProgress] = React39.useState(null);
|
|
23536
23559
|
const actingAsAnyGroup = !!delegationToken;
|
|
23537
|
-
const selectedGroup =
|
|
23560
|
+
const selectedGroup = React39.useMemo(
|
|
23538
23561
|
() => groups.find((group) => group.id === selectedGroupId) ?? null,
|
|
23539
23562
|
[groups, selectedGroupId]
|
|
23540
23563
|
);
|
|
23541
23564
|
const sourceGroupId = delegationSession?.kind === "owned" ? delegationSession.parentGroupId : delegationSession?.currentGroupId ?? null;
|
|
23542
|
-
const sourceGroup =
|
|
23565
|
+
const sourceGroup = React39.useMemo(
|
|
23543
23566
|
() => groups.find((group) => group.id === sourceGroupId) ?? null,
|
|
23544
23567
|
[groups, sourceGroupId]
|
|
23545
23568
|
);
|
|
23546
23569
|
const canAdvanceRelationshipAsParent = sourceGroup?.role === "owner";
|
|
23547
|
-
|
|
23570
|
+
React39.useEffect(() => {
|
|
23548
23571
|
setRelationshipChildGroupId("");
|
|
23549
23572
|
setRelationshipProgress(null);
|
|
23550
23573
|
}, [delegationSession?.kind, delegationSession?.currentGroupId]);
|
|
23551
|
-
|
|
23574
|
+
React39.useEffect(() => {
|
|
23552
23575
|
let cancelled = false;
|
|
23553
23576
|
if (!delegationToken || delegationSession?.kind !== "direct") {
|
|
23554
23577
|
setOwnedGroups([]);
|
|
@@ -23576,7 +23599,7 @@ var GroupsView = ({
|
|
|
23576
23599
|
cancelled = true;
|
|
23577
23600
|
};
|
|
23578
23601
|
}, [delegationSession, delegationToken]);
|
|
23579
|
-
|
|
23602
|
+
React39.useEffect(() => {
|
|
23580
23603
|
let cancelled = false;
|
|
23581
23604
|
if (delegationSession?.kind !== "direct" || !user?.id) {
|
|
23582
23605
|
setOperatorKeys([]);
|
|
@@ -23613,7 +23636,7 @@ var GroupsView = ({
|
|
|
23613
23636
|
cancelled = true;
|
|
23614
23637
|
};
|
|
23615
23638
|
}, [delegationSession, user?.id]);
|
|
23616
|
-
|
|
23639
|
+
React39.useEffect(() => {
|
|
23617
23640
|
let cancelled = false;
|
|
23618
23641
|
if (!delegationToken || delegationSession?.kind !== "owned") {
|
|
23619
23642
|
setActiveOwnedGroup(null);
|
|
@@ -24363,22 +24386,22 @@ function GroupDetailView({
|
|
|
24363
24386
|
onOpenBilling,
|
|
24364
24387
|
onRefreshed
|
|
24365
24388
|
}) {
|
|
24366
|
-
const [details, setDetails] =
|
|
24367
|
-
const [accountStatus, setAccountStatus] =
|
|
24368
|
-
const [members, setMembers] =
|
|
24369
|
-
const [loading, setLoading] =
|
|
24370
|
-
const [membersLoading, setMembersLoading] =
|
|
24371
|
-
const [error, setError] =
|
|
24372
|
-
const [showAddMember, setShowAddMember] =
|
|
24373
|
-
const [newMemberId, setNewMemberId] =
|
|
24374
|
-
const [newMemberRole, setNewMemberRole] =
|
|
24375
|
-
const [editingMemberId, setEditingMemberId] =
|
|
24376
|
-
const [editingRole, setEditingRole] =
|
|
24377
|
-
const [submitting, setSubmitting] =
|
|
24378
|
-
const [deploying, setDeploying] =
|
|
24389
|
+
const [details, setDetails] = React39.useState(group);
|
|
24390
|
+
const [accountStatus, setAccountStatus] = React39.useState(null);
|
|
24391
|
+
const [members, setMembers] = React39.useState([]);
|
|
24392
|
+
const [loading, setLoading] = React39.useState(true);
|
|
24393
|
+
const [membersLoading, setMembersLoading] = React39.useState(true);
|
|
24394
|
+
const [error, setError] = React39.useState(null);
|
|
24395
|
+
const [showAddMember, setShowAddMember] = React39.useState(false);
|
|
24396
|
+
const [newMemberId, setNewMemberId] = React39.useState("");
|
|
24397
|
+
const [newMemberRole, setNewMemberRole] = React39.useState("member");
|
|
24398
|
+
const [editingMemberId, setEditingMemberId] = React39.useState(null);
|
|
24399
|
+
const [editingRole, setEditingRole] = React39.useState("member");
|
|
24400
|
+
const [submitting, setSubmitting] = React39.useState(false);
|
|
24401
|
+
const [deploying, setDeploying] = React39.useState(false);
|
|
24379
24402
|
const role = details.role ?? group.role ?? "member";
|
|
24380
24403
|
const canManageMembers = role === "owner" || role === "admin";
|
|
24381
|
-
const loadDetails =
|
|
24404
|
+
const loadDetails = React39.useCallback(async () => {
|
|
24382
24405
|
setLoading(true);
|
|
24383
24406
|
setMembersLoading(true);
|
|
24384
24407
|
setError(null);
|
|
@@ -24398,7 +24421,7 @@ function GroupDetailView({
|
|
|
24398
24421
|
setMembersLoading(false);
|
|
24399
24422
|
}
|
|
24400
24423
|
}, [group]);
|
|
24401
|
-
|
|
24424
|
+
React39.useEffect(() => {
|
|
24402
24425
|
setDetails(group);
|
|
24403
24426
|
void loadDetails();
|
|
24404
24427
|
}, [group, loadDetails]);
|
|
@@ -24932,17 +24955,17 @@ function ActiveEnvironmentBadge({
|
|
|
24932
24955
|
configuredTestChains
|
|
24933
24956
|
);
|
|
24934
24957
|
const canChoose = Boolean(activeChainId && options.length > 1);
|
|
24935
|
-
const [busyChainId, setBusyChainId] =
|
|
24936
|
-
const [pendingLiveChainId, setPendingLiveChainId] =
|
|
24937
|
-
const [error, setError] =
|
|
24938
|
-
const switchingRef =
|
|
24939
|
-
const confirmLiveRef =
|
|
24940
|
-
const liveWarningId =
|
|
24958
|
+
const [busyChainId, setBusyChainId] = React39__default.default.useState(null);
|
|
24959
|
+
const [pendingLiveChainId, setPendingLiveChainId] = React39__default.default.useState(null);
|
|
24960
|
+
const [error, setError] = React39__default.default.useState(null);
|
|
24961
|
+
const switchingRef = React39__default.default.useRef(false);
|
|
24962
|
+
const confirmLiveRef = React39__default.default.useRef(null);
|
|
24963
|
+
const liveWarningId = React39__default.default.useId();
|
|
24941
24964
|
const label = modeLabel(environment.mode);
|
|
24942
24965
|
const modeCounts = { test: 0, live: 0, unknown: 0 };
|
|
24943
24966
|
for (const option of options) modeCounts[option.mode] += 1;
|
|
24944
24967
|
const pendingLive = options.find((option) => option.chainId === pendingLiveChainId) ?? null;
|
|
24945
|
-
|
|
24968
|
+
React39__default.default.useEffect(() => {
|
|
24946
24969
|
if (pendingLiveChainId) confirmLiveRef.current?.focus();
|
|
24947
24970
|
}, [pendingLiveChainId]);
|
|
24948
24971
|
async function switchTo(option) {
|
|
@@ -25213,26 +25236,26 @@ var WalletCenterSurface = ({
|
|
|
25213
25236
|
} = useAuthContext();
|
|
25214
25237
|
const walletConfig = useWalletConfig();
|
|
25215
25238
|
const walletCenterUi = walletConfig.ui?.walletCenter;
|
|
25216
|
-
const [section, setSection] =
|
|
25217
|
-
const [historyFilter, setHistoryFilter] =
|
|
25218
|
-
const [historyItems, setHistoryItems] =
|
|
25219
|
-
const [historyOffset, setHistoryOffset] =
|
|
25220
|
-
const [historyHasMore, setHistoryHasMore] =
|
|
25221
|
-
const [historyLoading, setHistoryLoading] =
|
|
25222
|
-
const [historyError, setHistoryError] =
|
|
25223
|
-
const [historyLoadedOnce, setHistoryLoadedOnce] =
|
|
25224
|
-
const [selected, setSelected] =
|
|
25225
|
-
const [selectedSource, setSelectedSource] =
|
|
25226
|
-
const [busyId, setBusyId] =
|
|
25227
|
-
const [actionError, setActionError] =
|
|
25228
|
-
const cancelGuardRef =
|
|
25229
|
-
const wasOpenRef =
|
|
25230
|
-
const walletRootRef =
|
|
25231
|
-
const leaveSection =
|
|
25239
|
+
const [section, setSection] = React39.useState("menu");
|
|
25240
|
+
const [historyFilter, setHistoryFilter] = React39.useState("all");
|
|
25241
|
+
const [historyItems, setHistoryItems] = React39.useState([]);
|
|
25242
|
+
const [historyOffset, setHistoryOffset] = React39.useState(0);
|
|
25243
|
+
const [historyHasMore, setHistoryHasMore] = React39.useState(false);
|
|
25244
|
+
const [historyLoading, setHistoryLoading] = React39.useState(false);
|
|
25245
|
+
const [historyError, setHistoryError] = React39.useState(null);
|
|
25246
|
+
const [historyLoadedOnce, setHistoryLoadedOnce] = React39.useState(false);
|
|
25247
|
+
const [selected, setSelected] = React39.useState(null);
|
|
25248
|
+
const [selectedSource, setSelectedSource] = React39.useState("pending");
|
|
25249
|
+
const [busyId, setBusyId] = React39.useState(null);
|
|
25250
|
+
const [actionError, setActionError] = React39.useState(null);
|
|
25251
|
+
const cancelGuardRef = React39.useRef(/* @__PURE__ */ new Map());
|
|
25252
|
+
const wasOpenRef = React39.useRef(false);
|
|
25253
|
+
const walletRootRef = React39.useRef(null);
|
|
25254
|
+
const leaveSection = React39.useCallback(() => {
|
|
25232
25255
|
if (embedded && initialView !== "menu") onClose();
|
|
25233
25256
|
else setSection("menu");
|
|
25234
25257
|
}, [embedded, initialView, onClose]);
|
|
25235
|
-
|
|
25258
|
+
React39.useEffect(() => {
|
|
25236
25259
|
const justOpened = isOpen && !wasOpenRef.current;
|
|
25237
25260
|
wasOpenRef.current = isOpen;
|
|
25238
25261
|
if (!justOpened) return;
|
|
@@ -25246,24 +25269,24 @@ var WalletCenterSurface = ({
|
|
|
25246
25269
|
setHistoryHasMore(false);
|
|
25247
25270
|
setHistoryLoadedOnce(false);
|
|
25248
25271
|
}, [initialView, isOpen, refreshPending]);
|
|
25249
|
-
|
|
25272
|
+
React39.useEffect(() => {
|
|
25250
25273
|
if (!isOpen) return;
|
|
25251
25274
|
if (activeBuiltinFor(section, modules) === "transactions" && pendingList.length === 0) {
|
|
25252
25275
|
leaveSection();
|
|
25253
25276
|
}
|
|
25254
25277
|
}, [isOpen, leaveSection, modules, pendingList.length, section]);
|
|
25255
|
-
const delegatedGroupId =
|
|
25278
|
+
const delegatedGroupId = React39.useMemo(() => {
|
|
25256
25279
|
if (!delegationToken || typeof window === "undefined") return null;
|
|
25257
25280
|
return window.localStorage.getItem("delegation_group_id");
|
|
25258
25281
|
}, [delegationToken]);
|
|
25259
|
-
const configuredModules =
|
|
25282
|
+
const configuredModules = React39.useMemo(() => {
|
|
25260
25283
|
return validateWalletCenterModules(modules ?? defaultWalletCenterModules());
|
|
25261
25284
|
}, [modules]);
|
|
25262
|
-
const runtime =
|
|
25285
|
+
const runtime = React39.useMemo(
|
|
25263
25286
|
() => ({ pendingCount: pendingList.length, isAuthenticated: !!user }),
|
|
25264
25287
|
[pendingList.length, user]
|
|
25265
25288
|
);
|
|
25266
|
-
const visibleModules =
|
|
25289
|
+
const visibleModules = React39.useMemo(
|
|
25267
25290
|
() => configuredModules.filter((module) => {
|
|
25268
25291
|
if (module.kind === "builtin" && module.builtin === "transactions" && pendingList.length === 0) {
|
|
25269
25292
|
return false;
|
|
@@ -25272,16 +25295,16 @@ var WalletCenterSurface = ({
|
|
|
25272
25295
|
}),
|
|
25273
25296
|
[configuredModules, pendingList.length, runtime]
|
|
25274
25297
|
);
|
|
25275
|
-
const activeModule =
|
|
25298
|
+
const activeModule = React39.useMemo(
|
|
25276
25299
|
() => configuredModules.find((module) => module.id === section) ?? null,
|
|
25277
25300
|
[configuredModules, section]
|
|
25278
25301
|
);
|
|
25279
25302
|
const activeBuiltin = activeModule?.kind === "builtin" ? activeModule.builtin : null;
|
|
25280
|
-
const menuItems =
|
|
25303
|
+
const menuItems = React39.useMemo(
|
|
25281
25304
|
() => buildWalletMenuItems(visibleModules, runtime, groups.length),
|
|
25282
25305
|
[groups.length, runtime, visibleModules]
|
|
25283
25306
|
);
|
|
25284
|
-
|
|
25307
|
+
React39.useEffect(() => {
|
|
25285
25308
|
if (!isOpen) return;
|
|
25286
25309
|
const onVis = () => {
|
|
25287
25310
|
if (document.visibilityState === "visible") {
|
|
@@ -25291,11 +25314,11 @@ var WalletCenterSurface = ({
|
|
|
25291
25314
|
document.addEventListener("visibilitychange", onVis);
|
|
25292
25315
|
return () => document.removeEventListener("visibilitychange", onVis);
|
|
25293
25316
|
}, [isOpen, refreshPending]);
|
|
25294
|
-
|
|
25317
|
+
React39.useEffect(() => {
|
|
25295
25318
|
const scrollContainer = walletRootRef.current?.parentElement;
|
|
25296
25319
|
if (scrollContainer) scrollContainer.scrollTop = 0;
|
|
25297
25320
|
}, [section, selected]);
|
|
25298
|
-
const fetchHistory =
|
|
25321
|
+
const fetchHistory = React39.useCallback(
|
|
25299
25322
|
async (offset, append) => {
|
|
25300
25323
|
setHistoryLoading(true);
|
|
25301
25324
|
setHistoryError(null);
|
|
@@ -25318,7 +25341,7 @@ var WalletCenterSurface = ({
|
|
|
25318
25341
|
},
|
|
25319
25342
|
[userId]
|
|
25320
25343
|
);
|
|
25321
|
-
|
|
25344
|
+
React39.useEffect(() => {
|
|
25322
25345
|
if (!isOpen) return;
|
|
25323
25346
|
if (activeBuiltin !== "history") return;
|
|
25324
25347
|
if (historyLoadedOnce) return;
|
|
@@ -25333,7 +25356,7 @@ var WalletCenterSurface = ({
|
|
|
25333
25356
|
if (historyItems.length >= HISTORY_MAX_ITEMS) return;
|
|
25334
25357
|
void fetchHistory(historyOffset, true);
|
|
25335
25358
|
};
|
|
25336
|
-
const filteredHistoryItems =
|
|
25359
|
+
const filteredHistoryItems = React39.useMemo(() => {
|
|
25337
25360
|
if (historyFilter === "all") return historyItems;
|
|
25338
25361
|
const want = historyFilter === "Completed" /* Completed */ ? /* @__PURE__ */ new Set(["completed", "success"]) : historyFilter === "Failed" /* Failed */ ? /* @__PURE__ */ new Set(["failed", "error"]) : /* @__PURE__ */ new Set(["canceled", "cancelled"]);
|
|
25339
25362
|
return historyItems.filter(
|
|
@@ -25406,7 +25429,7 @@ var WalletCenterSurface = ({
|
|
|
25406
25429
|
setActionError(e?.message ?? "Failed to retry message.");
|
|
25407
25430
|
}
|
|
25408
25431
|
};
|
|
25409
|
-
const handleMenuActAsSelf =
|
|
25432
|
+
const handleMenuActAsSelf = React39.useCallback(async () => {
|
|
25410
25433
|
setActionError(null);
|
|
25411
25434
|
try {
|
|
25412
25435
|
clearDelegationToken();
|
|
@@ -25414,7 +25437,7 @@ var WalletCenterSurface = ({
|
|
|
25414
25437
|
setActionError(e?.message ?? "Failed to switch entity.");
|
|
25415
25438
|
}
|
|
25416
25439
|
}, [clearDelegationToken]);
|
|
25417
|
-
const handleMenuActAsGroup =
|
|
25440
|
+
const handleMenuActAsGroup = React39.useCallback(
|
|
25418
25441
|
async (group) => {
|
|
25419
25442
|
setActionError(null);
|
|
25420
25443
|
try {
|
|
@@ -25425,7 +25448,7 @@ var WalletCenterSurface = ({
|
|
|
25425
25448
|
},
|
|
25426
25449
|
[createDelegationToken]
|
|
25427
25450
|
);
|
|
25428
|
-
const handleSignOut =
|
|
25451
|
+
const handleSignOut = React39.useCallback(async () => {
|
|
25429
25452
|
setActionError(null);
|
|
25430
25453
|
try {
|
|
25431
25454
|
await logout();
|
|
@@ -25439,7 +25462,7 @@ var WalletCenterSurface = ({
|
|
|
25439
25462
|
setActionError(e?.message ?? "Failed to sign out.");
|
|
25440
25463
|
}
|
|
25441
25464
|
}, [logout, onClose, walletConfig]);
|
|
25442
|
-
const navigateFromCenter =
|
|
25465
|
+
const navigateFromCenter = React39.useCallback(
|
|
25443
25466
|
(href, options) => {
|
|
25444
25467
|
if (walletConfig.onNavigate) {
|
|
25445
25468
|
walletConfig.onNavigate(href, options);
|
|
@@ -25450,7 +25473,7 @@ var WalletCenterSurface = ({
|
|
|
25450
25473
|
},
|
|
25451
25474
|
[walletConfig]
|
|
25452
25475
|
);
|
|
25453
|
-
const panelContext =
|
|
25476
|
+
const panelContext = React39.useMemo(
|
|
25454
25477
|
() => ({
|
|
25455
25478
|
close: onClose,
|
|
25456
25479
|
back: () => setSection("menu"),
|
|
@@ -25461,7 +25484,7 @@ var WalletCenterSurface = ({
|
|
|
25461
25484
|
}),
|
|
25462
25485
|
[navigateFromCenter, onClose]
|
|
25463
25486
|
);
|
|
25464
|
-
const resolvedActors =
|
|
25487
|
+
const resolvedActors = React39.useMemo(() => {
|
|
25465
25488
|
if (actors) return actors;
|
|
25466
25489
|
return [
|
|
25467
25490
|
{
|
|
@@ -25488,7 +25511,7 @@ var WalletCenterSurface = ({
|
|
|
25488
25511
|
status: identity?.status ?? { label: "Online", color: "#4ade80" },
|
|
25489
25512
|
actions: identity?.actions ?? []
|
|
25490
25513
|
};
|
|
25491
|
-
const handleSelectModule =
|
|
25514
|
+
const handleSelectModule = React39.useCallback(
|
|
25492
25515
|
(module) => {
|
|
25493
25516
|
setActionError(null);
|
|
25494
25517
|
if (module.kind === "route") {
|
|
@@ -25500,7 +25523,7 @@ var WalletCenterSurface = ({
|
|
|
25500
25523
|
},
|
|
25501
25524
|
[navigateFromCenter, onClose]
|
|
25502
25525
|
);
|
|
25503
|
-
const handleSelectActor =
|
|
25526
|
+
const handleSelectActor = React39.useCallback(async (actor) => {
|
|
25504
25527
|
setActionError(null);
|
|
25505
25528
|
try {
|
|
25506
25529
|
await actor.onSelect();
|
|
@@ -25509,7 +25532,7 @@ var WalletCenterSurface = ({
|
|
|
25509
25532
|
setActionError(error?.message ?? "Failed to switch signing context.");
|
|
25510
25533
|
}
|
|
25511
25534
|
}, [leaveSection]);
|
|
25512
|
-
const drawerTitle =
|
|
25535
|
+
const drawerTitle = React39.useMemo(() => {
|
|
25513
25536
|
if (selected) {
|
|
25514
25537
|
const label = humanizeMessageType(selected.data?.message_type);
|
|
25515
25538
|
return selectedSource === "pending" ? `${label} \u2014 Sign` : label;
|
|
@@ -25517,7 +25540,7 @@ var WalletCenterSurface = ({
|
|
|
25517
25540
|
return "Wallet";
|
|
25518
25541
|
}, [selected, selectedSource]);
|
|
25519
25542
|
const hostedTitle = !embedded ? null : selected ? drawerTitle : section === "actors" ? "Signing context" : activeModule?.label ?? null;
|
|
25520
|
-
|
|
25543
|
+
React39.useEffect(() => {
|
|
25521
25544
|
if (!embedded) return void 0;
|
|
25522
25545
|
onTitle?.(hostedTitle);
|
|
25523
25546
|
return () => onTitle?.(null);
|
|
@@ -25702,7 +25725,7 @@ function WalletMenu({
|
|
|
25702
25725
|
const secondaryItems = items.filter((item) => item.placement === "secondary");
|
|
25703
25726
|
const activeActor = actors.find((actor) => actor.active) ?? actors[0];
|
|
25704
25727
|
const userName = identity.name ?? "You";
|
|
25705
|
-
const renderCard = (cardItems) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-[24px] border border-border-light bg-raised shadow-sm", children: cardItems.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
25728
|
+
const renderCard = (cardItems) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-[24px] border border-border-light bg-raised shadow-sm", children: cardItems.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs(React39__default.default.Fragment, { children: [
|
|
25706
25729
|
index > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-4 border-t border-border-light" }),
|
|
25707
25730
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
25708
25731
|
WalletMenuRow,
|
|
@@ -25946,13 +25969,13 @@ function ActorsPane({
|
|
|
25946
25969
|
error,
|
|
25947
25970
|
onSelect
|
|
25948
25971
|
}) {
|
|
25949
|
-
const [busyId, setBusyId] =
|
|
25972
|
+
const [busyId, setBusyId] = React39.useState(null);
|
|
25950
25973
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3 p-3", children: [
|
|
25951
25974
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-1 text-[11px] leading-5 text-text-muted", children: "Choose the identity used for signing and entity-owned actions." }),
|
|
25952
25975
|
error && /* @__PURE__ */ jsxRuntime.jsx(ErrorBanner, { children: error }),
|
|
25953
25976
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-[22px] border border-border-light bg-raised", children: actors.map((actor, index) => {
|
|
25954
25977
|
const ActorIcon = actor.icon;
|
|
25955
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
25978
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React39__default.default.Fragment, { children: [
|
|
25956
25979
|
index > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-4 border-t border-border-light" }),
|
|
25957
25980
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
25958
25981
|
"button",
|
|
@@ -25987,10 +26010,10 @@ function DirectoryPane({
|
|
|
25987
26010
|
module,
|
|
25988
26011
|
context
|
|
25989
26012
|
}) {
|
|
25990
|
-
const [query, setQuery] =
|
|
26013
|
+
const [query, setQuery] = React39.useState("");
|
|
25991
26014
|
const isMobile = useWalletCenterMobile();
|
|
25992
26015
|
const normalizedQuery = normalizeSearchText(query);
|
|
25993
|
-
const visibleGroups =
|
|
26016
|
+
const visibleGroups = React39.useMemo(
|
|
25994
26017
|
() => module.groups.filter((group) => {
|
|
25995
26018
|
if (!group.visibility || group.visibility === "always") return true;
|
|
25996
26019
|
return group.visibility === (isMobile ? "mobile" : "desktop");
|
|
@@ -26091,10 +26114,10 @@ function normalizeSearchText(value) {
|
|
|
26091
26114
|
return value.normalize("NFD").replace(/[\u0300-\u036f]/g, "").trim().toLocaleLowerCase();
|
|
26092
26115
|
}
|
|
26093
26116
|
function useWalletCenterMobile() {
|
|
26094
|
-
const [isMobile, setIsMobile] =
|
|
26117
|
+
const [isMobile, setIsMobile] = React39.useState(
|
|
26095
26118
|
() => typeof window !== "undefined" && window.matchMedia("(max-width: 639px)").matches
|
|
26096
26119
|
);
|
|
26097
|
-
|
|
26120
|
+
React39.useEffect(() => {
|
|
26098
26121
|
if (typeof window === "undefined") return;
|
|
26099
26122
|
const media = window.matchMedia("(max-width: 639px)");
|
|
26100
26123
|
const update = () => setIsMobile(media.matches);
|
|
@@ -26634,10 +26657,10 @@ function messageText(content) {
|
|
|
26634
26657
|
return JSON.stringify(content, null, 2);
|
|
26635
26658
|
}
|
|
26636
26659
|
var PromptTranscript = ({ usageEventId }) => {
|
|
26637
|
-
const [log, setLog] =
|
|
26638
|
-
const [note, setNote] =
|
|
26639
|
-
const [loading, setLoading] =
|
|
26640
|
-
|
|
26660
|
+
const [log, setLog] = React39.useState(null);
|
|
26661
|
+
const [note, setNote] = React39.useState(null);
|
|
26662
|
+
const [loading, setLoading] = React39.useState(true);
|
|
26663
|
+
React39.useEffect(() => {
|
|
26641
26664
|
let cancelled = false;
|
|
26642
26665
|
const base = getAgentsServiceUrl();
|
|
26643
26666
|
setLoading(true);
|
|
@@ -26802,13 +26825,13 @@ var LineItemsTable = ({
|
|
|
26802
26825
|
caption,
|
|
26803
26826
|
showActor
|
|
26804
26827
|
}) => {
|
|
26805
|
-
const [selected, setSelected] =
|
|
26806
|
-
const [gasPricing, setGasPricing] =
|
|
26828
|
+
const [selected, setSelected] = React39.useState(null);
|
|
26829
|
+
const [gasPricing, setGasPricing] = React39.useState(null);
|
|
26807
26830
|
const minuteRate = gasPricing?.agent_minute_usd ?? 0;
|
|
26808
|
-
|
|
26831
|
+
React39.useEffect(() => {
|
|
26809
26832
|
void exports.billingService.getGasPricing().then(setGasPricing);
|
|
26810
26833
|
}, []);
|
|
26811
|
-
const columns =
|
|
26834
|
+
const columns = React39.useMemo(
|
|
26812
26835
|
() => [
|
|
26813
26836
|
{
|
|
26814
26837
|
header: "When",
|
|
@@ -27067,12 +27090,12 @@ var BuyCreditsDialog = ({
|
|
|
27067
27090
|
source = "manual",
|
|
27068
27091
|
reason
|
|
27069
27092
|
}) => {
|
|
27070
|
-
const [stage, setStage] =
|
|
27071
|
-
const [attempt, setAttempt] =
|
|
27093
|
+
const [stage, setStage] = React39.useState({ kind: "loading" });
|
|
27094
|
+
const [attempt, setAttempt] = React39.useState(0);
|
|
27072
27095
|
const activeGate = creditGateInfoForActiveToken();
|
|
27073
27096
|
const effectiveReason = reason ?? activeGate.reason ?? void 0;
|
|
27074
27097
|
const effectiveGroupId = resolveBuyCreditsTargetGroupId(target, activeGate);
|
|
27075
|
-
|
|
27098
|
+
React39.useEffect(() => {
|
|
27076
27099
|
if (!isOpen) return;
|
|
27077
27100
|
let cancelled = false;
|
|
27078
27101
|
setStage({ kind: "loading" });
|
|
@@ -27111,7 +27134,7 @@ var BuyCreditsDialog = ({
|
|
|
27111
27134
|
cancelled = true;
|
|
27112
27135
|
};
|
|
27113
27136
|
}, [isOpen, effectiveGroupId, effectiveReason, target.kind, attempt]);
|
|
27114
|
-
const redirectTo =
|
|
27137
|
+
const redirectTo = React39.useCallback(
|
|
27115
27138
|
async (open) => {
|
|
27116
27139
|
setStage({ kind: "redirecting" });
|
|
27117
27140
|
try {
|
|
@@ -27130,7 +27153,7 @@ var BuyCreditsDialog = ({
|
|
|
27130
27153
|
},
|
|
27131
27154
|
[effectiveGroupId]
|
|
27132
27155
|
);
|
|
27133
|
-
const buyPlan =
|
|
27156
|
+
const buyPlan = React39.useCallback(
|
|
27134
27157
|
(planId) => {
|
|
27135
27158
|
const { successUrl, cancelUrl } = buildCreditCheckoutReturnUrls({
|
|
27136
27159
|
kind: "plan",
|
|
@@ -27147,7 +27170,7 @@ var BuyCreditsDialog = ({
|
|
|
27147
27170
|
},
|
|
27148
27171
|
[redirectTo, effectiveGroupId]
|
|
27149
27172
|
);
|
|
27150
|
-
const buyTopup =
|
|
27173
|
+
const buyTopup = React39.useCallback(
|
|
27151
27174
|
(topupId) => {
|
|
27152
27175
|
const { successUrl, cancelUrl } = buildCreditCheckoutReturnUrls({
|
|
27153
27176
|
kind: "topup",
|
|
@@ -27324,11 +27347,11 @@ var shareKindLabel = (share) => {
|
|
|
27324
27347
|
return KIND_LABELS[kind] ?? (share.entry_kind === "clawback" ? "Adjustment" : "Earnings");
|
|
27325
27348
|
};
|
|
27326
27349
|
var EarningsSection = ({ dense = false }) => {
|
|
27327
|
-
const [summary, setSummary] =
|
|
27328
|
-
const [loaded, setLoaded] =
|
|
27329
|
-
const [connectBusy, setConnectBusy] =
|
|
27330
|
-
const [error, setError] =
|
|
27331
|
-
const load =
|
|
27350
|
+
const [summary, setSummary] = React39.useState(null);
|
|
27351
|
+
const [loaded, setLoaded] = React39.useState(false);
|
|
27352
|
+
const [connectBusy, setConnectBusy] = React39.useState(false);
|
|
27353
|
+
const [error, setError] = React39.useState(null);
|
|
27354
|
+
const load = React39.useCallback(async () => {
|
|
27332
27355
|
try {
|
|
27333
27356
|
const s = await exports.billingService.getMyEarnings();
|
|
27334
27357
|
setSummary(s);
|
|
@@ -27338,10 +27361,10 @@ var EarningsSection = ({ dense = false }) => {
|
|
|
27338
27361
|
setLoaded(true);
|
|
27339
27362
|
}
|
|
27340
27363
|
}, []);
|
|
27341
|
-
|
|
27364
|
+
React39.useEffect(() => {
|
|
27342
27365
|
void load();
|
|
27343
27366
|
}, [load]);
|
|
27344
|
-
const openConnectOnboarding =
|
|
27367
|
+
const openConnectOnboarding = React39.useCallback(async () => {
|
|
27345
27368
|
setConnectBusy(true);
|
|
27346
27369
|
setError(null);
|
|
27347
27370
|
try {
|
|
@@ -27453,10 +27476,10 @@ var EarningsSection = ({ dense = false }) => {
|
|
|
27453
27476
|
init_billingService();
|
|
27454
27477
|
init_creditCheckoutReturn();
|
|
27455
27478
|
var GroupBillingSection = ({ groupId }) => {
|
|
27456
|
-
const [summary, setSummary] =
|
|
27457
|
-
const [portalBusy, setPortalBusy] =
|
|
27458
|
-
const [portalError, setPortalError] =
|
|
27459
|
-
const openGroupPortal =
|
|
27479
|
+
const [summary, setSummary] = React39.useState(null);
|
|
27480
|
+
const [portalBusy, setPortalBusy] = React39.useState(false);
|
|
27481
|
+
const [portalError, setPortalError] = React39.useState(null);
|
|
27482
|
+
const openGroupPortal = React39.useCallback(async () => {
|
|
27460
27483
|
setPortalBusy(true);
|
|
27461
27484
|
setPortalError(null);
|
|
27462
27485
|
try {
|
|
@@ -27472,21 +27495,21 @@ var GroupBillingSection = ({ groupId }) => {
|
|
|
27472
27495
|
setPortalBusy(false);
|
|
27473
27496
|
}
|
|
27474
27497
|
}, [groupId]);
|
|
27475
|
-
const [pricing, setPricing] =
|
|
27476
|
-
const [items, setItems] =
|
|
27477
|
-
const [hasMore, setHasMore] =
|
|
27478
|
-
const [moreBusy, setMoreBusy] =
|
|
27479
|
-
const [loading, setLoading] =
|
|
27480
|
-
const [hidden, setHidden] =
|
|
27481
|
-
const [addCardOpen, setAddCardOpen] =
|
|
27482
|
-
const [buyCreditsOpen, setBuyCreditsOpen] =
|
|
27483
|
-
const [earnings, setEarnings] =
|
|
27484
|
-
const [reactivating, setReactivating] =
|
|
27485
|
-
const [reactivationError, setReactivationError] =
|
|
27486
|
-
|
|
27498
|
+
const [pricing, setPricing] = React39.useState(null);
|
|
27499
|
+
const [items, setItems] = React39.useState([]);
|
|
27500
|
+
const [hasMore, setHasMore] = React39.useState(false);
|
|
27501
|
+
const [moreBusy, setMoreBusy] = React39.useState(false);
|
|
27502
|
+
const [loading, setLoading] = React39.useState(true);
|
|
27503
|
+
const [hidden, setHidden] = React39.useState(false);
|
|
27504
|
+
const [addCardOpen, setAddCardOpen] = React39.useState(false);
|
|
27505
|
+
const [buyCreditsOpen, setBuyCreditsOpen] = React39.useState(false);
|
|
27506
|
+
const [earnings, setEarnings] = React39.useState(null);
|
|
27507
|
+
const [reactivating, setReactivating] = React39.useState(false);
|
|
27508
|
+
const [reactivationError, setReactivationError] = React39.useState(null);
|
|
27509
|
+
React39.useEffect(() => {
|
|
27487
27510
|
void exports.billingService.getGasPricing().then(setPricing);
|
|
27488
27511
|
}, []);
|
|
27489
|
-
|
|
27512
|
+
React39.useEffect(() => {
|
|
27490
27513
|
let cancelled = false;
|
|
27491
27514
|
exports.billingService.getGroupEarnings(groupId).then((e) => {
|
|
27492
27515
|
if (!cancelled) setEarnings(e);
|
|
@@ -27496,7 +27519,7 @@ var GroupBillingSection = ({ groupId }) => {
|
|
|
27496
27519
|
cancelled = true;
|
|
27497
27520
|
};
|
|
27498
27521
|
}, [groupId]);
|
|
27499
|
-
const load =
|
|
27522
|
+
const load = React39.useCallback(async () => {
|
|
27500
27523
|
setLoading(true);
|
|
27501
27524
|
try {
|
|
27502
27525
|
const s = await exports.billingService.getGroupBilling(groupId);
|
|
@@ -27509,10 +27532,10 @@ var GroupBillingSection = ({ groupId }) => {
|
|
|
27509
27532
|
setLoading(false);
|
|
27510
27533
|
}
|
|
27511
27534
|
}, [groupId]);
|
|
27512
|
-
|
|
27535
|
+
React39.useEffect(() => {
|
|
27513
27536
|
void load();
|
|
27514
27537
|
}, [load]);
|
|
27515
|
-
|
|
27538
|
+
React39.useEffect(() => {
|
|
27516
27539
|
const reloadMatchingGroup = (event) => {
|
|
27517
27540
|
const detail = event.detail;
|
|
27518
27541
|
if (detail?.groupId === groupId) void load();
|
|
@@ -27520,7 +27543,7 @@ var GroupBillingSection = ({ groupId }) => {
|
|
|
27520
27543
|
window.addEventListener(exports.CREDIT_CHECKOUT_SYNCED_EVENT, reloadMatchingGroup);
|
|
27521
27544
|
return () => window.removeEventListener(exports.CREDIT_CHECKOUT_SYNCED_EVENT, reloadMatchingGroup);
|
|
27522
27545
|
}, [groupId, load]);
|
|
27523
|
-
const loadMore =
|
|
27546
|
+
const loadMore = React39.useCallback(async () => {
|
|
27524
27547
|
const last = items[items.length - 1];
|
|
27525
27548
|
if (!last || moreBusy) return;
|
|
27526
27549
|
setMoreBusy(true);
|
|
@@ -27537,7 +27560,7 @@ var GroupBillingSection = ({ groupId }) => {
|
|
|
27537
27560
|
setMoreBusy(false);
|
|
27538
27561
|
}
|
|
27539
27562
|
}, [groupId, items, moreBusy]);
|
|
27540
|
-
const reactivate =
|
|
27563
|
+
const reactivate = React39.useCallback(async () => {
|
|
27541
27564
|
setReactivating(true);
|
|
27542
27565
|
setReactivationError(null);
|
|
27543
27566
|
try {
|
|
@@ -27756,8 +27779,8 @@ var SeriesLine = ({
|
|
|
27756
27779
|
formatUsdMicros(Math.round(usd2 * 1e6))
|
|
27757
27780
|
] });
|
|
27758
27781
|
var DailySpendChart = ({ summary }) => {
|
|
27759
|
-
const [hovered, setHovered] =
|
|
27760
|
-
const rows =
|
|
27782
|
+
const [hovered, setHovered] = React39.useState(null);
|
|
27783
|
+
const rows = React39.useMemo(() => {
|
|
27761
27784
|
const byDay = /* @__PURE__ */ new Map();
|
|
27762
27785
|
for (const p of summary.daily ?? []) {
|
|
27763
27786
|
const parsed = new Date(p.day);
|
|
@@ -27865,7 +27888,7 @@ var BTN = "inline-flex h-8 shrink-0 items-center rounded-md border border-border
|
|
|
27865
27888
|
var BTN_STRONG = "inline-flex h-8 shrink-0 items-center rounded-md border border-border-default bg-surface px-3 text-[12px] font-medium text-text-primary transition-colors hover:bg-raised-hover disabled:cursor-not-allowed disabled:opacity-50";
|
|
27866
27889
|
var METER_TRACK = "h-1 overflow-hidden rounded-full bg-raised";
|
|
27867
27890
|
var BreakdownCard = ({ title, rows, color, minuteRate, labelFor: labelFor2, countNoun }) => {
|
|
27868
|
-
const displayRows =
|
|
27891
|
+
const displayRows = React39.useMemo(() => {
|
|
27869
27892
|
if (!labelFor2) return rows;
|
|
27870
27893
|
const merged = /* @__PURE__ */ new Map();
|
|
27871
27894
|
for (const r of rows) {
|
|
@@ -27928,21 +27951,21 @@ var Banner = ({
|
|
|
27928
27951
|
);
|
|
27929
27952
|
};
|
|
27930
27953
|
var BillingCenter = ({ dense = false }) => {
|
|
27931
|
-
const [summary, setSummary] =
|
|
27932
|
-
const [pricing, setPricing] =
|
|
27933
|
-
const [items, setItems] =
|
|
27934
|
-
const [hasMore, setHasMore] =
|
|
27935
|
-
const [moreBusy, setMoreBusy] =
|
|
27936
|
-
const [expandedGroup, setExpandedGroup] =
|
|
27937
|
-
const [notConfigured, setNotConfigured] =
|
|
27938
|
-
const [loading, setLoading] =
|
|
27939
|
-
const [loadError, setLoadError] =
|
|
27940
|
-
const [portalBusy, setPortalBusy] =
|
|
27941
|
-
const [portalError, setPortalError] =
|
|
27942
|
-
const [reactivating, setReactivating] =
|
|
27943
|
-
const [addCardOpen, setAddCardOpen] =
|
|
27944
|
-
const [buyCreditsOpen, setBuyCreditsOpen] =
|
|
27945
|
-
const load =
|
|
27954
|
+
const [summary, setSummary] = React39.useState(null);
|
|
27955
|
+
const [pricing, setPricing] = React39.useState(null);
|
|
27956
|
+
const [items, setItems] = React39.useState([]);
|
|
27957
|
+
const [hasMore, setHasMore] = React39.useState(false);
|
|
27958
|
+
const [moreBusy, setMoreBusy] = React39.useState(false);
|
|
27959
|
+
const [expandedGroup, setExpandedGroup] = React39.useState(null);
|
|
27960
|
+
const [notConfigured, setNotConfigured] = React39.useState(false);
|
|
27961
|
+
const [loading, setLoading] = React39.useState(true);
|
|
27962
|
+
const [loadError, setLoadError] = React39.useState(null);
|
|
27963
|
+
const [portalBusy, setPortalBusy] = React39.useState(false);
|
|
27964
|
+
const [portalError, setPortalError] = React39.useState(null);
|
|
27965
|
+
const [reactivating, setReactivating] = React39.useState(false);
|
|
27966
|
+
const [addCardOpen, setAddCardOpen] = React39.useState(false);
|
|
27967
|
+
const [buyCreditsOpen, setBuyCreditsOpen] = React39.useState(false);
|
|
27968
|
+
const load = React39.useCallback(async () => {
|
|
27946
27969
|
setLoading(true);
|
|
27947
27970
|
setLoadError(null);
|
|
27948
27971
|
try {
|
|
@@ -27961,16 +27984,16 @@ var BillingCenter = ({ dense = false }) => {
|
|
|
27961
27984
|
setLoading(false);
|
|
27962
27985
|
}
|
|
27963
27986
|
}, []);
|
|
27964
|
-
|
|
27987
|
+
React39.useEffect(() => {
|
|
27965
27988
|
void load();
|
|
27966
27989
|
void exports.billingService.getGasPricing().then(setPricing).catch(() => setPricing(null));
|
|
27967
27990
|
}, [load]);
|
|
27968
|
-
|
|
27991
|
+
React39.useEffect(() => {
|
|
27969
27992
|
const reloadAfterCheckout = () => void load();
|
|
27970
27993
|
window.addEventListener(exports.CREDIT_CHECKOUT_SYNCED_EVENT, reloadAfterCheckout);
|
|
27971
27994
|
return () => window.removeEventListener(exports.CREDIT_CHECKOUT_SYNCED_EVENT, reloadAfterCheckout);
|
|
27972
27995
|
}, [load]);
|
|
27973
|
-
const loadMore =
|
|
27996
|
+
const loadMore = React39.useCallback(async () => {
|
|
27974
27997
|
const last = items[items.length - 1];
|
|
27975
27998
|
if (!last || moreBusy) return;
|
|
27976
27999
|
setMoreBusy(true);
|
|
@@ -27984,7 +28007,7 @@ var BillingCenter = ({ dense = false }) => {
|
|
|
27984
28007
|
setMoreBusy(false);
|
|
27985
28008
|
}
|
|
27986
28009
|
}, [items, moreBusy]);
|
|
27987
|
-
const openPortal =
|
|
28010
|
+
const openPortal = React39.useCallback(async () => {
|
|
27988
28011
|
setPortalBusy(true);
|
|
27989
28012
|
setPortalError(null);
|
|
27990
28013
|
try {
|
|
@@ -27995,7 +28018,7 @@ var BillingCenter = ({ dense = false }) => {
|
|
|
27995
28018
|
setPortalBusy(false);
|
|
27996
28019
|
}
|
|
27997
28020
|
}, []);
|
|
27998
|
-
const reactivate =
|
|
28021
|
+
const reactivate = React39.useCallback(async () => {
|
|
27999
28022
|
setReactivating(true);
|
|
28000
28023
|
setPortalError(null);
|
|
28001
28024
|
try {
|
|
@@ -28024,7 +28047,7 @@ var BillingCenter = ({ dense = false }) => {
|
|
|
28024
28047
|
const breakdownCount = [llmBreakdown, gasBreakdown, knowledgeBreakdown].filter(
|
|
28025
28048
|
(rows) => rows.length > 0
|
|
28026
28049
|
).length;
|
|
28027
|
-
const meterKeys =
|
|
28050
|
+
const meterKeys = React39.useMemo(
|
|
28028
28051
|
() => [
|
|
28029
28052
|
"llm_usage_usd",
|
|
28030
28053
|
"gas_usage_usd",
|
|
@@ -28038,10 +28061,10 @@ var BillingCenter = ({ dense = false }) => {
|
|
|
28038
28061
|
(g) => g.credit_plan_id && g.status === "active"
|
|
28039
28062
|
) ?? null;
|
|
28040
28063
|
const tokenCardGated = billingGateInfoForActiveToken().cardRequired;
|
|
28041
|
-
const [sponsorBusy, setSponsorBusy] =
|
|
28042
|
-
const [sponsorError, setSponsorError] =
|
|
28043
|
-
const [autoBind, setAutoBind] =
|
|
28044
|
-
|
|
28064
|
+
const [sponsorBusy, setSponsorBusy] = React39.useState(false);
|
|
28065
|
+
const [sponsorError, setSponsorError] = React39.useState(null);
|
|
28066
|
+
const [autoBind, setAutoBind] = React39.useState("idle");
|
|
28067
|
+
React39.useEffect(() => {
|
|
28045
28068
|
if (autoBind !== "idle") return;
|
|
28046
28069
|
if (!summary?.card_required || !tokenCardGated || !platformGroup) return;
|
|
28047
28070
|
setAutoBind("trying");
|
|
@@ -28049,7 +28072,7 @@ var BillingCenter = ({ dense = false }) => {
|
|
|
28049
28072
|
if (bound) await load();
|
|
28050
28073
|
}).finally(() => setAutoBind("settled"));
|
|
28051
28074
|
}, [summary, tokenCardGated, platformGroup, autoBind]);
|
|
28052
|
-
const billViaGroup =
|
|
28075
|
+
const billViaGroup = React39.useCallback(async () => {
|
|
28053
28076
|
if (!platformGroup || sponsorBusy) return;
|
|
28054
28077
|
setSponsorBusy(true);
|
|
28055
28078
|
setSponsorError(null);
|
|
@@ -28433,9 +28456,9 @@ var BillingCenter = ({ dense = false }) => {
|
|
|
28433
28456
|
init_cardRequired();
|
|
28434
28457
|
init_billingService();
|
|
28435
28458
|
var CardRequiredHost = () => {
|
|
28436
|
-
const [request, setRequest] =
|
|
28437
|
-
|
|
28438
|
-
|
|
28459
|
+
const [request, setRequest] = React39.useState(null);
|
|
28460
|
+
React39.useEffect(() => exports.cardRequiredGate.subscribe(setRequest), []);
|
|
28461
|
+
React39.useEffect(() => {
|
|
28439
28462
|
let inFlight = false;
|
|
28440
28463
|
const heal = async () => {
|
|
28441
28464
|
if (inFlight) return;
|
|
@@ -28519,11 +28542,11 @@ var PENDING_RETURN_NOTICE = {
|
|
|
28519
28542
|
message: "Stripe confirmation is taking longer than usual, so this purchase is not confirmed yet. Check again now or return to this page shortly. To avoid a duplicate charge, don\u2019t purchase again until Billing shows the final result."
|
|
28520
28543
|
};
|
|
28521
28544
|
var CreditExhaustedHost = () => {
|
|
28522
|
-
const [request, setRequest] =
|
|
28523
|
-
const [checkoutNotice, setCheckoutNotice] =
|
|
28524
|
-
const [retryMarker, setRetryMarker] =
|
|
28525
|
-
|
|
28526
|
-
|
|
28545
|
+
const [request, setRequest] = React39.useState(null);
|
|
28546
|
+
const [checkoutNotice, setCheckoutNotice] = React39.useState(null);
|
|
28547
|
+
const [retryMarker, setRetryMarker] = React39.useState(null);
|
|
28548
|
+
React39.useEffect(() => creditRequiredGate.subscribe(setRequest), []);
|
|
28549
|
+
React39.useEffect(() => {
|
|
28527
28550
|
const parsedMarker = readCreditCheckoutReturnMarker();
|
|
28528
28551
|
if (!parsedMarker) return;
|
|
28529
28552
|
const marker = parsedMarker;
|
|
@@ -28729,12 +28752,12 @@ function VerifiedBadge({
|
|
|
28729
28752
|
}
|
|
28730
28753
|
function IdentityCard() {
|
|
28731
28754
|
const { config, isLoading: configLoading } = useProviderConfig();
|
|
28732
|
-
const [credentials, setCredentials] =
|
|
28733
|
-
const [profile, setProfile] =
|
|
28734
|
-
const [loading, setLoading] =
|
|
28735
|
-
const [activeKyc, setActiveKyc] =
|
|
28736
|
-
const [error, setError] =
|
|
28737
|
-
|
|
28755
|
+
const [credentials, setCredentials] = React39.useState([]);
|
|
28756
|
+
const [profile, setProfile] = React39.useState(null);
|
|
28757
|
+
const [loading, setLoading] = React39.useState(true);
|
|
28758
|
+
const [activeKyc, setActiveKyc] = React39.useState(null);
|
|
28759
|
+
const [error, setError] = React39.useState(null);
|
|
28760
|
+
React39.useEffect(() => {
|
|
28738
28761
|
let cancelled = false;
|
|
28739
28762
|
(async () => {
|
|
28740
28763
|
try {
|
|
@@ -28871,10 +28894,10 @@ function LoginAltMethods({ exclude, platform, onSuccess } = {}) {
|
|
|
28871
28894
|
const navigate = useWalletNavigate();
|
|
28872
28895
|
const { bootstrapSession } = useAuth();
|
|
28873
28896
|
const { config, isLoading } = useProviderConfig();
|
|
28874
|
-
const [busyId, setBusyId] =
|
|
28875
|
-
const [error, setError] =
|
|
28876
|
-
const [passkeySupported, setPasskeySupported] =
|
|
28877
|
-
|
|
28897
|
+
const [busyId, setBusyId] = React39.useState(null);
|
|
28898
|
+
const [error, setError] = React39.useState(null);
|
|
28899
|
+
const [passkeySupported, setPasskeySupported] = React39.useState(false);
|
|
28900
|
+
React39.useEffect(() => {
|
|
28878
28901
|
setPasskeySupported(typeof window !== "undefined" && !!window.PublicKeyCredential);
|
|
28879
28902
|
}, []);
|
|
28880
28903
|
if (isLoading || !config) return null;
|
|
@@ -29040,25 +29063,25 @@ function useForm({
|
|
|
29040
29063
|
schema,
|
|
29041
29064
|
onSubmit
|
|
29042
29065
|
}) {
|
|
29043
|
-
const [state, setState] =
|
|
29066
|
+
const [state, setState] = React39.useState({
|
|
29044
29067
|
values: initialValues,
|
|
29045
29068
|
errors: {},
|
|
29046
29069
|
touched: {}
|
|
29047
29070
|
});
|
|
29048
|
-
const handleChange =
|
|
29071
|
+
const handleChange = React39.useCallback((name, value) => {
|
|
29049
29072
|
setState((prev) => ({
|
|
29050
29073
|
...prev,
|
|
29051
29074
|
values: { ...prev.values, [name]: value },
|
|
29052
29075
|
touched: { ...prev.touched, [name]: true }
|
|
29053
29076
|
}));
|
|
29054
29077
|
}, []);
|
|
29055
|
-
const handleBlur =
|
|
29078
|
+
const handleBlur = React39.useCallback((name) => {
|
|
29056
29079
|
setState((prev) => ({
|
|
29057
29080
|
...prev,
|
|
29058
29081
|
touched: { ...prev.touched, [name]: true }
|
|
29059
29082
|
}));
|
|
29060
29083
|
}, []);
|
|
29061
|
-
const validate =
|
|
29084
|
+
const validate = React39.useCallback(() => {
|
|
29062
29085
|
try {
|
|
29063
29086
|
schema.parse(state.values);
|
|
29064
29087
|
setState((prev) => ({ ...prev, errors: {} }));
|
|
@@ -29074,13 +29097,13 @@ function useForm({
|
|
|
29074
29097
|
return false;
|
|
29075
29098
|
}
|
|
29076
29099
|
}, [schema, state.values]);
|
|
29077
|
-
const handleSubmit =
|
|
29100
|
+
const handleSubmit = React39.useCallback(async (e) => {
|
|
29078
29101
|
e.preventDefault();
|
|
29079
29102
|
if (validate()) {
|
|
29080
29103
|
await onSubmit(state.values);
|
|
29081
29104
|
}
|
|
29082
29105
|
}, [onSubmit, state.values, validate]);
|
|
29083
|
-
const reset =
|
|
29106
|
+
const reset = React39.useCallback(() => {
|
|
29084
29107
|
setState({
|
|
29085
29108
|
values: initialValues,
|
|
29086
29109
|
errors: {},
|
|
@@ -29125,9 +29148,9 @@ var defaultFormConfig = {
|
|
|
29125
29148
|
function useLogin(options = {}) {
|
|
29126
29149
|
const navigate = useWalletNavigate();
|
|
29127
29150
|
const { login: contextLogin, isLoading: contextLoading, error: contextError, clearError: contextClearError, user } = useAuth();
|
|
29128
|
-
const [isSubmitting, setIsSubmitting] =
|
|
29129
|
-
const [error, setError] =
|
|
29130
|
-
const [isAuthenticated, setIsAuthenticated] =
|
|
29151
|
+
const [isSubmitting, setIsSubmitting] = React39.useState(false);
|
|
29152
|
+
const [error, setError] = React39.useState(null);
|
|
29153
|
+
const [isAuthenticated, setIsAuthenticated] = React39.useState(exports.authService.isAuthenticated());
|
|
29131
29154
|
const {
|
|
29132
29155
|
services = ["vault", "payments"],
|
|
29133
29156
|
redirectPath = "/dashboard",
|
|
@@ -29137,11 +29160,11 @@ function useLogin(options = {}) {
|
|
|
29137
29160
|
showErrorMessages = true,
|
|
29138
29161
|
platform: optionsPlatform
|
|
29139
29162
|
} = options;
|
|
29140
|
-
const clearError =
|
|
29163
|
+
const clearError = React39.useCallback(() => {
|
|
29141
29164
|
setError(null);
|
|
29142
29165
|
contextClearError();
|
|
29143
29166
|
}, [contextClearError]);
|
|
29144
|
-
const login =
|
|
29167
|
+
const login = React39.useCallback(async (credentials) => {
|
|
29145
29168
|
try {
|
|
29146
29169
|
setIsSubmitting(true);
|
|
29147
29170
|
setError(null);
|
|
@@ -29395,8 +29418,8 @@ function AccessFlowBody({
|
|
|
29395
29418
|
onSelectPlatform
|
|
29396
29419
|
}) {
|
|
29397
29420
|
const { isAuthenticated } = useAuth();
|
|
29398
|
-
const [mode, setMode] =
|
|
29399
|
-
const handleWizardComplete =
|
|
29421
|
+
const [mode, setMode] = React39.useState(initialMode);
|
|
29422
|
+
const handleWizardComplete = React39.useCallback(
|
|
29400
29423
|
(destination) => {
|
|
29401
29424
|
if (destination === "/login") {
|
|
29402
29425
|
setMode("login");
|
|
@@ -29449,8 +29472,8 @@ init_chainAccountRequired();
|
|
|
29449
29472
|
// src/ui/account/ChainAccountRequiredHost.tsx
|
|
29450
29473
|
init_chainAccountRequired();
|
|
29451
29474
|
var ChainAccountRequiredHost = () => {
|
|
29452
|
-
const [request, setRequest] =
|
|
29453
|
-
|
|
29475
|
+
const [request, setRequest] = React39.useState(null);
|
|
29476
|
+
React39.useEffect(() => exports.chainAccountRequiredGate.subscribe(setRequest), []);
|
|
29454
29477
|
if (!request) return null;
|
|
29455
29478
|
const key = `${request.context.entityKind}:${request.context.entityId}:${request.context.chainId}`;
|
|
29456
29479
|
return /* @__PURE__ */ jsxRuntime.jsx(ChainAccountActivationDialog, { request }, key);
|
|
@@ -29458,10 +29481,10 @@ var ChainAccountRequiredHost = () => {
|
|
|
29458
29481
|
var ChainAccountActivationDialog = ({ request }) => {
|
|
29459
29482
|
const mode = chainAccountMode(request.context);
|
|
29460
29483
|
const label = mode === "test" ? "Test" : "Live";
|
|
29461
|
-
const [started, setStarted] =
|
|
29462
|
-
const [waitingForVerification, setWaitingForVerification] =
|
|
29463
|
-
const [status, setStatus] =
|
|
29464
|
-
const [error, setError] =
|
|
29484
|
+
const [started, setStarted] = React39.useState(false);
|
|
29485
|
+
const [waitingForVerification, setWaitingForVerification] = React39.useState(false);
|
|
29486
|
+
const [status, setStatus] = React39.useState(null);
|
|
29487
|
+
const [error, setError] = React39.useState(null);
|
|
29465
29488
|
async function activate(verificationAttempted = false) {
|
|
29466
29489
|
setStarted(true);
|
|
29467
29490
|
setError(null);
|
|
@@ -29584,8 +29607,8 @@ init_walletIdentity();
|
|
|
29584
29607
|
init_verificationsService();
|
|
29585
29608
|
init_ProviderConfigContext();
|
|
29586
29609
|
var VerificationRequiredHost = () => {
|
|
29587
|
-
const [request, setRequest] =
|
|
29588
|
-
|
|
29610
|
+
const [request, setRequest] = React39.useState(null);
|
|
29611
|
+
React39.useEffect(() => verificationRequiredGate.subscribe(setRequest), []);
|
|
29589
29612
|
if (!request) return null;
|
|
29590
29613
|
return /* @__PURE__ */ jsxRuntime.jsx(VerificationDialog, { request }, request.context.profile ?? "default");
|
|
29591
29614
|
};
|
|
@@ -29594,12 +29617,12 @@ var VerificationDialog = ({
|
|
|
29594
29617
|
}) => {
|
|
29595
29618
|
const { context } = request;
|
|
29596
29619
|
const { config } = useProviderConfig();
|
|
29597
|
-
const [activeProvider, setActiveProvider] =
|
|
29598
|
-
const [checking, setChecking] =
|
|
29599
|
-
const [error, setError] =
|
|
29600
|
-
const [isGroupManager, setIsGroupManager] =
|
|
29620
|
+
const [activeProvider, setActiveProvider] = React39.useState(null);
|
|
29621
|
+
const [checking, setChecking] = React39.useState(false);
|
|
29622
|
+
const [error, setError] = React39.useState(null);
|
|
29623
|
+
const [isGroupManager, setIsGroupManager] = React39.useState(null);
|
|
29601
29624
|
const hasGroupMiss = context.missing.some((m) => m.subject_kind === "group");
|
|
29602
|
-
|
|
29625
|
+
React39.useEffect(() => {
|
|
29603
29626
|
if (!hasGroupMiss || !context.groupId) return;
|
|
29604
29627
|
let cancelled = false;
|
|
29605
29628
|
groupsService.getGroupDetails(context.groupId).then((g) => {
|
|
@@ -29776,25 +29799,25 @@ function BusinessVerificationSection({
|
|
|
29776
29799
|
initialStatus
|
|
29777
29800
|
}) {
|
|
29778
29801
|
const { config } = useProviderConfig();
|
|
29779
|
-
const [status, setStatus] =
|
|
29780
|
-
const [flowInstance, setFlowInstance] =
|
|
29781
|
-
const [error, setError] =
|
|
29782
|
-
const [busy, setBusy] =
|
|
29783
|
-
const kybInstances =
|
|
29802
|
+
const [status, setStatus] = React39__default.default.useState(initialStatus ?? "not_required");
|
|
29803
|
+
const [flowInstance, setFlowInstance] = React39__default.default.useState(null);
|
|
29804
|
+
const [error, setError] = React39__default.default.useState(null);
|
|
29805
|
+
const [busy, setBusy] = React39__default.default.useState(false);
|
|
29806
|
+
const kybInstances = React39__default.default.useMemo(
|
|
29784
29807
|
() => (config?.kyc.enabled ?? []).filter(
|
|
29785
29808
|
(id) => config?.kyc.settings[id]?.subject === "group"
|
|
29786
29809
|
),
|
|
29787
29810
|
[config]
|
|
29788
29811
|
);
|
|
29789
29812
|
const entityDefault = config?.kyc.entity_default_profile ?? null;
|
|
29790
|
-
const refreshStatus =
|
|
29813
|
+
const refreshStatus = React39__default.default.useCallback(async () => {
|
|
29791
29814
|
try {
|
|
29792
29815
|
const s = await getIdentityStatus({ groupId });
|
|
29793
29816
|
setStatus(s.status === "unverified" ? "unverified" : s.status);
|
|
29794
29817
|
} catch {
|
|
29795
29818
|
}
|
|
29796
29819
|
}, [groupId]);
|
|
29797
|
-
|
|
29820
|
+
React39__default.default.useEffect(() => {
|
|
29798
29821
|
if (initialStatus !== void 0) setStatus(initialStatus);
|
|
29799
29822
|
}, [initialStatus]);
|
|
29800
29823
|
const startFlow = async (bindFirst) => {
|
|
@@ -30530,31 +30553,31 @@ function readDelegationGroupId() {
|
|
|
30530
30553
|
function useIncomingPayments(options = {}) {
|
|
30531
30554
|
const { entityId: entityIdOverride, walletId: walletIdOverride, disableLiveRefresh } = options;
|
|
30532
30555
|
const { user, isAuthenticated } = useAuth();
|
|
30533
|
-
const [delegationGroupId, setDelegationGroupId] =
|
|
30556
|
+
const [delegationGroupId, setDelegationGroupId] = React39.useState(
|
|
30534
30557
|
() => readDelegationGroupId()
|
|
30535
30558
|
);
|
|
30536
|
-
|
|
30559
|
+
React39.useEffect(() => {
|
|
30537
30560
|
setDelegationGroupId(readDelegationGroupId());
|
|
30538
30561
|
}, [isAuthenticated, user?.id]);
|
|
30539
|
-
const activeEntityId =
|
|
30562
|
+
const activeEntityId = React39.useMemo(() => {
|
|
30540
30563
|
if (entityIdOverride !== void 0) return entityIdOverride;
|
|
30541
30564
|
if (delegationGroupId) return delegationGroupId;
|
|
30542
30565
|
return user?.id ?? null;
|
|
30543
30566
|
}, [entityIdOverride, delegationGroupId, user?.id]);
|
|
30544
30567
|
const activeWalletId = walletIdOverride ?? user?.default_wallet_id ?? null;
|
|
30545
|
-
const [payments, setPayments] =
|
|
30546
|
-
const [contracts, setContracts] =
|
|
30547
|
-
const [swaps, setSwaps] =
|
|
30548
|
-
const [loading, setLoading] =
|
|
30549
|
-
const [error, setError] =
|
|
30550
|
-
const [acceptState, setAcceptState] =
|
|
30551
|
-
const inflightRef =
|
|
30552
|
-
const activeEntityIdRef =
|
|
30553
|
-
|
|
30568
|
+
const [payments, setPayments] = React39.useState([]);
|
|
30569
|
+
const [contracts, setContracts] = React39.useState([]);
|
|
30570
|
+
const [swaps, setSwaps] = React39.useState([]);
|
|
30571
|
+
const [loading, setLoading] = React39.useState(false);
|
|
30572
|
+
const [error, setError] = React39.useState(null);
|
|
30573
|
+
const [acceptState, setAcceptState] = React39.useState({ itemKey: null, error: null });
|
|
30574
|
+
const inflightRef = React39.useRef(null);
|
|
30575
|
+
const activeEntityIdRef = React39.useRef(activeEntityId);
|
|
30576
|
+
React39.useEffect(() => {
|
|
30554
30577
|
activeEntityIdRef.current = activeEntityId;
|
|
30555
30578
|
setDelegationGroupId(readDelegationGroupId());
|
|
30556
30579
|
});
|
|
30557
|
-
const fetchAll =
|
|
30580
|
+
const fetchAll = React39.useCallback(async () => {
|
|
30558
30581
|
if (!isAuthenticated || !activeEntityId) {
|
|
30559
30582
|
setPayments([]);
|
|
30560
30583
|
setContracts([]);
|
|
@@ -30605,10 +30628,10 @@ function useIncomingPayments(options = {}) {
|
|
|
30605
30628
|
inflightRef.current = work;
|
|
30606
30629
|
return work;
|
|
30607
30630
|
}, [isAuthenticated, activeEntityId, activeWalletId]);
|
|
30608
|
-
|
|
30631
|
+
React39.useEffect(() => {
|
|
30609
30632
|
void fetchAll();
|
|
30610
30633
|
}, [fetchAll]);
|
|
30611
|
-
|
|
30634
|
+
React39.useEffect(() => {
|
|
30612
30635
|
if (disableLiveRefresh) return;
|
|
30613
30636
|
if (!isAuthenticated || !activeEntityId) return;
|
|
30614
30637
|
const unsub = subscribeEntityEvents(activeEntityId, (event) => {
|
|
@@ -30620,12 +30643,12 @@ function useIncomingPayments(options = {}) {
|
|
|
30620
30643
|
unsub();
|
|
30621
30644
|
};
|
|
30622
30645
|
}, [isAuthenticated, activeEntityId, disableLiveRefresh, fetchAll]);
|
|
30623
|
-
const items =
|
|
30646
|
+
const items = React39.useMemo(
|
|
30624
30647
|
() => buildInbox({ payments, contracts, swaps, activeEntityId }),
|
|
30625
30648
|
[payments, contracts, swaps, activeEntityId]
|
|
30626
30649
|
);
|
|
30627
|
-
const groups =
|
|
30628
|
-
const accept =
|
|
30650
|
+
const groups = React39.useMemo(() => groupInbox(items), [items]);
|
|
30651
|
+
const accept = React39.useCallback(
|
|
30629
30652
|
async (item) => {
|
|
30630
30653
|
setAcceptState({ itemKey: item.key, error: null });
|
|
30631
30654
|
try {
|
|
@@ -30650,7 +30673,7 @@ function useIncomingPayments(options = {}) {
|
|
|
30650
30673
|
},
|
|
30651
30674
|
[]
|
|
30652
30675
|
);
|
|
30653
|
-
const cancel =
|
|
30676
|
+
const cancel = React39.useCallback(async (paymentId) => {
|
|
30654
30677
|
try {
|
|
30655
30678
|
await paymentsService.cancelPayment({ paymentId });
|
|
30656
30679
|
setPayments((prev) => prev.filter((p) => p.id !== paymentId));
|
|
@@ -30679,14 +30702,14 @@ function resetDecimalsWarningCache() {
|
|
|
30679
30702
|
warnedTokenIds.clear();
|
|
30680
30703
|
}
|
|
30681
30704
|
function useDecimalsCore(payments, walletAddress) {
|
|
30682
|
-
const [cache2, setCache] =
|
|
30683
|
-
const [cacheErrors, setCacheErrors] =
|
|
30684
|
-
const fetchingRef =
|
|
30685
|
-
const cacheRef =
|
|
30686
|
-
|
|
30705
|
+
const [cache2, setCache] = React39.useState(/* @__PURE__ */ new Map());
|
|
30706
|
+
const [cacheErrors, setCacheErrors] = React39.useState(/* @__PURE__ */ new Map());
|
|
30707
|
+
const fetchingRef = React39.useRef(/* @__PURE__ */ new Set());
|
|
30708
|
+
const cacheRef = React39.useRef(cache2);
|
|
30709
|
+
React39.useEffect(() => {
|
|
30687
30710
|
cacheRef.current = cache2;
|
|
30688
30711
|
}, [cache2]);
|
|
30689
|
-
|
|
30712
|
+
React39.useEffect(() => {
|
|
30690
30713
|
if (!payments || payments.length === 0) return;
|
|
30691
30714
|
const todo = /* @__PURE__ */ new Set();
|
|
30692
30715
|
for (const payment of payments) {
|
|
@@ -30777,7 +30800,7 @@ function useDecimalsCore(payments, walletAddress) {
|
|
|
30777
30800
|
todo.forEach((id) => fetchingRef.current.delete(id));
|
|
30778
30801
|
};
|
|
30779
30802
|
}, [payments, walletAddress]);
|
|
30780
|
-
return
|
|
30803
|
+
return React39.useMemo(() => ({ cache: cache2, cacheErrors }), [cache2, cacheErrors]);
|
|
30781
30804
|
}
|
|
30782
30805
|
function usePaymentDecimals(payments, walletAddress) {
|
|
30783
30806
|
const { cache: cache2 } = useDecimalsCore(payments, walletAddress);
|
|
@@ -30982,7 +31005,7 @@ var IncomingPaymentsInbox = ({
|
|
|
30982
31005
|
...hookOptions
|
|
30983
31006
|
}) => {
|
|
30984
31007
|
const inbox = useIncomingPayments(hookOptions);
|
|
30985
|
-
const allPayments =
|
|
31008
|
+
const allPayments = React39__default.default.useMemo(
|
|
30986
31009
|
() => [
|
|
30987
31010
|
...inbox.payments,
|
|
30988
31011
|
...inbox.contracts.flatMap((c) => c.payments ?? [])
|
|
@@ -31143,7 +31166,7 @@ var IncomingPaymentsLauncher = ({
|
|
|
31143
31166
|
}) => {
|
|
31144
31167
|
const { isAuthenticated } = useAuth();
|
|
31145
31168
|
const inbox = useIncomingPayments(hookOptions);
|
|
31146
|
-
const [open, setOpen] =
|
|
31169
|
+
const [open, setOpen] = React39.useState(false);
|
|
31147
31170
|
if (hideWhenSignedOut && !isAuthenticated) return null;
|
|
31148
31171
|
const handleClick = onClick ?? (() => setOpen(true));
|
|
31149
31172
|
const count = inbox.items.length;
|
|
@@ -31273,11 +31296,11 @@ function SummaryTile({ label, count }) {
|
|
|
31273
31296
|
] });
|
|
31274
31297
|
}
|
|
31275
31298
|
function useSendPayment() {
|
|
31276
|
-
const [sending, setSending] =
|
|
31277
|
-
const [error, setError] =
|
|
31278
|
-
const [lastResponse, setLastResponse] =
|
|
31279
|
-
const inflightRef =
|
|
31280
|
-
const send =
|
|
31299
|
+
const [sending, setSending] = React39.useState(false);
|
|
31300
|
+
const [error, setError] = React39.useState(null);
|
|
31301
|
+
const [lastResponse, setLastResponse] = React39.useState(null);
|
|
31302
|
+
const inflightRef = React39.useRef(null);
|
|
31303
|
+
const send = React39.useCallback(async (args) => {
|
|
31281
31304
|
if (inflightRef.current) {
|
|
31282
31305
|
return inflightRef.current;
|
|
31283
31306
|
}
|
|
@@ -31305,7 +31328,7 @@ function useSendPayment() {
|
|
|
31305
31328
|
inflightRef.current = work;
|
|
31306
31329
|
return work;
|
|
31307
31330
|
}, []);
|
|
31308
|
-
const reset =
|
|
31331
|
+
const reset = React39.useCallback(() => {
|
|
31309
31332
|
setError(null);
|
|
31310
31333
|
setLastResponse(null);
|
|
31311
31334
|
}, []);
|
|
@@ -31323,13 +31346,13 @@ var SendPaymentForm = ({
|
|
|
31323
31346
|
className = ""
|
|
31324
31347
|
}) => {
|
|
31325
31348
|
const initialAssetId = (defaultAssetId && assets.find((a) => a.id === defaultAssetId)?.id) ?? assets[0]?.id ?? "";
|
|
31326
|
-
const [assetId, setAssetId] =
|
|
31327
|
-
const [amount, setAmount] =
|
|
31328
|
-
const [recipient, setRecipient] =
|
|
31329
|
-
const [recipientMode, setRecipientMode] =
|
|
31330
|
-
const [description, setDescription] =
|
|
31331
|
-
const [validationError, setValidationError] =
|
|
31332
|
-
|
|
31349
|
+
const [assetId, setAssetId] = React39.useState(initialAssetId);
|
|
31350
|
+
const [amount, setAmount] = React39.useState(defaultAmount);
|
|
31351
|
+
const [recipient, setRecipient] = React39.useState(defaultRecipient);
|
|
31352
|
+
const [recipientMode, setRecipientMode] = React39.useState("entity");
|
|
31353
|
+
const [description, setDescription] = React39.useState("");
|
|
31354
|
+
const [validationError, setValidationError] = React39.useState(null);
|
|
31355
|
+
React39.useEffect(() => {
|
|
31333
31356
|
if (assetId === "" && assets.length > 0) {
|
|
31334
31357
|
setAssetId(assets[0].id);
|
|
31335
31358
|
} else if (assetId && !assets.find((a) => a.id === assetId)) {
|