@omer-x/buttler
Version:
automates CI/CD workflows using Docker and GitHub webhooks
1 lines • 32.5 kB
JavaScript
(()=>{var e={};e.id=732,e.ids=[732],e.modules={3295:e=>{"use strict";e.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},4573:e=>{"use strict";e.exports=require("node:buffer")},8719:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{isRequestAPICallableInsideAfter:function(){return c},throwForSearchParamsAccessInUseCache:function(){return o},throwWithStaticGenerationBailoutError:function(){return s},throwWithStaticGenerationBailoutErrorWithDynamicError:function(){return i}});let n=r(80023),a=r(3295);function s(e,t){throw Object.defineProperty(new n.StaticGenBailoutError(`Route ${e} couldn't be rendered statically because it used ${t}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E576",enumerable:!1,configurable:!0})}function i(e,t){throw Object.defineProperty(new n.StaticGenBailoutError(`Route ${e} with \`dynamic = "error"\` couldn't be rendered statically because it used ${t}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E543",enumerable:!1,configurable:!0})}function o(e){let t=Object.defineProperty(Error(`Route ${e.route} used "searchParams" inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use "searchParams" outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E634",enumerable:!1,configurable:!0});throw e.invalidUsageError??=t,t}function c(){let e=a.afterTaskAsyncStorage.getStore();return(null==e?void 0:e.rootTaskSpawnPhase)==="action"}},8774:(e,t,r)=>{"use strict";function n(e,t){return e.map(e=>e[t])}function a(e){return e.reduce((e,t)=>Object.assign(e,t),{})}r.d(t,{E:()=>n,r:()=>a})},10846:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},12284:(e,t,r)=>{"use strict";r.d(t,{A:()=>a});var n=r(20072);let a=n.Ay.object({CURRENT_WORKING_DIRECTORY:n.Ay.string().default(process.cwd()),DEBUG_MODE:n.Ay.enum(["yes"]).optional()}).parse(process.env)},13057:(e,t,r)=>{"use strict";r.d(t,{X:()=>u,z:()=>l});var n=r(56013),a=r(89283),s=r(70932),i=r(77301),o=r(28234),c=r(31465);let u=(0,o.D)("ports",{serviceId:(0,a.Qq)().notNull().references(()=>c.$.id,{onDelete:"cascade",onUpdate:"restrict"}),external:(0,s.nd)({mode:"number"}).notNull(),internal:(0,s.nd)({mode:"number"}).notNull()},e=>({pk:(0,i.ie)({columns:[e.serviceId,e.external]})})),l=(0,n.K1)(u,({one:e})=>({service:e(c.$,{fields:[u.serviceId],references:[c.$.id]})}))},17537:(e,t,r)=>{"use strict";r.r(t),r.d(t,{patchFetch:()=>w,routeModule:()=>y,serverHooks:()=>v,workAsyncStorage:()=>m,workUnitAsyncStorage:()=>g});var n={};r.r(n),r.d(n,{POST:()=>b});var a=r(96559),s=r(48088),i=r(37719);r(99933);var o=r(86280);r(73913);var c=r(49543),u=r(55511),l=r.n(u),d=r(37144),f=r(8774),p=r(58624);async function h(e,t){let r=await e.query.services.findFirst({with:{environmentVariables:{columns:{key:!0,value:!0}},ports:{columns:{external:!0,internal:!0}},volumes:{columns:{id:!0,containerPath:!0}},networks:{columns:{id:!0}},providerlinks:{columns:{},with:{provider:{columns:{id:!0,name:!0,repo:!0,containerId:!0},with:{networks:{columns:{id:!0}},environmentVariables:{columns:{key:!0,value:!0}}}}}},clientLinks:{columns:{},with:{client:{columns:{id:!0,name:!0}}}}},where:(e,{eq:r,like:n,or:a})=>a(r(e.repo,`https://github.com/${t}.git`),r(e.repo,`git@github.com:${t}.git`),n(e.repo,`https://%:%@github.com/${t}.git`))});if(!r)return null;let{ports:n,environmentVariables:a,volumes:s,networks:i,providerlinks:o,clientLinks:c,...u}=r;return{...u,environmentVariables:(0,p.A)(a,"key","value"),ports:Object.fromEntries(n.map(({external:e,internal:t})=>[e,t.toString()])),volumes:(0,p.A)(s,"id","containerPath"),networkIds:(0,f.E)(i,"id"),providers:(0,f.E)(o,"provider").map(({networks:e,environmentVariables:t,...r})=>({...r,networkIds:(0,f.E)(e,"id"),variables:(0,p.A)(t,"key","value")})),clients:(0,f.E)(c,"client")}}async function b(e){let t=await e.arrayBuffer();if(!function(e,t,r){let n=l().createHmac("sha1",r).update(Buffer.from(t)).digest("hex");return e.headers.get("X-Hub-Signature")===`sha1=${n}`}(e,t,"buttler"))return new Response("Unauthorized",{status:401});switch((await (0,o.b)()).get("X-GitHub-Event")){case"ping":break;case"push":{let e=JSON.parse(Buffer.from(t).toString());if("refs/heads/main"!==e.ref)break;let r=await h(d.A,e.repository.full_name);r&&await (0,c.p)(r)}}return new Response("Webhook received",{status:200})}let y=new a.AppRouteRouteModule({definition:{kind:s.RouteKind.APP_ROUTE,page:"/webhook/route",pathname:"/webhook",filename:"route",bundlePath:"app/webhook/route"},resolvedPagePath:"/home/omer/Projects/buttler/src/app/webhook/route.ts",nextConfigOutput:"standalone",userland:n}),{workAsyncStorage:m,workUnitAsyncStorage:g,serverHooks:v}=y;function w(){return(0,i.patchFetch)({workAsyncStorage:m,workUnitAsyncStorage:g})}},21820:e=>{"use strict";e.exports=require("os")},28354:e=>{"use strict";e.exports=require("util")},29021:e=>{"use strict";e.exports=require("fs")},29100:(e,t,r)=>{"use strict";r.d(t,{h:()=>l,r:()=>u});var n=r(51707),a=r(56013),s=r(89283),i=r(8030),o=r(28234),c=r(31465);let u=(0,o.D)("build_images",{id:(0,s.Qq)().primaryKey(),serviceId:(0,s.Qq)().notNull().references(()=>c.$.id,{onDelete:"restrict",onUpdate:"restrict"}),status:(0,s.Qq)({enum:["pending","canceled","failed","ready"]}).notNull().default("pending"),errorCode:(0,s.Qq)({enum:["REPO_NOT_FOUND","BUILD_FAILED"]}),createdAt:(0,s.Qq)().notNull().default((0,n.ll)`(CURRENT_TIMESTAMP)`),updatedAt:(0,s.Qq)().notNull().default((0,n.ll)`(CURRENT_TIMESTAMP)`)},e=>({createdAtIdx:(0,i.Pe)("build_image_created_at_index").on(e.createdAt)})),l=(0,a.K1)(u,({one:e})=>({service:e(c.$,{fields:[u.serviceId],references:[c.$.id]})}))},29294:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-async-storage.external.js")},31465:(e,t,r)=>{"use strict";r.d(t,{$:()=>h,d:()=>b});var n=r(51707),a=r(56013),s=r(89283),i=r(8030),o=r(28234),c=r(29100),u=r(78444),l=r(39362),d=r(13057),f=r(99710),p=r(86398);let h=(0,o.D)("services",{id:(0,s.Qq)().primaryKey(),kind:(0,s.Qq)({enum:["git","database"]}).notNull(),name:(0,s.Qq)().notNull(),repo:(0,s.Qq)().notNull(),status:(0,s.Qq)({enum:["idle","running"]}).notNull().default("idle"),imageId:(0,s.Qq)(),containerId:(0,s.Qq)(),createdAt:(0,s.Qq)().notNull().default((0,n.ll)`(CURRENT_TIMESTAMP)`),updatedAt:(0,s.Qq)().notNull().default((0,n.ll)`(CURRENT_TIMESTAMP)`)},e=>({createdAtIdx:(0,i.Pe)("service_created_at_index").on(e.createdAt)})),b=(0,a.K1)(h,({many:e})=>({environmentVariables:e(u.r),ports:e(d.X),buildImages:e(c.r),volumes:e(p.o),networks:e(l.o),providerlinks:e(f.b,{relationName:"client"}),clientLinks:e(f.b,{relationName:"provider"})}))},33873:e=>{"use strict";e.exports=require("path")},37144:(e,t,r)=>{"use strict";r.d(t,{A:()=>v});var n={};r.r(n),r.d(n,{buildImages:()=>h.r,environmentVariables:()=>f.r,globalVariables:()=>l.v,networks:()=>y.o,ports:()=>p.X,relationsOfBuildImages:()=>h.h,relationsOfEnvironmentVariables:()=>f.z,relationsOfNetworks:()=>y.e,relationsOfPorts:()=>p.z,relationsOfServiceLinks:()=>m.n,relationsOfServices:()=>d.d,relationsOfVolumes:()=>b.a,serviceLinks:()=>m.b,services:()=>d.$,volumes:()=>b.o});var a=r(76760),s=r.n(a),i=r(87550),o=r.n(i),c=r(88314),u=r(12284),l=r(86598),d=r(31465),f=r(78444),p=r(13057),h=r(29100),b=r(86398),y=r(39362),m=r(99710);let g=new(o())(s().resolve(u.A.CURRENT_WORKING_DIRECTORY,"buttler.db")),v=(0,c.f)({schema:n,client:g,casing:"snake_case"})},39362:(e,t,r)=>{"use strict";r.d(t,{e:()=>c,o:()=>o});var n=r(56013),a=r(89283),s=r(28234),i=r(31465);let o=(0,s.D)("networks",{id:(0,a.Qq)().primaryKey(),kind:(0,a.Qq)({enum:["provider","custom"]}).notNull(),serviceId:(0,a.Qq)().notNull().references(()=>i.$.id,{onDelete:"cascade",onUpdate:"restrict"})}),c=(0,n.K1)(o,({one:e})=>({service:e(i.$,{fields:[o.serviceId],references:[i.$.id]})}))},43763:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ReflectAdapter",{enumerable:!0,get:function(){return r}});class r{static get(e,t,r){let n=Reflect.get(e,t,r);return"function"==typeof n?n.bind(e):n}static set(e,t,r,n){return Reflect.set(e,t,r,n)}static has(e,t){return Reflect.has(e,t)}static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}}},44870:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},48930:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(94634),a=r(31465);async function s(e,t,r){return(await e.update(a.$).set({...r,updatedAt:new Date().toISOString()}).where((0,n.eq)(a.$.id,t)).returning()).shift()}},49543:(e,t,r)=>{"use strict";r.d(t,{p:()=>S});var n=r(66926),a=r(32190),s=r(73802),i=r(59643),o=r(51455),c=r.n(o),u=r(76760),l=r.n(u),d=r(12284);function f(e){return l().resolve(d.A.CURRENT_WORKING_DIRECTORY,"storage/repos",e)}async function p(e,t){await h(t);let r=f(t);await c().mkdir(r,{recursive:!0});let n=(0,s.Ay)({baseDir:r,binary:"git",maxConcurrentProcesses:6});return await n.clone(e,r,{"--depth":"1","--single-branch":null,"--branch":"main"}),await n.cwd(r),await n.fetch(["--tags"]),r}async function h(e){await c().rm(f(e),{recursive:!0,force:!0})}var b=r(37144),y=r(77598),m=r.n(y),g=r(29100);async function v(e,t){let[r]=await e.insert(g.r).values({id:m().randomUUID(),...t}).returning({id:g.r.id});return r}var w=r(94634);async function R(e,t,r){return(await e.update(g.r).set(r).where((0,w.eq)(g.r.id,t)).returning()).shift()}var E=r(48930),O=r(8774),_=r(58986);async function S(e){let t=await v(b.A,{serviceId:e.id});return(0,a.after)(async()=>{let r=(0,O.E)(e.providers,"containerId").filter(e=>null!==e),a=await (0,i.VS)(`build-${t.id}`,r);try{let r=await p(e.repo,e.id),s=(0,O.r)(e.providers.map(t=>(0,_.N)(e.name,t.name,t.repo,t.variables))),o=await (0,i._w)(t.id,r,{...s,...e.environmentVariables},a.id,"yes"===d.A.DEBUG_MODE);if(await h(e.id),o?await R(b.A,t.id,{status:"ready"}):await R(b.A,t.id,{status:"failed",errorCode:"BUILD_FAILED"}),o&&e.containerId){await (0,i.od)(e.containerId),await (0,E.A)(b.A,e.id,{status:"idle",containerId:null,imageId:null});let r=await (0,i.g$)((0,n.kW)(e.name),t.id,{...s,...e.environmentVariables},e.ports,e.volumes,[...e.networkIds,...e.providers.map(e=>e.networkIds).flat()]);await (0,E.A)(b.A,e.id,{status:"running",containerId:r,imageId:t.id})}}catch(e){e instanceof s.XS&&e.message.includes("Repository not found")?await R(b.A,t.id,{status:"failed",errorCode:"REPO_NOT_FOUND"}):await R(b.A,t.id,{status:"failed"})}finally{await (0,i.Lp)(a.id,r)}}),t}},51455:e=>{"use strict";e.exports=require("node:fs/promises")},55511:e=>{"use strict";e.exports=require("crypto")},58624:(e,t,r)=>{"use strict";function n(e,t,r){return e.reduce((e,n)=>({...e,[n[t]]:n[r]}),{})}r.d(t,{A:()=>n})},58986:(e,t,r)=>{"use strict";r.d(t,{N:()=>a});var n=r(66926);function a(e,t,r,a){switch(r){case"postgres":return{POSTGRES_HOST:(0,n.kW)(t),POSTGRES_PORT:"5432",POSTGRES_USER:"postgres",POSTGRES_PASSWORD:a.POSTGRES_PASSWORD,POSTGRES_DATABASE:(0,n.LW)(e)};case"redis":return{REDIS_HOST:(0,n.kW)(t),REDIS_PORT:"6379"};default:return{}}}},59643:(e,t,r)=>{"use strict";r.d(t,{B8:()=>y,Lp:()=>v,Nc:()=>b,VS:()=>g,ZP:()=>d,_w:()=>l,aH:()=>f,g$:()=>p,od:()=>h,pb:()=>m});var n=r(76760),a=r.n(n),s=r(66400),i=r.n(s),o=r(49629);let c=new(i()),u={};function l(e,t,r,n,s){let i=a().join(t,"Dockerfile"),l=o.pack(a().dirname(i));return new Promise((t,a)=>{c.buildImage(l,{t:`${e}:latest`,buildargs:r,networkmode:n},(r,n)=>r?a(r):n?void(n.on("data",e=>{if(!s)return;let t=JSON.parse(e.toString("utf-8").trim());"stream"in t&&console.log(t.stream)}),n.on("end",()=>{c.getImage(`${e}:latest`).inspect().then(()=>t(!0)).catch(()=>t(!1))}),n.on("error",e=>{"UPDATE"===e?t(!1):a(e)}),u[e]=n):a(Error("no stream")))})}function d(e){return new Promise((t,r)=>{c.pull(`${e}:latest`,(e,n)=>{if(e)return r(e);c.modem.followProgress(n,(e,n)=>{if(e)return r(e);t(n)})})})}async function f(e){try{let t=c.getImage(e);await t.remove()}catch{}}async function p(e,t,r,n,a,s){let i=await c.createContainer({name:e,Image:t,Env:Object.entries(r).map(([e,t])=>`${e}=${t}`),HostConfig:{PortBindings:Object.fromEntries(Object.entries(n).map(([e,t])=>[`${t}/tcp`,[{HostIp:"127.0.0.1",HostPort:e}]])),RestartPolicy:{Name:"always"},Binds:Object.entries(a).map(([e,t])=>`${e}:${t}`)},Tty:!0});return await Promise.all(s.map(e=>w(i.id,e))),await i.start(),i.id}async function h(e){await c.getContainer(e).remove({force:!0})}function b(e,t){return new Promise((r,n)=>{c.getContainer(e).exec({Cmd:t,AttachStdout:!0,AttachStderr:!0,Tty:!0},(e,t)=>{if(e||!t)return n(e);t.start({Tty:!0},(e,t)=>{if(e||!t)return n(e);let a="";t.on("data",e=>{a+=e.toString()}),t.on("end",()=>{r(a)})})})})}function y(e,t){let r=c.getContainer(e);return new Promise((e,n)=>{r.logs({follow:!1,stdout:!0,stderr:!0,tail:t},(t,r)=>t?n(t):r?void e(r.toString()):n(Error("stream is undefined")))})}async function m(e){await c.createVolume({Name:e,Driver:"local"})}async function g(e,t=[]){let r=await c.createNetwork({Name:e,Driver:"bridge",CheckDuplicate:!0,Internal:!1,Attachable:!0});return await Promise.all(t.map(e=>w(e,r.id))),r}async function v(e,t=[]){let r=c.getNetwork(e);await Promise.all(t.map(e=>R(e,r.id))),await r.remove()}async function w(e,t){let r=c.getNetwork(t);await r.connect({Container:e})}async function R(e,t){let r=c.getNetwork(t);await r.disconnect({Container:e})}},63033:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},66400:e=>{"use strict";e.exports=require("dockerode")},72609:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{describeHasCheckingStringProperty:function(){return a},describeStringPropertyAccess:function(){return n},wellKnownProperties:function(){return s}});let r=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function n(e,t){return r.test(t)?"`"+e+"."+t+"`":"`"+e+"["+JSON.stringify(t)+"]`"}function a(e,t){let r=JSON.stringify(t);return"`Reflect.has("+e+", "+r+")`, `"+r+" in "+e+"`, or similar"}let s=new Set(["hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toString","valueOf","toLocaleString","then","catch","finally","status","displayName","toJSON","$$typeof","__esModule"])},73913:(e,t,r)=>{"use strict";let n=r(63033),a=r(29294),s=r(84971),i=r(76926),o=r(80023),c=r(98479);function u(){let e=a.workAsyncStorage.getStore(),t=n.workUnitAsyncStorage.getStore();switch((!e||!t)&&(0,n.throwForMissingRequestStore)("draftMode"),t.type){case"request":return l(t.draftMode,e);case"cache":case"unstable-cache":let r=(0,n.getDraftModeProviderForCacheScope)(e,t);if(r)return l(r,e);case"prerender":case"prerender-ppr":case"prerender-legacy":return f(null);default:return t}}function l(e,t){let r,n=d.get(u);return n||(r=f(e),d.set(e,r),r)}let d=new WeakMap;function f(e){let t=new p(e),r=Promise.resolve(t);return Object.defineProperty(r,"isEnabled",{get:()=>t.isEnabled,set(e){Object.defineProperty(r,"isEnabled",{value:e,writable:!0,enumerable:!0})},enumerable:!0,configurable:!0}),r.enable=t.enable.bind(t),r.disable=t.disable.bind(t),r}class p{constructor(e){this._provider=e}get isEnabled(){return null!==this._provider&&this._provider.isEnabled}enable(){b("draftMode().enable()"),null!==this._provider&&this._provider.enable()}disable(){b("draftMode().disable()"),null!==this._provider&&this._provider.disable()}}let h=(0,i.createDedupedByCallsiteServerErrorLoggerDev)(function(e,t){let r=e?`Route "${e}" `:"This route ";return Object.defineProperty(Error(`${r}used ${t}. \`draftMode()\` should be awaited before using its value. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E377",enumerable:!1,configurable:!0})});function b(e){let t=a.workAsyncStorage.getStore(),r=n.workUnitAsyncStorage.getStore();if(t){if(r){if("cache"===r.type)throw Object.defineProperty(Error(`Route ${t.route} used "${e}" inside "use cache". The enabled status of draftMode can be read in caches but you must not enable or disable draftMode inside a cache. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E246",enumerable:!1,configurable:!0});else if("unstable-cache"===r.type)throw Object.defineProperty(Error(`Route ${t.route} used "${e}" inside a function cached with "unstable_cache(...)". The enabled status of draftMode can be read in caches but you must not enable or disable draftMode inside a cache. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E259",enumerable:!1,configurable:!0});else if("after"===r.phase)throw Object.defineProperty(Error(`Route ${t.route} used "${e}" inside \`after\`. The enabled status of draftMode can be read inside \`after\` but you cannot enable or disable draftMode. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E348",enumerable:!1,configurable:!0})}if(t.dynamicShouldError)throw Object.defineProperty(new o.StaticGenBailoutError(`Route ${t.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${e}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E553",enumerable:!1,configurable:!0});if(r){if("prerender"===r.type){let n=Object.defineProperty(Error(`Route ${t.route} used ${e} without first calling \`await connection()\`. See more info here: https://nextjs.org/docs/messages/next-prerender-sync-headers`),"__NEXT_ERROR_CODE",{value:"E126",enumerable:!1,configurable:!0});(0,s.abortAndThrowOnSynchronousRequestDataAccess)(t.route,e,n,r)}else if("prerender-ppr"===r.type)(0,s.postponeWithTracking)(t.route,e,r.dynamicTracking);else if("prerender-legacy"===r.type){r.revalidate=0;let n=Object.defineProperty(new c.DynamicServerError(`Route ${t.route} couldn't be rendered statically because it used \`${e}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E558",enumerable:!1,configurable:!0});throw t.dynamicUsageDescription=e,t.dynamicUsageStack=n.stack,n}}}}},76760:e=>{"use strict";e.exports=require("node:path")},76926:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createDedupedByCallsiteServerErrorLoggerDev",{enumerable:!0,get:function(){return c}});let n=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=a(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var o=s?Object.getOwnPropertyDescriptor(e,i):null;o&&(o.get||o.set)?Object.defineProperty(n,i,o):n[i]=e[i]}return n.default=e,r&&r.set(e,n),n}(r(61120));function a(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(a=function(e){return e?r:t})(e)}let s={current:null},i="function"==typeof n.cache?n.cache:e=>e,o=console.warn;function c(e){return function(...t){o(e(...t))}}i(e=>{try{o(s.current)}finally{s.current=null}})},77598:e=>{"use strict";e.exports=require("node:crypto")},78335:()=>{},78444:(e,t,r)=>{"use strict";r.d(t,{r:()=>c,z:()=>u});var n=r(56013),a=r(89283),s=r(77301),i=r(28234),o=r(31465);let c=(0,i.D)("environment_variables",{serviceId:(0,a.Qq)().notNull().references(()=>o.$.id,{onDelete:"cascade",onUpdate:"restrict"}),key:(0,a.Qq)().notNull(),value:(0,a.Qq)().notNull()},e=>({pk:(0,s.ie)({columns:[e.serviceId,e.key]})})),u=(0,n.K1)(c,({one:e})=>({service:e(o.$,{fields:[c.serviceId],references:[o.$.id]})}))},78474:e=>{"use strict";e.exports=require("node:events")},79646:e=>{"use strict";e.exports=require("child_process")},83997:e=>{"use strict";e.exports=require("tty")},86280:(e,t,r)=>{"use strict";Object.defineProperty(t,"b",{enumerable:!0,get:function(){return d}});let n=r(92584),a=r(29294),s=r(63033),i=r(84971),o=r(80023),c=r(68388),u=r(76926),l=(r(44523),r(8719));function d(){let e=a.workAsyncStorage.getStore(),t=s.workUnitAsyncStorage.getStore();if(e){if(t&&"after"===t.phase&&!(0,l.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${e.route} used "headers" inside "after(...)". This is not supported. If you need this data inside an "after" callback, use "headers" outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E367",enumerable:!1,configurable:!0});if(e.forceStatic)return p(n.HeadersAdapter.seal(new Headers({})));if(t){if("cache"===t.type)throw Object.defineProperty(Error(`Route ${e.route} used "headers" inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use "headers" outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E304",enumerable:!1,configurable:!0});else if("unstable-cache"===t.type)throw Object.defineProperty(Error(`Route ${e.route} used "headers" inside a function cached with "unstable_cache(...)". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use "headers" outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E127",enumerable:!1,configurable:!0})}if(e.dynamicShouldError)throw Object.defineProperty(new o.StaticGenBailoutError(`Route ${e.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`headers\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E525",enumerable:!1,configurable:!0});if(t)if("prerender"===t.type){var r=e.route,u=t;let n=f.get(u);if(n)return n;let a=(0,c.makeHangingPromise)(u.renderSignal,"`headers()`");return f.set(u,a),Object.defineProperties(a,{append:{value:function(){let e=`\`headers().append(${h(arguments[0])}, ...)\``,t=y(r,e);(0,i.abortAndThrowOnSynchronousRequestDataAccess)(r,e,t,u)}},delete:{value:function(){let e=`\`headers().delete(${h(arguments[0])})\``,t=y(r,e);(0,i.abortAndThrowOnSynchronousRequestDataAccess)(r,e,t,u)}},get:{value:function(){let e=`\`headers().get(${h(arguments[0])})\``,t=y(r,e);(0,i.abortAndThrowOnSynchronousRequestDataAccess)(r,e,t,u)}},has:{value:function(){let e=`\`headers().has(${h(arguments[0])})\``,t=y(r,e);(0,i.abortAndThrowOnSynchronousRequestDataAccess)(r,e,t,u)}},set:{value:function(){let e=`\`headers().set(${h(arguments[0])}, ...)\``,t=y(r,e);(0,i.abortAndThrowOnSynchronousRequestDataAccess)(r,e,t,u)}},getSetCookie:{value:function(){let e="`headers().getSetCookie()`",t=y(r,e);(0,i.abortAndThrowOnSynchronousRequestDataAccess)(r,e,t,u)}},forEach:{value:function(){let e="`headers().forEach(...)`",t=y(r,e);(0,i.abortAndThrowOnSynchronousRequestDataAccess)(r,e,t,u)}},keys:{value:function(){let e="`headers().keys()`",t=y(r,e);(0,i.abortAndThrowOnSynchronousRequestDataAccess)(r,e,t,u)}},values:{value:function(){let e="`headers().values()`",t=y(r,e);(0,i.abortAndThrowOnSynchronousRequestDataAccess)(r,e,t,u)}},entries:{value:function(){let e="`headers().entries()`",t=y(r,e);(0,i.abortAndThrowOnSynchronousRequestDataAccess)(r,e,t,u)}},[Symbol.iterator]:{value:function(){let e="`headers()[Symbol.iterator]()`",t=y(r,e);(0,i.abortAndThrowOnSynchronousRequestDataAccess)(r,e,t,u)}}}),a}else"prerender-ppr"===t.type?(0,i.postponeWithTracking)(e.route,"headers",t.dynamicTracking):"prerender-legacy"===t.type&&(0,i.throwToInterruptStaticGeneration)("headers",e,t);(0,i.trackDynamicDataInDynamicRender)(e,t)}return p((0,s.getExpectedRequestStore)("headers").headers)}let f=new WeakMap;function p(e){let t=f.get(e);if(t)return t;let r=Promise.resolve(e);return f.set(e,r),Object.defineProperties(r,{append:{value:e.append.bind(e)},delete:{value:e.delete.bind(e)},get:{value:e.get.bind(e)},has:{value:e.has.bind(e)},set:{value:e.set.bind(e)},getSetCookie:{value:e.getSetCookie.bind(e)},forEach:{value:e.forEach.bind(e)},keys:{value:e.keys.bind(e)},values:{value:e.values.bind(e)},entries:{value:e.entries.bind(e)},[Symbol.iterator]:{value:e[Symbol.iterator].bind(e)}}),r}function h(e){return"string"==typeof e?`'${e}'`:"..."}let b=(0,u.createDedupedByCallsiteServerErrorLoggerDev)(y);function y(e,t){let r=e?`Route "${e}" `:"This route ";return Object.defineProperty(Error(`${r}used ${t}. \`headers()\` should be awaited before using its value. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E277",enumerable:!1,configurable:!0})}},86398:(e,t,r)=>{"use strict";r.d(t,{a:()=>c,o:()=>o});var n=r(56013),a=r(89283),s=r(28234),i=r(31465);let o=(0,s.D)("volumes",{id:(0,a.Qq)().primaryKey(),serviceId:(0,a.Qq)().notNull().references(()=>i.$.id,{onDelete:"cascade",onUpdate:"restrict"}),containerPath:(0,a.Qq)().notNull()}),c=(0,n.K1)(o,({one:e})=>({service:e(i.$,{fields:[o.serviceId],references:[i.$.id]})}))},86598:(e,t,r)=>{"use strict";r.d(t,{v:()=>a});var n=r(89283);let a=(0,r(28234).D)("global_variables",{key:(0,n.Qq)().primaryKey(),value:(0,n.Qq)().notNull()})},87550:e=>{"use strict";e.exports=require("better-sqlite3")},92584:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{HeadersAdapter:function(){return s},ReadonlyHeadersError:function(){return a}});let n=r(43763);class a extends Error{constructor(){super("Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers")}static callable(){throw new a}}class s extends Headers{constructor(e){super(),this.headers=new Proxy(e,{get(t,r,a){if("symbol"==typeof r)return n.ReflectAdapter.get(t,r,a);let s=r.toLowerCase(),i=Object.keys(e).find(e=>e.toLowerCase()===s);if(void 0!==i)return n.ReflectAdapter.get(t,i,a)},set(t,r,a,s){if("symbol"==typeof r)return n.ReflectAdapter.set(t,r,a,s);let i=r.toLowerCase(),o=Object.keys(e).find(e=>e.toLowerCase()===i);return n.ReflectAdapter.set(t,o??r,a,s)},has(t,r){if("symbol"==typeof r)return n.ReflectAdapter.has(t,r);let a=r.toLowerCase(),s=Object.keys(e).find(e=>e.toLowerCase()===a);return void 0!==s&&n.ReflectAdapter.has(t,s)},deleteProperty(t,r){if("symbol"==typeof r)return n.ReflectAdapter.deleteProperty(t,r);let a=r.toLowerCase(),s=Object.keys(e).find(e=>e.toLowerCase()===a);return void 0===s||n.ReflectAdapter.deleteProperty(t,s)}})}static seal(e){return new Proxy(e,{get(e,t,r){switch(t){case"append":case"delete":case"set":return a.callable;default:return n.ReflectAdapter.get(e,t,r)}}})}merge(e){return Array.isArray(e)?e.join(", "):e}static from(e){return e instanceof Headers?e:new s(e)}append(e,t){let r=this.headers[e];"string"==typeof r?this.headers[e]=[r,t]:Array.isArray(r)?r.push(t):this.headers[e]=t}delete(e){delete this.headers[e]}get(e){let t=this.headers[e];return void 0!==t?this.merge(t):null}has(e){return void 0!==this.headers[e]}set(e,t){this.headers[e]=t}forEach(e,t){for(let[r,n]of this.entries())e.call(t,n,r,this)}*entries(){for(let e of Object.keys(this.headers)){let t=e.toLowerCase(),r=this.get(t);yield[t,r]}}*keys(){for(let e of Object.keys(this.headers)){let t=e.toLowerCase();yield t}}*values(){for(let e of Object.keys(this.headers)){let t=this.get(e);yield t}}[Symbol.iterator](){return this.entries()}}},94069:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{MutableRequestCookiesAdapter:function(){return f},ReadonlyRequestCookiesError:function(){return o},RequestCookiesAdapter:function(){return c},appendMutableCookies:function(){return d},areCookiesMutableInCurrentPhase:function(){return h},getModifiedCookieValues:function(){return l},responseCookiesToRequestCookies:function(){return y},wrapWithMutableAccessCheck:function(){return p}});let n=r(23158),a=r(43763),s=r(29294),i=r(63033);class o extends Error{constructor(){super("Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options")}static callable(){throw new o}}class c{static seal(e){return new Proxy(e,{get(e,t,r){switch(t){case"clear":case"delete":case"set":return o.callable;default:return a.ReflectAdapter.get(e,t,r)}}})}}let u=Symbol.for("next.mutated.cookies");function l(e){let t=e[u];return t&&Array.isArray(t)&&0!==t.length?t:[]}function d(e,t){let r=l(t);if(0===r.length)return!1;let a=new n.ResponseCookies(e),s=a.getAll();for(let e of r)a.set(e);for(let e of s)a.set(e);return!0}class f{static wrap(e,t){let r=new n.ResponseCookies(new Headers);for(let t of e.getAll())r.set(t);let i=[],o=new Set,c=()=>{let e=s.workAsyncStorage.getStore();if(e&&(e.pathWasRevalidated=!0),i=r.getAll().filter(e=>o.has(e.name)),t){let e=[];for(let t of i){let r=new n.ResponseCookies(new Headers);r.set(t),e.push(r.toString())}t(e)}},l=new Proxy(r,{get(e,t,r){switch(t){case u:return i;case"delete":return function(...t){o.add("string"==typeof t[0]?t[0]:t[0].name);try{return e.delete(...t),l}finally{c()}};case"set":return function(...t){o.add("string"==typeof t[0]?t[0]:t[0].name);try{return e.set(...t),l}finally{c()}};default:return a.ReflectAdapter.get(e,t,r)}}});return l}}function p(e){let t=new Proxy(e,{get(e,r,n){switch(r){case"delete":return function(...r){return b("cookies().delete"),e.delete(...r),t};case"set":return function(...r){return b("cookies().set"),e.set(...r),t};default:return a.ReflectAdapter.get(e,r,n)}}});return t}function h(e){return"action"===e.phase}function b(e){if(!h((0,i.getExpectedRequestStore)(e)))throw new o}function y(e){let t=new n.RequestCookies(new Headers);for(let r of e.getAll())t.set(r);return t}},94735:e=>{"use strict";e.exports=require("events")},96487:()=>{},96559:(e,t,r)=>{"use strict";e.exports=r(44870)},99710:(e,t,r)=>{"use strict";r.d(t,{b:()=>c,n:()=>u});var n=r(56013),a=r(89283),s=r(77301),i=r(28234),o=r(31465);let c=(0,i.D)("service_links",{clientId:(0,a.Qq)().notNull().references(()=>o.$.id,{onDelete:"cascade",onUpdate:"restrict"}),providerId:(0,a.Qq)().notNull().references(()=>o.$.id,{onDelete:"cascade",onUpdate:"restrict"})},e=>({pk:(0,s.ie)({columns:[e.clientId,e.providerId]})})),u=(0,n.K1)(c,({one:e})=>({client:e(o.$,{fields:[c.clientId],references:[o.$.id],relationName:"client"}),provider:e(o.$,{fields:[c.providerId],references:[o.$.id],relationName:"provider"})}))},99933:(e,t,r)=>{"use strict";let n=r(94069),a=r(23158),s=r(29294),i=r(63033),o=r(84971),c=r(80023),u=r(68388),l=r(76926),d=(r(44523),r(8719)),f=new WeakMap;function p(e){let t=f.get(e);if(t)return t;let r=Promise.resolve(e);return f.set(e,r),Object.defineProperties(r,{[Symbol.iterator]:{value:e[Symbol.iterator]?e[Symbol.iterator].bind(e):m.bind(e)},size:{get:()=>e.size},get:{value:e.get.bind(e)},getAll:{value:e.getAll.bind(e)},has:{value:e.has.bind(e)},set:{value:e.set.bind(e)},delete:{value:e.delete.bind(e)},clear:{value:"function"==typeof e.clear?e.clear.bind(e):g.bind(e,r)},toString:{value:e.toString.bind(e)}}),r}function h(e){return"object"==typeof e&&null!==e&&"string"==typeof e.name?`'${e.name}'`:"string"==typeof e?`'${e}'`:"..."}let b=(0,l.createDedupedByCallsiteServerErrorLoggerDev)(y);function y(e,t){let r=e?`Route "${e}" `:"This route ";return Object.defineProperty(Error(`${r}used ${t}. \`cookies()\` should be awaited before using its value. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E223",enumerable:!1,configurable:!0})}function m(){return this.getAll().map(e=>[e.name,e]).values()}function g(e){for(let e of this.getAll())this.delete(e.name);return e}}};var t=require("../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),n=t.X(0,[719,312,629,704],()=>r(17537));module.exports=n})();