@stacksjs/ts-cloud 0.16.32 → 0.16.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/aws/index.js +1 -1
  2. package/dist/bin/{chunk-6wz04wnk.js → chunk-0wtnhxdt.js} +1 -1
  3. package/dist/bin/{chunk-zhkbdsfs.js → chunk-1ye6ky7s.js} +1 -1
  4. package/dist/bin/chunk-2njcbs0c.js +1 -0
  5. package/dist/bin/chunk-35ct309x.js +1 -0
  6. package/dist/bin/{chunk-mpq5ct10.js → chunk-3kyny1x7.js} +4 -4
  7. package/dist/bin/chunk-3ybxaehy.js +1 -0
  8. package/dist/bin/{chunk-zk3nm0td.js → chunk-47q37egd.js} +3 -3
  9. package/dist/bin/{chunk-yccdr4be.js → chunk-49y286vw.js} +1 -1
  10. package/dist/bin/{chunk-py8cvqvx.js → chunk-4c4s5yph.js} +1 -1
  11. package/dist/bin/{chunk-x56s9b7f.js → chunk-4vbnagyd.js} +1 -1
  12. package/dist/bin/{chunk-kqf19j9m.js → chunk-59f6mqkj.js} +1 -1
  13. package/dist/bin/chunk-5p9jnpg2.js +1 -0
  14. package/dist/bin/{chunk-573red0g.js → chunk-5tfxp3d9.js} +6 -6
  15. package/dist/bin/{chunk-q6z8wvvb.js → chunk-66g6jdgy.js} +3 -3
  16. package/dist/bin/{chunk-tg45thhb.js → chunk-70w9nss5.js} +1 -1
  17. package/dist/bin/{chunk-jzby2kzy.js → chunk-7k52s3qm.js} +2 -2
  18. package/dist/bin/{chunk-6yr12f64.js → chunk-7kjy2hng.js} +5 -5
  19. package/dist/bin/{chunk-9e62z9je.js → chunk-7x727gt5.js} +2 -2
  20. package/dist/bin/{chunk-f7dtn45y.js → chunk-8ba9t3hv.js} +3 -3
  21. package/dist/bin/chunk-8za3y7q3.js +3 -0
  22. package/dist/bin/chunk-9aram0sm.js +1 -0
  23. package/dist/bin/{chunk-tgwx5haz.js → chunk-a1zagtx1.js} +2 -2
  24. package/dist/bin/chunk-axwpxssn.js +1 -0
  25. package/dist/bin/chunk-cqc4pc2h.js +1 -0
  26. package/dist/bin/chunk-cxde3tbf.js +1 -0
  27. package/dist/bin/chunk-d0xz1vh3.js +1 -0
  28. package/dist/bin/chunk-d2wm1zy3.js +1 -0
  29. package/dist/bin/{chunk-gcm9n6ww.js → chunk-dgad3hwh.js} +9 -9
  30. package/dist/bin/{chunk-81mt497w.js → chunk-hbrb314y.js} +1 -1
  31. package/dist/bin/chunk-hnwdjkrt.js +1 -0
  32. package/dist/bin/{chunk-kgtzvh2k.js → chunk-hpzbvc4a.js} +1 -1
  33. package/dist/bin/chunk-hrvfz72e.js +1 -0
  34. package/dist/bin/{chunk-sdy79wz7.js → chunk-hs5a6dhm.js} +4 -4
  35. package/dist/bin/chunk-j4d7h8rh.js +1 -0
  36. package/dist/bin/{chunk-yqkdyf0w.js → chunk-jsncf48k.js} +2 -2
  37. package/dist/bin/chunk-k178k5re.js +1 -0
  38. package/dist/bin/chunk-k5h2a7a8.js +1 -0
  39. package/dist/bin/{chunk-0sht4yfg.js → chunk-mb2fh91q.js} +2 -2
  40. package/dist/bin/chunk-mzzrnkk5.js +9 -0
  41. package/dist/bin/{chunk-8mgwqpmx.js → chunk-nnxkw5pn.js} +2 -2
  42. package/dist/bin/{chunk-6k5g8b1w.js → chunk-nw8wmbmq.js} +2 -2
  43. package/dist/bin/chunk-prz0w9pq.js +1 -0
  44. package/dist/bin/{chunk-b9psp74n.js → chunk-qay67r71.js} +19 -19
  45. package/dist/bin/chunk-rhjjdhhq.js +1 -0
  46. package/dist/bin/{chunk-fpxb97q5.js → chunk-rkd3x7fw.js} +1 -1
  47. package/dist/bin/chunk-rv7epkg1.js +1 -0
  48. package/dist/bin/{chunk-79sd00d1.js → chunk-s38txg38.js} +1 -1
  49. package/dist/bin/{chunk-qe56mnjc.js → chunk-s6qnx8a8.js} +2 -2
  50. package/dist/bin/{chunk-nnawqw34.js → chunk-sfb9q18c.js} +102 -102
  51. package/dist/bin/{chunk-8d8tdhtx.js → chunk-szpqbbyr.js} +4 -4
  52. package/dist/bin/chunk-tftcv9rt.js +1 -0
  53. package/dist/bin/{chunk-jhp53qsd.js → chunk-v0va4547.js} +2 -2
  54. package/dist/bin/{chunk-efbmb8rw.js → chunk-wc5swv1a.js} +1 -1
  55. package/dist/bin/{chunk-985ev3ns.js → chunk-wef81maa.js} +1 -1
  56. package/dist/bin/{chunk-vhz2wmb8.js → chunk-wq4hkbgj.js} +64 -64
  57. package/dist/bin/chunk-yd2155bj.js +1 -0
  58. package/dist/bin/chunk-yqefsck4.js +1 -0
  59. package/dist/bin/chunk-yzyt35ys.js +1 -0
  60. package/dist/bin/cli.js +45 -45
  61. package/dist/bin/dashboard-server.js +1 -1
  62. package/dist/{chunk-r45340yc.js → chunk-0pe1dfy0.js} +80 -80
  63. package/dist/{chunk-peeqkk92.js → chunk-29dcfx1g.js} +73 -73
  64. package/dist/{chunk-57fhsqzb.js → chunk-444h366b.js} +2 -2
  65. package/dist/{chunk-qrs912nk.js → chunk-45116tdd.js} +1 -1
  66. package/dist/chunk-4nfjkggt.js +1 -0
  67. package/dist/{chunk-kavwrxm8.js → chunk-6n72pe9x.js} +2 -2
  68. package/dist/{chunk-3harnmd6.js → chunk-7r2qc39k.js} +2 -2
  69. package/dist/chunk-8nafnyax.js +1 -0
  70. package/dist/{chunk-nq51dyxz.js → chunk-9r32w840.js} +12 -12
  71. package/dist/{chunk-ffxcn7mw.js → chunk-c6nw88s3.js} +1 -1
  72. package/dist/{chunk-10asqy6j.js → chunk-e08h4q50.js} +2 -2
  73. package/dist/chunk-e3831mvy.js +1 -0
  74. package/dist/{chunk-m93g67j0.js → chunk-g3f3ccdw.js} +2 -2
  75. package/dist/{chunk-9g8as6sa.js → chunk-jp57js5y.js} +1 -1
  76. package/dist/{chunk-efssa93f.js → chunk-k3azr9e3.js} +3 -3
  77. package/dist/{chunk-4hdp9ms2.js → chunk-m1jp1abp.js} +1 -1
  78. package/dist/{chunk-qjxdhb8x.js → chunk-n4gkyye3.js} +1 -1
  79. package/dist/{chunk-2mw7bjhn.js → chunk-nmm287ym.js} +3 -3
  80. package/dist/{chunk-s909414m.js → chunk-pkpmz35j.js} +1 -1
  81. package/dist/{chunk-xbh2vr95.js → chunk-pqm7fz1d.js} +95 -95
  82. package/dist/{chunk-t1gts5j9.js → chunk-qad1mjmc.js} +6 -6
  83. package/dist/{chunk-m5vwh9tb.js → chunk-s958jt49.js} +1 -1
  84. package/dist/{chunk-89rs2afj.js → chunk-tzvtq055.js} +1 -1
  85. package/dist/{chunk-wbabf3hg.js → chunk-v1wqxgra.js} +1 -1
  86. package/dist/{chunk-zesd879q.js → chunk-v9t4751b.js} +2 -2
  87. package/dist/{chunk-dm4vt53n.js → chunk-wctam3r1.js} +1 -1
  88. package/dist/chunk-xask9f1n.js +1 -0
  89. package/dist/chunk-xrr334m5.js +1 -0
  90. package/dist/{chunk-jh38v9zp.js → chunk-y3dj8xwk.js} +1 -1
  91. package/dist/{chunk-4jgy95bv.js → chunk-y3h0ybmn.js} +19 -19
  92. package/dist/deploy/index.js +1 -1
  93. package/dist/dns/index.js +1 -1
  94. package/dist/drivers/index.js +1 -1
  95. package/dist/drivers/shared/compute-ops.d.ts +7 -0
  96. package/dist/drivers/shared/releases.d.ts +43 -16
  97. package/dist/index.js +5 -5
  98. package/dist/operations/index.js +1 -1
  99. package/dist/protection/index.js +1 -1
  100. package/dist/spend/index.js +1 -1
  101. package/dist/ui/404.html +1 -1
  102. package/dist/ui/accept-invitation.html +1 -1
  103. package/dist/ui/access-denied.html +1 -1
  104. package/dist/ui/account/automation.html +6 -6
  105. package/dist/ui/account/security.html +2 -2
  106. package/dist/ui/applications/compose.html +6 -6
  107. package/dist/ui/applications/new.html +2 -2
  108. package/dist/ui/data/backups.html +6 -6
  109. package/dist/ui/data/services.html +6 -6
  110. package/dist/ui/data/volumes.html +6 -6
  111. package/dist/ui/index.html +6 -6
  112. package/dist/ui/infrastructure/topology.html +6 -6
  113. package/dist/ui/integrations.html +1 -1
  114. package/dist/ui/operations/alerts.html +6 -6
  115. package/dist/ui/operations/configuration.html +6 -6
  116. package/dist/ui/operations/jobs.html +6 -6
  117. package/dist/ui/operations/maintenance.html +6 -6
  118. package/dist/ui/operations/observability.html +6 -6
  119. package/dist/ui/operations/previews.html +6 -6
  120. package/dist/ui/operations/queue.html +6 -6
  121. package/dist/ui/operations/regions.html +6 -6
  122. package/dist/ui/operations/releases.html +6 -6
  123. package/dist/ui/operations/spend.html +6 -6
  124. package/dist/ui/operations/workloads.html +6 -6
  125. package/dist/ui/security.html +1 -1
  126. package/dist/ui/server/actions.html +6 -6
  127. package/dist/ui/server/activity.html +1 -1
  128. package/dist/ui/server/capacity.html +6 -6
  129. package/dist/ui/server/database.html +6 -6
  130. package/dist/ui/server/deployments.html +5 -5
  131. package/dist/ui/server/diagnostics.html +1 -1
  132. package/dist/ui/server/firewall.html +5 -5
  133. package/dist/ui/server/fleet.html +5 -5
  134. package/dist/ui/server/logs.html +5 -5
  135. package/dist/ui/server/metrics.html +5 -5
  136. package/dist/ui/server/security.html +1 -1
  137. package/dist/ui/server/services.html +2 -2
  138. package/dist/ui/server/sites.html +6 -6
  139. package/dist/ui/server/ssh-keys.html +6 -6
  140. package/dist/ui/server/team.html +6 -6
  141. package/dist/ui/server/terminal.html +2 -2
  142. package/dist/ui/serverless/alarms.html +6 -6
  143. package/dist/ui/serverless/assets.html +2 -2
  144. package/dist/ui/serverless/cost.html +2 -2
  145. package/dist/ui/serverless/data.html +6 -6
  146. package/dist/ui/serverless/deployments.html +2 -2
  147. package/dist/ui/serverless/firewall.html +1 -1
  148. package/dist/ui/serverless/functions.html +6 -6
  149. package/dist/ui/serverless/logs.html +6 -6
  150. package/dist/ui/serverless/metrics.html +2 -2
  151. package/dist/ui/serverless/queues.html +6 -6
  152. package/dist/ui/serverless/secrets.html +6 -6
  153. package/dist/ui/serverless/traces.html +6 -6
  154. package/dist/ui/serverless.html +5 -5
  155. package/package.json +3 -3
  156. package/dist/bin/chunk-12j17qm5.js +0 -1
  157. package/dist/bin/chunk-24473jks.js +0 -1
  158. package/dist/bin/chunk-3932p1z3.js +0 -1
  159. package/dist/bin/chunk-3eztnxgw.js +0 -1
  160. package/dist/bin/chunk-4182gadf.js +0 -1
  161. package/dist/bin/chunk-4er4ktcs.js +0 -1
  162. package/dist/bin/chunk-9eq18gds.js +0 -1
  163. package/dist/bin/chunk-9zhp2z0s.js +0 -1
  164. package/dist/bin/chunk-bmmr5mq6.js +0 -1
  165. package/dist/bin/chunk-cr56pxpt.js +0 -1
  166. package/dist/bin/chunk-dvv2z19r.js +0 -1
  167. package/dist/bin/chunk-eyrmv6c4.js +0 -1
  168. package/dist/bin/chunk-fnnv0t66.js +0 -1
  169. package/dist/bin/chunk-fwmje99n.js +0 -1
  170. package/dist/bin/chunk-gzxpkk0c.js +0 -3
  171. package/dist/bin/chunk-n775dk3f.js +0 -1
  172. package/dist/bin/chunk-ppj604c9.js +0 -1
  173. package/dist/bin/chunk-prq5gw4j.js +0 -1
  174. package/dist/bin/chunk-pt71fyem.js +0 -1
  175. package/dist/bin/chunk-qvj454fy.js +0 -1
  176. package/dist/bin/chunk-smj97rs5.js +0 -1
  177. package/dist/bin/chunk-wt7wjgcr.js +0 -9
  178. package/dist/bin/chunk-yf3zys06.js +0 -1
  179. package/dist/bin/chunk-zmjm7bmm.js +0 -1
  180. package/dist/chunk-05bmq0z1.js +0 -1
  181. package/dist/chunk-0qdgw73b.js +0 -1
  182. package/dist/chunk-983txhkg.js +0 -1
  183. package/dist/chunk-gv2m8yyg.js +0 -1
  184. package/dist/chunk-pf6sanwe.js +0 -1
@@ -1 +0,0 @@
1
- import{hc,ae,yc,Nd,bp,hi,vp,Tp,Ws,Ep,Cp,wp,Ap,Ip,Rp,Pp,Sc,bc,Gs,Ks,Ao,et,A,Js,vc,H,Pr,w,Dd,yi,Xs,Qs,F,Io,Np,Dp,kp,_p,l,s,xp,$p,E,Ys,Zs,ea,Op,Lp,De,ta,Ro,kd,Mp,Up,Ue,Et,ra,Tc,Ec,Bp,Cc,wc,Ac,na,Ic,jt,Po,Si,No,bi,Be,_d,Do,ko,ia,oa,sa,aa,ca,la,ve,j,S,L,tt,D,xd,Ct,ge,Vt,Fp,$d,Te,_o,Fe,zt,vi,Ee,xo,ke,Od,Ti,Ce,we,re,Ei,X,Ht,wt,Ae,t,$o,jp,Rc,da,Vp,zp,Hp,qp,ua,Wp,Gp,Kp,Jp,Xp,Qp,Yp,Zp,em,tm,rm,nm,Ld,Md,Ud,Bd,Fd,jd,Vd,qt,Pc,Nc,Nr,Ci,im,Dc,om,sm,cn,am,cm,lm,dm,um,pm,zd,Hd,qd,Wd,Gd,Oo,mm,pa,Kd,Jd,Xd,kc,Ie,gm,Qd,At,Lo,Dr,Yd,_c,Zd,eu,tu,xc,_e,fm,hm,ym,Sm,ru,bm,Re,vm,Tm,Em,$c,Oc,Cm,Lc,Mc,wm,Am,Im,Rm,Pm,nu,ma,Nm,Dm,km,_m,xm,iu,ou,$m,Om,Lm,Mm,Um,Bm,Fm,jm,Vm,Uc,ga,zm,Hm,qm,Wm,Bc,Fc,jc,Gm,Vc,Km,Jm,Xm,Qm,zc,Ym,Zm,eg,tg,rg,ng,ig,og,su,au,cu,lu,Hc,sg,ag,cg,lg,dg,ug,pg,mg,gg,du,uu,pu,mu,fg,hg,qc,yg,Wc,Gc,Kc,Jc,Sg,bg,vg,Tg,rt,wi,Eg,Cg,wg,Ag,Ig,Rg,Pg,Ng,gu,Dg,kg,Xc,Qc,_g,xg,fu,$g,Og,Lg,Mg,Ug,Bg,Fg,jg,Vg,zg,Hg,qg,Wg,Gg,Kg,Jg,Xg,Qg,Yg,Zg,ef,Yc,tf,Zc,rf,el,nf,tl,of,rl,sf,ln,af,nl,cf,Mo,lf,il,df,ol,uf,sl,pf,al,mf,cl,gf,dn,ff,ll,hf,dl,yf,ul,Sf,pl,bf,ml,vf,gl,Tf,fl,Ef,hl,Cf,yl,wf,Sl,Af,bl,If,vl,Rf,Tl,Pf,El,Nf,Cl,Df,wl,kf,Al,_f,Il,xf,Rl,$f,Pl,Of,Nl,Lf,Dl,Mf,kl,Uf,_l,Bf,xl,Ff,hu,yu,Su,bu,$l,jf,Ol,Vf,Ll,zf,Ml,Hf,Ai,vu,Tu,Uo,fa,un,Eu,Bo,Wt,ha,ya,Cu,wu,Ul,Au,Sa,Bl,qf,Wf,ba,va,Ta,Fl,Fo,jl,Vl,Ea,zl,Hl,ql,Iu,Ru,Pu,Gf,Nu,Du,Kf,ku,Wl,_u,xu,$u,Jf,Ou,Ii,Ca,Lu,Xf,Mu,jo,Vo,wa,Gl,Qf,Kl,Yf,Jl,Zf,Xl,eh,Ql,th}from"./chunk-nnawqw34.js";export{il as ABTestManager,Fe as AI,Zd as AWSAPIError,el as AWSConfigManager,jp as AWS_PSEUDO_PARAMETERS,rt as AWS_REGIONS,xo as ApiGateway,$o as Arn,re as AssetHasher,Ce as Auth,Yc as BackupManager,Ll as BatchProcessingManager,nl as BlueGreenManager,Dl as BounceComplaintHandler,Sl as BuildOptimizationManager,Be as CDN,va as CHAIN_HEADER,ra as CLOUDFRONT_FAILOVER_STATUS_CODES,Og as COMMON_CROSS_ACCOUNT_ROLES,vi as Cache,Mo as CanaryManager,fl as CertificateManager,At as CloudError,Rc as CloudFormationBuilder,Xd as CloudFormationClient,Qd as CloudFrontClient,tl as CloudTrailManager,mu as CommandHistory,Ae as Communication,S as Compute,Lo as ConfigurationError,bl as ContainerRegistryManager,Dr as CredentialError,Wc as CrossRegionReferenceManager,Md as DASHBOARD_ENTRY,Ud as DASHBOARD_PORT_BASE,Bd as DASHBOARD_PORT_SPAN,Ld as DASHBOARD_STATE_DIR,Tc as DEFAULT_FAILOVER_STATUS_CODES,Fo as DEFAULT_RECURSION_LIMITS,Re as DEFAULT_SERVICE_LIMITS,Sc as DEFAULT_STATE_DIR,_d as DEFAULT_STORAGE_FAILOVER_STATUS_CODES,ba as DEPTH_HEADER,Ol as DLQMonitoringManager,ve as DNS,Pl as DNSSECManager,zt as Database,pl as DatabaseUserManager,_e as DebugLogger,kd as DependencyGraph,we as Deployment,Yd as DeploymentError,Zc as DisasterRecoveryManager,D as Email,hu as EmailAdvanced,kl as EmailAnalyticsManager,yu as EmailHandlers,xl as EmailTemplateManager,eu as ErrorCodes,ko as FAILOVER_REPLICA_POLICY_SID,$l as FIFOQueueManager,$c as FileCache,tt as FileSystem,t as Fn,Gc as GlobalResourceManager,rl as GuardDutyManager,nu as HashCache,Jl as HealthCheckManager,yl as ImageScanningManager,Vt as JobLoader,Lu as LARAVEL_SERVERLESS_BUILD_STEPS,Cl as LambdaConcurrencyManager,Il as LambdaDLQManager,wl as LambdaDestinationsManager,Tl as LambdaLayersManager,Al as LambdaVPCManager,El as LambdaVersionsManager,cl as LogsManager,Eu as MANAGED_NODE_VERSIONS,Pc as MANAGEMENT_DASHBOARD_SITE_PREFIX,ke as Messaging,al as MetricsManager,ll as MigrationManager,Bc as MockCloudFormation,jc as MockDynamoDB,Fc as MockS3,Ti as Monitoring,Xc as MultiAccountManager,qc as MultiRegionManager,au as MultiStepProgress,L as Network,Xl as NetworkSecurityManager,wc as ORIGIN_CONNECTION_ATTEMPTS,Ac as ORIGIN_CONNECTION_TIMEOUT,Ec as ORIGIN_GROUP_ALLOWED_METHODS,Bp as ORIGIN_GROUP_ID_SUFFIX,Cc as ORIGIN_GROUP_SELECTION_CRITERIA,Qc as OrganizationManager,Mu as PHP_DEFAULT_EXCLUDES,Cu as PHP_LAYER_EXTENSIONS,X as ParameterStore,ul as PerformanceManager,Ee as Permissions,Ct as Phone,Su as PhoneAdvanced,xd as PhoneHandlers,Vc as PreviewEnvironmentManager,zc as PreviewNotificationService,su as ProgressBar,ol as ProgressiveDeploymentManager,_p as Pseudo,ge as Queue,Ml as QueueManagementManager,Rp as QueuePresets,fu as RECOMMENDED_ACCOUNT_STRUCTURES,$g as RECOMMENDED_SCPS,du as REPL,pu as REPLCommandBuilder,uu as REPLContext,iu as RateLimiter,Pp as RealtimePresets,Ea as RecursionGuard,wt as Redirects,Kc as RegionPairManager,Et as Registry,dl as ReplicaManager,Ql as ResourceManagementManager,Nl as Route53ResolverManager,Rl as Route53RoutingManager,kc as S3Client,Ie as S3Error,Te as SMS,bc as STATE_DIR_ENV_VAR,Do as STORAGE_FAILOVER_METADATA_KEY,Ht as Search,Ei as Secrets,gl as SecretsManager,ml as SecretsRotationManager,j as Security,ln as SecurityHubManager,hl as SecurityScanningManager,_l as SenderReputationManager,vl as ServiceMeshManager,_o as Sftp,bu as SmsAdvanced,$d as SmsHandlers,cu as Spinner,Jc as StackDependencyManager,Fp as StacksIntegration,Gl as StaticSiteManager,Ue as Storage,Kl as StorageAdvancedManager,dn as SyntheticsManager,Ta as TRACE_HEADER,lu as TaskList,Io as TemplateBuilder,Oc as TemplateCache,_c as ValidationError,Od as Workflow,sl as XRayManager,df as abTestManager,Mp as analyzeStackDiff,fa as artifactKey,Si as assertOriginGroupMethods,dg as autocomplete,nf as awsConfigManager,tf as backupManager,Nm as batch,zf as batchProcessingManager,cf as blueGreenManager,Mf as bounceComplaintHandler,Wf as buildBunRuntimeLayerZip,da as buildCloudFormationTemplate,ca as buildFailoverReplicaPolicyStatement,Qs as buildMailEnv,qf as buildNodeRuntimeLayerZip,Af as buildOptimizationManager,Ic as buildOriginGroup,Po as buildOriginGroups,Xf as buildPhpRuntimeLayerZip,aa as buildReplicationConfiguration,sa as buildReplicationRole,lf as canaryManager,Um as categorizeChanges,Ef as certificateManager,Sm as checkIAMPermissions,Nu as checkInvocation,vm as checkServiceQuotas,ou as chunk,Cp as clearSigningKeyCache,jm as cloudConfigSchema,of as cloudTrailManager,Vo as collectPhpAppEntries,om as composePresets,ya as composeServerlessAppTemplate,If as containerRegistryManager,Gp as createApiBackendPreset,$u as createCliHandler,mm as createCredentialProvider,nm as createDashboardSite,Yp as createDataPipelinePreset,xc as createError,ua as createExistingStaticFullStackPreset,Wp as createFullStackAppPreset,Jf as createHandlers,_u as createHttpHandler,Jp as createJamstackPreset,tm as createLaravelPreset,Zp as createMLApiPreset,Xp as createMicroservicesPreset,Gm as createMockAWS,zp as createNodeJsServerPreset,Hp as createNodeJsServerlessPreset,sm as createPreset,Nd as createPresignedUrl,bp as createPresignedUrlAsync,xu as createQueueHandler,Qp as createRealtimeAppPreset,gm as createS3Client,rm as createServerlessLaravelPreset,qp as createServerlessNodePreset,Vp as createStaticSitePreset,em as createTraditionalWebAppPreset,Kp as createWordPressPreset,Ai as createZip,Sg as crossRegionReferenceManager,bf as databaseUserManager,Uc as defaultLocalConfig,Pr as deploymentCoexistenceError,Fd as deriveManagementDashboardPort,vc as detectDeploymentTargets,hm as detectMisconfigurations,hc as detectServiceRegion,Om as diffTemplates,Vf as dlqMonitoringManager,Of as dnssecManager,rf as drManager,Uf as emailAnalyticsManager,Ff as emailTemplateManager,ku as eventToRequest,Dc as extendPreset,jf as fifoQueueManager,Pm as findChangedFiles,Bg as formatAccountStructure,rg as formatBytes,Up as formatDiff,ng as formatDuration,pg as formatFlagSuggestions,fg as formatHistory,hg as formatHistoryStats,og as formatKeyValue,ig as formatList,tg as formatProgressBar,gu as formatRegion,Dg as formatRegionList,sg as formatSuggestion,Zm as formatTable,eg as formatTree,qd as fromEC2Metadata,Wd as fromECSMetadata,zd as fromEnvironment,Hd as fromSharedCredentials,Gd as fromWebIdentity,Fl as functionFingerprint,Sa as generateAppImageDockerfile,Zg as generateApprovalConfig,vu as generateBootstrap,Xm as generateCleanupWorkflow,Qm as generateCostReportWorkflow,Mg as generateCrossAccountRoleCF,Xg as generateDeploymentConfig,qg as generateDeploymentPipeline,Fg as generateDeploymentWorkflow,s as generateLogicalId,Jg as generateManualPipeline,Hg as generateMatrixWorkflow,Qg as generateMultiEnvConfig,Wg as generateMultiEnvPipeline,jg as generateMultiEnvWorkflow,Vg as generatePRPreviewWorkflow,ef as generateParallelConfig,Ou as generatePhpFpmConfig,Au as generatePhpLayerDockerfile,Gg as generatePreviewPipeline,Jm as generatePreviewWorkflow,l as generateResourceName,Yg as generateScheduledConfig,Kg as generateScheduledPipeline,zg as generateScheduledWorkflow,Jd as getAccountId,Eg as getAllRegions,Rg as getClosestRegion,mg as getCommandUsage,cg as getContextualHelp,Oo as getCredentials,Bm as getDeploymentStrategy,Fm as getDiffStats,Lm as getDiffSummary,tu as getErrorDetails,ga as getLocalConfig,qm as getLocalCredentials,Hm as getLocalEndpoint,Wm as getLocalEnvVars,Tm as getQuotaUsageSummary,Lg as getRecommendedStructure,wi as getRegion,kg as getRegionStats,wg as getRegionsByCompliance,Cg as getRegionsByLocation,Ag as getRegionsByPricingTier,ru as getRequiredPermissions,wp as getSigningKeyCacheSize,xp as getTimestamp,bg as globalResourceManager,sf as guardDutyManager,qt as hasManagementDashboardSite,wm as hashBuffer,Am as hashDirectory,Lc as hashFile,Im as hashManifest,Mc as hashString,Zf as healthCheckManager,wf as imageScanningManager,Vl as inspectInvocation,Ru as installRecursionFetch,ql as invocationContext,ag as isLikelyTypo,zm as isLocalDevelopment,Nr as isManagementDashboardSiteName,Ap as isNodeCryptoAvailable,No as isS3RestEndpoint,Ks as isStateDirConfigured,Js as isStatePath,Ig as isValidRegion,Ip as isWebCryptoAvailable,Df as lambdaConcurrencyManager,xf as lambdaDLQManager,kf as lambdaDestinationsManager,Pf as lambdaLayersManager,_f as lambdaVPCManager,Nf as lambdaVersionsManager,Ca as laravelServerlessEnvDefaults,gf as logsManager,Dd as mailEnabled,Xs as mailFirewallPorts,hi as makeAWSRequest,Tp as makeAWSRequestAsync,vp as makeAWSRequestOnce,Nc as managementDashboardSiteName,cn as mergeInfrastructure,mf as metricsManager,hf as migrationManager,_g as multiAccountManager,yg as multiRegionManager,eh as networkSecurityManager,xg as organizationManager,wa as packagePhpApp,un as packageServerlessApp,ma as parallel,Dm as parallelMap,km as parallelWithRetry,jl as parseChain,Ep as parseJSONResponse,Ws as parseXMLResponse,Sf as performanceManager,Ul as phpLayerBuildStage,wu as phpLayerPackages,Ii as phpRuntimeLayerAssets,Km as previewManager,Ym as previewNotifications,$m as processInChunks,uf as progressiveDeploymentManager,zl as propagationHeaders,Hf as queueManagementManager,Rm as quickHash,Hl as recursionBlockedResponse,vg as regionPairManager,yf as replicaManager,Mm as requiresReplacement,Gf as resetRecursionRuntime,Kf as resolveApp,w as resolveAppDatabase,F as resolveCloudProvider,pa as resolveCredentials,jd as resolveDashboardDomain,Vd as resolveDashboardDomains,Lp as resolveDeployBucketName,H as resolveDeploymentMode,na as resolveFailoverStatusCodes,yi as resolveMailService,im as resolveManagementDashboardSite,Ci as resolveManagementDashboardSites,jt as resolveOriginConnection,E as resolveProjectStackName,ha as resolveQueueNames,Wt as resolveQueues,Iu as resolveRecursionConfig,Kd as resolveRegion,De as resolveServerlessAppStackName,ta as resolveServerlessArtifactBucketName,Ro as resolveServerlessAssetBucketName,Bo as resolveServerlessRuntime,ea as resolveSiteBucketName,Zs as resolveSiteResourceName,Ys as resolveSiteStackName,A as resolveStatePath,Op as resolveStorageBucketName,ia as resolveStorageFailover,th as resourceManagementManager,Wl as responseToResult,Lf as route53ResolverManager,$f as route53RoutingManager,Tu as runBuildHooks,jo as runPhpBuildHooks,oa as s3RegionalDomain,$p as sanitizeName,lg as searchCommands,Tf as secretsManager,vf as secretsRotationManager,af as securityHubManager,Cf as securityScanningManager,Bf as senderReputationManager,_m as sequence,Rf as serviceMeshManager,Gs as setStateDir,Uo as sha256,Pu as sharedRecursionGuard,Bl as sharedRuntimeLoop,ae as signRequest,yc as signRequestAsync,Tg as stackDependencyManager,Ao as stateDir,et as statePath,Qf as staticSiteManager,Yf as storageAdvancedManager,la as storageFailoverReplicasFromTemplate,Hc as suggestCommand,ug as suggestFlags,bm as suggestIAMPolicy,Em as suggestQuotaIncrease,Ng as suggestRegionPairs,Pg as suggestRegions,ff as syntheticsManager,Cm as templateCache,Ug as validateAccountStructure,Vm as validateAgainstSchema,gg as validateCommand,fm as validateConfiguration,ym as validateCredentials,bi as validateOriginGroups,kp as validateResourceLimits,Np as validateTemplate,Dp as validateTemplateSize,um as withCDN,dm as withCache,lm as withDatabase,Du as withInvocation,am as withMonitoring,pm as withQueue,cm as withSecurity,xm as withTimeout,pf as xrayManager};
@@ -1 +0,0 @@
1
- import{R}from"./chunk-fpxb97q5.js";import"./chunk-qe56mnjc.js";export{R as LambdaClient};
@@ -1 +0,0 @@
1
- import{ed,td,rd,nd,zu,Hu}from"./chunk-mpq5ct10.js";import"./chunk-py8cvqvx.js";import"./chunk-9e62z9je.js";import"./chunk-x56s9b7f.js";import"./chunk-efbmb8rw.js";import"./chunk-kqf19j9m.js";import"./chunk-qe56mnjc.js";export{zu as deleteStaticSite,td as deployStaticSite,Hu as deployStaticSiteFull,ed as generateStaticSiteTemplate,nd as invalidateCache,rd as uploadStaticFiles};
@@ -1 +0,0 @@
1
- import{wd,ac,Ad,co,lo,uo,Es}from"./chunk-sdy79wz7.js";import"./chunk-nnawqw34.js";export{wd as MANAGEMENT_DASHBOARD_SITE,Es as buildManagementDashboardArtifact,ac as dashboardCredentialsFile,lo as ensureManagementDashboard,uo as managementDashboardSiteNames,Ad as resolveDashboardAuth,co as resolveUiSource};
@@ -1 +0,0 @@
1
- import{fi,wo,u,N,Hs}from"./chunk-qe56mnjc.js";export{u as AWSClient,N as buildQueryParams,wo as coerceXmlValues,Hs as detectCredentialSource,fi as resolveS3Endpoint};
@@ -1 +0,0 @@
1
- import{ct}from"./chunk-kgtzvh2k.js";import"./chunk-qe56mnjc.js";export{ct as STSClient};
@@ -1 +0,0 @@
1
- import{Wn}from"./chunk-zk3nm0td.js";import"./chunk-tg45thhb.js";import"./chunk-f7dtn45y.js";import"./chunk-fpxb97q5.js";import"./chunk-tgwx5haz.js";import"./chunk-x56s9b7f.js";import"./chunk-kqf19j9m.js";import"./chunk-qe56mnjc.js";import"./chunk-nnawqw34.js";export{Wn as resolveDashboardData};
@@ -1 +0,0 @@
1
- import{V}from"./chunk-tg45thhb.js";import"./chunk-qe56mnjc.js";export{V as SQSClient};
@@ -1,3 +0,0 @@
1
- import{J,U,ui,Ls,Bt,pc}from"./chunk-wt7wjgcr.js";function c(e){return`'${e.split("'").join("'\\''")}'`}function m(e){let r=e.user||"root",s=e.script.join(`
2
- `),t=r==="root"?'bash -l "$TS_CLOUD_RECIPE"':`runuser -l ${c(r)} -c "bash $TS_CLOUD_RECIPE"`;return["set -uo pipefail",`echo "__TS_CLOUD_RECIPE_BEGIN__ ${e.name} (user=${r})"`,"TS_CLOUD_RECIPE=$(mktemp)",`cat > "$TS_CLOUD_RECIPE" <<'TS_CLOUD_RECIPE_EOF'`,s,"TS_CLOUD_RECIPE_EOF",'chmod +r "$TS_CLOUD_RECIPE"',t,"TS_CLOUD_RC=$?",'rm -f "$TS_CLOUD_RECIPE"',`echo "__TS_CLOUD_RECIPE_END__ ${e.name} exit=$TS_CLOUD_RC"`,"exit $TS_CLOUD_RC"]}var l={info:()=>{},warn:()=>{},error:()=>{},step:()=>{},success:()=>{}};async function i(e){return await e.driver.findComputeTargets({slug:e.slug,environment:e.environment,role:e.role||"app"})}async function ks(e,r){let s=e.logger||l,t=await i(e);if(t.length===0)return{success:!1,error:`No '${e.role||"app"}' servers found for ${e.slug}/${e.environment}.`};let n=J(e.slug,r.siteName),u=Bt(n,r.to||"unused"),o=["set -uo pipefail",...pc(u,{...r.to?{to:r.to}:{},unitBase:`${e.slug}-${r.siteName}`}),`(cd ${U} && pantry restart php-fpm) 2>/dev/null || true`,`(cd ${u.current} && eval "$(cd ${U} && pantry env 2>/dev/null)" && php artisan queue:restart) 2>/dev/null || true`];s.step(`Rolling back ${r.siteName}${r.to?` to ${r.to}`:" to the previous release"} on ${t.length} server(s)...`);let a=await e.driver.runRemoteDeploy({targets:t,commands:o,comment:`ts-cloud rollback ${e.slug}/${r.siteName}`,tags:{Project:e.slug,Environment:e.environment,Role:e.role||"app"}});if(!a.success)s.error(`Rollback failed: ${a.error||"unknown error"}`);else s.success(`Rolled back ${r.siteName}.`);return{success:a.success,error:a.error,perInstance:a.perInstance}}async function hp(e,r){let s=await i(e);if(s.length===0)return{success:!1,error:`No '${e.role||"app"}' servers found for ${e.slug}/${e.environment}.`};let t=Ls(J(e.slug,r.siteName)),n=Math.max(1,r.limit??20),u=[`[ -f ${t} ] && tail -n ${n} ${t} || echo "no deploy history for ${r.siteName}"`],o=await e.driver.runRemoteDeploy({targets:s,commands:u,comment:`ts-cloud deploy:history ${e.slug}/${r.siteName}`,tags:{Project:e.slug,Environment:e.environment,Role:e.role||"app"}});return{success:o.success,error:o.error,perInstance:o.perInstance}}async function yp(e,r){let s=e.logger||l,t=await i(e);if(t.length===0)return{success:!1,error:`No '${e.role||"app"}' servers found for ${e.slug}/${e.environment}.`};s.step(`Running recipe '${r.name}' as ${r.user||"root"} on ${t.length} server(s)...`);let n=await e.driver.runRemoteDeploy({targets:t,commands:m({name:r.name,script:r.script,user:r.user}),comment:`ts-cloud recipe ${r.name}`,tags:{Project:e.slug,Environment:e.environment,Role:e.role||"app"}});if(!n.success)s.error(`Recipe '${r.name}' failed: ${n.error||"unknown error"}`);else s.success(`Recipe '${r.name}' completed.`);return{success:n.success,error:n.error,perInstance:n.perInstance}}async function _s(e,r){let s=e.logger||l;if(!r.database?.name)return{success:!1,error:"No appDatabase configured to restore."};let t=await i(e);if(t.length===0)return{success:!1,error:`No '${e.role||"app"}' servers found for ${e.slug}/${e.environment}.`};s.step(`Restoring database '${r.database.name}'${r.from?` from ${r.from}`:" from the latest backup"} on ${t.length} server(s)...`);let n=await e.driver.runRemoteDeploy({targets:t,commands:ui(r.database,{from:r.from}),comment:`ts-cloud db:restore ${e.slug}/${r.database.name}`,tags:{Project:e.slug,Environment:e.environment,Role:e.role||"app"}});if(!n.success)s.error(`Restore failed: ${n.error||"unknown error"}`);else s.success(`Restored ${r.database.name}.`);return{success:n.success,error:n.error,perInstance:n.perInstance}}
3
- export{ks,hp,yp,_s};
@@ -1 +0,0 @@
1
- import{Vu}from"./chunk-jhp53qsd.js";import"./chunk-985ev3ns.js";import"./chunk-tgwx5haz.js";import"./chunk-qe56mnjc.js";import"./chunk-nnawqw34.js";export{Vu as buildAndPushServerlessImage};
@@ -1 +0,0 @@
1
- import{G,ao}from"./chunk-py8cvqvx.js";import"./chunk-efbmb8rw.js";import"./chunk-qe56mnjc.js";export{G as ACMClient,ao as ACMDnsValidator};
@@ -1 +0,0 @@
1
- import{ks,hp,yp,_s}from"./chunk-gzxpkk0c.js";import"./chunk-wt7wjgcr.js";import"./chunk-nnawqw34.js";export{hp as getComputeDeployHistory,_s as restoreDatabaseBackup,ks as rollbackComputeSite,yp as runComputeRecipe};
@@ -1 +0,0 @@
1
- import{me}from"./chunk-6wz04wnk.js";import"./chunk-qe56mnjc.js";export{me as RDSClient};
@@ -1 +0,0 @@
1
- import{mc,Sp}from"./chunk-q6z8wvvb.js";import"./chunk-efbmb8rw.js";import"./chunk-kqf19j9m.js";import"./chunk-qe56mnjc.js";export{mc as EmailClient,Sp as email};
@@ -1 +0,0 @@
1
- import{v}from"./chunk-x56s9b7f.js";import"./chunk-qe56mnjc.js";export{v as CloudFormationClient};
@@ -1,9 +0,0 @@
1
- import{H,Pr}from"./chunk-nnawqw34.js";function J(e,t){return`/var/www/${e}-${t}`}var _e=new Set(["laravel","php","statamic","wordpress"]);function ci(e){return e.type!=null&&_e.has(e.type)}function xs(e){let t=e.proxyTo;if(t==null)return[];return(Array.isArray(t)?t:[t]).map((n)=>String(n).trim()).filter((n)=>n.length>0)}function Se(e){return xs(e).length>0}function ee(e){if(e.deploy)return e.deploy;if(ci(e))return"server";if(e.start)return"server";return"bucket"}function P(e){if(e.redirect)return"redirect";if(Se(e))return"proxy";if(ci(e))return"server-php";if(ee(e)==="bucket")return"bucket";return e.start?"server-app":"server-static"}function fo(e){return e.infrastructure?.compute!=null||Boolean(e.cloud?.attachTo?.trim())}function $s(e,t={}){let r=[],n=[],i=e.sites||{},s=fo(e),c=Pr(e);if(c)r.push(c);let d=new Map;for(let[l,o]of Object.entries(i)){if(!o)continue;let f=ee(o),E=P(o);if(E==="redirect"){if(!o.domain)r.push(`Site '${l}' is a redirect site but has no \`domain\` to redirect from.`);if(!(typeof o.redirect==="string"?o.redirect:o.redirect?.to))r.push(`Site '${l}' is a redirect site but has no redirect target (\`redirect\` / \`redirect.to\`).`);if(!s)r.push(`Site '${l}' is a redirect site but no \`infrastructure.compute\` is configured to host the gateway that serves the redirect.`);let a=[];if(o.start)a.push("start");if(o.root)a.push("root");if(o.proxyTo)a.push("proxyTo");if(a.length>0)n.push(`Site '${l}' is a redirect site but also sets ${a.join(", ")}. These are ignored.`);continue}if(E==="proxy"){if(!o.domain)r.push(`Site '${l}' is a proxy site but has no \`domain\` to route from.`);if(!s)r.push(`Site '${l}' is a proxy site but no \`infrastructure.compute\` is configured to host the gateway that forwards it.`);let p=[];if(o.start)p.push("start");if(o.root)p.push("root");if(typeof o.port==="number")p.push("port");if(o.build)p.push("build");if(o.preStart&&o.preStart.length>0)p.push("preStart");if(p.length>0)n.push(`Site '${l}' sets \`proxyTo\`, so ts-cloud ships and supervises nothing for it. ${p.join(", ")} ${p.length===1?"is":"are"} ignored — remove ${p.length===1?"it":"them"}, or drop \`proxyTo\` to let ts-cloud own the service.`);continue}if(f==="server"&&!o.start&&!o.root){r.push(`Site '${l}' sets deploy:'server' but declares neither \`start\` (dynamic app) nor \`root\` (static site to serve). Add one.`);continue}if(E==="server-php"){if(!s)r.push(`Site '${l}' is a PHP site (type:'${o.type}') but no \`infrastructure.compute\` is configured. Add a server (infrastructure.compute) with PHP provisioning.`);if(!o.repository?.url)r.push(`Site '${l}' is a PHP site (type:'${o.type}') but has no \`repository.url\` to clone. PHP sites deploy via git.`)}else if(E==="server-app"){if(!s)r.push(`Site '${l}' deploys to a server (deploy:'server'${o.deploy?"":" inferred from `start`"}) but no \`infrastructure.compute\` is configured. Set deploy:'bucket' or add a server (infrastructure.compute).`);if(typeof o.port==="number"){let p=t.occupiedPorts?.get(o.port);if(p)r.push(`Site '${l}' wants port ${o.port}, which project '${p}' already serves on this box. Attached projects share one port namespace. Give '${l}' a free port, or let the attach allocate one.`);let a=d.get(o.port);if(a)r.push(`Sites '${a}' and '${l}' both use port ${o.port}. Server apps sharing a box must use distinct ports.`);else d.set(o.port,l)}}else if(E==="server-static"){if(!o.root)r.push(`Site '${l}' is a server static site (deploy:'server', no \`start\`) but has no \`root\` directory to serve.`);if(!s)r.push(`Site '${l}' deploys to a server (deploy:'server') but no \`infrastructure.compute\` is configured. Set deploy:'bucket' or add a server (infrastructure.compute).`)}else{if(!o.root)r.push(`Site '${l}' deploys to a bucket but has no \`root\` directory to upload.`);let p=[];if(o.start)p.push("start");if(typeof o.port==="number")p.push("port");if(o.preStart&&o.preStart.length>0)p.push("preStart");if(p.length>0)n.push(`Site '${l}' deploys to a bucket but sets server-only field(s): ${p.join(", ")}. These are ignored. Set deploy:'server' to use them.`)}}return{errors:r,warnings:n}}function Os(e){let t=P(e);return t!=="bucket"&&t!=="redirect"&&t!=="proxy"}function cc(e){return P(e)==="bucket"}function lc(e,t){if(H(e)==="serverless")return!0;let r=Object.entries(e.sites??{}).filter(([,i])=>i!=null),n=t?r.filter(([i])=>i===t):r;if(n.length===0)return!0;return!n.every(([,i])=>{let s=P(i);return s==="redirect"||s==="proxy"})}var O={php:"php.net",nginx:"nginx.org",composer:"getcomposer.org",mysql:"mysql.com",mariadb:"mariadb.com/server",postgres:"postgresql.org",vitess:"vitess.io",etcd:"etcd.io",redis:"redis.io",memcached:"memcached.org",meilisearch:"meilisearch.com",mail:"github.com/mail-os/mail",git:"git-scm.com",certbot:"certbot.eff.org",bun:"bun.sh",node:"nodejs.org",deno:"deno.land"};var U="/opt/pantry";function M(e){return`'${e.split("'").join("'\\''")}'`}function vr(e={}){return["export DEBIAN_FRONTEND=noninteractive","export PANTRY_SERVICE_SCOPE=system","export PANTRY_INSTALL_DIR=/usr/local/bin",e.version?`export PANTRY_VERSION=${M(e.version)}`:'export PANTRY_VERSION="${PANTRY_VERSION:-latest}"',"command -v curl >/dev/null 2>&1 || (apt-get update -y && apt-get install -y curl ca-certificates)","command -v unzip >/dev/null 2>&1 || (apt-get update -y && apt-get install -y unzip)",'OS=$(uname -s | tr \'[:upper:]\' \'[:lower:]\'); ARCH=$(uname -m); case "$ARCH" in x86_64|amd64) ARCH=x64 ;; arm64|aarch64) ARCH=arm64 ;; esac; ZIP="pantry-${OS}-${ARCH}.zip"; if [ "${PANTRY_VERSION:-latest}" = latest ]; then REL=\'latest/download\'; else REL="download/v${PANTRY_VERSION}"; fi; TMP=$(mktemp -d); curl -fsSL -o "${TMP}/${ZIP}" "https://github.com/pantry-pm/pantry/releases/${REL}/${ZIP}"; unzip -o "${TMP}/${ZIP}" -d /usr/local/bin; chmod +x /usr/local/bin/pantry; rm -rf "${TMP}"','export PATH="/usr/local/bin:$PATH"',"mkdir -p /opt/pantry"]}function St(){return'eval "$(cd /opt/pantry && pantry env 2>/dev/null)" || true'}function Ze(e){if(e.length===0)return[];return[`(cd /opt/pantry && pantry install ${[...new Set(e)].map(M).join(" ")})`]}function ho(e){return[...new Set(e)].flatMap((t)=>[`(cd /opt/pantry && pantry start ${M(t)})`,`(cd /opt/pantry && pantry enable ${M(t)})`])}var S="/etc/mail",T="mail-server",F="mail",G=`${U}/pantry/.bin`;function h(e){return`'${String(e).split("'").join("'\\''")}'`}function b(e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,"\\\"")}"`}function fe(e){return[e.version?`${O.mail}@${e.version}`:O.mail]}function Y(e,t){return`${S}/dkim/${t}.${e.dkim.selector}.pem`}function te(e){return`${e.storagePath}/smtp.db`}function ge(e){let t=["# Generated by ts-cloud. Edits are overwritten on the next deploy —","# change `services.mail` in the cloud config instead.","","[server]",`host = ${b(e.bindAddress)}`,`port = ${e.ports.smtp}`,`hostname = ${b(e.hostname)}`];if(e.domains.length>0)t.push(`local_domains = ${b(e.domains.join(", "))}`);if(e.mode==="catcher")t.push("catch_all = true");if(t.push(`max_message_size = ${e.maxMessageSize}`,"","[tls]",`enabled = ${e.tls.enabled}`),e.tls.certPath)t.push(`cert_path = ${b(e.tls.certPath)}`);if(e.tls.keyPath)t.push(`key_path = ${b(e.tls.keyPath)}`);if(t.push("","[auth]",`enabled = ${e.mode==="server"}`,"","[antispam]",`dnsbl = ${e.spam.dnsbl}`,`greylist = ${e.spam.greylist}`,`spam_filter = ${e.spam.enabled}`,`junk_score = ${e.spam.junkScore}`,`reject_score = ${e.spam.rejectScore}`,"","[dkim]",`rotation_enabled = ${e.dkim.enabled&&e.dkim.rotate}`,`rotation_interval_days = ${e.dkim.rotateIntervalDays}`,"","[acme]",`enabled = ${e.tls.acme}`),e.tls.acmeEmail)t.push(`email = ${b(e.tls.acmeEmail)}`);if(t.push("","[webhook]",`enabled = ${!!e.webhookUrl}`),e.webhookUrl)t.push(`url = ${b(e.webhookUrl)}`);return t.push(""),t.join(`
2
- `)}function Te(e){let t=["# Generated by ts-cloud. See /etc/mail/config.toml for the rest.",`SMTP_DB_PATH=${te(e)}`,`SMTP_DELIVERY_METHOD=${e.delivery==="ses"?"ses":"direct"}`];if(e.delivery==="ses")t.push(`SMTP_SES_REGION=${e.sesRegion}`);if(e.ports.submission)t.push(`SUBMISSION_PORT=${e.ports.submission}`);if(e.ports.submissions)t.push(`SMTPS_PORT=${e.ports.submissions}`);if(e.ports.imap)t.push("IMAP_ENABLED=1",`IMAP_PORT=${e.ports.imap}`);if(e.webmail.enabled)t.push("SMTP_ENABLE_WEBMAIL=true",`SMTP_WEBMAIL_PORT=${e.webmail.port}`,`SMTP_WEBMAIL_SECURE_COOKIES=${e.tls.enabled}`);if(e.tls.requireForAuth)t.push("SMTP_REQUIRE_TLS_FOR_AUTH=true");if(e.dkim.enabled&&e.domains.length>0){let[r,...n]=e.domains;if(t.push(`DKIM_DOMAIN=${r}`,`DKIM_SELECTOR=${e.dkim.selector}`,`DKIM_PRIVATE_KEY_PATH=${Y(e,r)}`),n.length>0){let i=n.map((s)=>`${s}:${e.dkim.selector}:${Y(e,s)}`);t.push(`DKIM_EXTRA_KEYS=${i.join(",")}`)}}return t.push(""),t.join(`
3
- `)}function he(e){let t=[e.ports.smtp,e.ports.submission,e.ports.submissions,e.ports.imap,e.ports.imaps].some((r)=>typeof r==="number"&&r<1024);return["[Unit]","Description=Mail server (SMTP/IMAP + webmail)","After=network-online.target","Wants=network-online.target","","[Service]","Type=simple",`User=${T}`,`Group=${T}`,`WorkingDirectory=${e.storagePath}`,`EnvironmentFile=${S}/mail.env`,`Environment="PATH=${G}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"`,`ExecStart=${G}/mail serve --config ${S}/config.toml`,"Restart=always","RestartSec=5","LimitNOFILE=65536",...t?["AmbientCapabilities=CAP_NET_BIND_SERVICE","CapabilityBoundingSet=CAP_NET_BIND_SERVICE"]:[],"NoNewPrivileges=true","PrivateTmp=true","ProtectSystem=strict","ProtectHome=true","ProtectKernelTunables=true","ProtectKernelModules=true","ProtectControlGroups=true",`ReadWritePaths=${e.storagePath} ${S}`,"","[Install]","WantedBy=multi-user.target",""].join(`
4
- `)}function ve(e){if(!e.dkim.enabled||e.domains.length===0)return[];let t=[`mkdir -p ${S}/dkim`];for(let r of e.domains){let n=Y(e,r);t.push(`if [ ! -f ${h(n)} ]; then openssl genrsa -out ${h(n)} 2048; fi`,`chmod 0600 ${h(n)}`,`echo "DKIM ${e.dkim.selector}._domainkey.${r} IN TXT v=DKIM1; k=rsa; p=$(openssl rsa -in ${h(n)} -pubout -outform PEM 2>/dev/null | grep -v '^-----' | tr -d '\\n')"`)}return t.push(`chown -R ${T}:${T} ${S}/dkim`),t}function ye(e){if(e.accounts.length===0)return[];let t=(r)=>`runuser -u ${T} -- env SMTP_DB_PATH="$TS_CLOUD_MAIL_DB" ${G}/mail user:local ${r} || true`;return e.accounts.flatMap((r)=>[t(`create ${h(r.address)} ${h(r.password)} ${h(r.address)}`),t(`change-password ${h(r.address)} ${h(r.password)}`)])}function re(e){if(!e.enabled)return[];return[...Ze(fe(e)),`id -u ${T} >/dev/null 2>&1 || useradd --system --no-create-home --shell /usr/sbin/nologin ${T}`,`mkdir -p ${e.storagePath} ${S}`,`chown -R ${T}:${T} ${e.storagePath}`,`TS_CLOUD_MAIL_DB="$(grep -sE '^SMTP_DB_PATH=' ${S}/mail.env | head -1 | cut -d= -f2- || true)"`,`[ -n "$TS_CLOUD_MAIL_DB" ] || TS_CLOUD_MAIL_DB=${h(te(e))}`,`cat > ${S}/config.toml <<'TS_CLOUD_MAIL_CONF_EOF'`,ge(e),"TS_CLOUD_MAIL_CONF_EOF",`cat > ${S}/mail.env <<'TS_CLOUD_MAIL_ENV_EOF'`,Te(e),"TS_CLOUD_MAIL_ENV_EOF",`sed -i "s|^SMTP_DB_PATH=.*|SMTP_DB_PATH=$TS_CLOUD_MAIL_DB|" ${S}/mail.env`,`chmod 0640 ${S}/mail.env`,`chown root:${T} ${S}/mail.env`,...ve(e),`cat > /etc/systemd/system/${F}.service <<'TS_CLOUD_MAIL_UNIT_EOF'`,he(e),"TS_CLOUD_MAIL_UNIT_EOF","systemctl daemon-reload",`systemctl enable ${F}`,`systemctl restart ${F}`,...ye(e)]}var g=`${U}/pantry/.bin`,W=15306,K=15991,V=15999,ne=16101,w=2379,v="/var/lib/vitess",X=100;function li(e){return e===!0||typeof e==="object"&&e!==null}function Ee(e){return typeof e==="object"&&e!==null?e:{}}function m(e){return`'${String(e).split("'").join("'\\''")}'`}function Pe(e){let r=[e.version?`vitess.io@${e.version}`:"vitess.io"];if(e.mode!=="combo"&&!e.etcdEndpoint)r.push("etcd.io");return r.push("mysql.com@8.0.43"),r}var _="vitess",be=`${g}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin`,ae="/usr/local/lib/vitess",z=new Map;function j(e){return`${ae}/${e}.sh`}function D(e,t){return z.set(e,Ce(t)),`/bin/sh ${j(e)}`}function se(){let e=[`mkdir -p ${ae}`];for(let[t,r]of z)e.push(`cat > ${j(t)} <<'TS_CLOUD_VITESS_LAUNCHER_EOF'`,r,"TS_CLOUD_VITESS_LAUNCHER_EOF",`chmod 0755 ${j(t)}`);return e}function Ce(e){return["#!/bin/sh","set -e",`cd ${U}`,`PANTRY_ENV="$(pantry env 2>/dev/null | grep -E '^(export [A-Za-z_]|[A-Za-z_][A-Za-z0-9_]*=)' || true)"`,'if [ -n "$PANTRY_ENV" ]; then eval "$PANTRY_ENV"; fi',`VT_MYSQL_ROOT="$(dirname "$(dirname "$(readlink -f ${g}/mysqld 2>/dev/null)")")"`,`VTROOT="$(dirname "$(dirname "$(readlink -f ${g}/mysqlctld 2>/dev/null)")")"`,"export VT_MYSQL_ROOT VTROOT",'LD_LIBRARY_PATH="$VT_MYSQL_ROOT/lib:$VTROOT/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"',"export LD_LIBRARY_PATH",`exec ${e.join(" ")}`].join(`
5
- `)}function A(e){let t=["[Unit]",`Description=${e.description}`,`After=network.target${e.after?.length?` ${e.after.join(" ")}`:""}`];if(e.requires?.length)t.push(`Requires=${e.requires.join(" ")}`);return t.push("","[Service]","Type=simple",`User=${_}`,`Group=${_}`,`Environment="PATH=${be}"`,`Environment="VTDATAROOT=${v}"`,...Object.entries(e.environment??{}).map(([r,n])=>`Environment="${r}=${n}"`),...(e.execStartPre??[]).map((r)=>`ExecStartPre=${r}`),`ExecStart=${e.execStart}`,"Restart=always","RestartSec=5","LimitNOFILE=65535","","[Install]","WantedBy=multi-user.target"),t.join(`
6
- `)}function oe(e,t){return[`cat > /etc/systemd/system/${e}.service <<'TS_CLOUD_VITESS_UNIT_EOF'`,t,"TS_CLOUD_VITESS_UNIT_EOF"]}function Re(e){let t=e.cell??"zone1",r=e.vtgatePort??W,i=`${((e.keyspaces?.length)?e.keyspaces:[{name:"app"}]).map((s)=>{let c=(s.sharded?["-80","80-"]:["0"]).map((d)=>`shards:{name:"${d}"}`).join(" ");return`keyspaces:{name:"${s.name}" ${c}}`}).join(" ")} cells:"${t}"`;return A({description:"Vitess (vtcombo, single-process development stack)",execStart:D("vtcombo",[`${g}/vtcombo`,`--cell ${t}`,`--proto-topo ${m(i)}`,`--mysql-server-port ${r}`,"--mysql-server-bind-address 127.0.0.1","--mysql-auth-server-impl none","--start-mysql",`--port ${K}`,`--grpc-port ${V}`])})}function De(){return A({description:"etcd (Vitess topology store)",execStart:D("etcd",[`${g}/etcd`,`--data-dir ${v}/etcd`,`--listen-client-urls http://127.0.0.1:${w}`,`--advertise-client-urls http://127.0.0.1:${w}`]),execStartPre:[`+/bin/mkdir -p ${v}/etcd`,`+/bin/chown ${_}:${_} ${v}/etcd`]})}function Q(e){return["--topo-implementation etcd2",`--topo-global-server-address ${e.etcdEndpoint??`http://127.0.0.1:${w}`}`,"--topo-global-root /vitess/global"]}function Ae(e){let t=!e.etcdEndpoint;return A({description:"Vitess vtctld (control plane)",after:t?["vitess-etcd.service"]:[],requires:t?["vitess-etcd.service"]:[],execStart:D("vtctld",[`${g}/vtctld`,...Q(e),`--cell ${e.cell??"zone1"}`,"--service-map grpc-vtctl,grpc-vtctld",`--grpc-port ${V}`,`--port ${V+1}`])})}function Le(e,t,r){let n=e.cell??"zone1";return A({description:`Vitess vttablet (${t}/${r})`,after:["vitess-vtctld.service","vitess-mysqlctld.service"],requires:["vitess-mysqlctld.service"],execStart:D("vttablet",[`${g}/vttablet`,...Q(e),`--tablet-path ${n}-${String(X).padStart(10,"0")}`,`--init-keyspace ${t}`,`--init-shard ${r}`,"--init-tablet-type replica",`--service-map ${m("grpc-queryservice,grpc-tabletmanager,grpc-updatestream")}`,`--port ${ne}`,`--grpc-port ${ne+1}`,`--db-port ${e.mysqlPort??3306}`,`--mycnf-mysql-port ${e.mysqlPort??3306}`])})}function Oe(e){return A({description:"Vitess mysqlctld (managed mysqld)",execStart:D("mysqlctld",[`${g}/mysqlctld`,`--tablet-uid ${X}`,`--mysql-port ${e.mysqlPort??3306}`,'--init-db-sql-file "$VTROOT/config/init_db.sql"',"--wait-time 2m"]),execStartPre:[`+/bin/mkdir -p ${v}`,`+/bin/chown ${_}:${_} ${v}`]})}var ce="/etc/vitess/auth.json",x="/var/lib/vitess/vtgate-auth.sha256";function xe(e){let t=e.username??"vitess",r=e.password??"";return["mkdir -p /etc/vitess",'VTESS_AUTH_TMP="$(mktemp)"',`cat > "$VTESS_AUTH_TMP" <<'TS_CLOUD_VITESS_AUTH_EOF'`,JSON.stringify({[t]:[{Password:r,UserData:t}]}),"TS_CLOUD_VITESS_AUTH_EOF",`VTESS_VTGATE_AUTH_SHA="$(sha256sum "$VTESS_AUTH_TMP" | awk '{print $1}')"`,"VTESS_VTGATE_AUTH_CHANGED=1",`if [ -f ${x} ] && [ "$(cat ${x})" = "$VTESS_VTGATE_AUTH_SHA" ]; then VTESS_VTGATE_AUTH_CHANGED=0; fi`,`install -o ${_} -g ${_} -m 0600 "$VTESS_AUTH_TMP" ${ce}`,'rm -f "$VTESS_AUTH_TMP"']}function Ue(e){let t=e.cell??"zone1";return A({description:"Vitess vtgate (query router)",after:["vitess-vtctld.service"],execStart:D("vtgate",[`${g}/vtgate`,...Q(e),`--cell ${t}`,`--cells-to-watch ${t}`,"--tablet-types-to-wait PRIMARY,REPLICA",`--service-map ${m("grpc-vtgateservice")}`,`--mysql-server-port ${e.vtgatePort??W}`,`--mysql-server-bind-address ${e.bindAddress??"127.0.0.1"}`,"--mysql-auth-server-impl static",`--mysql-auth-server-static-file ${ce}`,`--port ${K}`,`--grpc-port ${K+1}`])})}function Ie(e){let t=e.cell??"zone1",r=e.etcdEndpoint??`http://127.0.0.1:${w}`,n=`${g}/vtctldclient --server 127.0.0.1:${V}`,i=[`for i in $(seq 1 30); do ${n} GetCellInfoNames >/dev/null 2>&1 && break; sleep 2; done`,`if ! ${n} GetCellInfoNames 2>/dev/null | grep -qx ${m(t)}; then`,` ${n} AddCellInfo --root ${m(`/vitess/${t}`)} --server-address ${m(r)} ${m(t)}`,"fi"];for(let s of e.keyspaces??[]){let c=s.sharded?" --sharded":"";i.push(`if ! ${n} GetKeyspace ${m(s.name)} >/dev/null 2>&1; then`,` ${n} CreateKeyspace${c} ${m(s.name)}`,"fi");let d=`${t}-${String(X).padStart(10,"0")}`;for(let l of s.sharded?["-80","80-"]:["0"]){let o=`${s.name}/${l}`;i.push("for i in $(seq 1 90); do",` if ${n} GetShard ${m(o)} 2>/dev/null | grep -q '"is_primary_serving": *true'; then break; fi`,` ${n} PlannedReparentShard ${m(o)} --new-primary ${m(d)} >/dev/null 2>&1 && break`,` ${n} InitShardPrimary --force ${m(o)} ${m(d)} >/dev/null 2>&1 && break`," sleep 2","done",`if ! ${n} GetShard ${m(o)} 2>/dev/null | grep -q '"is_primary_serving": *true'; then`,` echo "no primary could be elected for ${o}" >&2; exit 1`,"fi")}i.push(`${n} RebuildKeyspaceGraph ${m(s.name)} >/dev/null`)}return i}function ie(e){let t=e.vtgatePort??W;return["for i in $(seq 1 60); do",` if (cd ${U} && eval "$(pantry env 2>/dev/null)"; MYSQL_PWD=${m(e.password??"")} ${g}/mysql -h 127.0.0.1 -P ${t} -u ${m(e.username??"vitess")} --connect-timeout=2 -e 'SHOW KEYSPACES') >/dev/null 2>&1; then`,` echo "vtgate is serving on ${t}"; exit 0`," fi"," sleep 2","done",`echo "vtgate did not become ready on port ${t}" >&2`,"exit 1"]}function yo(e){if(!li(e))return[];let t=Ee(e),r=t.mode==="combo";z.clear();let n=['if [ "$(uname -m)" != "x86_64" ]; then',' echo "vitess: Vitess publishes only x86_64 release tarballs; this box is $(uname -m). Drop managedServices.vitess or use an x86_64 host." >&2'," exit 1","fi",...Ze(Pe(t)),`VT_MYSQL_LIB="$(dirname "$(dirname "$(readlink -f ${g}/mysqld)")")/lib"`,'if [ -d "$VT_MYSQL_LIB" ]; then',` printf '%s\\n' "$VT_MYSQL_LIB" > /etc/ld.so.conf.d/vitess-mysql.conf`," ldconfig","else",' echo "mysqld library directory not found under $VT_MYSQL_LIB" >&2; exit 1',"fi",`id -u ${_} >/dev/null 2>&1 || useradd --system --home-dir ${v} --shell /usr/sbin/nologin ${_}`,`mkdir -p ${v}`,`chown -R ${_}:${_} ${v}`];if(r)return n.push(...oe("vitess-vtcombo",Re(t)),...se(),"systemctl daemon-reload","systemctl enable --now vitess-vtcombo.service",...ie(t)),n;n.push(...xe(t));let i=[];if(!t.etcdEndpoint)i.push(["vitess-etcd",De()]);i.push(["vitess-vtctld",Ae(t)],["vitess-mysqlctld",Oe(t)],["vitess-vtgate",Ue(t)]);for(let s of t.keyspaces??[])for(let c of s.sharded?["-80","80-"]:["0"])i.push([`vitess-vttablet-${s.name}-${c.replace(/-/g,"x")}`,Le(t,s.name,c)]);for(let[s,c]of i)n.push(...oe(s,c));n.push(...se()),n.push("systemctl daemon-reload");for(let[s]of i)n.push(`systemctl enable --now ${s}.service`);return n.push(`if [ "$VTESS_VTGATE_AUTH_CHANGED" = 1 ]; then systemctl restart vitess-vtgate.service; printf '%s\\n' "$VTESS_VTGATE_AUTH_SHA" > ${x}; chown ${_}:${_} ${x}; chmod 0600 ${x}; fi`,...Ie(t),...ie(t)),n}var ke=new Set(["singlestore","vitess"]);function di(e){if(e?.engine&&ke.has(e.engine))return!1;return!e?.host||e.host==="127.0.0.1"||e.host==="localhost"}function Tr(e,t="psql"){let r=e?.port??5432;if(di(e))return`${t} -p ${r} -U postgres`;let n=e?.username||"postgres";return`${e?.password?`PGPASSWORD='${e.password.replace(/'/g,"'\\''")}' `:""}${t} -h ${e.host} -p ${r} -U ${n} -w`}function y(e){return e===!0||typeof e==="object"&&e!=null}function Ne(e){let t=[],r=[];if(y(e.mysql))t.push(typeof e.mysql==="object"&&e.mysql.version?`mysql.com@${e.mysql.version}`:"mysql.com@8.0.43"),r.push("mysql");else if(y(e.mariadb))t.push(O.mariadb),r.push("mariadb");if(y(e.postgres))t.push("postgresql.org"),r.push("postgres");if(y(e.redis))t.push("redis.io"),r.push("redis");if(y(e.memcached))t.push("memcached.org"),r.push("memcached");if(y(e.meilisearch))t.push("meilisearch.com"),r.push("meilisearch");return{packages:t,services:r}}function So(e={},t={}){let r=Ne(e),n=yo(e.vitess),i=t.mail?re(t.mail):[];if(r.packages.length===0)return[...n,...i];return[...Ze(r.packages),...ho(r.services),...n,...i]}function bt(e,t={}){if(!e?.name)return[];if(!di(e))return[];let r=e.name,n=e.username||r,i=e.password||"",s=y(t.postgres)||e.engine==="postgres",c=y(t.mariadb)||e.engine==="mariadb",d=y(t.mysql)||e.engine==="mysql";if(s&&!d&&!c){let a=(u)=>`"${u.replace(/"/g,'""')}"`,R=(u)=>`'${u.replace(/'/g,"''")}'`,L=(u,N)=>["DO $$ BEGIN",` IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = ${R(u)}) THEN`,` CREATE ROLE ${a(u)} LOGIN PASSWORD ${R(N)};`," ELSE",` ALTER ROLE ${a(u)} LOGIN PASSWORD ${R(N)};`," END IF;","END $$;"],I=(u)=>{let N=u.databases&&u.databases.length>0?u.databases:[r],B=[];for(let q of N)if(u.access==="readonly")B.push(`GRANT CONNECT ON DATABASE ${a(q)} TO ${a(u.username)};`,`\\connect ${a(q)}`,`GRANT USAGE ON SCHEMA public TO ${a(u.username)};`,`GRANT SELECT ON ALL TABLES IN SCHEMA public TO ${a(u.username)};`,`ALTER DEFAULT PRIVILEGES FOR ROLE ${a(n)} IN SCHEMA public GRANT SELECT ON TABLES TO ${a(u.username)};`,"\\connect postgres");else B.push(`GRANT ALL PRIVILEGES ON DATABASE ${a(q)} TO ${a(u.username)};`);return B},k=e.users||[],me=e.port??5432;return[St(),`for i in $(seq 1 30); do pg_isready -p ${me} -q && break; sleep 2; done`,`${Tr(e)} <<'TS_CLOUD_PG_EOF'`,...L(n,i),`SELECT 'CREATE DATABASE ${a(r)} OWNER ${a(n)}' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = ${R(r)})\\gexec`,...k.flatMap((u)=>[...L(u.username,u.password),...I(u)]),"TS_CLOUD_PG_EOF",...Me(e)]}let l=c?"/var/lib/pantry/mariadb/mariadbd.sock":"/var/lib/pantry/mysql/mysqld.sock",o=(a)=>a.replace(/`/g,"``"),f=(a)=>a.replace(/\\/g,"\\\\").replace(/'/g,"\\'"),E=(a)=>{let R=a.databases&&a.databases.length>0?a.databases:[r],L=a.access==="readonly"?"SELECT":"ALL PRIVILEGES",I=[`CREATE USER IF NOT EXISTS '${f(a.username)}'@'%' IDENTIFIED BY '${f(a.password)}';`,`CREATE USER IF NOT EXISTS '${f(a.username)}'@'localhost' IDENTIFIED BY '${f(a.password)}';`,`ALTER USER '${f(a.username)}'@'%' IDENTIFIED BY '${f(a.password)}';`,`ALTER USER '${f(a.username)}'@'localhost' IDENTIFIED BY '${f(a.password)}';`];for(let k of R)I.push(`GRANT ${L} ON \`${o(k)}\`.* TO '${f(a.username)}'@'%';`,`GRANT ${L} ON \`${o(k)}\`.* TO '${f(a.username)}'@'localhost';`);return I},p=e.users||[];return[St(),`for i in $(seq 1 30); do mysqladmin --socket=${l} -u root ping 2>/dev/null | grep -q alive && break; sleep 2; done`,`mysql --socket=${l} -u root <<'TS_CLOUD_SQL_EOF'`,`CREATE DATABASE IF NOT EXISTS \`${o(r)}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;`,...E({username:n,password:i}),...p.flatMap(E),"FLUSH PRIVILEGES;","TS_CLOUD_SQL_EOF"]}function Me(e){return[`${Tr(e)} -tA <<'TS_CLOUD_PG_CAP_EOF' || true`,"\\set QUIET on","SELECT CASE WHEN used::float / NULLIF(cap, 0) >= 0.8"," THEN '[ts-cloud] postgres is at ' || used || '/' || cap || ' connections on this server.'"," || ' Raise max_connections (ALTER SYSTEM SET max_connections = ...; then restart) or'"," || ' set idle_session_timeout so abandoned pools are reclaimed.'"," ELSE NULL END","FROM (SELECT (SELECT count(*) FROM pg_stat_activity) AS used,"," (SELECT setting::int FROM pg_settings WHERE name = 'max_connections') AS cap) c","WHERE CASE WHEN used::float / NULLIF(cap, 0) >= 0.8 THEN true ELSE false END;","SELECT '[ts-cloud] ' || coalesce(datname, '(background)') || ': ' || count(*) || ' connection(s), oldest idle ' ||"," coalesce(round(extract(epoch from max(now() - state_change)) / 60)::text || 'm', 'n/a')","FROM pg_stat_activity","WHERE (SELECT count(*)::float / NULLIF((SELECT setting::int FROM pg_settings WHERE name = 'max_connections'), 0) FROM pg_stat_activity) >= 0.8","GROUP BY datname ORDER BY count(*) DESC;","TS_CLOUD_PG_CAP_EOF"]}function dc(e){if(!e?.name)return{};let t=e.engine==="singlestore",r=e.engine==="vitess",n=e.engine==="postgres"?"pgsql":t?"singlestore":r?"vitess":"mysql",i=e.port??(e.engine==="postgres"?5432:r?15306:3306),s={DB_CONNECTION:n,DB_HOST:e.host||"127.0.0.1",DB_PORT:String(i),DB_DATABASE:e.name};if(e.username)s.DB_USERNAME=e.username;if(e.password)s.DB_PASSWORD=e.password;if((t||r)&&e.ssl!==!1)s.DB_SSL="true";return s}var Z="/var/backups/ts-cloud",Ve="/etc/ts-cloud/backups.config.ts",le="/etc/cron.d/ts-cloud-backups",tn="/usr/local/bin/ts-cloud-backup.sh";function we(e){if(!e.name)return null;let t=e.host||"127.0.0.1",r=e.engine==="postgres",n=r?"postgresql":"mysql",i=e.port??(r?5432:3306),s=(c)=>c.replace(/\\/g,"\\\\").replace(/'/g,"\\'");return[" {",` type: '${n}',`,` name: '${s(e.name)}',`," connection: {",` hostname: '${s(t)}',`,` port: ${i},`,` database: '${s(e.name)}',`,` username: '${s(e.username||e.name)}',`,` password: '${s(e.password||"")}',`," ssl: false,"," },"," includeSchema: true,"," includeData: true,"," },"].join(`
7
- `)}function Be(e,t){let r=e?we(e):null,n=t.bucket?[" destinations: ["," {"," type: 's3',",` bucket: '${t.bucket}',`," prefix: 'db-backups',",...t.endpoint?[` endpoint: '${t.endpoint}',`]:[]," optional: false,"," },"," ],"]:[];return["import type { BackupConfig } from 'ts-backups'","","const config: BackupConfig = {"," verbose: true,",` outputPath: '${Z}',`," retention: {",` count: ${t.retentionCount??5},`,` maxAge: ${t.retentionDays??30},`," },"," databases: [",...r?[r]:[]," ],",...n,"}","","export default config",""].join(`
8
- `)}function bo(e){let{database:t,backups:r}=e;if(!r.enabled)return[];let n=r.schedule||"0 2 * * *",i=Be(t,r);return["export DEBIAN_FRONTEND=noninteractive",`mkdir -p /etc/ts-cloud ${Z}`,"command -v bun >/dev/null 2>&1 || (curl -fsSL https://bun.sh/install | bash && ln -sf /root/.bun/bin/bun /usr/local/bin/bun)","bun add -g ts-backups || true",`cat > ${Ve} <<'TS_CLOUD_BACKUP_CFG_EOF'`,i.replace(/\n$/,""),"TS_CLOUD_BACKUP_CFG_EOF",`cat > ${tn} <<'TS_CLOUD_BACKUP_RUN_EOF'`,"#!/bin/bash","set -uo pipefail",'export PATH="/root/.bun/bin:/usr/local/bin:$PATH"','notify() { [ -x /usr/local/bin/ts-cloud-notify ] && /usr/local/bin/ts-cloud-notify "$1" || true; }',"cd /etc/ts-cloud",'if ! ts-backups backup --config /etc/ts-cloud/backups.config.ts; then notify "❌ ts-cloud backup failed"; exit 1; fi',"TS_CLOUD_BACKUP_RUN_EOF",`chmod +x ${tn}`,`cat > ${le} <<'TS_CLOUD_BACKUP_CRON_EOF'`,`${n} root ${tn} >> /var/log/ts-cloud-backup.log 2>&1`,"TS_CLOUD_BACKUP_CRON_EOF",`chmod 644 ${le}`]}function He(e){return e==="mariadb"?"/var/lib/pantry/mariadb/mariadbd.sock":"/var/lib/pantry/mysql/mysqld.sock"}function ui(e,t={}){if(!e?.name)return[];let r=e.name,n=e.engine==="postgres",i=t.from?`TS_CLOUD_DUMP="${t.from}"`:`TS_CLOUD_DUMP="$(find ${Z} -type f -name '*${r}*.sql' -o -type f -name '*${r}*.sql.gz' 2>/dev/null | xargs -r ls -1t 2>/dev/null | head -1)"`,s=n?`${Tr(e)} -d "${r}"`:`mysql --socket=${He(e.engine)} -u root "${r}"`;return["set -uo pipefail",'eval "$(cd /opt/pantry && pantry env 2>/dev/null)" || true',i,'[ -n "$TS_CLOUD_DUMP" ] && [ -f "$TS_CLOUD_DUMP" ] || { echo "no backup dump found to restore" >&2; exit 1; }','echo "[ts-cloud] restoring '+r+' from $TS_CLOUD_DUMP"',`case "$TS_CLOUD_DUMP" in *.gz) gunzip -c "$TS_CLOUD_DUMP" ;; *) cat "$TS_CLOUD_DUMP" ;; esac | ${s}`,'echo "restore complete"']}var vo=["storage",".env"],pi=4;function C(e){return`${e.replace(/\/+$/,"")}/.ts-cloud`}function Ls(e){return`${C(e)}/deploy-history.log`}function qe(e,t){return`${C(e)}/deploys/${t}.log`}function ue(e){return`${C(e)}/shared-paths`}function To(e){return`${e.shared}/stx-images`}function Bt(e,t){let r=e.replace(/\/+$/,"");return{base:r,releases:`${r}/releases`,shared:`${r}/shared`,current:`${r}/current`,release:`${r}/releases/${t}`}}function de(e){let t=e.split("/").pop()||e;if(t===".env"||t.startsWith(".env."))return!0;return/\.[a-z0-9]+$/i.test(t)}function Ms(e){return typeof e==="string"?e:e.path}function uc(e){let t=new Map;for(let r of e)t.set(Ms(r),r);return[...t.values()]}function $e(e,t){if(typeof t==="string")return{path:t,target:`${e.shared}/${t}`,seed:!0};return{path:t.path,target:t.target??`${e.shared}/${t.path}`,seed:t.seed!==!1}}function Fe(e){return["ts_cloud_adopt_shared() {",' TS_CLOUD_SP="$1"',' TS_CLOUD_DST="$2"',` TS_CLOUD_SRC="${e.current}/$TS_CLOUD_SP"`,' if [ -e "$TS_CLOUD_DST" ]; then return 0; fi',' if [ -L "$TS_CLOUD_SRC" ] || [ ! -e "$TS_CLOUD_SRC" ]; then return 0; fi',' mkdir -p "$(dirname "$TS_CLOUD_DST")"',' cp -a "$TS_CLOUD_SRC" "$TS_CLOUD_DST"'," for TS_CLOUD_SIDECAR in -wal -shm; do",' if [ -f "$TS_CLOUD_SRC$TS_CLOUD_SIDECAR" ]; then cp -a "$TS_CLOUD_SRC$TS_CLOUD_SIDECAR" "$TS_CLOUD_DST$TS_CLOUD_SIDECAR"; fi'," done",' echo "[ts-cloud] adopted $TS_CLOUD_SP from the live release into shared/ — it now survives deploys"'," return 0","}"]}function mi(e,t=vo){let r=[`mkdir -p ${e.releases} ${e.shared} ${To(e)}`,...Fe(e)],n=t.map((s)=>$e(e,s));for(let{path:s,target:c,seed:d}of n){if(!d)continue;if(r.push(`ts_cloud_adopt_shared '${s}' '${c}'`),de(s))r.push(`mkdir -p "$(dirname ${c})"`,`touch ${c}`);else if(s==="storage")r.push(`mkdir -p ${c}/app/public`,`mkdir -p ${c}/framework/cache/data`,`mkdir -p ${c}/framework/sessions`,`mkdir -p ${c}/framework/testing`,`mkdir -p ${c}/framework/views`,`mkdir -p ${c}/logs`);else r.push(`mkdir -p ${c}`)}let i=ue(e.base);return r.push(`mkdir -p ${C(e.base)}`,`cat > ${i} <<'TS_CLOUD_SHARED_PATHS_EOF'`,...n.map((s)=>`${s.path} ${s.target}`),"TS_CLOUD_SHARED_PATHS_EOF"),r}function Us(e,t=900){let r=`${C(e.base)}/deploy.lock`;return[`mkdir -p "$(dirname ${r})"`,`exec 9>${r}`,`flock -w ${t} 9 || { echo "[ts-cloud] another deploy of this site has held the lock for ${t}s — refusing to race it" >&2; exit 1; }`]}function Bs(e){let t=`${e.release}.incoming`;return[`rm -rf ${t}`,`mkdir -p ${t}`,...Ge(e),'if [ "$TS_CLOUD_IS_LIVE" = "yes" ]; then',` TS_CLOUD_STAGED=${t}`,"else",` rm -rf ${e.release}`,` mkdir -p ${e.release}`,` rmdir ${t}`,` TS_CLOUD_STAGED=${e.release}`,"fi"]}function Fs(e){let t=`TS_CLOUD_TRAP_LIVE="$(readlink -f ${e.current} 2>/dev/null || true)"`,r=`TS_CLOUD_TRAP_TARGET="$(readlink -f ${e.release} 2>/dev/null || echo ${e.release})"`;return`trap '${`if [ $? -ne 0 ]; then ${t}; ${r}; [ "$TS_CLOUD_TRAP_LIVE" = "$TS_CLOUD_TRAP_TARGET" ] || rm -rf ${e.release}; fi`}' EXIT`}function Ge(e){return[`TS_CLOUD_LIVE_PATH="$(readlink -f ${e.current} 2>/dev/null || true)"`,`TS_CLOUD_RELEASE_PATH="$(readlink -f ${e.release} 2>/dev/null || echo ${e.release})"`,'if [ -n "$TS_CLOUD_LIVE_PATH" ] && [ "$TS_CLOUD_LIVE_PATH" = "$TS_CLOUD_RELEASE_PATH" ]; then TS_CLOUD_IS_LIVE=yes; else TS_CLOUD_IS_LIVE=no; fi']}function js(e){let t=`${e.release}.incoming`;return[`if [ "$TS_CLOUD_STAGED" = "${t}" ]; then`,` rm -rf ${e.release}.previous`,` mv ${e.release} ${e.release}.previous`,` mv ${t} ${e.release}`,` rm -rf ${e.release}.previous`,"fi"]}function Ye(e,t){return[`if [ -f ${e} ] && [ ! -L ${e} ] && [ -s ${e} ] && [ ! -s ${t} ]; then`,` cp -a ${e} ${t}`,` echo "[ts-cloud] seeded shared/ from the release's own copy of the file"`,"fi"]}function Eo(e,t=vo){let r=[];for(let n of t){let{path:i,target:s,seed:c}=$e(e,n),d=`${e.release}/${i}`,l=[`rm -rf ${d}`,`mkdir -p "$(dirname ${d})"`,`ln -sfn ${s} ${d}`];if(c){if(i!==".env"&&de(i))r.push(...Ye(d,s));r.push(...l);continue}r.push(`if [ -e ${s} ]; then`,...l.map((o)=>` ${o}`),"fi")}return r}function pe(e,t){let r=ue(e.base);return[`if [ -f ${r} ]; then`,' while IFS="\t" read -r TS_CLOUD_SP TS_CLOUD_TGT; do',' [ -n "$TS_CLOUD_SP" ] || continue',` [ -n "$TS_CLOUD_TGT" ] || TS_CLOUD_TGT="${e.shared}/$TS_CLOUD_SP"`,' [ -e "$TS_CLOUD_TGT" ] || continue',` rm -rf ${t}/"$TS_CLOUD_SP"`,` mkdir -p "$(dirname ${t}/"$TS_CLOUD_SP")"`,` ln -sfn "$TS_CLOUD_TGT" ${t}/"$TS_CLOUD_SP"`,` done < ${r}`,"fi"]}function rn(e){return[`ln -sfn ${e.release} ${e.current}.tmp`,`mv -Tf ${e.current}.tmp ${e.current}`]}function pc(e,t={}){let r=t.to?[`[ -d ${e.releases}/${t.to} ] || { echo "rollback target ${e.releases}/${t.to} not found" >&2; exit 1; }`,...pe(e,`${e.releases}/${t.to}`),`ln -sfn ${e.releases}/${t.to} ${e.current}.tmp`,`mv -Tf ${e.current}.tmp ${e.current}`]:[`TS_CLOUD_CURRENT=$(readlink -f ${e.current} 2>/dev/null || true)`,`TS_CLOUD_PREV=$(ls -1dt ${e.releases}/*/ 2>/dev/null | sed 's#/$##' | while read -r r; do [ "$(readlink -f "$r")" != "$TS_CLOUD_CURRENT" ] && { echo "$r"; break; }; done)`,'[ -n "$TS_CLOUD_PREV" ] || { echo "no previous release to roll back to" >&2; exit 1; }',...pe(e,'"$TS_CLOUD_PREV"'),`ln -sfn "$TS_CLOUD_PREV" ${e.current}.tmp`,`mv -Tf ${e.current}.tmp ${e.current}`,'echo "rolled back to $TS_CLOUD_PREV"'];if(!t.unitBase)return r;let n=t.unitBase;return[...r,`TS_CLOUD_RB_ID=$(basename "$(readlink -f ${e.current})")`,`if [ -f /etc/systemd/system/${n}@.service ]; then systemctl start "${n}@\${TS_CLOUD_RB_ID}.service"; sleep 2; systemctl is-active --quiet "${n}@\${TS_CLOUD_RB_ID}.service" || { echo "rolled-back release failed to start" >&2; exit 1; }; systemctl enable "${n}@\${TS_CLOUD_RB_ID}.service" 2>/dev/null || true; systemctl list-units --plain --no-legend --type=service "${n}@*.service" 2>/dev/null | awk '{print $1}' | { grep -v "^${n}@\${TS_CLOUD_RB_ID}.service$" || true; } | while read -r TS_CLOUD_U; do systemctl stop "$TS_CLOUD_U" 2>/dev/null || true; systemctl disable "$TS_CLOUD_U" 2>/dev/null || true; done; elif [ -f /etc/systemd/system/${n}.service ]; then systemctl restart ${n}.service; fi`]}function nn(e,t=4){let r=Math.max(1,t);return[`TS_CLOUD_CURRENT=$(readlink -f ${e.current} 2>/dev/null || true)`,`ls -1dt ${e.releases}/*/ 2>/dev/null | sed 's#/$##' | tail -n +${r+1} | while read -r TS_CLOUD_OLD; do`,' [ "$(readlink -f "$TS_CLOUD_OLD")" = "$TS_CLOUD_CURRENT" ] || rm -rf "$TS_CLOUD_OLD"',"done"]}function Ke(e){return`${C(e)}/owner`}function Vs(e,t){let r=Ke(e);return[`if [ -f "${r}" ]; then`,` TS_CLOUD_OWNER=$(cat "${r}")`,` if [ "$TS_CLOUD_OWNER" != "${t}" ]; then`,` echo "[ts-cloud] REFUSING deploy: ${e} belongs to project '$TS_CLOUD_OWNER', not '${t}'. Another project on this box derives the same site key — give one of them a distinct site name/domain, or remove ${r} to transfer ownership." >&2`," exit 1"," fi","else",` mkdir -p "$(dirname "${r}")"`,` printf '%s\\n' "${t}" > "${r}"`,"fi"]}function Co(e,t){let r=C(e),n=qe(e,t.releaseId),i=Ls(e),s=Math.max(1,t.keepLogs??20),c=t.commit||"",d=t.branch||"";return[`mkdir -p ${r}/deploys`,`exec > >(tee -a ${n}) 2>&1`,`echo "[ts-cloud] deploy ${t.releaseId} commit=${c} branch=${d} starting $(date -u +%Y-%m-%dT%H:%M:%SZ)"`,"ts_cloud_record_deploy() {"," TS_CLOUD_RC=$?",' if [ "$TS_CLOUD_RC" -eq 0 ]; then TS_CLOUD_ST=success; else TS_CLOUD_ST=failed; fi',` printf '%s\\t%s\\t%s\\t%s\\trc=%s\\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "${t.releaseId}" "${c}" "$TS_CLOUD_ST" "$TS_CLOUD_RC" >> ${i}`,"}","trap ts_cloud_record_deploy EXIT",`ls -1t ${r}/deploys/*.log 2>/dev/null | tail -n +${s+1} | while read -r TS_CLOUD_OLDLOG; do rm -f "$TS_CLOUD_OLDLOG"; done`]}
9
- export{J,ci,xs,P,fo,$s,Os,cc,lc,U,vr,St,Ze,ho,li,yo,di,Tr,So,bt,dc,tn,bo,ui,vo,pi,Ls,To,Bt,Ms,uc,mi,Us,Bs,Fs,js,Eo,rn,pc,nn,Vs,Co};
@@ -1 +0,0 @@
1
- import{g}from"./chunk-kqf19j9m.js";import"./chunk-qe56mnjc.js";export{g as S3Client};
@@ -1 +0,0 @@
1
- import{Xn}from"./chunk-vhz2wmb8.js";import"./chunk-81mt497w.js";import"./chunk-sdy79wz7.js";import"./chunk-x56s9b7f.js";import"./chunk-wt7wjgcr.js";import"./chunk-kqf19j9m.js";import"./chunk-qe56mnjc.js";import"./chunk-nnawqw34.js";export{Xn as resolveServerDashboardData};
@@ -1 +0,0 @@
1
- import{ss,os,as,cs,Fa,Ua}from"./chunk-57fhsqzb.js";import"./chunk-s909414m.js";import"./chunk-qjxdhb8x.js";import"./chunk-ffxcn7mw.js";import"./chunk-wbabf3hg.js";import"./chunk-qrs912nk.js";import"./chunk-m93g67j0.js";export{Fa as deleteStaticSite,os as deployStaticSite,Ua as deployStaticSiteFull,ss as generateStaticSiteTemplate,cs as invalidateCache,as as uploadStaticFiles};
@@ -1 +0,0 @@
1
- import{Qa}from"./chunk-jh38v9zp.js";import"./chunk-dm4vt53n.js";import"./chunk-m93g67j0.js";import"./chunk-r45340yc.js";export{Qa as buildAndPushServerlessImage};
@@ -1 +0,0 @@
1
- import{Tn,Lh}from"./chunk-efssa93f.js";import"./chunk-ffxcn7mw.js";import"./chunk-qrs912nk.js";import"./chunk-m93g67j0.js";export{Tn as EmailClient,Lh as email};
@@ -1 +0,0 @@
1
- import{Dr,li,n,l,nf}from"./chunk-m93g67j0.js";export{n as AWSClient,l as buildQueryParams,li as coerceXmlValues,nf as detectCredentialSource,Dr as resolveS3Endpoint};
@@ -1 +0,0 @@
1
- import{K}from"./chunk-4hdp9ms2.js";import"./chunk-m93g67j0.js";export{K as RDSClient};