@calljmp/cli
Version:
56 lines (48 loc) • 4.16 kB
JavaScript
"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});