UNPKG

@calljmp/cli

Version:
56 lines (48 loc) 4.16 kB
"use strict";var v=Object.create;var d=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var I=Object.getPrototypeOf,A=Object.prototype.hasOwnProperty;var U=(e,t)=>{for(var r in t)d(e,r,{get:t[r],enumerable:!0})},y=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of j(t))!A.call(e,i)&&i!==r&&d(e,i,{get:()=>t[i],enumerable:!(a=E(t,i))||a.enumerable});return e};var m=(e,t,r)=>(r=e!=null?v(I(e)):{},y(t||!e||!e.__esModule?d(r,"default",{value:e,enumerable:!0}):r,e)),P=e=>y(d({},"__esModule",{value:!0}),e);var $={};U($,{buildWithLocalHandler:()=>O,create:()=>q,start:()=>C});module.exports=P($);var R=require("miniflare"),n=m(require("./logger")),w=require("./build"),k=require("./env"),c=m(require("chalk")),u=m(require("fs/promises"));async function q({script:e="",port:t,database:r,buckets:a,log:i,bindings:l}){return new R.Miniflare({name:"calljmp",script:e,modules:!0,compatibilityDate:"2024-09-23",compatibilityFlags:["nodejs_compat"],host:"0.0.0.0",port:t,log:i,d1Persist:r,d1Databases:["DATABASE"],r2Buckets:a,bindings:{...l,DEVELOPMENT:!0}})}async function C({projectDirectory:e,script:t,port:r,database:a,buckets:i,onReady:l}){const b=await(0,k.readVariables)(e,"development"),g=Object.entries(b).filter(([s])=>s.toUpperCase().startsWith("SECRET_")).reduce((s,[o,f])=>(s[o.toUpperCase()]=f,s),{}),p=Object.entries(b).filter(([s])=>!s.toUpperCase().startsWith("SECRET_")).reduce((s,[o,f])=>(s[`VARIABLE_${o.toUpperCase()}`]=f,s),{});n.default.info("Variables:"),Object.keys(p).length>0?Object.entries(p).forEach(([s,o])=>{n.default.info(` ${c.default.gray(s.replace("VARIABLE_",""))}: ${c.default.blue(o)}`)}):n.default.info(" No variables found."),n.default.info("Secrets:"),Object.keys(g).length>0?Object.entries(g).forEach(([s])=>{n.default.info(` ${c.default.gray(s.replace("SECRET_",""))}: ${c.default.blue("********")}`)}):n.default.info(" No secrets found.");const h=await q({bindings:{...p,...g},script:t,port:r,database:a,buckets:i,log:n.default});try{await h.ready,l&&await l()}finally{await h.dispose()}}async function O(e){const t=await u.default.mkdtemp("/tmp/calljmp-");try{const r=`${t}/index.ts`,a=` import service from '${e}'; function decodeAccessToken(token: string) { const parts = token.split('.'); if (parts.length < 2) { throw new Error(\`Invalid JWT token: \${token}\`); } const base64Payload = parts[1].replace(/-/g, '+').replace(/_/g, '/'); const decodedPayload = atob(base64Payload); return JSON.parse(decodedPayload) as { userId: number | null; projectId: number; databaseId: string; serviceUuid: string | null; }; } export default { async fetch(originalRequest, ...opts) { const args = { platform: originalRequest.headers.get('X-Calljmp-Platform'), userId: null, serviceId: null }; const authorization = originalRequest.headers.get('Authorization'); if (authorization) { const token = authorization.replace(/^Bearers+/, ''); const { userId, serviceUuid } = decodeAccessToken(token); args.userId = userId; args.serviceId = serviceUuid; } const url = new URL(originalRequest.url); const targetUrl = new URL(\`https://app.service.calljmp.com\${url.pathname}\`); const headers = new Headers(originalRequest.headers); headers.set('X-Calljmp-Args', JSON.stringify(args)); const request = new Request(targetUrl, { headers, method: originalRequest.method, body: originalRequest.body, redirect: originalRequest.redirect, cf: originalRequest.cf, integrity: originalRequest.integrity, signal: originalRequest.signal, fetcher: originalRequest.fetcher }); return service.fetch(request, ...opts); } } `;return await u.default.writeFile(r,a),await(0,w.build)({entryPoints:r,debug:!0})}finally{await u.default.rm(t,{recursive:!0})}}0&&(module.exports={buildWithLocalHandler,create,start});