From 0557825e14bee1a5eed8ee1bfd4e560c729e540e Mon Sep 17 00:00:00 2001 From: Hunter Miller Date: Tue, 17 Sep 2024 12:22:49 -0500 Subject: [PATCH] lure: change to use new reel endpoint --- apps/tlon-web/src/groups/LureInviteBlock.tsx | 6 ++- apps/tlon-web/src/logic/branch.ts | 2 +- apps/tlon-web/src/state/lure/lure.ts | 39 +++++++-------- packages/shared/src/store/lure.ts | 49 +++++++------------ .../ui/src/components/InviteUsersWidget.tsx | 2 +- 5 files changed, 41 insertions(+), 57 deletions(-) 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(