@sylphx/sdk 0.3.6 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.cts +376 -1
- package/dist/index.d.ts +376 -1
- package/dist/index.js +127 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +113 -3
- package/dist/index.mjs.map +1 -1
- package/dist/nextjs/index.js +7 -2
- package/dist/nextjs/index.js.map +1 -1
- package/dist/nextjs/index.mjs +7 -2
- package/dist/nextjs/index.mjs.map +1 -1
- package/dist/react/index.d.cts +330 -1
- package/dist/react/index.d.ts +330 -1
- package/dist/react/index.js +710 -543
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +384 -221
- package/dist/react/index.mjs.map +1 -1
- package/dist/server/index.js +30 -11
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +30 -11
- package/dist/server/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/react/index.mjs
CHANGED
|
@@ -41947,6 +41947,13 @@ var SylphxError = class _SylphxError extends Error {
|
|
|
41947
41947
|
static isRateLimited(err) {
|
|
41948
41948
|
return err instanceof _SylphxError && err.code === "TOO_MANY_REQUESTS";
|
|
41949
41949
|
}
|
|
41950
|
+
/**
|
|
41951
|
+
* Check if error is an account lockout error (too many failed login attempts).
|
|
41952
|
+
* When true, `error.data?.lockoutUntil` contains the ISO 8601 timestamp when the lockout expires.
|
|
41953
|
+
*/
|
|
41954
|
+
static isAccountLocked(err) {
|
|
41955
|
+
return err instanceof _SylphxError && err.code === "TOO_MANY_REQUESTS" && err.data?.code === "ACCOUNT_LOCKED";
|
|
41956
|
+
}
|
|
41950
41957
|
/**
|
|
41951
41958
|
* Check if error is a quota exceeded error (plan limit reached)
|
|
41952
41959
|
*/
|
|
@@ -42964,6 +42971,13 @@ function createConfig(input) {
|
|
|
42964
42971
|
accessToken: input.accessToken
|
|
42965
42972
|
});
|
|
42966
42973
|
}
|
|
42974
|
+
function withToken(config2, accessToken) {
|
|
42975
|
+
return Object.freeze({
|
|
42976
|
+
...config2,
|
|
42977
|
+
accessToken
|
|
42978
|
+
// Preserve baseUrl and ref from original config
|
|
42979
|
+
});
|
|
42980
|
+
}
|
|
42967
42981
|
function buildHeaders(config2) {
|
|
42968
42982
|
const headers = {
|
|
42969
42983
|
"Content-Type": "application/json"
|
|
@@ -44498,7 +44512,7 @@ function useOrganization() {
|
|
|
44498
44512
|
mounted = false;
|
|
44499
44513
|
};
|
|
44500
44514
|
}, [config2?.baseUrl, getStoredOrgSlug, selectOrganization, organization, config2]);
|
|
44501
|
-
const
|
|
44515
|
+
const hasPermission2 = useCallback41(
|
|
44502
44516
|
(permission) => {
|
|
44503
44517
|
if (!role) return false;
|
|
44504
44518
|
const rolePermissions = {
|
|
@@ -44626,7 +44640,7 @@ function useOrganization() {
|
|
|
44626
44640
|
isLoading,
|
|
44627
44641
|
error: error2,
|
|
44628
44642
|
role,
|
|
44629
|
-
hasPermission,
|
|
44643
|
+
hasPermission: hasPermission2,
|
|
44630
44644
|
setOrganization: selectOrganization,
|
|
44631
44645
|
createOrganization: createOrg,
|
|
44632
44646
|
updateOrganization: updateOrg,
|
|
@@ -46017,7 +46031,7 @@ function InviteMemberInner({
|
|
|
46017
46031
|
className,
|
|
46018
46032
|
showRoleDescriptions = true
|
|
46019
46033
|
}) {
|
|
46020
|
-
const { organization, inviteMember, hasPermission } = useOrganization();
|
|
46034
|
+
const { organization, inviteMember, hasPermission: hasPermission2 } = useOrganization();
|
|
46021
46035
|
const styles2 = baseStyles(theme);
|
|
46022
46036
|
const [email, setEmail] = useState55("");
|
|
46023
46037
|
const [role, setRole] = useState55(defaultRole);
|
|
@@ -46025,7 +46039,7 @@ function InviteMemberInner({
|
|
|
46025
46039
|
const [error2, setError] = useState55(null);
|
|
46026
46040
|
const [success, setSuccess] = useState55(false);
|
|
46027
46041
|
const [focusedField, setFocusedField] = useState55(null);
|
|
46028
|
-
const canInvite =
|
|
46042
|
+
const canInvite = hasPermission2("manage_members");
|
|
46029
46043
|
useEffect48(() => {
|
|
46030
46044
|
injectGlobalStyles();
|
|
46031
46045
|
}, []);
|
|
@@ -46404,7 +46418,7 @@ function MembersListInner({
|
|
|
46404
46418
|
organization,
|
|
46405
46419
|
members: serverMembers,
|
|
46406
46420
|
isLoading,
|
|
46407
|
-
hasPermission,
|
|
46421
|
+
hasPermission: hasPermission2,
|
|
46408
46422
|
updateMemberRole,
|
|
46409
46423
|
removeMember
|
|
46410
46424
|
} = useOrganization();
|
|
@@ -46414,7 +46428,7 @@ function MembersListInner({
|
|
|
46414
46428
|
const [error2, setError] = useState56(null);
|
|
46415
46429
|
const [showAll, setShowAll] = useState56(false);
|
|
46416
46430
|
const [pendingAction, setPendingAction] = useState56(null);
|
|
46417
|
-
const canManageMembers =
|
|
46431
|
+
const canManageMembers = hasPermission2("manage_members");
|
|
46418
46432
|
useEffect49(() => {
|
|
46419
46433
|
injectGlobalStyles();
|
|
46420
46434
|
}, []);
|
|
@@ -54038,7 +54052,12 @@ function SylphxProviderInner({
|
|
|
54038
54052
|
authPrefix = "/auth"
|
|
54039
54053
|
}) {
|
|
54040
54054
|
const appId = validateAndSanitizeAppId(appIdProp);
|
|
54041
|
-
const
|
|
54055
|
+
const resolvedRef = (() => {
|
|
54056
|
+
if (providedRef) return providedRef;
|
|
54057
|
+
const parts = appId?.split("_") ?? [];
|
|
54058
|
+
return parts.length === 4 && /^[a-z0-9]{12}$/.test(parts[2] ?? "") ? parts[2] : void 0;
|
|
54059
|
+
})();
|
|
54060
|
+
const platformUrl = resolvedRef ? `https://${resolvedRef}.${DEFAULT_SDK_API_HOST}` : providedPlatformUrl?.trim() || `https://${DEFAULT_SDK_API_HOST}`;
|
|
54042
54061
|
const storage2 = useMemo127(() => new SylphxStorage(appId), [appId]);
|
|
54043
54062
|
const [anonymousId, setAnonymousId] = useState77("");
|
|
54044
54063
|
useEffect63(() => {
|
|
@@ -54113,10 +54132,10 @@ function SylphxProviderInner({
|
|
|
54113
54132
|
}
|
|
54114
54133
|
const wasAnonymous = !prevIsSignedIn.current;
|
|
54115
54134
|
const isNowAuthenticated = authState.isSignedIn && authState.user?.id;
|
|
54116
|
-
if (wasAnonymous && isNowAuthenticated && authState.user && anonymousId &&
|
|
54135
|
+
if (wasAnonymous && isNowAuthenticated && authState.user && anonymousId && resolvedRef) {
|
|
54117
54136
|
const config3 = createConfig({
|
|
54118
54137
|
secretKey: appId,
|
|
54119
|
-
ref:
|
|
54138
|
+
ref: resolvedRef
|
|
54120
54139
|
});
|
|
54121
54140
|
linkAnonymousConsents(config3, {
|
|
54122
54141
|
userId: authState.user.id,
|
|
@@ -55755,7 +55774,7 @@ function SylphxProviderInner({
|
|
|
55755
55774
|
() => ({
|
|
55756
55775
|
appId,
|
|
55757
55776
|
platformUrl,
|
|
55758
|
-
ref:
|
|
55777
|
+
ref: resolvedRef,
|
|
55759
55778
|
anonymousId,
|
|
55760
55779
|
queryClient,
|
|
55761
55780
|
clickIds,
|
|
@@ -55894,8 +55913,148 @@ function SylphxProviderInner({
|
|
|
55894
55913
|
return /* @__PURE__ */ jsx64(AuthContext.Provider, { value: authValue, children: /* @__PURE__ */ jsx64(SdkAuthContext.Provider, { value: sdkAuthValue, children: /* @__PURE__ */ jsx64(UserContext.Provider, { value: userValue, children: /* @__PURE__ */ jsx64(SecurityContext.Provider, { value: securityValue, children: /* @__PURE__ */ jsx64(PlatformContext.Provider, { value: platformValue, children: /* @__PURE__ */ jsx64(StorageContext.Provider, { value: storageValue, children: /* @__PURE__ */ jsx64(AIContext.Provider, { value: aiValue, children: /* @__PURE__ */ jsx64(TasksContext.Provider, { value: tasksValue, children: /* @__PURE__ */ jsx64(MonitoringContext.Provider, { value: monitoringValue, children: /* @__PURE__ */ jsx64(ConsentContext.Provider, { value: consentValue, children: /* @__PURE__ */ jsx64(DatabaseContext.Provider, { value: databaseValue, children: /* @__PURE__ */ jsx64(EmailContext.Provider, { value: emailValue, children: /* @__PURE__ */ jsx64(NewsletterContext.Provider, { value: newsletterValue, children: /* @__PURE__ */ jsx64(WebhooksContext.Provider, { value: webhooksValue, children }) }) }) }) }) }) }) }) }) }) }) }) }) });
|
|
55895
55914
|
}
|
|
55896
55915
|
|
|
55916
|
+
// src/react/rbac-hooks.ts
|
|
55917
|
+
import { useQuery as useQuery6, useQueryClient as useQueryClient5 } from "@tanstack/react-query";
|
|
55918
|
+
import { useCallback as useCallback67, useContext as useContext78, useMemo as useMemo128 } from "react";
|
|
55919
|
+
|
|
55920
|
+
// src/permissions.ts
|
|
55921
|
+
async function listPermissions(config2) {
|
|
55922
|
+
return callApi(config2, "/permissions");
|
|
55923
|
+
}
|
|
55924
|
+
async function getMemberPermissions(config2, orgIdOrSlug, memberId) {
|
|
55925
|
+
return callApi(
|
|
55926
|
+
config2,
|
|
55927
|
+
`/orgs/${orgIdOrSlug}/members/${memberId}/permissions`
|
|
55928
|
+
);
|
|
55929
|
+
}
|
|
55930
|
+
function hasPermission(permissions, required) {
|
|
55931
|
+
return permissions.includes(required);
|
|
55932
|
+
}
|
|
55933
|
+
function hasAnyPermission(permissions, required) {
|
|
55934
|
+
return required.some((perm) => permissions.includes(perm));
|
|
55935
|
+
}
|
|
55936
|
+
function hasAllPermissions(permissions, required) {
|
|
55937
|
+
return required.every((perm) => permissions.includes(perm));
|
|
55938
|
+
}
|
|
55939
|
+
|
|
55940
|
+
// src/roles.ts
|
|
55941
|
+
async function listRoles(config2) {
|
|
55942
|
+
return callApi(config2, "/roles");
|
|
55943
|
+
}
|
|
55944
|
+
|
|
55945
|
+
// src/react/rbac-hooks.ts
|
|
55946
|
+
function useSdkConfig() {
|
|
55947
|
+
const platform3 = useContext78(PlatformContext);
|
|
55948
|
+
const auth = useContext78(AuthContext);
|
|
55949
|
+
return useMemo128(() => {
|
|
55950
|
+
if (!platform3?.ref) return null;
|
|
55951
|
+
let config2 = createConfig({
|
|
55952
|
+
secretKey: platform3.appId,
|
|
55953
|
+
ref: platform3.ref
|
|
55954
|
+
});
|
|
55955
|
+
if (auth?.accessToken) {
|
|
55956
|
+
config2 = withToken(config2, auth.accessToken);
|
|
55957
|
+
}
|
|
55958
|
+
return config2;
|
|
55959
|
+
}, [platform3?.ref, platform3?.appId, auth?.accessToken]);
|
|
55960
|
+
}
|
|
55961
|
+
var rbacKeys = {
|
|
55962
|
+
all: ["rbac"],
|
|
55963
|
+
permissions: () => [...rbacKeys.all, "permissions"],
|
|
55964
|
+
roles: () => [...rbacKeys.all, "roles"],
|
|
55965
|
+
memberPermissions: (orgIdOrSlug, memberId) => [...rbacKeys.all, "memberPermissions", orgIdOrSlug, memberId]
|
|
55966
|
+
};
|
|
55967
|
+
function usePermissions() {
|
|
55968
|
+
const config2 = useSdkConfig();
|
|
55969
|
+
const queryClient = useQueryClient5();
|
|
55970
|
+
const { data, isLoading, error: error2 } = useQuery6({
|
|
55971
|
+
queryKey: rbacKeys.permissions(),
|
|
55972
|
+
queryFn: async () => {
|
|
55973
|
+
if (!config2) throw new Error("SDK not configured \u2014 wrap your app in SylphxProvider");
|
|
55974
|
+
return listPermissions(config2);
|
|
55975
|
+
},
|
|
55976
|
+
enabled: !!config2,
|
|
55977
|
+
staleTime: 3e4
|
|
55978
|
+
// 30s — permissions change rarely
|
|
55979
|
+
});
|
|
55980
|
+
const refresh = useCallback67(async () => {
|
|
55981
|
+
await queryClient.invalidateQueries({ queryKey: rbacKeys.permissions() });
|
|
55982
|
+
}, [queryClient]);
|
|
55983
|
+
return {
|
|
55984
|
+
permissions: data?.permissions ?? [],
|
|
55985
|
+
isLoading,
|
|
55986
|
+
error: error2,
|
|
55987
|
+
refresh
|
|
55988
|
+
};
|
|
55989
|
+
}
|
|
55990
|
+
function useRoles() {
|
|
55991
|
+
const config2 = useSdkConfig();
|
|
55992
|
+
const queryClient = useQueryClient5();
|
|
55993
|
+
const { data, isLoading, error: error2 } = useQuery6({
|
|
55994
|
+
queryKey: rbacKeys.roles(),
|
|
55995
|
+
queryFn: async () => {
|
|
55996
|
+
if (!config2) throw new Error("SDK not configured \u2014 wrap your app in SylphxProvider");
|
|
55997
|
+
return listRoles(config2);
|
|
55998
|
+
},
|
|
55999
|
+
enabled: !!config2,
|
|
56000
|
+
staleTime: 3e4
|
|
56001
|
+
// 30s — roles change rarely
|
|
56002
|
+
});
|
|
56003
|
+
const refresh = useCallback67(async () => {
|
|
56004
|
+
await queryClient.invalidateQueries({ queryKey: rbacKeys.roles() });
|
|
56005
|
+
}, [queryClient]);
|
|
56006
|
+
return {
|
|
56007
|
+
roles: data?.roles ?? [],
|
|
56008
|
+
isLoading,
|
|
56009
|
+
error: error2,
|
|
56010
|
+
refresh
|
|
56011
|
+
};
|
|
56012
|
+
}
|
|
56013
|
+
function useMemberPermissions(orgIdOrSlug, memberId) {
|
|
56014
|
+
const config2 = useSdkConfig();
|
|
56015
|
+
const queryClient = useQueryClient5();
|
|
56016
|
+
const enabled = !!config2 && !!orgIdOrSlug && !!memberId;
|
|
56017
|
+
const { data, isLoading, error: error2 } = useQuery6({
|
|
56018
|
+
queryKey: rbacKeys.memberPermissions(orgIdOrSlug ?? "", memberId ?? ""),
|
|
56019
|
+
queryFn: async () => {
|
|
56020
|
+
if (!config2 || !orgIdOrSlug || !memberId) {
|
|
56021
|
+
throw new Error("Missing required parameters");
|
|
56022
|
+
}
|
|
56023
|
+
return getMemberPermissions(config2, orgIdOrSlug, memberId);
|
|
56024
|
+
},
|
|
56025
|
+
enabled,
|
|
56026
|
+
staleTime: 15e3
|
|
56027
|
+
// 15s — member permissions may change more frequently
|
|
56028
|
+
});
|
|
56029
|
+
const refresh = useCallback67(async () => {
|
|
56030
|
+
if (orgIdOrSlug && memberId) {
|
|
56031
|
+
await queryClient.invalidateQueries({
|
|
56032
|
+
queryKey: rbacKeys.memberPermissions(orgIdOrSlug, memberId)
|
|
56033
|
+
});
|
|
56034
|
+
}
|
|
56035
|
+
}, [queryClient, orgIdOrSlug, memberId]);
|
|
56036
|
+
return {
|
|
56037
|
+
memberId: data?.memberId ?? null,
|
|
56038
|
+
role: data?.role ?? null,
|
|
56039
|
+
permissions: data?.permissions ?? [],
|
|
56040
|
+
isLoading: enabled ? isLoading : false,
|
|
56041
|
+
error: error2,
|
|
56042
|
+
refresh
|
|
56043
|
+
};
|
|
56044
|
+
}
|
|
56045
|
+
function useHasPermission(permissions, required) {
|
|
56046
|
+
return useMemo128(() => {
|
|
56047
|
+
const requiredArray = Array.isArray(required) ? required : [required];
|
|
56048
|
+
return {
|
|
56049
|
+
allowed: Array.isArray(required) ? hasAllPermissions(permissions, requiredArray) : hasPermission(permissions, required),
|
|
56050
|
+
allowedAny: hasAnyPermission(permissions, requiredArray),
|
|
56051
|
+
allowedAll: hasAllPermissions(permissions, requiredArray)
|
|
56052
|
+
};
|
|
56053
|
+
}, [permissions, required]);
|
|
56054
|
+
}
|
|
56055
|
+
|
|
55897
56056
|
// src/react/storage-hooks.ts
|
|
55898
|
-
import { useCallback as
|
|
56057
|
+
import { useCallback as useCallback68, useRef as useRef89, useState as useState78 } from "react";
|
|
55899
56058
|
function useStorage() {
|
|
55900
56059
|
const ctx = useStorageContext();
|
|
55901
56060
|
const [isUploading, setIsUploading] = useState78(false);
|
|
@@ -55905,12 +56064,12 @@ function useStorage() {
|
|
|
55905
56064
|
const [uploadError, setUploadError] = useState78(null);
|
|
55906
56065
|
const [wasCancelled, setWasCancelled] = useState78(false);
|
|
55907
56066
|
const abortControllerRef = useRef89(null);
|
|
55908
|
-
const handleProgress =
|
|
56067
|
+
const handleProgress = useCallback68((event2) => {
|
|
55909
56068
|
setProgress(event2.progress);
|
|
55910
56069
|
setBytesUploaded(event2.loaded);
|
|
55911
56070
|
setBytesTotal(event2.total);
|
|
55912
56071
|
}, []);
|
|
55913
|
-
const cancel =
|
|
56072
|
+
const cancel = useCallback68(() => {
|
|
55914
56073
|
if (abortControllerRef.current) {
|
|
55915
56074
|
abortControllerRef.current.abort();
|
|
55916
56075
|
abortControllerRef.current = null;
|
|
@@ -55918,7 +56077,7 @@ function useStorage() {
|
|
|
55918
56077
|
setIsUploading(false);
|
|
55919
56078
|
}
|
|
55920
56079
|
}, []);
|
|
55921
|
-
const upload =
|
|
56080
|
+
const upload = useCallback68(
|
|
55922
56081
|
async (file, options) => {
|
|
55923
56082
|
const controller = new AbortController();
|
|
55924
56083
|
abortControllerRef.current = controller;
|
|
@@ -55952,7 +56111,7 @@ function useStorage() {
|
|
|
55952
56111
|
},
|
|
55953
56112
|
[ctx, handleProgress]
|
|
55954
56113
|
);
|
|
55955
|
-
const uploadAvatar =
|
|
56114
|
+
const uploadAvatar = useCallback68(
|
|
55956
56115
|
async (file) => {
|
|
55957
56116
|
const controller = new AbortController();
|
|
55958
56117
|
abortControllerRef.current = controller;
|
|
@@ -55983,13 +56142,13 @@ function useStorage() {
|
|
|
55983
56142
|
},
|
|
55984
56143
|
[ctx, handleProgress]
|
|
55985
56144
|
);
|
|
55986
|
-
const deleteFile =
|
|
56145
|
+
const deleteFile = useCallback68(
|
|
55987
56146
|
async (fileId) => {
|
|
55988
56147
|
await ctx.deleteFile(fileId);
|
|
55989
56148
|
},
|
|
55990
56149
|
[ctx]
|
|
55991
56150
|
);
|
|
55992
|
-
const getUrl =
|
|
56151
|
+
const getUrl = useCallback68(
|
|
55993
56152
|
async (fileId) => {
|
|
55994
56153
|
return ctx.getUrl(fileId);
|
|
55995
56154
|
},
|
|
@@ -56019,12 +56178,12 @@ function useFileUpload(options = {}) {
|
|
|
56019
56178
|
const [wasCancelled, setWasCancelled] = useState78(false);
|
|
56020
56179
|
const [url, setUrl] = useState78(null);
|
|
56021
56180
|
const abortControllerRef = useRef89(null);
|
|
56022
|
-
const handleProgress =
|
|
56181
|
+
const handleProgress = useCallback68((event2) => {
|
|
56023
56182
|
setProgress(event2.progress);
|
|
56024
56183
|
setBytesUploaded(event2.loaded);
|
|
56025
56184
|
setBytesTotal(event2.total);
|
|
56026
56185
|
}, []);
|
|
56027
|
-
const cancel =
|
|
56186
|
+
const cancel = useCallback68(() => {
|
|
56028
56187
|
if (abortControllerRef.current) {
|
|
56029
56188
|
abortControllerRef.current.abort();
|
|
56030
56189
|
abortControllerRef.current = null;
|
|
@@ -56033,7 +56192,7 @@ function useFileUpload(options = {}) {
|
|
|
56033
56192
|
options.onCancel?.();
|
|
56034
56193
|
}
|
|
56035
56194
|
}, [options]);
|
|
56036
|
-
const upload =
|
|
56195
|
+
const upload = useCallback68(
|
|
56037
56196
|
async (file) => {
|
|
56038
56197
|
if (options.accept && options.accept.length > 0) {
|
|
56039
56198
|
const isAccepted = options.accept.some((type) => {
|
|
@@ -56093,7 +56252,7 @@ function useFileUpload(options = {}) {
|
|
|
56093
56252
|
},
|
|
56094
56253
|
[ctx, options, handleProgress]
|
|
56095
56254
|
);
|
|
56096
|
-
const reset =
|
|
56255
|
+
const reset = useCallback68(() => {
|
|
56097
56256
|
setIsUploading(false);
|
|
56098
56257
|
setProgress(0);
|
|
56099
56258
|
setBytesUploaded(0);
|
|
@@ -56118,13 +56277,13 @@ function useFileUpload(options = {}) {
|
|
|
56118
56277
|
}
|
|
56119
56278
|
|
|
56120
56279
|
// src/react/task-hooks.ts
|
|
56121
|
-
import { useQuery as
|
|
56122
|
-
import { useCallback as
|
|
56280
|
+
import { useQuery as useQuery7, useQueryClient as useQueryClient6 } from "@tanstack/react-query";
|
|
56281
|
+
import { useCallback as useCallback69, useEffect as useEffect64, useRef as useRef90, useState as useState79 } from "react";
|
|
56123
56282
|
function useTasks() {
|
|
56124
56283
|
const ctx = useTasksContext();
|
|
56125
56284
|
const [isLoading, setIsLoading] = useState79(false);
|
|
56126
56285
|
const [error2, setError] = useState79(null);
|
|
56127
|
-
const isAvailable =
|
|
56286
|
+
const isAvailable = useCallback69(async () => {
|
|
56128
56287
|
try {
|
|
56129
56288
|
const status = await ctx.checkStatus();
|
|
56130
56289
|
return status.available;
|
|
@@ -56132,7 +56291,7 @@ function useTasks() {
|
|
|
56132
56291
|
return false;
|
|
56133
56292
|
}
|
|
56134
56293
|
}, [ctx]);
|
|
56135
|
-
const schedule =
|
|
56294
|
+
const schedule = useCallback69(
|
|
56136
56295
|
async (options) => {
|
|
56137
56296
|
setIsLoading(true);
|
|
56138
56297
|
setError(null);
|
|
@@ -56148,7 +56307,7 @@ function useTasks() {
|
|
|
56148
56307
|
},
|
|
56149
56308
|
[ctx]
|
|
56150
56309
|
);
|
|
56151
|
-
const createCron =
|
|
56310
|
+
const createCron = useCallback69(
|
|
56152
56311
|
async (options) => {
|
|
56153
56312
|
setIsLoading(true);
|
|
56154
56313
|
setError(null);
|
|
@@ -56164,7 +56323,7 @@ function useTasks() {
|
|
|
56164
56323
|
},
|
|
56165
56324
|
[ctx]
|
|
56166
56325
|
);
|
|
56167
|
-
const pauseCron =
|
|
56326
|
+
const pauseCron = useCallback69(
|
|
56168
56327
|
async (scheduleId) => {
|
|
56169
56328
|
setIsLoading(true);
|
|
56170
56329
|
setError(null);
|
|
@@ -56180,7 +56339,7 @@ function useTasks() {
|
|
|
56180
56339
|
},
|
|
56181
56340
|
[ctx]
|
|
56182
56341
|
);
|
|
56183
|
-
const resumeCron =
|
|
56342
|
+
const resumeCron = useCallback69(
|
|
56184
56343
|
async (scheduleId) => {
|
|
56185
56344
|
setIsLoading(true);
|
|
56186
56345
|
setError(null);
|
|
@@ -56196,7 +56355,7 @@ function useTasks() {
|
|
|
56196
56355
|
},
|
|
56197
56356
|
[ctx]
|
|
56198
56357
|
);
|
|
56199
|
-
const deleteCron =
|
|
56358
|
+
const deleteCron = useCallback69(
|
|
56200
56359
|
async (scheduleId) => {
|
|
56201
56360
|
setIsLoading(true);
|
|
56202
56361
|
setError(null);
|
|
@@ -56212,7 +56371,7 @@ function useTasks() {
|
|
|
56212
56371
|
},
|
|
56213
56372
|
[ctx]
|
|
56214
56373
|
);
|
|
56215
|
-
const getJob =
|
|
56374
|
+
const getJob = useCallback69(
|
|
56216
56375
|
async (jobId) => {
|
|
56217
56376
|
try {
|
|
56218
56377
|
return await ctx.getJob(jobId);
|
|
@@ -56224,7 +56383,7 @@ function useTasks() {
|
|
|
56224
56383
|
},
|
|
56225
56384
|
[ctx]
|
|
56226
56385
|
);
|
|
56227
|
-
const listJobs =
|
|
56386
|
+
const listJobs = useCallback69(
|
|
56228
56387
|
async (options = {}) => {
|
|
56229
56388
|
try {
|
|
56230
56389
|
const result = await ctx.listJobs(options);
|
|
@@ -56237,7 +56396,7 @@ function useTasks() {
|
|
|
56237
56396
|
},
|
|
56238
56397
|
[ctx]
|
|
56239
56398
|
);
|
|
56240
|
-
const cancelJob =
|
|
56399
|
+
const cancelJob = useCallback69(
|
|
56241
56400
|
async (jobId) => {
|
|
56242
56401
|
setIsLoading(true);
|
|
56243
56402
|
setError(null);
|
|
@@ -56270,19 +56429,19 @@ function useTasks() {
|
|
|
56270
56429
|
|
|
56271
56430
|
// src/react/webhooks-hooks.ts
|
|
56272
56431
|
init_constants();
|
|
56273
|
-
import { useInfiniteQuery as useInfiniteQuery2, useQuery as
|
|
56274
|
-
import { useCallback as
|
|
56432
|
+
import { useInfiniteQuery as useInfiniteQuery2, useQuery as useQuery8, useQueryClient as useQueryClient7 } from "@tanstack/react-query";
|
|
56433
|
+
import { useCallback as useCallback70 } from "react";
|
|
56275
56434
|
function useWebhooks() {
|
|
56276
56435
|
const ctx = useWebhooksContext();
|
|
56277
|
-
const queryClient =
|
|
56278
|
-
const configQuery =
|
|
56436
|
+
const queryClient = useQueryClient7();
|
|
56437
|
+
const configQuery = useQuery8({
|
|
56279
56438
|
queryKey: ["sylphx", "webhooks", "config"],
|
|
56280
56439
|
queryFn: () => ctx.getConfig(),
|
|
56281
56440
|
staleTime: STALE_TIME_STABLE_MS
|
|
56282
56441
|
// 5 min - config rarely changes
|
|
56283
56442
|
});
|
|
56284
56443
|
const config2 = configQuery.data;
|
|
56285
|
-
const updateConfig =
|
|
56444
|
+
const updateConfig = useCallback70(
|
|
56286
56445
|
async (options) => {
|
|
56287
56446
|
const result = await ctx.updateConfig(options);
|
|
56288
56447
|
await queryClient.invalidateQueries({
|
|
@@ -56292,7 +56451,7 @@ function useWebhooks() {
|
|
|
56292
56451
|
},
|
|
56293
56452
|
[ctx, queryClient]
|
|
56294
56453
|
);
|
|
56295
|
-
const refresh =
|
|
56454
|
+
const refresh = useCallback70(async () => {
|
|
56296
56455
|
await queryClient.invalidateQueries({
|
|
56297
56456
|
queryKey: ["sylphx", "webhooks", "config"]
|
|
56298
56457
|
});
|
|
@@ -56309,7 +56468,7 @@ function useWebhooks() {
|
|
|
56309
56468
|
function useWebhookDeliveries(options = {}) {
|
|
56310
56469
|
const { status, event: event2, limit = 50, skip = false, refetchInterval } = options;
|
|
56311
56470
|
const ctx = useWebhooksContext();
|
|
56312
|
-
const queryClient =
|
|
56471
|
+
const queryClient = useQueryClient7();
|
|
56313
56472
|
const deliveriesQuery = useInfiniteQuery2({
|
|
56314
56473
|
queryKey: ["sylphx", "webhooks", "deliveries", { status, event: event2, limit }],
|
|
56315
56474
|
queryFn: async ({ pageParam = 0 }) => {
|
|
@@ -56330,7 +56489,7 @@ function useWebhookDeliveries(options = {}) {
|
|
|
56330
56489
|
});
|
|
56331
56490
|
const deliveries = deliveriesQuery.data?.pages.flatMap((page) => page.deliveries) ?? [];
|
|
56332
56491
|
const total = deliveriesQuery.data?.pages[0]?.total ?? 0;
|
|
56333
|
-
const replay =
|
|
56492
|
+
const replay = useCallback70(
|
|
56334
56493
|
async (deliveryId) => {
|
|
56335
56494
|
const result = await ctx.replayDelivery(deliveryId);
|
|
56336
56495
|
await queryClient.invalidateQueries({
|
|
@@ -56340,12 +56499,12 @@ function useWebhookDeliveries(options = {}) {
|
|
|
56340
56499
|
},
|
|
56341
56500
|
[ctx, queryClient]
|
|
56342
56501
|
);
|
|
56343
|
-
const refresh =
|
|
56502
|
+
const refresh = useCallback70(async () => {
|
|
56344
56503
|
await queryClient.invalidateQueries({
|
|
56345
56504
|
queryKey: ["sylphx", "webhooks", "deliveries"]
|
|
56346
56505
|
});
|
|
56347
56506
|
}, [queryClient]);
|
|
56348
|
-
const loadMore =
|
|
56507
|
+
const loadMore = useCallback70(async () => {
|
|
56349
56508
|
if (deliveriesQuery.hasNextPage && !deliveriesQuery.isFetchingNextPage) {
|
|
56350
56509
|
await deliveriesQuery.fetchNextPage();
|
|
56351
56510
|
}
|
|
@@ -56364,14 +56523,14 @@ function useWebhookDeliveries(options = {}) {
|
|
|
56364
56523
|
}
|
|
56365
56524
|
function useWebhookStats(period = "week") {
|
|
56366
56525
|
const ctx = useWebhooksContext();
|
|
56367
|
-
const queryClient =
|
|
56368
|
-
const statsQuery =
|
|
56526
|
+
const queryClient = useQueryClient7();
|
|
56527
|
+
const statsQuery = useQuery8({
|
|
56369
56528
|
queryKey: ["sylphx", "webhooks", "stats", period],
|
|
56370
56529
|
queryFn: () => ctx.getStats(period),
|
|
56371
56530
|
staleTime: STALE_TIME_MODERATE_MS
|
|
56372
56531
|
// 2 min - stats aggregate data
|
|
56373
56532
|
});
|
|
56374
|
-
const refresh =
|
|
56533
|
+
const refresh = useCallback70(async () => {
|
|
56375
56534
|
await queryClient.invalidateQueries({
|
|
56376
56535
|
queryKey: ["sylphx", "webhooks", "stats", period]
|
|
56377
56536
|
});
|
|
@@ -56386,7 +56545,7 @@ function useWebhookStats(period = "week") {
|
|
|
56386
56545
|
|
|
56387
56546
|
// src/react/ui/account-section.tsx
|
|
56388
56547
|
init_constants();
|
|
56389
|
-
import { useCallback as
|
|
56548
|
+
import { useCallback as useCallback71, useEffect as useEffect65, useState as useState80 } from "react";
|
|
56390
56549
|
import { Fragment as Fragment35, jsx as jsx65, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
56391
56550
|
function AccountSection(props) {
|
|
56392
56551
|
return /* @__PURE__ */ jsx65(RequireSdk, { services: ["auth"], componentType: "account", theme: props.theme, children: /* @__PURE__ */ jsx65(AccountSectionInner, { ...props }) });
|
|
@@ -56475,7 +56634,7 @@ function AccountSectionInner({
|
|
|
56475
56634
|
setIsExporting(false);
|
|
56476
56635
|
}
|
|
56477
56636
|
};
|
|
56478
|
-
const checkSecurityStatus =
|
|
56637
|
+
const checkSecurityStatus = useCallback71(async () => {
|
|
56479
56638
|
setIsChecking2FA(true);
|
|
56480
56639
|
try {
|
|
56481
56640
|
const status = await securityContext.getTwoFactorStatus();
|
|
@@ -61123,7 +61282,7 @@ function CheckCircleIcon({ color: color2 }) {
|
|
|
61123
61282
|
|
|
61124
61283
|
// src/react/ui/feature-gate.tsx
|
|
61125
61284
|
init_constants();
|
|
61126
|
-
import { useContext as
|
|
61285
|
+
import { useContext as useContext79, useState as useState89 } from "react";
|
|
61127
61286
|
import { Fragment as Fragment42, jsx as jsx74, jsxs as jsxs51 } from "react/jsx-runtime";
|
|
61128
61287
|
function FeatureGate({
|
|
61129
61288
|
flag,
|
|
@@ -61192,7 +61351,7 @@ function FlagDevTools({
|
|
|
61192
61351
|
className
|
|
61193
61352
|
}) {
|
|
61194
61353
|
const [isCollapsed, setIsCollapsed] = useState89(defaultCollapsed);
|
|
61195
|
-
const context =
|
|
61354
|
+
const context = useContext79(FeatureFlagContext);
|
|
61196
61355
|
const styles2 = baseStyles(theme);
|
|
61197
61356
|
if (!context) {
|
|
61198
61357
|
return null;
|
|
@@ -61422,7 +61581,7 @@ function CloseIcon4() {
|
|
|
61422
61581
|
|
|
61423
61582
|
// src/react/ui/file-upload.tsx
|
|
61424
61583
|
init_constants();
|
|
61425
|
-
import { useCallback as
|
|
61584
|
+
import { useCallback as useCallback72, useEffect as useEffect74, useRef as useRef92, useState as useState90 } from "react";
|
|
61426
61585
|
import { Fragment as Fragment43, jsx as jsx75, jsxs as jsxs52 } from "react/jsx-runtime";
|
|
61427
61586
|
function FileUpload(props) {
|
|
61428
61587
|
return /* @__PURE__ */ jsx75(RequireSdk, { services: ["storage"], componentType: "storage", theme: props.theme, children: /* @__PURE__ */ jsx75(FileUploadInner, { ...props }) });
|
|
@@ -61451,7 +61610,7 @@ function FileUploadInner({
|
|
|
61451
61610
|
useEffect74(() => {
|
|
61452
61611
|
injectGlobalStyles();
|
|
61453
61612
|
}, []);
|
|
61454
|
-
const handleFiles =
|
|
61613
|
+
const handleFiles = useCallback72(
|
|
61455
61614
|
async (files) => {
|
|
61456
61615
|
if (!files || files.length === 0) return;
|
|
61457
61616
|
const fileArray = Array.from(files);
|
|
@@ -61470,7 +61629,7 @@ function FileUploadInner({
|
|
|
61470
61629
|
},
|
|
61471
61630
|
[upload, onUpload]
|
|
61472
61631
|
);
|
|
61473
|
-
const handleDrop =
|
|
61632
|
+
const handleDrop = useCallback72(
|
|
61474
61633
|
(e2) => {
|
|
61475
61634
|
e2.preventDefault();
|
|
61476
61635
|
e2.stopPropagation();
|
|
@@ -61480,7 +61639,7 @@ function FileUploadInner({
|
|
|
61480
61639
|
},
|
|
61481
61640
|
[handleFiles, disabled2]
|
|
61482
61641
|
);
|
|
61483
|
-
const handleDragOver =
|
|
61642
|
+
const handleDragOver = useCallback72(
|
|
61484
61643
|
(e2) => {
|
|
61485
61644
|
e2.preventDefault();
|
|
61486
61645
|
e2.stopPropagation();
|
|
@@ -61488,7 +61647,7 @@ function FileUploadInner({
|
|
|
61488
61647
|
},
|
|
61489
61648
|
[disabled2]
|
|
61490
61649
|
);
|
|
61491
|
-
const handleDragLeave =
|
|
61650
|
+
const handleDragLeave = useCallback72((e2) => {
|
|
61492
61651
|
e2.preventDefault();
|
|
61493
61652
|
e2.stopPropagation();
|
|
61494
61653
|
setIsDragging(false);
|
|
@@ -62024,17 +62183,17 @@ function CloseIcon5() {
|
|
|
62024
62183
|
|
|
62025
62184
|
// src/react/ui/job-scheduler.tsx
|
|
62026
62185
|
init_constants();
|
|
62027
|
-
import { useMutation as useMutation2, useQuery as
|
|
62028
|
-
import { useCallback as
|
|
62186
|
+
import { useMutation as useMutation2, useQuery as useQuery10, useQueryClient as useQueryClient9 } from "@tanstack/react-query";
|
|
62187
|
+
import { useCallback as useCallback74, useEffect as useEffect76, useState as useState92 } from "react";
|
|
62029
62188
|
|
|
62030
62189
|
// src/react/job-hooks.ts
|
|
62031
|
-
import { useQuery as
|
|
62032
|
-
import { useCallback as
|
|
62190
|
+
import { useQuery as useQuery9, useQueryClient as useQueryClient8 } from "@tanstack/react-query";
|
|
62191
|
+
import { useCallback as useCallback73, useEffect as useEffect75, useRef as useRef93, useState as useState91 } from "react";
|
|
62033
62192
|
function useJobs() {
|
|
62034
62193
|
const ctx = useJobsContext();
|
|
62035
62194
|
const [isLoading, setIsLoading] = useState91(false);
|
|
62036
62195
|
const [error2, setError] = useState91(null);
|
|
62037
|
-
const isAvailable =
|
|
62196
|
+
const isAvailable = useCallback73(async () => {
|
|
62038
62197
|
try {
|
|
62039
62198
|
const status = await ctx.checkStatus();
|
|
62040
62199
|
return status.available;
|
|
@@ -62042,7 +62201,7 @@ function useJobs() {
|
|
|
62042
62201
|
return false;
|
|
62043
62202
|
}
|
|
62044
62203
|
}, [ctx]);
|
|
62045
|
-
const schedule =
|
|
62204
|
+
const schedule = useCallback73(
|
|
62046
62205
|
async (options) => {
|
|
62047
62206
|
setIsLoading(true);
|
|
62048
62207
|
setError(null);
|
|
@@ -62058,7 +62217,7 @@ function useJobs() {
|
|
|
62058
62217
|
},
|
|
62059
62218
|
[ctx]
|
|
62060
62219
|
);
|
|
62061
|
-
const createCron =
|
|
62220
|
+
const createCron = useCallback73(
|
|
62062
62221
|
async (options) => {
|
|
62063
62222
|
setIsLoading(true);
|
|
62064
62223
|
setError(null);
|
|
@@ -62074,7 +62233,7 @@ function useJobs() {
|
|
|
62074
62233
|
},
|
|
62075
62234
|
[ctx]
|
|
62076
62235
|
);
|
|
62077
|
-
const pauseCron =
|
|
62236
|
+
const pauseCron = useCallback73(
|
|
62078
62237
|
async (scheduleId) => {
|
|
62079
62238
|
setIsLoading(true);
|
|
62080
62239
|
setError(null);
|
|
@@ -62090,7 +62249,7 @@ function useJobs() {
|
|
|
62090
62249
|
},
|
|
62091
62250
|
[ctx]
|
|
62092
62251
|
);
|
|
62093
|
-
const resumeCron =
|
|
62252
|
+
const resumeCron = useCallback73(
|
|
62094
62253
|
async (scheduleId) => {
|
|
62095
62254
|
setIsLoading(true);
|
|
62096
62255
|
setError(null);
|
|
@@ -62106,7 +62265,7 @@ function useJobs() {
|
|
|
62106
62265
|
},
|
|
62107
62266
|
[ctx]
|
|
62108
62267
|
);
|
|
62109
|
-
const deleteCron =
|
|
62268
|
+
const deleteCron = useCallback73(
|
|
62110
62269
|
async (scheduleId) => {
|
|
62111
62270
|
setIsLoading(true);
|
|
62112
62271
|
setError(null);
|
|
@@ -62122,7 +62281,7 @@ function useJobs() {
|
|
|
62122
62281
|
},
|
|
62123
62282
|
[ctx]
|
|
62124
62283
|
);
|
|
62125
|
-
const getJob =
|
|
62284
|
+
const getJob = useCallback73(
|
|
62126
62285
|
async (jobId) => {
|
|
62127
62286
|
try {
|
|
62128
62287
|
return await ctx.getJob(jobId);
|
|
@@ -62134,7 +62293,7 @@ function useJobs() {
|
|
|
62134
62293
|
},
|
|
62135
62294
|
[ctx]
|
|
62136
62295
|
);
|
|
62137
|
-
const listJobs =
|
|
62296
|
+
const listJobs = useCallback73(
|
|
62138
62297
|
async (options = {}) => {
|
|
62139
62298
|
try {
|
|
62140
62299
|
const result = await ctx.listJobs(options);
|
|
@@ -62147,7 +62306,7 @@ function useJobs() {
|
|
|
62147
62306
|
},
|
|
62148
62307
|
[ctx]
|
|
62149
62308
|
);
|
|
62150
|
-
const cancelJob =
|
|
62309
|
+
const cancelJob = useCallback73(
|
|
62151
62310
|
async (jobId) => {
|
|
62152
62311
|
setIsLoading(true);
|
|
62153
62312
|
setError(null);
|
|
@@ -62537,13 +62696,13 @@ function JobList({
|
|
|
62537
62696
|
emptyMessage = "No jobs scheduled"
|
|
62538
62697
|
}) {
|
|
62539
62698
|
const ctx = useJobsContext();
|
|
62540
|
-
const queryClient =
|
|
62699
|
+
const queryClient = useQueryClient9();
|
|
62541
62700
|
const [filter2, setFilter] = useState92("all");
|
|
62542
62701
|
const styles2 = baseStyles(theme);
|
|
62543
62702
|
useEffect76(() => {
|
|
62544
62703
|
injectGlobalStyles();
|
|
62545
62704
|
}, []);
|
|
62546
|
-
const jobsQuery =
|
|
62705
|
+
const jobsQuery = useQuery10({
|
|
62547
62706
|
queryKey: ["sylphx", "jobs", "list", filter2],
|
|
62548
62707
|
queryFn: async () => {
|
|
62549
62708
|
const apiStatus = filter2 === "all" || filter2 === "cancelled" ? void 0 : filter2;
|
|
@@ -62565,7 +62724,7 @@ function JobList({
|
|
|
62565
62724
|
queryClient.invalidateQueries({ queryKey: ["sylphx", "jobs", "list"] });
|
|
62566
62725
|
}
|
|
62567
62726
|
});
|
|
62568
|
-
const handleCancel =
|
|
62727
|
+
const handleCancel = useCallback74(
|
|
62569
62728
|
async (jobId) => {
|
|
62570
62729
|
if (onCancel) {
|
|
62571
62730
|
onCancel(jobId);
|
|
@@ -65812,8 +65971,8 @@ function EmailIcon({ size: size4 = 24 }) {
|
|
|
65812
65971
|
|
|
65813
65972
|
// src/react/ui/security-settings.tsx
|
|
65814
65973
|
init_constants();
|
|
65815
|
-
import { useMutation as useMutation3, useQuery as
|
|
65816
|
-
import { useCallback as
|
|
65974
|
+
import { useMutation as useMutation3, useQuery as useQuery11, useQueryClient as useQueryClient10 } from "@tanstack/react-query";
|
|
65975
|
+
import { useCallback as useCallback75, useEffect as useEffect83, useState as useState99 } from "react";
|
|
65817
65976
|
import { Fragment as Fragment47, jsx as jsx83, jsxs as jsxs60 } from "react/jsx-runtime";
|
|
65818
65977
|
function SecuritySettings({
|
|
65819
65978
|
theme = defaultTheme,
|
|
@@ -65827,7 +65986,7 @@ function SecuritySettings({
|
|
|
65827
65986
|
}) {
|
|
65828
65987
|
const userContext = useUserContext();
|
|
65829
65988
|
const securityContext = useSecurityContext();
|
|
65830
|
-
const queryClient =
|
|
65989
|
+
const queryClient = useQueryClient10();
|
|
65831
65990
|
const styles2 = baseStyles(theme);
|
|
65832
65991
|
const [error2, setError] = useState99(null);
|
|
65833
65992
|
const [success, setSuccess] = useState99(null);
|
|
@@ -65842,7 +66001,7 @@ function SecuritySettings({
|
|
|
65842
66001
|
useEffect83(() => {
|
|
65843
66002
|
injectGlobalStyles();
|
|
65844
66003
|
}, []);
|
|
65845
|
-
const twoFactorQuery =
|
|
66004
|
+
const twoFactorQuery = useQuery11({
|
|
65846
66005
|
queryKey: ["sylphx", "security", "2fa-status"],
|
|
65847
66006
|
queryFn: async () => {
|
|
65848
66007
|
const data = await securityContext.getTwoFactorStatus();
|
|
@@ -65855,7 +66014,7 @@ function SecuritySettings({
|
|
|
65855
66014
|
staleTime: STALE_TIME_STABLE_MS
|
|
65856
66015
|
// 5 min
|
|
65857
66016
|
});
|
|
65858
|
-
const sessionsQuery =
|
|
66017
|
+
const sessionsQuery = useQuery11({
|
|
65859
66018
|
queryKey: ["sylphx", "security", "sessions"],
|
|
65860
66019
|
queryFn: async () => {
|
|
65861
66020
|
const data = await userContext.getSessions();
|
|
@@ -65874,7 +66033,7 @@ function SecuritySettings({
|
|
|
65874
66033
|
staleTime: STALE_TIME_FREQUENT_MS
|
|
65875
66034
|
// 1 min - sessions can change
|
|
65876
66035
|
});
|
|
65877
|
-
const loginHistoryQuery =
|
|
66036
|
+
const loginHistoryQuery = useQuery11({
|
|
65878
66037
|
queryKey: ["sylphx", "security", "login-history"],
|
|
65879
66038
|
queryFn: async () => {
|
|
65880
66039
|
const data = await userContext.getLoginHistory({ limit: 10 });
|
|
@@ -66007,10 +66166,10 @@ function SecuritySettings({
|
|
|
66007
66166
|
onError?.(message);
|
|
66008
66167
|
}
|
|
66009
66168
|
});
|
|
66010
|
-
const handleStart2FASetup =
|
|
66169
|
+
const handleStart2FASetup = useCallback75(() => {
|
|
66011
66170
|
setup2FAMutation.mutate();
|
|
66012
66171
|
}, [setup2FAMutation]);
|
|
66013
|
-
const handleEnable2FA =
|
|
66172
|
+
const handleEnable2FA = useCallback75(
|
|
66014
66173
|
(e2) => {
|
|
66015
66174
|
e2.preventDefault();
|
|
66016
66175
|
if (!verifyCode || verifyCode.length !== 6) {
|
|
@@ -66021,12 +66180,12 @@ function SecuritySettings({
|
|
|
66021
66180
|
},
|
|
66022
66181
|
[verifyCode, enable2FAMutation]
|
|
66023
66182
|
);
|
|
66024
|
-
const handleDisable2FA =
|
|
66183
|
+
const handleDisable2FA = useCallback75(() => {
|
|
66025
66184
|
const code = prompt("Enter your 2FA code to disable two-factor authentication:");
|
|
66026
66185
|
if (!code) return;
|
|
66027
66186
|
disable2FAMutation.mutate(code);
|
|
66028
66187
|
}, [disable2FAMutation]);
|
|
66029
|
-
const handlePasswordChange =
|
|
66188
|
+
const handlePasswordChange = useCallback75(
|
|
66030
66189
|
(e2) => {
|
|
66031
66190
|
e2.preventDefault();
|
|
66032
66191
|
if (newPassword !== confirmPassword) {
|
|
@@ -66044,13 +66203,13 @@ function SecuritySettings({
|
|
|
66044
66203
|
},
|
|
66045
66204
|
[newPassword, confirmPassword, currentPassword, changePasswordMutation]
|
|
66046
66205
|
);
|
|
66047
|
-
const handleRevokeSession =
|
|
66206
|
+
const handleRevokeSession = useCallback75(
|
|
66048
66207
|
(sessionId) => {
|
|
66049
66208
|
revokeSessionMutation.mutate(sessionId);
|
|
66050
66209
|
},
|
|
66051
66210
|
[revokeSessionMutation]
|
|
66052
66211
|
);
|
|
66053
|
-
const handleRevokeAllSessions =
|
|
66212
|
+
const handleRevokeAllSessions = useCallback75(() => {
|
|
66054
66213
|
if (!confirm("Are you sure you want to sign out all other devices?")) {
|
|
66055
66214
|
return;
|
|
66056
66215
|
}
|
|
@@ -66583,7 +66742,7 @@ function DeviceIcon({ device, theme }) {
|
|
|
66583
66742
|
|
|
66584
66743
|
// src/react/ui/subscriber-preferences.tsx
|
|
66585
66744
|
init_constants();
|
|
66586
|
-
import { useQuery as
|
|
66745
|
+
import { useQuery as useQuery12, useQueryClient as useQueryClient11 } from "@tanstack/react-query";
|
|
66587
66746
|
import { useEffect as useEffect84, useState as useState100 } from "react";
|
|
66588
66747
|
import { Fragment as Fragment48, jsx as jsx84, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
66589
66748
|
function SubscriberPreferences({
|
|
@@ -66601,7 +66760,7 @@ function SubscriberPreferences({
|
|
|
66601
66760
|
unsubscribeButtonText = "Unsubscribe from All"
|
|
66602
66761
|
}) {
|
|
66603
66762
|
const { getPreferences, updatePreferences } = useNewsletter();
|
|
66604
|
-
const queryClient =
|
|
66763
|
+
const queryClient = useQueryClient11();
|
|
66605
66764
|
const styles2 = baseStyles(theme);
|
|
66606
66765
|
const [selectedPreferences, setSelectedPreferences] = useState100([]);
|
|
66607
66766
|
const [saving, setSaving] = useState100(false);
|
|
@@ -66611,7 +66770,7 @@ function SubscriberPreferences({
|
|
|
66611
66770
|
useEffect84(() => {
|
|
66612
66771
|
injectGlobalStyles();
|
|
66613
66772
|
}, []);
|
|
66614
|
-
const prefsQuery =
|
|
66773
|
+
const prefsQuery = useQuery12({
|
|
66615
66774
|
queryKey: ["sylphx", "newsletter", "preferences", email],
|
|
66616
66775
|
queryFn: async () => {
|
|
66617
66776
|
const prefs = await getPreferences(email);
|
|
@@ -67198,7 +67357,7 @@ function UnsubscribeConfirm({
|
|
|
67198
67357
|
|
|
67199
67358
|
// src/react/ui/user-profile.tsx
|
|
67200
67359
|
init_constants();
|
|
67201
|
-
import { useCallback as
|
|
67360
|
+
import { useCallback as useCallback76, useEffect as useEffect86, useRef as useRef95, useState as useState102 } from "react";
|
|
67202
67361
|
import { Fragment as Fragment50, jsx as jsx86, jsxs as jsxs63 } from "react/jsx-runtime";
|
|
67203
67362
|
function UserProfile(props) {
|
|
67204
67363
|
return /* @__PURE__ */ jsx86(RequireSdk, { services: ["auth", "storage"], componentType: "user", theme: props.theme, children: /* @__PURE__ */ jsx86(UserProfileInner, { ...props }) });
|
|
@@ -67244,7 +67403,7 @@ function UserProfileInner({
|
|
|
67244
67403
|
return () => clearTimeout(timer);
|
|
67245
67404
|
}
|
|
67246
67405
|
}, [success, error2]);
|
|
67247
|
-
const handleProfileUpdate =
|
|
67406
|
+
const handleProfileUpdate = useCallback76(
|
|
67248
67407
|
async (e2) => {
|
|
67249
67408
|
e2.preventDefault();
|
|
67250
67409
|
setIsLoading(true);
|
|
@@ -67268,7 +67427,7 @@ function UserProfileInner({
|
|
|
67268
67427
|
},
|
|
67269
67428
|
[form, userContext, refreshUser, onSuccess, onError]
|
|
67270
67429
|
);
|
|
67271
|
-
const handleAvatarUpload =
|
|
67430
|
+
const handleAvatarUpload = useCallback76(
|
|
67272
67431
|
async (file) => {
|
|
67273
67432
|
setError(null);
|
|
67274
67433
|
try {
|
|
@@ -73866,7 +74025,7 @@ function isWebVitalsInitialized() {
|
|
|
73866
74025
|
|
|
73867
74026
|
// src/react/hooks/use-session-replay.tsx
|
|
73868
74027
|
init_constants();
|
|
73869
|
-
import { useCallback as
|
|
74028
|
+
import { useCallback as useCallback77, useEffect as useEffect88, useRef as useRef96, useState as useState104 } from "react";
|
|
73870
74029
|
import { jsx as jsx88 } from "react/jsx-runtime";
|
|
73871
74030
|
function useSessionReplay(options = {}) {
|
|
73872
74031
|
const {
|
|
@@ -73939,7 +74098,7 @@ function useSessionReplay(options = {}) {
|
|
|
73939
74098
|
});
|
|
73940
74099
|
}
|
|
73941
74100
|
}, [userId]);
|
|
73942
|
-
const start =
|
|
74101
|
+
const start = useCallback77(() => {
|
|
73943
74102
|
if (!recorderRef.current) {
|
|
73944
74103
|
throw new Error("Recorder not initialized");
|
|
73945
74104
|
}
|
|
@@ -73947,29 +74106,29 @@ function useSessionReplay(options = {}) {
|
|
|
73947
74106
|
setSessionId(id3);
|
|
73948
74107
|
return id3;
|
|
73949
74108
|
}, []);
|
|
73950
|
-
const pause =
|
|
74109
|
+
const pause = useCallback77(() => {
|
|
73951
74110
|
recorderRef.current?.pause();
|
|
73952
74111
|
}, []);
|
|
73953
|
-
const resume =
|
|
74112
|
+
const resume = useCallback77(() => {
|
|
73954
74113
|
recorderRef.current?.resume();
|
|
73955
74114
|
}, []);
|
|
73956
|
-
const stop =
|
|
74115
|
+
const stop = useCallback77(async () => {
|
|
73957
74116
|
await recorderRef.current?.stop();
|
|
73958
74117
|
setSessionId(null);
|
|
73959
74118
|
}, []);
|
|
73960
|
-
const markError =
|
|
74119
|
+
const markError = useCallback77(
|
|
73961
74120
|
(errorId, error2, metadata) => {
|
|
73962
74121
|
recorderRef.current?.markError(errorId, error2, metadata);
|
|
73963
74122
|
},
|
|
73964
74123
|
[]
|
|
73965
74124
|
);
|
|
73966
|
-
const markNavigation =
|
|
74125
|
+
const markNavigation = useCallback77((from, to) => {
|
|
73967
74126
|
recorderRef.current?.markNavigation(from, to);
|
|
73968
74127
|
}, []);
|
|
73969
|
-
const markConversion =
|
|
74128
|
+
const markConversion = useCallback77((name, value) => {
|
|
73970
74129
|
recorderRef.current?.markConversion(name, value);
|
|
73971
74130
|
}, []);
|
|
73972
|
-
const addMarker =
|
|
74131
|
+
const addMarker = useCallback77((type, payload) => {
|
|
73973
74132
|
recorderRef.current?.addMarker(type, payload);
|
|
73974
74133
|
}, []);
|
|
73975
74134
|
return {
|
|
@@ -74024,7 +74183,7 @@ function useSessionReplayErrorMarker() {
|
|
|
74024
74183
|
recorderRef.current = window.__sylphxRecorder;
|
|
74025
74184
|
}
|
|
74026
74185
|
}, []);
|
|
74027
|
-
const markError =
|
|
74186
|
+
const markError = useCallback77((error2, errorInfo) => {
|
|
74028
74187
|
const errorId = `err_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
74029
74188
|
recorderRef.current?.markError(errorId, error2, {
|
|
74030
74189
|
componentStack: errorInfo?.componentStack?.slice(0, STACK_TRACE_MAX_LENGTH)
|
|
@@ -74043,7 +74202,7 @@ function withSessionReplay(Component4, options) {
|
|
|
74043
74202
|
}
|
|
74044
74203
|
|
|
74045
74204
|
// src/react/hooks/use-web-vitals.ts
|
|
74046
|
-
import { useCallback as
|
|
74205
|
+
import { useCallback as useCallback78, useEffect as useEffect89, useRef as useRef97, useState as useState105 } from "react";
|
|
74047
74206
|
function useWebVitals(options = {}) {
|
|
74048
74207
|
const { autoInit = true, onReport, ...config2 } = options;
|
|
74049
74208
|
const [report, setReport] = useState105(null);
|
|
@@ -74063,10 +74222,10 @@ function useWebVitals(options = {}) {
|
|
|
74063
74222
|
return () => {
|
|
74064
74223
|
};
|
|
74065
74224
|
}, [autoInit, onReport]);
|
|
74066
|
-
const refresh =
|
|
74225
|
+
const refresh = useCallback78(() => {
|
|
74067
74226
|
setReport(getWebVitalsReport());
|
|
74068
74227
|
}, []);
|
|
74069
|
-
const reset =
|
|
74228
|
+
const reset = useCallback78(() => {
|
|
74070
74229
|
resetWebVitals();
|
|
74071
74230
|
setReport(null);
|
|
74072
74231
|
initRef.current = false;
|
|
@@ -74153,7 +74312,7 @@ function useWebVitalsAnalytics(options) {
|
|
|
74153
74312
|
|
|
74154
74313
|
// src/react/hooks/use-error-tracking.ts
|
|
74155
74314
|
init_constants();
|
|
74156
|
-
import { useCallback as
|
|
74315
|
+
import { useCallback as useCallback79, useEffect as useEffect90, useRef as useRef98 } from "react";
|
|
74157
74316
|
function useEnhancedErrorTracking(options = {}) {
|
|
74158
74317
|
const {
|
|
74159
74318
|
attachReplay = true,
|
|
@@ -74208,7 +74367,7 @@ function useEnhancedErrorTracking(options = {}) {
|
|
|
74208
74367
|
const interval = setInterval(checkReplaySession, SESSION_REPLAY_STATUS_CHECK_MS);
|
|
74209
74368
|
return () => clearInterval(interval);
|
|
74210
74369
|
}, [attachReplay]);
|
|
74211
|
-
const captureException =
|
|
74370
|
+
const captureException = useCallback79(
|
|
74212
74371
|
async (error2, opts = {}) => {
|
|
74213
74372
|
if (!trackerRef.current) {
|
|
74214
74373
|
return { eventId: "" };
|
|
@@ -74236,7 +74395,7 @@ function useEnhancedErrorTracking(options = {}) {
|
|
|
74236
74395
|
},
|
|
74237
74396
|
[attachReplay, onCapture]
|
|
74238
74397
|
);
|
|
74239
|
-
const captureMessage =
|
|
74398
|
+
const captureMessage = useCallback79(
|
|
74240
74399
|
async (message, opts = {}) => {
|
|
74241
74400
|
if (!trackerRef.current) {
|
|
74242
74401
|
return { eventId: "" };
|
|
@@ -74247,20 +74406,20 @@ function useEnhancedErrorTracking(options = {}) {
|
|
|
74247
74406
|
},
|
|
74248
74407
|
[onCapture]
|
|
74249
74408
|
);
|
|
74250
|
-
const addBreadcrumb2 =
|
|
74409
|
+
const addBreadcrumb2 = useCallback79((breadcrumb) => {
|
|
74251
74410
|
trackerRef.current?.addBreadcrumb(breadcrumb);
|
|
74252
74411
|
}, []);
|
|
74253
|
-
const setUser =
|
|
74412
|
+
const setUser = useCallback79((user) => {
|
|
74254
74413
|
trackerRef.current?.setUser(user);
|
|
74255
74414
|
}, []);
|
|
74256
|
-
const clearUser =
|
|
74415
|
+
const clearUser = useCallback79(() => {
|
|
74257
74416
|
trackerRef.current?.clearUser();
|
|
74258
74417
|
}, []);
|
|
74259
|
-
const linkReplaySession =
|
|
74418
|
+
const linkReplaySession = useCallback79((sessionId) => {
|
|
74260
74419
|
replaySessionIdRef.current = sessionId;
|
|
74261
74420
|
trackerRef.current?.setSessionReplayId(sessionId);
|
|
74262
74421
|
}, []);
|
|
74263
|
-
const getReplaySessionId =
|
|
74422
|
+
const getReplaySessionId = useCallback79(() => {
|
|
74264
74423
|
return replaySessionIdRef.current;
|
|
74265
74424
|
}, []);
|
|
74266
74425
|
return {
|
|
@@ -75464,10 +75623,10 @@ var DEFAULT_FLAGS_CONFIG = {
|
|
|
75464
75623
|
};
|
|
75465
75624
|
|
|
75466
75625
|
// src/react/hooks/use-flag.ts
|
|
75467
|
-
import { useCallback as
|
|
75626
|
+
import { useCallback as useCallback81, useContext as useContext81, useEffect as useEffect92, useMemo as useMemo130, useRef as useRef100, useState as useState107 } from "react";
|
|
75468
75627
|
|
|
75469
75628
|
// src/react/hooks/use-flags.tsx
|
|
75470
|
-
import { createContext as createContext67, useCallback as
|
|
75629
|
+
import { createContext as createContext67, useCallback as useCallback80, useContext as useContext80, useEffect as useEffect91, useMemo as useMemo129, useRef as useRef99, useState as useState106 } from "react";
|
|
75471
75630
|
import { jsx as jsx89 } from "react/jsx-runtime";
|
|
75472
75631
|
var FeatureFlagsContext = createContext67(null);
|
|
75473
75632
|
function FeatureFlagsProvider({
|
|
@@ -75486,7 +75645,7 @@ function FeatureFlagsProvider({
|
|
|
75486
75645
|
const evaluatorRef = useRef99(null);
|
|
75487
75646
|
const streamRef = useRef99(null);
|
|
75488
75647
|
const experimentsRef = useRef99(null);
|
|
75489
|
-
const handleStreamEvent =
|
|
75648
|
+
const handleStreamEvent = useCallback80(
|
|
75490
75649
|
(event2) => {
|
|
75491
75650
|
switch (event2.type) {
|
|
75492
75651
|
case "ready":
|
|
@@ -75558,7 +75717,7 @@ function FeatureFlagsProvider({
|
|
|
75558
75717
|
evaluatorRef.current.setContext(context);
|
|
75559
75718
|
}
|
|
75560
75719
|
}, [context]);
|
|
75561
|
-
const value =
|
|
75720
|
+
const value = useMemo129(
|
|
75562
75721
|
() => ({
|
|
75563
75722
|
evaluator: evaluatorRef.current,
|
|
75564
75723
|
stream: streamRef.current,
|
|
@@ -75577,53 +75736,53 @@ function FeatureFlagsProvider({
|
|
|
75577
75736
|
return /* @__PURE__ */ jsx89(FeatureFlagsContext.Provider, { value, children });
|
|
75578
75737
|
}
|
|
75579
75738
|
function useFeatureFlags2() {
|
|
75580
|
-
const ctx =
|
|
75739
|
+
const ctx = useContext80(FeatureFlagsContext);
|
|
75581
75740
|
if (!ctx) {
|
|
75582
75741
|
throw new Error("useFeatureFlags must be used within a FeatureFlagsProvider");
|
|
75583
75742
|
}
|
|
75584
75743
|
const { evaluator, isReady, isLoading, error: error2, flags, updateVersion } = ctx;
|
|
75585
|
-
const isEnabled =
|
|
75744
|
+
const isEnabled = useCallback80(
|
|
75586
75745
|
(flagKey, defaultValue = false) => {
|
|
75587
75746
|
void updateVersion;
|
|
75588
75747
|
return evaluator.isEnabled(flagKey, defaultValue);
|
|
75589
75748
|
},
|
|
75590
75749
|
[evaluator, updateVersion]
|
|
75591
75750
|
);
|
|
75592
|
-
const getString =
|
|
75751
|
+
const getString = useCallback80(
|
|
75593
75752
|
(flagKey, defaultValue = "") => {
|
|
75594
75753
|
void updateVersion;
|
|
75595
75754
|
return evaluator.getString(flagKey, defaultValue);
|
|
75596
75755
|
},
|
|
75597
75756
|
[evaluator, updateVersion]
|
|
75598
75757
|
);
|
|
75599
|
-
const getNumber =
|
|
75758
|
+
const getNumber = useCallback80(
|
|
75600
75759
|
(flagKey, defaultValue = 0) => {
|
|
75601
75760
|
void updateVersion;
|
|
75602
75761
|
return evaluator.getNumber(flagKey, defaultValue);
|
|
75603
75762
|
},
|
|
75604
75763
|
[evaluator, updateVersion]
|
|
75605
75764
|
);
|
|
75606
|
-
const getJSON =
|
|
75765
|
+
const getJSON = useCallback80(
|
|
75607
75766
|
(flagKey, defaultValue) => {
|
|
75608
75767
|
void updateVersion;
|
|
75609
75768
|
return evaluator.getJSON(flagKey, defaultValue);
|
|
75610
75769
|
},
|
|
75611
75770
|
[evaluator, updateVersion]
|
|
75612
75771
|
);
|
|
75613
|
-
const evaluate2 =
|
|
75772
|
+
const evaluate2 = useCallback80(
|
|
75614
75773
|
(flagKey, defaultValue, contextOverride) => {
|
|
75615
75774
|
void updateVersion;
|
|
75616
75775
|
return evaluator.evaluate(flagKey, defaultValue, contextOverride);
|
|
75617
75776
|
},
|
|
75618
75777
|
[evaluator, updateVersion]
|
|
75619
75778
|
);
|
|
75620
|
-
const setContext =
|
|
75779
|
+
const setContext = useCallback80(
|
|
75621
75780
|
(context) => {
|
|
75622
75781
|
evaluator.setContext(context);
|
|
75623
75782
|
},
|
|
75624
75783
|
[evaluator]
|
|
75625
75784
|
);
|
|
75626
|
-
const updateContext =
|
|
75785
|
+
const updateContext = useCallback80(
|
|
75627
75786
|
(partial) => {
|
|
75628
75787
|
evaluator.updateContext(partial);
|
|
75629
75788
|
},
|
|
@@ -75645,7 +75804,7 @@ function useFeatureFlags2() {
|
|
|
75645
75804
|
}
|
|
75646
75805
|
function useFlag(flagKey, defaultValue = false) {
|
|
75647
75806
|
const { isEnabled, updateVersion } = useFeatureFlagsContext();
|
|
75648
|
-
return
|
|
75807
|
+
return useMemo129(
|
|
75649
75808
|
() => isEnabled(flagKey, defaultValue),
|
|
75650
75809
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
75651
75810
|
[flagKey, defaultValue, isEnabled]
|
|
@@ -75653,7 +75812,7 @@ function useFlag(flagKey, defaultValue = false) {
|
|
|
75653
75812
|
}
|
|
75654
75813
|
function useFlagString(flagKey, defaultValue = "") {
|
|
75655
75814
|
const { getString, updateVersion } = useFeatureFlagsContext();
|
|
75656
|
-
return
|
|
75815
|
+
return useMemo129(
|
|
75657
75816
|
() => getString(flagKey, defaultValue),
|
|
75658
75817
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
75659
75818
|
[flagKey, defaultValue, getString]
|
|
@@ -75661,7 +75820,7 @@ function useFlagString(flagKey, defaultValue = "") {
|
|
|
75661
75820
|
}
|
|
75662
75821
|
function useFlagNumber(flagKey, defaultValue = 0) {
|
|
75663
75822
|
const { getNumber, updateVersion } = useFeatureFlagsContext();
|
|
75664
|
-
return
|
|
75823
|
+
return useMemo129(
|
|
75665
75824
|
() => getNumber(flagKey, defaultValue),
|
|
75666
75825
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
75667
75826
|
[flagKey, defaultValue, getNumber]
|
|
@@ -75669,7 +75828,7 @@ function useFlagNumber(flagKey, defaultValue = 0) {
|
|
|
75669
75828
|
}
|
|
75670
75829
|
function useFlagJSON(flagKey, defaultValue) {
|
|
75671
75830
|
const { getJSON, updateVersion } = useFeatureFlagsContext();
|
|
75672
|
-
return
|
|
75831
|
+
return useMemo129(
|
|
75673
75832
|
() => getJSON(flagKey, defaultValue),
|
|
75674
75833
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
75675
75834
|
[flagKey, defaultValue, getJSON]
|
|
@@ -75677,19 +75836,19 @@ function useFlagJSON(flagKey, defaultValue) {
|
|
|
75677
75836
|
}
|
|
75678
75837
|
function useFlagEvaluation(flagKey, defaultValue, contextOverride) {
|
|
75679
75838
|
const { evaluate: evaluate2, updateVersion } = useFeatureFlagsContext();
|
|
75680
|
-
return
|
|
75839
|
+
return useMemo129(
|
|
75681
75840
|
() => evaluate2(flagKey, defaultValue, contextOverride),
|
|
75682
75841
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
75683
75842
|
[flagKey, defaultValue, contextOverride, evaluate2]
|
|
75684
75843
|
);
|
|
75685
75844
|
}
|
|
75686
75845
|
function useExperiment(experimentKey) {
|
|
75687
|
-
const ctx =
|
|
75846
|
+
const ctx = useContext80(FeatureFlagsContext);
|
|
75688
75847
|
if (!ctx) {
|
|
75689
75848
|
throw new Error("useExperiment must be used within a FeatureFlagsProvider");
|
|
75690
75849
|
}
|
|
75691
75850
|
const { experiments, updateVersion } = ctx;
|
|
75692
|
-
return
|
|
75851
|
+
return useMemo129(() => {
|
|
75693
75852
|
const result = experiments.getVariant(experimentKey);
|
|
75694
75853
|
return {
|
|
75695
75854
|
variant: result.variant,
|
|
@@ -75707,7 +75866,7 @@ function useIsInTreatment(experimentKey) {
|
|
|
75707
75866
|
return inExperiment && variant !== "control";
|
|
75708
75867
|
}
|
|
75709
75868
|
function useFeatureFlagsContext() {
|
|
75710
|
-
const ctx =
|
|
75869
|
+
const ctx = useContext80(FeatureFlagsContext);
|
|
75711
75870
|
if (!ctx) {
|
|
75712
75871
|
throw new Error("Feature flags hooks must be used within a FeatureFlagsProvider");
|
|
75713
75872
|
}
|
|
@@ -75722,7 +75881,7 @@ function useFeatureFlagsContext() {
|
|
|
75722
75881
|
};
|
|
75723
75882
|
}
|
|
75724
75883
|
function useFlagsReady() {
|
|
75725
|
-
const ctx =
|
|
75884
|
+
const ctx = useContext80(FeatureFlagsContext);
|
|
75726
75885
|
if (!ctx) {
|
|
75727
75886
|
return { isReady: false, isLoading: true, error: null };
|
|
75728
75887
|
}
|
|
@@ -75742,22 +75901,22 @@ function useFlagStatus(key, options) {
|
|
|
75742
75901
|
pollInterval = DEFAULT_POLL_INTERVAL_MS2,
|
|
75743
75902
|
context: contextOverride
|
|
75744
75903
|
} = options ?? {};
|
|
75745
|
-
const ctx =
|
|
75904
|
+
const ctx = useContext81(FeatureFlagsContext);
|
|
75746
75905
|
const [enabled, setEnabled] = useState107(false);
|
|
75747
75906
|
const [loading, setLoading] = useState107(!ctx?.isReady);
|
|
75748
75907
|
const [error2, setError] = useState107(null);
|
|
75749
75908
|
const mountedRef = useRef100(true);
|
|
75750
|
-
const evalContext =
|
|
75909
|
+
const evalContext = useMemo130(() => {
|
|
75751
75910
|
if (contextOverride) return contextOverride;
|
|
75752
75911
|
if (userId || attributes) return { userId, ...attributes };
|
|
75753
75912
|
return void 0;
|
|
75754
75913
|
}, [contextOverride, userId, attributes]);
|
|
75755
|
-
const evaluateLocally =
|
|
75914
|
+
const evaluateLocally = useCallback81(() => {
|
|
75756
75915
|
if (!ctx?.evaluator) return false;
|
|
75757
75916
|
const result = ctx.evaluator.evaluate(key, false, evalContext);
|
|
75758
75917
|
return result.value;
|
|
75759
75918
|
}, [ctx, key, evalContext]);
|
|
75760
|
-
const refetch =
|
|
75919
|
+
const refetch = useCallback81(async () => {
|
|
75761
75920
|
if (!mountedRef.current) return;
|
|
75762
75921
|
setError(null);
|
|
75763
75922
|
try {
|
|
@@ -77934,7 +78093,7 @@ function resetAnalyticsTracker() {
|
|
|
77934
78093
|
|
|
77935
78094
|
// src/react/hooks/use-analytics.tsx
|
|
77936
78095
|
init_constants();
|
|
77937
|
-
import React227, { createContext as createContext68, useCallback as
|
|
78096
|
+
import React227, { createContext as createContext68, useCallback as useCallback82, useContext as useContext82, useEffect as useEffect93, useMemo as useMemo131, useRef as useRef101 } from "react";
|
|
77938
78097
|
import { Fragment as Fragment51, jsx as jsx90 } from "react/jsx-runtime";
|
|
77939
78098
|
var AnalyticsContext = createContext68(null);
|
|
77940
78099
|
function AnalyticsProvider({
|
|
@@ -77959,7 +78118,7 @@ function AnalyticsProvider({
|
|
|
77959
78118
|
trackerRef.current.identify(user.id, user.properties);
|
|
77960
78119
|
}
|
|
77961
78120
|
}, [user]);
|
|
77962
|
-
const value =
|
|
78121
|
+
const value = useMemo131(() => {
|
|
77963
78122
|
if (!trackerRef.current || disabled2) return null;
|
|
77964
78123
|
return {
|
|
77965
78124
|
tracker: trackerRef.current,
|
|
@@ -77972,25 +78131,25 @@ function AnalyticsProvider({
|
|
|
77972
78131
|
return /* @__PURE__ */ jsx90(AnalyticsContext.Provider, { value, children });
|
|
77973
78132
|
}
|
|
77974
78133
|
function useAnalyticsHook() {
|
|
77975
|
-
const ctx =
|
|
77976
|
-
const noopTrack =
|
|
78134
|
+
const ctx = useContext82(AnalyticsContext);
|
|
78135
|
+
const noopTrack = useCallback82(() => {
|
|
77977
78136
|
}, []);
|
|
77978
|
-
const noopIdentify =
|
|
78137
|
+
const noopIdentify = useCallback82(() => {
|
|
77979
78138
|
}, []);
|
|
77980
|
-
const noopReset =
|
|
78139
|
+
const noopReset = useCallback82(() => {
|
|
77981
78140
|
}, []);
|
|
77982
|
-
const noopSetUserProperties =
|
|
78141
|
+
const noopSetUserProperties = useCallback82(() => {
|
|
77983
78142
|
}, []);
|
|
77984
|
-
const noopSetUserPropertiesOnce =
|
|
78143
|
+
const noopSetUserPropertiesOnce = useCallback82(() => {
|
|
77985
78144
|
}, []);
|
|
77986
|
-
const noopIncrementUserProperty =
|
|
78145
|
+
const noopIncrementUserProperty = useCallback82(() => {
|
|
77987
78146
|
}, []);
|
|
77988
|
-
const noopGroup =
|
|
78147
|
+
const noopGroup = useCallback82(() => {
|
|
77989
78148
|
}, []);
|
|
77990
|
-
const noopRegister =
|
|
78149
|
+
const noopRegister = useCallback82(() => {
|
|
77991
78150
|
}, []);
|
|
77992
|
-
const noopGetDistinctId =
|
|
77993
|
-
const noopFlush =
|
|
78151
|
+
const noopGetDistinctId = useCallback82(() => null, []);
|
|
78152
|
+
const noopFlush = useCallback82(async () => {
|
|
77994
78153
|
}, []);
|
|
77995
78154
|
if (!ctx) {
|
|
77996
78155
|
return {
|
|
@@ -78009,56 +78168,56 @@ function useAnalyticsHook() {
|
|
|
78009
78168
|
}
|
|
78010
78169
|
const { tracker, isReady } = ctx;
|
|
78011
78170
|
return {
|
|
78012
|
-
track:
|
|
78171
|
+
track: useCallback82(
|
|
78013
78172
|
(eventName, properties) => {
|
|
78014
78173
|
tracker.track(eventName, properties);
|
|
78015
78174
|
},
|
|
78016
78175
|
[tracker]
|
|
78017
78176
|
),
|
|
78018
|
-
identify:
|
|
78177
|
+
identify: useCallback82(
|
|
78019
78178
|
(userId, properties) => {
|
|
78020
78179
|
tracker.identify(userId, properties);
|
|
78021
78180
|
},
|
|
78022
78181
|
[tracker]
|
|
78023
78182
|
),
|
|
78024
|
-
reset:
|
|
78183
|
+
reset: useCallback82(() => {
|
|
78025
78184
|
tracker.reset();
|
|
78026
78185
|
}, [tracker]),
|
|
78027
|
-
setUserProperties:
|
|
78186
|
+
setUserProperties: useCallback82(
|
|
78028
78187
|
(properties) => {
|
|
78029
78188
|
tracker.setUserProperties(properties);
|
|
78030
78189
|
},
|
|
78031
78190
|
[tracker]
|
|
78032
78191
|
),
|
|
78033
|
-
setUserPropertiesOnce:
|
|
78192
|
+
setUserPropertiesOnce: useCallback82(
|
|
78034
78193
|
(properties) => {
|
|
78035
78194
|
tracker.setUserPropertiesOnce(properties);
|
|
78036
78195
|
},
|
|
78037
78196
|
[tracker]
|
|
78038
78197
|
),
|
|
78039
|
-
incrementUserProperty:
|
|
78198
|
+
incrementUserProperty: useCallback82(
|
|
78040
78199
|
(property, value) => {
|
|
78041
78200
|
tracker.incrementUserProperty(property, value);
|
|
78042
78201
|
},
|
|
78043
78202
|
[tracker]
|
|
78044
78203
|
),
|
|
78045
|
-
group:
|
|
78204
|
+
group: useCallback82(
|
|
78046
78205
|
(groupType, groupKey, properties) => {
|
|
78047
78206
|
tracker.group(groupType, groupKey, properties);
|
|
78048
78207
|
},
|
|
78049
78208
|
[tracker]
|
|
78050
78209
|
),
|
|
78051
|
-
register:
|
|
78210
|
+
register: useCallback82(
|
|
78052
78211
|
(properties) => {
|
|
78053
78212
|
tracker.register(properties);
|
|
78054
78213
|
},
|
|
78055
78214
|
[tracker]
|
|
78056
78215
|
),
|
|
78057
|
-
getDistinctId:
|
|
78216
|
+
getDistinctId: useCallback82(() => {
|
|
78058
78217
|
return tracker.getDistinctId();
|
|
78059
78218
|
}, [tracker]),
|
|
78060
78219
|
isReady,
|
|
78061
|
-
flush:
|
|
78220
|
+
flush: useCallback82(async () => {
|
|
78062
78221
|
await tracker.flush();
|
|
78063
78222
|
}, [tracker])
|
|
78064
78223
|
};
|
|
@@ -78097,7 +78256,7 @@ function useComponentTracking(componentName, properties) {
|
|
|
78097
78256
|
}
|
|
78098
78257
|
function useFeatureTracking(featureName) {
|
|
78099
78258
|
const { track } = useAnalyticsHook();
|
|
78100
|
-
const trackUsed =
|
|
78259
|
+
const trackUsed = useCallback82(
|
|
78101
78260
|
(properties) => {
|
|
78102
78261
|
track("feature_used", {
|
|
78103
78262
|
feature: featureName,
|
|
@@ -78106,7 +78265,7 @@ function useFeatureTracking(featureName) {
|
|
|
78106
78265
|
},
|
|
78107
78266
|
[track, featureName]
|
|
78108
78267
|
);
|
|
78109
|
-
const trackError =
|
|
78268
|
+
const trackError = useCallback82(
|
|
78110
78269
|
(error2, properties) => {
|
|
78111
78270
|
track("feature_error", {
|
|
78112
78271
|
feature: featureName,
|
|
@@ -78123,11 +78282,11 @@ function useFormTracking(formName) {
|
|
|
78123
78282
|
const { track } = useAnalyticsHook();
|
|
78124
78283
|
const startTime = useRef101(null);
|
|
78125
78284
|
const fieldsFilledRef = useRef101(/* @__PURE__ */ new Set());
|
|
78126
|
-
const trackStarted =
|
|
78285
|
+
const trackStarted = useCallback82(() => {
|
|
78127
78286
|
startTime.current = Date.now();
|
|
78128
78287
|
track("form_started", { form: formName });
|
|
78129
78288
|
}, [track, formName]);
|
|
78130
|
-
const trackCompleted =
|
|
78289
|
+
const trackCompleted = useCallback82(
|
|
78131
78290
|
(properties) => {
|
|
78132
78291
|
const duration2 = startTime.current ? Date.now() - startTime.current : void 0;
|
|
78133
78292
|
track("form_completed", {
|
|
@@ -78139,7 +78298,7 @@ function useFormTracking(formName) {
|
|
|
78139
78298
|
},
|
|
78140
78299
|
[track, formName]
|
|
78141
78300
|
);
|
|
78142
|
-
const trackAbandoned =
|
|
78301
|
+
const trackAbandoned = useCallback82(() => {
|
|
78143
78302
|
const duration2 = startTime.current ? Date.now() - startTime.current : void 0;
|
|
78144
78303
|
track("form_abandoned", {
|
|
78145
78304
|
form: formName,
|
|
@@ -78147,7 +78306,7 @@ function useFormTracking(formName) {
|
|
|
78147
78306
|
fields_filled: fieldsFilledRef.current.size
|
|
78148
78307
|
});
|
|
78149
78308
|
}, [track, formName]);
|
|
78150
|
-
const trackFieldFilled =
|
|
78309
|
+
const trackFieldFilled = useCallback82(
|
|
78151
78310
|
(fieldName) => {
|
|
78152
78311
|
if (!fieldsFilledRef.current.has(fieldName)) {
|
|
78153
78312
|
fieldsFilledRef.current.add(fieldName);
|
|
@@ -78159,7 +78318,7 @@ function useFormTracking(formName) {
|
|
|
78159
78318
|
},
|
|
78160
78319
|
[track, formName]
|
|
78161
78320
|
);
|
|
78162
|
-
const trackError =
|
|
78321
|
+
const trackError = useCallback82(
|
|
78163
78322
|
(fieldName, error2) => {
|
|
78164
78323
|
track("form_field_error", {
|
|
78165
78324
|
form: formName,
|
|
@@ -78181,10 +78340,10 @@ function useTimeTracking(name, options) {
|
|
|
78181
78340
|
const { track } = useAnalyticsHook();
|
|
78182
78341
|
const startTime = useRef101(Date.now());
|
|
78183
78342
|
const trackedIntervals = useRef101(/* @__PURE__ */ new Set());
|
|
78184
|
-
const getTimeSpent =
|
|
78343
|
+
const getTimeSpent = useCallback82(() => {
|
|
78185
78344
|
return Date.now() - startTime.current;
|
|
78186
78345
|
}, []);
|
|
78187
|
-
const trackNow =
|
|
78346
|
+
const trackNow = useCallback82(() => {
|
|
78188
78347
|
track("time_spent", {
|
|
78189
78348
|
name,
|
|
78190
78349
|
duration_ms: getTimeSpent()
|
|
@@ -78221,8 +78380,8 @@ function useTimeTracking(name, options) {
|
|
|
78221
78380
|
}
|
|
78222
78381
|
|
|
78223
78382
|
// src/react/hooks/use-destination-router.tsx
|
|
78224
|
-
import { useCallback as
|
|
78225
|
-
import { createContext as createContext69, useContext as
|
|
78383
|
+
import { useCallback as useCallback83, useEffect as useEffect94, useMemo as useMemo132, useRef as useRef102 } from "react";
|
|
78384
|
+
import { createContext as createContext69, useContext as useContext83 } from "react";
|
|
78226
78385
|
import { jsx as jsx91 } from "react/jsx-runtime";
|
|
78227
78386
|
function useDestinationRouter(options) {
|
|
78228
78387
|
const {
|
|
@@ -78236,7 +78395,7 @@ function useDestinationRouter(options) {
|
|
|
78236
78395
|
const initializedRef = useRef102(false);
|
|
78237
78396
|
const { hasConsent: checkConsent } = useConsent();
|
|
78238
78397
|
const { user } = useUser();
|
|
78239
|
-
const router =
|
|
78398
|
+
const router = useMemo132(() => {
|
|
78240
78399
|
if (!autoInit || typeof window === "undefined") return null;
|
|
78241
78400
|
const newRouter = createDestinationRouter({
|
|
78242
78401
|
destinations,
|
|
@@ -78261,46 +78420,46 @@ function useDestinationRouter(options) {
|
|
|
78261
78420
|
name: user.name
|
|
78262
78421
|
});
|
|
78263
78422
|
}, [syncUser, user?.id, user?.email, user?.name]);
|
|
78264
|
-
const track =
|
|
78423
|
+
const track = useCallback83(
|
|
78265
78424
|
(event2, properties) => {
|
|
78266
78425
|
router?.track(event2, properties);
|
|
78267
78426
|
},
|
|
78268
78427
|
[router]
|
|
78269
78428
|
);
|
|
78270
|
-
const trackTo =
|
|
78429
|
+
const trackTo = useCallback83(
|
|
78271
78430
|
(destinationType, event2, properties) => {
|
|
78272
78431
|
router?.trackTo(destinationType, event2, properties);
|
|
78273
78432
|
},
|
|
78274
78433
|
[router]
|
|
78275
78434
|
);
|
|
78276
|
-
const identify =
|
|
78435
|
+
const identify = useCallback83(
|
|
78277
78436
|
(userId, traits) => {
|
|
78278
78437
|
router?.identify(userId, traits);
|
|
78279
78438
|
},
|
|
78280
78439
|
[router]
|
|
78281
78440
|
);
|
|
78282
|
-
const page =
|
|
78441
|
+
const page = useCallback83(
|
|
78283
78442
|
(name, properties) => {
|
|
78284
78443
|
router?.page(name, properties);
|
|
78285
78444
|
},
|
|
78286
78445
|
[router]
|
|
78287
78446
|
);
|
|
78288
|
-
const getEnabledDestinations =
|
|
78447
|
+
const getEnabledDestinations = useCallback83(() => {
|
|
78289
78448
|
return router?.getEnabledDestinations() || [];
|
|
78290
78449
|
}, [router]);
|
|
78291
|
-
const setDestinationEnabled =
|
|
78450
|
+
const setDestinationEnabled = useCallback83(
|
|
78292
78451
|
(type, enabled) => {
|
|
78293
78452
|
router?.setDestinationEnabled(type, enabled);
|
|
78294
78453
|
},
|
|
78295
78454
|
[router]
|
|
78296
78455
|
);
|
|
78297
|
-
const setConsentChecker =
|
|
78456
|
+
const setConsentChecker = useCallback83(
|
|
78298
78457
|
(fn) => {
|
|
78299
78458
|
router?.setConsentChecker(fn);
|
|
78300
78459
|
},
|
|
78301
78460
|
[router]
|
|
78302
78461
|
);
|
|
78303
|
-
const setDistinctId =
|
|
78462
|
+
const setDistinctId = useCallback83(
|
|
78304
78463
|
(id3) => {
|
|
78305
78464
|
router?.setDistinctId(id3);
|
|
78306
78465
|
},
|
|
@@ -78328,7 +78487,7 @@ function DestinationRouterProvider({
|
|
|
78328
78487
|
return /* @__PURE__ */ jsx91(DestinationRouterContext.Provider, { value: router, children });
|
|
78329
78488
|
}
|
|
78330
78489
|
function useRouterContext() {
|
|
78331
|
-
return
|
|
78490
|
+
return useContext83(DestinationRouterContext);
|
|
78332
78491
|
}
|
|
78333
78492
|
|
|
78334
78493
|
// src/lib/tasks/handler.ts
|
|
@@ -79114,7 +79273,7 @@ var job = task;
|
|
|
79114
79273
|
|
|
79115
79274
|
// src/react/hooks/use-realtime.ts
|
|
79116
79275
|
init_constants();
|
|
79117
|
-
import { useCallback as
|
|
79276
|
+
import { useCallback as useCallback84, useContext as useContext84, useEffect as useEffect95, useMemo as useMemo133, useRef as useRef103, useState as useState108 } from "react";
|
|
79118
79277
|
function useRealtime(channel, options = {}) {
|
|
79119
79278
|
const {
|
|
79120
79279
|
events,
|
|
@@ -79128,7 +79287,7 @@ function useRealtime(channel, options = {}) {
|
|
|
79128
79287
|
} = options;
|
|
79129
79288
|
const [messages, setMessages] = useState108([]);
|
|
79130
79289
|
const [status, setStatus] = useState108("disconnected");
|
|
79131
|
-
const platformContext =
|
|
79290
|
+
const platformContext = useContext84(PlatformContext);
|
|
79132
79291
|
const appId = platformContext?.appId || "";
|
|
79133
79292
|
const lastAckRef = useRef103("0");
|
|
79134
79293
|
const eventSourceRef = useRef103(null);
|
|
@@ -79136,7 +79295,7 @@ function useRealtime(channel, options = {}) {
|
|
|
79136
79295
|
const reconnectAttemptRef = useRef103(0);
|
|
79137
79296
|
const mountedRef = useRef103(true);
|
|
79138
79297
|
const platformUrl = customPlatformUrl || platformContext?.platformUrl || `https://${DEFAULT_SDK_API_HOST}`;
|
|
79139
|
-
const buildUrl =
|
|
79298
|
+
const buildUrl = useCallback84(() => {
|
|
79140
79299
|
const url = new URL(`${platformUrl}${SDK_API_PATH}/realtime/subscribe`);
|
|
79141
79300
|
url.searchParams.set("channel", channel);
|
|
79142
79301
|
if (lastAckRef.current !== "0") {
|
|
@@ -79144,7 +79303,7 @@ function useRealtime(channel, options = {}) {
|
|
|
79144
79303
|
}
|
|
79145
79304
|
return url.toString();
|
|
79146
79305
|
}, [platformUrl, channel]);
|
|
79147
|
-
const sdkHeaders =
|
|
79306
|
+
const sdkHeaders = useMemo133(
|
|
79148
79307
|
() => ({
|
|
79149
79308
|
"Content-Type": "application/json",
|
|
79150
79309
|
"x-app-secret": appId,
|
|
@@ -79153,7 +79312,7 @@ function useRealtime(channel, options = {}) {
|
|
|
79153
79312
|
}),
|
|
79154
79313
|
[appId]
|
|
79155
79314
|
);
|
|
79156
|
-
const fetchHistory =
|
|
79315
|
+
const fetchHistory = useCallback84(async () => {
|
|
79157
79316
|
if (!history2) return;
|
|
79158
79317
|
const historyLimit = typeof history2 === "number" ? history2 : history2.limit ?? 100;
|
|
79159
79318
|
const historyStart = typeof history2 === "object" ? history2.start : void 0;
|
|
@@ -79177,7 +79336,7 @@ function useRealtime(channel, options = {}) {
|
|
|
79177
79336
|
} catch {
|
|
79178
79337
|
}
|
|
79179
79338
|
}, [platformUrl, sdkHeaders, channel, history2]);
|
|
79180
|
-
const connect =
|
|
79339
|
+
const connect = useCallback84(() => {
|
|
79181
79340
|
if (!enabled || !appId) return;
|
|
79182
79341
|
if (eventSourceRef.current) {
|
|
79183
79342
|
eventSourceRef.current.close();
|
|
@@ -79248,7 +79407,7 @@ function useRealtime(channel, options = {}) {
|
|
|
79248
79407
|
onReconnect,
|
|
79249
79408
|
onError
|
|
79250
79409
|
]);
|
|
79251
|
-
const disconnect =
|
|
79410
|
+
const disconnect = useCallback84(() => {
|
|
79252
79411
|
if (eventSourceRef.current) {
|
|
79253
79412
|
eventSourceRef.current.close();
|
|
79254
79413
|
eventSourceRef.current = null;
|
|
@@ -79259,7 +79418,7 @@ function useRealtime(channel, options = {}) {
|
|
|
79259
79418
|
}
|
|
79260
79419
|
setStatus("disconnected");
|
|
79261
79420
|
}, []);
|
|
79262
|
-
const emit =
|
|
79421
|
+
const emit = useCallback84(
|
|
79263
79422
|
async (event2, data) => {
|
|
79264
79423
|
const response = await fetch(`${platformUrl}${SDK_API_PATH}/realtime/emit`, {
|
|
79265
79424
|
method: "POST",
|
|
@@ -79291,7 +79450,7 @@ function useRealtime(channel, options = {}) {
|
|
|
79291
79450
|
},
|
|
79292
79451
|
[platformUrl, sdkHeaders, channel]
|
|
79293
79452
|
);
|
|
79294
|
-
const clear =
|
|
79453
|
+
const clear = useCallback84(() => {
|
|
79295
79454
|
setMessages([]);
|
|
79296
79455
|
lastAckRef.current = "0";
|
|
79297
79456
|
}, []);
|
|
@@ -79327,7 +79486,7 @@ function useRealtimeChannels(channels, options = {}) {
|
|
|
79327
79486
|
} = options;
|
|
79328
79487
|
const [messages, setMessages] = useState108([]);
|
|
79329
79488
|
const [statuses, setStatuses] = useState108({});
|
|
79330
|
-
const platformContext =
|
|
79489
|
+
const platformContext = useContext84(PlatformContext);
|
|
79331
79490
|
const appId = platformContext?.appId || "";
|
|
79332
79491
|
const platformUrl = customPlatformUrl || platformContext?.platformUrl || `https://${DEFAULT_SDK_API_HOST}`;
|
|
79333
79492
|
const lastAcksRef = useRef103({});
|
|
@@ -79341,7 +79500,7 @@ function useRealtimeChannels(channels, options = {}) {
|
|
|
79341
79500
|
if (statusValues.every((s2) => s2 === "connected")) return "connected";
|
|
79342
79501
|
return "disconnected";
|
|
79343
79502
|
})();
|
|
79344
|
-
const connectChannel =
|
|
79503
|
+
const connectChannel = useCallback84(
|
|
79345
79504
|
(channel) => {
|
|
79346
79505
|
if (!enabled || !appId) return;
|
|
79347
79506
|
if (eventSourcesRef.current[channel]) {
|
|
@@ -79391,15 +79550,15 @@ function useRealtimeChannels(channels, options = {}) {
|
|
|
79391
79550
|
},
|
|
79392
79551
|
[enabled, appId, platformUrl, events, onConnect, onMessage, onReconnect, onError]
|
|
79393
79552
|
);
|
|
79394
|
-
const connect =
|
|
79553
|
+
const connect = useCallback84(() => {
|
|
79395
79554
|
channels.forEach(connectChannel);
|
|
79396
79555
|
}, [channels, connectChannel]);
|
|
79397
|
-
const disconnect =
|
|
79556
|
+
const disconnect = useCallback84(() => {
|
|
79398
79557
|
Object.values(eventSourcesRef.current).forEach((es) => es.close());
|
|
79399
79558
|
eventSourcesRef.current = {};
|
|
79400
79559
|
setStatuses({});
|
|
79401
79560
|
}, []);
|
|
79402
|
-
const sdkHeaders =
|
|
79561
|
+
const sdkHeaders = useMemo133(
|
|
79403
79562
|
() => ({
|
|
79404
79563
|
"Content-Type": "application/json",
|
|
79405
79564
|
"x-app-secret": appId,
|
|
@@ -79408,7 +79567,7 @@ function useRealtimeChannels(channels, options = {}) {
|
|
|
79408
79567
|
}),
|
|
79409
79568
|
[appId]
|
|
79410
79569
|
);
|
|
79411
|
-
const emit =
|
|
79570
|
+
const emit = useCallback84(
|
|
79412
79571
|
async (event2, data, targetChannel) => {
|
|
79413
79572
|
const channel = targetChannel || channels[0];
|
|
79414
79573
|
if (!channel) throw new SylphxError("No channel specified", { code: "BAD_REQUEST" });
|
|
@@ -79435,7 +79594,7 @@ function useRealtimeChannels(channels, options = {}) {
|
|
|
79435
79594
|
},
|
|
79436
79595
|
[channels, platformUrl, sdkHeaders]
|
|
79437
79596
|
);
|
|
79438
|
-
const clear =
|
|
79597
|
+
const clear = useCallback84(() => {
|
|
79439
79598
|
setMessages([]);
|
|
79440
79599
|
lastAcksRef.current = {};
|
|
79441
79600
|
}, []);
|
|
@@ -79461,13 +79620,13 @@ function useRealtimeChannels(channels, options = {}) {
|
|
|
79461
79620
|
|
|
79462
79621
|
// src/react/hooks/use-kv.ts
|
|
79463
79622
|
init_constants();
|
|
79464
|
-
import { useCallback as
|
|
79623
|
+
import { useCallback as useCallback85, useContext as useContext85, useMemo as useMemo134 } from "react";
|
|
79465
79624
|
function useKv(options = {}) {
|
|
79466
79625
|
const { platformUrl: customPlatformUrl } = options;
|
|
79467
|
-
const platformContext =
|
|
79626
|
+
const platformContext = useContext85(PlatformContext);
|
|
79468
79627
|
const appId = platformContext?.appId || "";
|
|
79469
79628
|
const platformUrl = customPlatformUrl || platformContext?.platformUrl || `https://${DEFAULT_SDK_API_HOST}`;
|
|
79470
|
-
const headers =
|
|
79629
|
+
const headers = useMemo134(
|
|
79471
79630
|
() => ({
|
|
79472
79631
|
"Content-Type": "application/json",
|
|
79473
79632
|
"x-app-secret": appId,
|
|
@@ -79476,7 +79635,7 @@ function useKv(options = {}) {
|
|
|
79476
79635
|
}),
|
|
79477
79636
|
[appId]
|
|
79478
79637
|
);
|
|
79479
|
-
const request =
|
|
79638
|
+
const request = useCallback85(
|
|
79480
79639
|
async (method, path, body) => {
|
|
79481
79640
|
let lastError;
|
|
79482
79641
|
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
|
|
@@ -79532,13 +79691,13 @@ function useKv(options = {}) {
|
|
|
79532
79691
|
},
|
|
79533
79692
|
[platformUrl, headers]
|
|
79534
79693
|
);
|
|
79535
|
-
const get =
|
|
79694
|
+
const get = useCallback85(
|
|
79536
79695
|
async (key) => {
|
|
79537
79696
|
return request("GET", `/${encodeURIComponent(key)}`);
|
|
79538
79697
|
},
|
|
79539
79698
|
[request]
|
|
79540
79699
|
);
|
|
79541
|
-
const set3 =
|
|
79700
|
+
const set3 = useCallback85(
|
|
79542
79701
|
async (key, value, options2) => {
|
|
79543
79702
|
const result = await request("POST", "", {
|
|
79544
79703
|
key,
|
|
@@ -79549,28 +79708,28 @@ function useKv(options = {}) {
|
|
|
79549
79708
|
},
|
|
79550
79709
|
[request]
|
|
79551
79710
|
);
|
|
79552
|
-
const del =
|
|
79711
|
+
const del = useCallback85(
|
|
79553
79712
|
async (key) => {
|
|
79554
79713
|
const result = await request("DELETE", `/${encodeURIComponent(key)}`);
|
|
79555
79714
|
return result.deleted;
|
|
79556
79715
|
},
|
|
79557
79716
|
[request]
|
|
79558
79717
|
);
|
|
79559
|
-
const exists =
|
|
79718
|
+
const exists = useCallback85(
|
|
79560
79719
|
async (key) => {
|
|
79561
79720
|
const result = await request("GET", `/exists/${encodeURIComponent(key)}`);
|
|
79562
79721
|
return result.exists;
|
|
79563
79722
|
},
|
|
79564
79723
|
[request]
|
|
79565
79724
|
);
|
|
79566
|
-
const mget =
|
|
79725
|
+
const mget = useCallback85(
|
|
79567
79726
|
async (keys) => {
|
|
79568
79727
|
const result = await request("POST", "/mget", { keys });
|
|
79569
79728
|
return result.values;
|
|
79570
79729
|
},
|
|
79571
79730
|
[request]
|
|
79572
79731
|
);
|
|
79573
|
-
const mset =
|
|
79732
|
+
const mset = useCallback85(
|
|
79574
79733
|
async (entries, options2) => {
|
|
79575
79734
|
await request("POST", "/mset", {
|
|
79576
79735
|
entries,
|
|
@@ -79579,7 +79738,7 @@ function useKv(options = {}) {
|
|
|
79579
79738
|
},
|
|
79580
79739
|
[request]
|
|
79581
79740
|
);
|
|
79582
|
-
const incr =
|
|
79741
|
+
const incr = useCallback85(
|
|
79583
79742
|
async (key, by = 1) => {
|
|
79584
79743
|
const result = await request("POST", "/incr", {
|
|
79585
79744
|
key,
|
|
@@ -79589,7 +79748,7 @@ function useKv(options = {}) {
|
|
|
79589
79748
|
},
|
|
79590
79749
|
[request]
|
|
79591
79750
|
);
|
|
79592
|
-
const expire =
|
|
79751
|
+
const expire = useCallback85(
|
|
79593
79752
|
async (key, seconds) => {
|
|
79594
79753
|
const result = await request("POST", "/expire", {
|
|
79595
79754
|
key,
|
|
@@ -79599,7 +79758,7 @@ function useKv(options = {}) {
|
|
|
79599
79758
|
},
|
|
79600
79759
|
[request]
|
|
79601
79760
|
);
|
|
79602
|
-
const ratelimit =
|
|
79761
|
+
const ratelimit = useCallback85(
|
|
79603
79762
|
async (key, options2) => {
|
|
79604
79763
|
return request("POST", "/ratelimit", {
|
|
79605
79764
|
key,
|
|
@@ -79608,7 +79767,7 @@ function useKv(options = {}) {
|
|
|
79608
79767
|
},
|
|
79609
79768
|
[request]
|
|
79610
79769
|
);
|
|
79611
|
-
const hset =
|
|
79770
|
+
const hset = useCallback85(
|
|
79612
79771
|
async (key, fields) => {
|
|
79613
79772
|
const result = await request("POST", "/hset", {
|
|
79614
79773
|
key,
|
|
@@ -79618,7 +79777,7 @@ function useKv(options = {}) {
|
|
|
79618
79777
|
},
|
|
79619
79778
|
[request]
|
|
79620
79779
|
);
|
|
79621
|
-
const hget =
|
|
79780
|
+
const hget = useCallback85(
|
|
79622
79781
|
async (key, field) => {
|
|
79623
79782
|
const result = await request("POST", "/hget", {
|
|
79624
79783
|
key,
|
|
@@ -79628,7 +79787,7 @@ function useKv(options = {}) {
|
|
|
79628
79787
|
},
|
|
79629
79788
|
[request]
|
|
79630
79789
|
);
|
|
79631
|
-
const hgetall =
|
|
79790
|
+
const hgetall = useCallback85(
|
|
79632
79791
|
async (key) => {
|
|
79633
79792
|
const result = await request("POST", "/hgetall", {
|
|
79634
79793
|
key
|
|
@@ -79637,7 +79796,7 @@ function useKv(options = {}) {
|
|
|
79637
79796
|
},
|
|
79638
79797
|
[request]
|
|
79639
79798
|
);
|
|
79640
|
-
const lpush =
|
|
79799
|
+
const lpush = useCallback85(
|
|
79641
79800
|
async (key, ...values) => {
|
|
79642
79801
|
const result = await request("POST", "/lpush", {
|
|
79643
79802
|
key,
|
|
@@ -79647,7 +79806,7 @@ function useKv(options = {}) {
|
|
|
79647
79806
|
},
|
|
79648
79807
|
[request]
|
|
79649
79808
|
);
|
|
79650
|
-
const lrange =
|
|
79809
|
+
const lrange = useCallback85(
|
|
79651
79810
|
async (key, start = 0, stop = -1) => {
|
|
79652
79811
|
const result = await request("POST", "/lrange", {
|
|
79653
79812
|
key,
|
|
@@ -79658,7 +79817,7 @@ function useKv(options = {}) {
|
|
|
79658
79817
|
},
|
|
79659
79818
|
[request]
|
|
79660
79819
|
);
|
|
79661
|
-
const zadd =
|
|
79820
|
+
const zadd = useCallback85(
|
|
79662
79821
|
async (key, ...members) => {
|
|
79663
79822
|
const result = await request("POST", "/zadd", {
|
|
79664
79823
|
key,
|
|
@@ -79668,7 +79827,7 @@ function useKv(options = {}) {
|
|
|
79668
79827
|
},
|
|
79669
79828
|
[request]
|
|
79670
79829
|
);
|
|
79671
|
-
const zrange =
|
|
79830
|
+
const zrange = useCallback85(
|
|
79672
79831
|
async (key, start = 0, stop = 9, options2) => {
|
|
79673
79832
|
const result = await request("POST", "/zrange", {
|
|
79674
79833
|
key,
|
|
@@ -79681,7 +79840,7 @@ function useKv(options = {}) {
|
|
|
79681
79840
|
},
|
|
79682
79841
|
[request]
|
|
79683
79842
|
);
|
|
79684
|
-
return
|
|
79843
|
+
return useMemo134(
|
|
79685
79844
|
() => ({
|
|
79686
79845
|
get,
|
|
79687
79846
|
set: set3,
|
|
@@ -79722,7 +79881,7 @@ function useKv(options = {}) {
|
|
|
79722
79881
|
}
|
|
79723
79882
|
|
|
79724
79883
|
// src/react/hooks/use-search.ts
|
|
79725
|
-
import { useCallback as
|
|
79884
|
+
import { useCallback as useCallback86, useEffect as useEffect96, useRef as useRef104, useState as useState109 } from "react";
|
|
79726
79885
|
|
|
79727
79886
|
// src/search.ts
|
|
79728
79887
|
async function search(config2, input) {
|
|
@@ -79768,7 +79927,7 @@ function useSearch(config2, options = {}) {
|
|
|
79768
79927
|
useEffect96(() => {
|
|
79769
79928
|
searchOptionsRef.current = searchOptions;
|
|
79770
79929
|
});
|
|
79771
|
-
const executeSearch =
|
|
79930
|
+
const executeSearch = useCallback86(
|
|
79772
79931
|
async (q2) => {
|
|
79773
79932
|
if (!q2 || q2.length < minLength) {
|
|
79774
79933
|
setResults([]);
|
|
@@ -79800,7 +79959,7 @@ function useSearch(config2, options = {}) {
|
|
|
79800
79959
|
},
|
|
79801
79960
|
[config2, minLength]
|
|
79802
79961
|
);
|
|
79803
|
-
const setQuery =
|
|
79962
|
+
const setQuery = useCallback86(
|
|
79804
79963
|
(q2) => {
|
|
79805
79964
|
setQueryState(q2);
|
|
79806
79965
|
if (debounceTimer.current) {
|
|
@@ -79820,7 +79979,7 @@ function useSearch(config2, options = {}) {
|
|
|
79820
79979
|
},
|
|
79821
79980
|
[executeSearch, debounceMs, minLength]
|
|
79822
79981
|
);
|
|
79823
|
-
const clear =
|
|
79982
|
+
const clear = useCallback86(() => {
|
|
79824
79983
|
if (debounceTimer.current) clearTimeout(debounceTimer.current);
|
|
79825
79984
|
abortController.current?.abort();
|
|
79826
79985
|
setQueryState("");
|
|
@@ -79830,10 +79989,10 @@ function useSearch(config2, options = {}) {
|
|
|
79830
79989
|
setLoading(false);
|
|
79831
79990
|
setError(null);
|
|
79832
79991
|
}, []);
|
|
79833
|
-
const refetch =
|
|
79992
|
+
const refetch = useCallback86(() => {
|
|
79834
79993
|
executeSearch(query);
|
|
79835
79994
|
}, [executeSearch, query]);
|
|
79836
|
-
const trackResultClick =
|
|
79995
|
+
const trackResultClick = useCallback86((_documentId, _resultRank) => {
|
|
79837
79996
|
}, []);
|
|
79838
79997
|
useEffect96(() => {
|
|
79839
79998
|
if (initialQuery && initialQuery.length >= minLength) {
|
|
@@ -80405,11 +80564,13 @@ export {
|
|
|
80405
80564
|
useFormTracking,
|
|
80406
80565
|
useGlobalErrorHandler,
|
|
80407
80566
|
useGoogleConsentMode,
|
|
80567
|
+
useHasPermission,
|
|
80408
80568
|
useInbox,
|
|
80409
80569
|
useIsInTreatment,
|
|
80410
80570
|
useIsInVariant,
|
|
80411
80571
|
useKv,
|
|
80412
80572
|
useLeaderboard,
|
|
80573
|
+
useMemberPermissions,
|
|
80413
80574
|
useMobilePush,
|
|
80414
80575
|
useModal,
|
|
80415
80576
|
useModels,
|
|
@@ -80420,12 +80581,14 @@ export {
|
|
|
80420
80581
|
useOAuthProviders2 as useOAuthProviders,
|
|
80421
80582
|
useOrganization,
|
|
80422
80583
|
usePageView,
|
|
80584
|
+
usePermissions,
|
|
80423
80585
|
usePlans,
|
|
80424
80586
|
useProtect,
|
|
80425
80587
|
useRealtime,
|
|
80426
80588
|
useRealtimeChannels,
|
|
80427
80589
|
useReferral,
|
|
80428
80590
|
useResetPasswordForm,
|
|
80591
|
+
useRoles,
|
|
80429
80592
|
useRouterContext,
|
|
80430
80593
|
useSafeAchievements,
|
|
80431
80594
|
useSafeAnalytics,
|