@erebus-sh/sdk
Version:
To install dependencies:
2 lines • 4.06 kB
JavaScript
const require_error=require(`./error-BeBbC3SO.cjs`),require_messageBody=require(`./messageBody-BDaUm8G2.cjs`);let zod=require(`zod`);zod=require_error.__toESM(zod);let hono=require(`hono`);hono=require_error.__toESM(hono);let __hono_zod_validator=require(`@hono/zod-validator`);__hono_zod_validator=require_error.__toESM(__hono_zod_validator);let hono_vercel=require(`hono/vercel`);hono_vercel=require_error.__toESM(hono_vercel);const FireWebhookSchema=zod.z.object({messageBody:zod.z.array(require_messageBody.MessageBodySchema),hmac:zod.z.string()});async function generateHmac(e,c){let l=new TextEncoder,u=l.encode(c),d=l.encode(e),f=await crypto.subtle.importKey(`raw`,u,{name:`HMAC`,hash:{name:`SHA-256`}},!1,[`sign`]),p=await crypto.subtle.sign(`HMAC`,f,d);return Array.from(new Uint8Array(p)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}async function verifyHmac(e,c,l){return await generateHmac(e,c)===l}function createApp(e){let l=new hono.Hono;return l.onError((e,l)=>(require_messageBody.logger.error(`[unhandled]`,{reqId:l.get(`reqId`),err:e instanceof Error?{name:e.name,message:e.message,stack:e.stack}:e,path:l.req.path,method:l.req.method}),l.json({error:`internal_error`,reqId:l.get(`reqId`)},500))),l.notFound(e=>e.json({error:`not_found`,path:e.req.path,reqId:e.get(`reqId`)},404)),l.use(`*`,async(l,u)=>{let d=crypto.randomUUID();if(l.set(`reqId`,d),e)if(typeof e==`function`){let c=await e(l.req.raw);l.set(`session`,c)}else l.set(`session`,e);let f=performance.now();try{await u()}finally{let e=Math.round(performance.now()-f);require_messageBody.logger.info(`[${d}] ${l.req.method} ${l.req.path} -> ${e}ms`)}}),l.route(`/`,routes)}const routes=new hono.Hono().get(`/api/health-not-meaningful`,e=>e.json({ok:!0,reqId:e.get(`reqId`)})).get(`/api/generate-token-test`,e=>e.get(`session`)?(require_messageBody.logger.info(`[${e.get(`reqId`)}] Generating token`),e.json({token:`test`})):e.json({error:`session_required, the server is not initialized properly`,reqId:e.get(`reqId`)},400)).post(`/api/erebus/pubsub/grant`,(0,__hono_zod_validator.zValidator)(`json`,zod.z.object({channel:zod.z.string()})),async e=>{let l=e.get(`session`),u=e.get(`reqId`);if(require_messageBody.logger.info(`[${u}] Generating token`),!l)return e.json({error:`session_required, the server is not initialized properly`,reqId:u},400);let d=``;try{d=await l.authorize()}catch(l){return require_messageBody.logger.error(`[${u}] Error generating token: ${l instanceof Error?l.message:`Unknown error`}`),e.json({error:`error_generating_token`,reqId:u,message:l instanceof Error?l.message:`Unknown error`},500)}return e.json({grant_jwt:d})}).post(`/api/erebus/pubsub/fire-webhook`,(0,__hono_zod_validator.zValidator)(`json`,FireWebhookSchema),async e=>{let{messageBody:c,hmac:l}=e.req.valid(`json`),u=process.env.WEBHOOK_SECRET;return u?verifyHmac(JSON.stringify(c),u,l)?e.json({ok:!0}):e.json({error:`Invalid HMAC please, check the HMAC is correct`},401):e.json({error:`WEBHOOK_SECRET is not set please, set the secret key in the environment variables`},500)});async function getSessionFromRequest(e,c,l){let u=``;try{let c=await e.clone().json();typeof c.channel==`string`&&(u=c.channel)}catch{}if(e.method===`POST`&&(e.url===`/api/erebus/pubsub/fire-webhook`||e.url.endsWith(`/api/erebus/pubsub/fire-webhook`))){let c=await e.json();await l(c);return}else return await c(u,{req:e})}function createAdapter({authorize:e,fireWebhook:c}){return{fetch:async l=>{let u=await getSessionFromRequest(l,e,c);return await createApp(u).fetch(l)}}}function createRouteHandler({authorize:e,fireWebhook:c}){return{POST:async l=>{let u=await getSessionFromRequest(l,e,c),d=createApp(u);return await(0,hono_vercel.handle)(d)(l)}}}Object.defineProperty(exports,`createAdapter`,{enumerable:!0,get:function(){return createAdapter}}),Object.defineProperty(exports,`createApp`,{enumerable:!0,get:function(){return createApp}}),Object.defineProperty(exports,`createRouteHandler`,{enumerable:!0,get:function(){return createRouteHandler}});
//# sourceMappingURL=next-Cn-qbSl3.cjs.map