MCPcopy
hub / github.com/dubinc/dub / withReferralsEmbedToken

Function withReferralsEmbedToken

apps/web/lib/embed/referrals/auth.ts:33–134  ·  view source on GitHub ↗
(
  handler: WithReferralsEmbedTokenHandler,
)

Source from the content-addressed store, hash-verified

31}
32
33export 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 },

Callers 13

route.tsFile · 0.90
route.tsFile · 0.90
route.tsFile · 0.90
route.tsFile · 0.90
route.tsFile · 0.90
route.tsFile · 0.90
route.tsFile · 0.90
route.tsFile · 0.90
route.tsFile · 0.90
route.tsFile · 0.90
route.tsFile · 0.90
route.tsFile · 0.90

Calls 7

getSearchParamsFunction · 0.90
ratelimitFunction · 0.90
headersFunction · 0.85
handlerFunction · 0.50
getMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…