{"version":3,"sources":["../src/index.ts","../src/fastify-supabase.ts"],"sourcesContent":["import { default as fastifySupabase } from \"./fastify-supabase\";\n\nexport default fastifySupabase;\n","import createError from \"@fastify/error\";\nimport type { JWT } from \"@fastify/jwt\";\nimport {\n  SupabaseClient,\n  SupabaseClientOptions,\n  User,\n  createClient,\n} from \"@supabase/supabase-js\";\nimport type { FastifyPluginCallback, FastifyRequest } from \"fastify\";\nimport fp from \"fastify-plugin\";\n\nconst AuthorizationTokenInvalidError = createError(\n  \"FST_SB_AUTHORIZATION_TOKEN_INVALID\",\n  \"Authorization token is invalid\",\n  401,\n);\n\nconst NoUserDataFoundError = createError(\n  \"FST_SB_NO_USER_DATA_FOUND\",\n  \"No user data found in the request. Make sure to run request.jwtVerify() before trying to access the user.\",\n  401,\n);\n\ndeclare module \"fastify\" {\n  export interface FastifyInstance {\n    supabaseClient: SupabaseClient;\n    jwt: JWT;\n  }\n  export interface FastifyRequest {\n    _supabaseClient: SupabaseClient;\n    supabaseUser: User;\n  }\n}\n\nexport type FastifySupabasePluginOpts = {\n  url: string;\n  serviceKey: string;\n  anonKey: string;\n  options?: SupabaseClientOptions<\"public\">;\n};\n\nconst fastifySupabase: FastifyPluginCallback<FastifySupabasePluginOpts> = (\n  fastify,\n  opts,\n  next,\n) => {\n  const { url, serviceKey, anonKey, options } = opts;\n\n  const supabase = createClient(url, serviceKey, options);\n\n  if (fastify.supabaseClient) {\n    return next(new Error(\"fastify-supabase has already been registered\"));\n  }\n\n  fastify.decorate(\"supabaseClient\", supabase);\n\n  fastify.decorateRequest(\"_supabaseClient\");\n  fastify.decorateRequest(\n    \"supabaseClient\",\n    {\n      getter() {\n        const req = this as unknown as FastifyRequest;\n\n        if (req._supabaseClient) return req._supabaseClient;\n\n        if ((req.user as { role?: string }).role === \"service_role\") {\n          req._supabaseClient = fastify.supabaseClient;\n        } else if (\n          (req.user as { role?: string }).role &&\n          (req.user as { role?: string }).role !== \"anon\"\n        ) {\n          const client = createClient(url, anonKey, {\n            ...options,\n            auth: {\n              ...options?.auth,\n              persistSession: false,\n            },\n            global: {\n              ...options?.global,\n              headers: {\n                ...options?.global?.headers,\n                Authorization: `Bearer ${fastify.jwt.lookupToken(req)}`,\n              },\n            },\n          });\n          req._supabaseClient = client as SupabaseClient;\n        }\n\n        if (!req._supabaseClient) {\n          throw new AuthorizationTokenInvalidError();\n        }\n\n        return req._supabaseClient;\n      },\n    },\n    [\"user\"],\n  );\n\n  fastify.decorateRequest(\n    \"supabaseUser\",\n    {\n      getter() {\n        const req = this as unknown as FastifyRequest;\n\n        if (!req.user) {\n          throw new NoUserDataFoundError();\n        }\n\n        return req.user as User;\n      },\n    },\n    [\"user\"],\n  );\n\n  next();\n};\n\nexport default fp(fastifySupabase, {\n  fastify: \"5.x\",\n  name: \"fastify-supabase\",\n  dependencies: [\"@fastify/jwt\"],\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAwB;AAExB,yBAKO;AAEP,4BAAe;AAEf,IAAM,qCAAiC,aAAAA;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,2BAAuB,aAAAA;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACF;AAoBA,IAAM,kBAAoE,CACxE,SACA,MACA,SACG;AACH,QAAM,EAAE,KAAK,YAAY,SAAS,QAAQ,IAAI;AAE9C,QAAM,eAAW,iCAAa,KAAK,YAAY,OAAO;AAEtD,MAAI,QAAQ,gBAAgB;AAC1B,WAAO,KAAK,IAAI,MAAM,8CAA8C,CAAC;AAAA,EACvE;AAEA,UAAQ,SAAS,kBAAkB,QAAQ;AAE3C,UAAQ,gBAAgB,iBAAiB;AACzC,UAAQ;AAAA,IACN;AAAA,IACA;AAAA,MACE,SAAS;AACP,cAAM,MAAM;AAEZ,YAAI,IAAI;AAAiB,iBAAO,IAAI;AAEpC,YAAK,IAAI,KAA2B,SAAS,gBAAgB;AAC3D,cAAI,kBAAkB,QAAQ;AAAA,QAChC,WACG,IAAI,KAA2B,QAC/B,IAAI,KAA2B,SAAS,QACzC;AACA,gBAAM,aAAS,iCAAa,KAAK,SAAS;AAAA,YACxC,GAAG;AAAA,YACH,MAAM;AAAA,cACJ,GAAG,SAAS;AAAA,cACZ,gBAAgB;AAAA,YAClB;AAAA,YACA,QAAQ;AAAA,cACN,GAAG,SAAS;AAAA,cACZ,SAAS;AAAA,gBACP,GAAG,SAAS,QAAQ;AAAA,gBACpB,eAAe,UAAU,QAAQ,IAAI,YAAY,GAAG,CAAC;AAAA,cACvD;AAAA,YACF;AAAA,UACF,CAAC;AACD,cAAI,kBAAkB;AAAA,QACxB;AAEA,YAAI,CAAC,IAAI,iBAAiB;AACxB,gBAAM,IAAI,+BAA+B;AAAA,QAC3C;AAEA,eAAO,IAAI;AAAA,MACb;AAAA,IACF;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,UAAQ;AAAA,IACN;AAAA,IACA;AAAA,MACE,SAAS;AACP,cAAM,MAAM;AAEZ,YAAI,CAAC,IAAI,MAAM;AACb,gBAAM,IAAI,qBAAqB;AAAA,QACjC;AAEA,eAAO,IAAI;AAAA,MACb;AAAA,IACF;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,OAAK;AACP;AAEA,IAAO,+BAAQ,sBAAAC,SAAG,iBAAiB;AAAA,EACjC,SAAS;AAAA,EACT,MAAM;AAAA,EACN,cAAc,CAAC,cAAc;AAC/B,CAAC;;;ADvHD,IAAO,cAAQ;","names":["createError","fp"]}