diff --git a/apps/partner-sas/auth.ts b/apps/partner-sas/auth.ts index fc23d7980..964b77521 100644 --- a/apps/partner-sas/auth.ts +++ b/apps/partner-sas/auth.ts @@ -48,7 +48,10 @@ const config: NextAuthConfig = { async jwt(params) { if (params.trigger === "signIn") { const accessToken = params.account?.access_token + // expires_at is in seconds for SAS, we need milliseconds const expiresAt = params.account?.expires_at + ? params.account.expires_at * 1000 + : null if (!accessToken) { throw new Error("AuthError: Missing access token") diff --git a/packages/tracking/lib/types.ts b/packages/tracking/lib/types.ts index 1bff026fc..c13c7ab8b 100644 --- a/packages/tracking/lib/types.ts +++ b/packages/tracking/lib/types.ts @@ -42,7 +42,7 @@ type LoggedInScandicUserData = TrackingSDKUserDataBase & { } type LoggedInEurobonusUserData = TrackingSDKUserDataBase & { - memberType: "eurobonus" + memberType: "sas-eurobonus" } type TrackingSDKUserDataBase = { diff --git a/packages/tracking/lib/useTrackingUserData.ts b/packages/tracking/lib/useTrackingUserData.ts index 72bf412d4..4d379e4e0 100644 --- a/packages/tracking/lib/useTrackingUserData.ts +++ b/packages/tracking/lib/useTrackingUserData.ts @@ -10,7 +10,7 @@ export const useTrackingUserData = () => { const userData: TrackingSDKUserData | undefined = !isPending ? isError || !data ? ({ loginStatus: "Error" } as const) - : { ...data, memberType: "scandic-friends" } + : data : undefined return { userData, isPending, isError } diff --git a/packages/trpc/lib/context.ts b/packages/trpc/lib/context.ts index 75205e159..36f38db1e 100644 --- a/packages/trpc/lib/context.ts +++ b/packages/trpc/lib/context.ts @@ -29,6 +29,7 @@ export function createContext(opts: CreateContextOptions) { url: opts.url, webToken: opts.webToken, contentType: opts.contentType, + app: opts.app, } } diff --git a/packages/trpc/lib/routers/types.ts b/packages/trpc/lib/routers/types.ts index c9e4c71cd..bfd6b4ff9 100644 --- a/packages/trpc/lib/routers/types.ts +++ b/packages/trpc/lib/routers/types.ts @@ -36,8 +36,10 @@ export type TrackingUserData = membershipNumber?: string memberLevel?: MembershipLevel loginAction?: "login success" + memberType: "scandic-friends" | "sas-eurobonus" } | { loginStatus: "Non-logged in" + memberType: "scandic-friends" | "sas-eurobonus" } | { loginStatus: "Error" } diff --git a/packages/trpc/lib/routers/user/query/userTrackingInfo.ts b/packages/trpc/lib/routers/user/query/userTrackingInfo.ts index 9c9bdca5c..b85e1f5cf 100644 --- a/packages/trpc/lib/routers/user/query/userTrackingInfo.ts +++ b/packages/trpc/lib/routers/user/query/userTrackingInfo.ts @@ -6,22 +6,38 @@ import { getFriendsMembership } from "../helpers" import { getVerifiedUser } from "../utils/getVerifiedUser" import type { LoginType } from "@scandic-hotels/common/constants/loginType" +import type { Session } from "next-auth" import type { TrackingUserData } from "../../types" export const userTrackingInfo = safeProtectedProcedure.query(async function ({ ctx, }) { + if (ctx.app === "partner-sas") { + return getSasEurobonusUserTrackingData(ctx.session) + } + + if (ctx.app === "scandic-web") { + return getScandicFriendsUserTrackingData(ctx.session) + } + + return { loginStatus: "Error" } as const +}) + +async function getScandicFriendsUserTrackingData(session: Session | null) { const userTrackingInfoCounter = createCounter("user", "userTrackingInfo") const metricsUserTrackingInfo = userTrackingInfoCounter.init() metricsUserTrackingInfo.start() + const memberType = "scandic-friends" as const + const notLoggedInUserTrackingData: TrackingUserData = { loginStatus: "Non-logged in", + memberType, } - if (!isValidSession(ctx.session)) { + if (!isValidSession(session)) { metricsUserTrackingInfo.success({ reason: "invalid session", data: notLoggedInUserTrackingData, @@ -30,7 +46,7 @@ export const userTrackingInfo = safeProtectedProcedure.query(async function ({ } try { - const verifiedUserData = await getVerifiedUser({ session: ctx.session }) + const verifiedUserData = await getVerifiedUser({ session: session }) if ( !verifiedUserData || @@ -48,11 +64,12 @@ export const userTrackingInfo = safeProtectedProcedure.query(async function ({ const loggedInUserTrackingData: TrackingUserData = { loginStatus: "logged in", - loginType: ctx.session.token.loginType as LoginType, + loginType: session.token.loginType as LoginType, memberId: verifiedUserData.data.profileId, membershipNumber: membership?.membershipNumber, memberLevel: membership?.membershipLevel, loginAction: "login success", + memberType, } metricsUserTrackingInfo.success({ @@ -65,4 +82,28 @@ export const userTrackingInfo = safeProtectedProcedure.query(async function ({ metricsUserTrackingInfo.fail(error) return notLoggedInUserTrackingData } -}) +} + +async function getSasEurobonusUserTrackingData(session: Session | null) { + const notLoggedInUserTrackingData: TrackingUserData = { + loginStatus: "Non-logged in", + memberType: "sas-eurobonus", + } + + if (!isValidSession(session)) { + return notLoggedInUserTrackingData + } + + try { + const loggedInUserTrackingData: TrackingUserData = { + loginStatus: "logged in", + loginType: session.token.loginType, + loginAction: "login success", + memberType: "sas-eurobonus", + } + + return loggedInUserTrackingData + } catch (_error) { + return notLoggedInUserTrackingData + } +}