diff --git a/apps/tlon-web/src/groups/LureInviteBlock.tsx b/apps/tlon-web/src/groups/LureInviteBlock.tsx
index 5cd4dcdc8b..aad9d2b429 100644
--- a/apps/tlon-web/src/groups/LureInviteBlock.tsx
+++ b/apps/tlon-web/src/groups/LureInviteBlock.tsx
@@ -45,7 +45,7 @@ export default function LureInviteBlock({
- {status === 'ready' && (
+ {status === 'ready' && shareUrl && (
diff --git a/apps/tlon-web/src/logic/branch.ts b/apps/tlon-web/src/logic/branch.ts
index 07c01406f7..4f8a6b146d 100644
--- a/apps/tlon-web/src/logic/branch.ts
+++ b/apps/tlon-web/src/logic/branch.ts
@@ -68,7 +68,7 @@ export const createDeepLink = async (
$canonical_url: fallbackUrl,
};
if (type === 'lure') {
- data.lure = path;
+ data.lure = token;
} else {
data.wer = path;
}
diff --git a/apps/tlon-web/src/state/lure/lure.ts b/apps/tlon-web/src/state/lure/lure.ts
index 1f976b9233..1b30f9c946 100644
--- a/apps/tlon-web/src/state/lure/lure.ts
+++ b/apps/tlon-web/src/state/lure/lure.ts
@@ -28,10 +28,9 @@ interface LureMetadata {
interface Lure {
fetched: boolean;
- url: string;
+ url?: string;
deepLinkUrl?: string;
enabled?: boolean;
- enableAcked?: boolean;
metadata?: LureMetadata;
}
@@ -129,7 +128,7 @@ export const useLureState = create(
},
fetchLure: async (flag) => {
const prevLure = get().lures[flag];
- const [enabled, url, metadata, outstandingPoke] = await Promise.all([
+ const [enabled, url, metadata] = await Promise.all([
// enabled
asyncWithDefault(() => {
lureLogger.log(performance.now(), 'fetching enabled', flag);
@@ -140,7 +139,7 @@ export const useLureState = create(
LURE_REQUEST_TIMEOUT
)
.then((en) => {
- lureLogger.log(performance.now(), 'enabled fetched', flag);
+ lureLogger.log(performance.now(), 'enabled fetched', en, flag);
return en;
});
@@ -149,15 +148,21 @@ export const useLureState = create(
asyncWithDefault(() => {
lureLogger.log(performance.now(), 'fetching url', flag);
return api
- .scry({
- app: 'reel',
- path: `/v1/id-url/${flag}`,
- })
+ .subscribeOnce('reel', `/v1/id-link/${flag}`, 4500)
.then((u) => {
- lureLogger.log(performance.now(), 'url fetched', flag);
+ lureLogger.log(performance.now(), 'url fetched', u, flag);
return u;
+ })
+ .catch((e) => {
+ lureLogger.error(
+ performance.now(),
+ 'url fetch timeout',
+ e,
+ flag
+ );
+ return undefined;
});
- }, prevLure?.url),
+ }, prevLure?.url) as Promise,
// metadata
asyncWithDefault(
() =>
@@ -167,15 +172,6 @@ export const useLureState = create(
}),
prevLure?.metadata
),
- // outstandingPoke
- asyncWithDefault(
- () =>
- api.scry({
- app: 'reel',
- path: `/outstanding-poke/${flag}`,
- }),
- false
- ),
]);
let deepLinkUrl: string | undefined;
@@ -188,7 +184,6 @@ export const useLureState = create(
draft.lures[flag] = {
fetched: true,
enabled,
- enableAcked: !outstandingPoke,
url,
deepLinkUrl,
metadata,
@@ -254,9 +249,9 @@ export function useLure(flag: string, disableLoading = false) {
};
}
-export function useLureLinkChecked(url: string, enabled: boolean) {
+export function useLureLinkChecked(url: string | undefined, enabled: boolean) {
const prevData = useRef(false);
- const pathEncodedUrl = stringToTa(url);
+ const pathEncodedUrl = stringToTa(url || '');
const { data, ...query } = useQuery(
['lure-check', url],
() =>
diff --git a/packages/shared/src/store/lure.ts b/packages/shared/src/store/lure.ts
index d353fd1650..fabc6e5aab 100644
--- a/packages/shared/src/store/lure.ts
+++ b/packages/shared/src/store/lure.ts
@@ -20,10 +20,9 @@ const LURE_REQUEST_TIMEOUT = 10 * 1000;
interface Lure {
fetched: boolean;
- url: string;
+ url?: string;
deepLinkUrl?: string;
enabled?: boolean;
- enableAcked?: boolean;
metadata?: LureMetadata;
}
@@ -40,8 +39,7 @@ interface LureState {
fetchLure: (
flag: string,
branchDomain: string,
- branchKey: string,
- fetchIfData?: boolean
+ branchKey: string
) => Promise;
describe: (
flag: string,
@@ -132,7 +130,7 @@ export const useLureState = create((set, get) => ({
const { name } = getFlagParts(flag);
const prevLure = get().lures[flag];
lureLogger.log('fetching', flag, 'prevLure', prevLure);
- const [enabled, url, metadata, outstandingPoke] = await Promise.all([
+ const [enabled, url, metadata] = await Promise.all([
// enabled
asyncWithDefault(async () => {
lureLogger.log(performance.now(), 'fetching enabled', flag);
@@ -149,12 +147,12 @@ export const useLureState = create((set, get) => ({
});
}, prevLure?.enabled),
// url
- asyncWithDefault(async () => {
+ asyncWithDefault(async () => {
lureLogger.log(performance.now(), 'fetching url', flag);
- return scry({
- app: 'reel',
- path: `/v1/id-url/${flag}`,
- }).then((u) => {
+ return subscribeOnce(
+ { app: 'reel', path: `/v1/id-link/${flag}` },
+ 4500
+ ).then((u) => {
lureLogger.log(performance.now(), 'url fetched', u, flag);
return u;
});
@@ -168,18 +166,9 @@ export const useLureState = create((set, get) => ({
}),
prevLure?.metadata
),
- // outstandingPoke
- asyncWithDefault(
- async () =>
- scry({
- app: 'reel',
- path: `/outstanding-poke/${flag}`,
- }),
- false
- ),
]);
- lureLogger.log('fetched', flag, enabled, url, metadata, outstandingPoke);
+ lureLogger.log('fetched', flag, enabled, url, metadata);
let deepLinkUrl: string | undefined;
lureLogger.log('enabled', enabled);
@@ -199,7 +188,6 @@ export const useLureState = create((set, get) => ({
draft.lures[flag] = {
fetched: true,
enabled,
- enableAcked: !outstandingPoke,
url,
deepLinkUrl,
metadata,
@@ -269,17 +257,17 @@ export function useLure({
};
}
-export function useLureLinkChecked(url: string, enabled: boolean) {
+export function useLureLinkChecked(url: string | undefined, enabled: boolean) {
const prevData = useRef(false);
- const pathEncodedUrl = stringToTa(url);
+ const pathEncodedUrl = stringToTa(url || '');
const { data, ...query } = useQuery({
queryKey: ['lure-check', url],
queryFn: async () =>
subscribeOnce(
- { app: 'grouper', path: `/check-link/${pathEncodedUrl}` },
+ { app: 'grouper', path: `/v1/check-link/${pathEncodedUrl}` },
4500
),
- enabled,
+ enabled: enabled && !!url,
refetchInterval: 5000,
});
@@ -303,12 +291,11 @@ export function useLureLinkStatus({
branchDomain: string;
branchKey: string;
}) {
- const { supported, fetched, enabled, enableAcked, url, deepLinkUrl, toggle } =
- useLure({
- flag,
- branchDomain,
- branchKey,
- });
+ const { supported, fetched, enabled, url, deepLinkUrl, toggle } = useLure({
+ flag,
+ branchDomain,
+ branchKey,
+ });
const { good, checked } = useLureLinkChecked(url, !!enabled);
lureLogger.log('useLureLinkStatus', {
diff --git a/packages/ui/src/components/InviteUsersWidget.tsx b/packages/ui/src/components/InviteUsersWidget.tsx
index d6d492d28f..fca07ff642 100644
--- a/packages/ui/src/components/InviteUsersWidget.tsx
+++ b/packages/ui/src/components/InviteUsersWidget.tsx
@@ -26,7 +26,7 @@ const InviteUsersWidgetComponent = ({
branchDomain: branchDomain,
branchKey: branchKey,
});
- const { doCopy } = useCopy(shareUrl);
+ const { doCopy } = useCopy(shareUrl || '');
const currentUserIsAdmin = useMemo(
() =>
group?.members?.some(