( handler: WithReferralsEmbedTokenHandler, )
| 31 | } |
| 32 | |
| 33 | export const withReferralsEmbedToken = ( |
| 34 | handler: WithReferralsEmbedTokenHandler, |
| 35 | ) => { |
| 36 | return withAxiom( |
| 37 | async ( |
| 38 | req, |
| 39 | { params: initialParams }: { params: Promise<Record<string, string>> }, |
| 40 | ) => { |
| 41 | const params = (await initialParams) || {}; |
| 42 | const requestHeaders = await headers(); |
| 43 | let responseHeaders = new Headers(); |
| 44 | |
| 45 | try { |
| 46 | const rateLimit = 60; |
| 47 | const searchParams = getSearchParams(req.url); |
| 48 | const embedToken = requestHeaders.get("Authorization")?.split(" ")[1]; |
| 49 | |
| 50 | if (!embedToken) { |
| 51 | throw new DubApiError({ |
| 52 | code: "unauthorized", |
| 53 | message: "Embed public token not found in the request.", |
| 54 | }); |
| 55 | } |
| 56 | |
| 57 | const { programId, partnerId } = |
| 58 | (await referralsEmbedToken.get(embedToken)) ?? {}; |
| 59 | |
| 60 | if (!programId || !partnerId) { |
| 61 | throw new DubApiError({ |
| 62 | code: "unauthorized", |
| 63 | message: "Invalid embed public token.", |
| 64 | }); |
| 65 | } |
| 66 | |
| 67 | const { success, limit, reset, remaining } = await ratelimit( |
| 68 | rateLimit, |
| 69 | "1 m", |
| 70 | ).limit(embedToken); |
| 71 | |
| 72 | responseHeaders.set("Retry-After", reset.toString()); |
| 73 | responseHeaders.set("X-RateLimit-Limit", limit.toString()); |
| 74 | responseHeaders.set("X-RateLimit-Remaining", remaining.toString()); |
| 75 | responseHeaders.set("X-RateLimit-Reset", reset.toString()); |
| 76 | |
| 77 | if (!success) { |
| 78 | throw new DubApiError({ |
| 79 | code: "rate_limit_exceeded", |
| 80 | message: "Too many requests.", |
| 81 | }); |
| 82 | } |
| 83 | |
| 84 | const { program, links, partnerGroup, ...programEnrollment } = |
| 85 | await prisma.programEnrollment.findUniqueOrThrow({ |
| 86 | where: { |
| 87 | partnerId_programId: { |
| 88 | partnerId, |
| 89 | programId, |
| 90 | }, |
no test coverage detected
searching dependent graphs…