@stacksjs/ts-cloud 0.5.35 → 0.6.0

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 (77) hide show
  1. package/dist/aws/cloudwatch.d.ts +2 -0
  2. package/dist/aws/xray.d.ts +45 -0
  3. package/dist/bin/cli.js +718 -701
  4. package/dist/deploy/dashboard-database.d.ts +25 -0
  5. package/dist/deploy/dashboard-operations.d.ts +7 -0
  6. package/dist/deploy/firewall-config-editor.d.ts +15 -0
  7. package/dist/deploy/firewall-config-editor.test.d.ts +1 -0
  8. package/dist/deploy/index.d.ts +1 -0
  9. package/dist/deploy/management-dashboard.d.ts +26 -3
  10. package/dist/deploy/serverless-operations.d.ts +150 -0
  11. package/dist/deploy/serverless-operations.test.d.ts +1 -0
  12. package/dist/deploy/site-config-editor.d.ts +6 -0
  13. package/dist/deploy/ssh-config-editor.d.ts +1 -0
  14. package/dist/deploy/terminal-session.d.ts +23 -0
  15. package/dist/index.d.ts +2 -2
  16. package/dist/index.js +1003 -33
  17. package/dist/ui/index.html +4 -4
  18. package/dist/ui/server/actions.html +34 -5
  19. package/dist/ui/server/activity.html +1 -1
  20. package/dist/ui/server/backups.html +4 -4
  21. package/dist/ui/server/database.html +27 -5
  22. package/dist/ui/server/deployments.html +4 -4
  23. package/dist/ui/server/diagnostics.html +1 -1
  24. package/dist/ui/server/firewall.html +1233 -0
  25. package/dist/ui/server/logs.html +4 -4
  26. package/dist/ui/server/metrics.html +1 -1
  27. package/dist/ui/server/security.html +1 -1
  28. package/dist/ui/server/services.html +4 -4
  29. package/dist/ui/server/sites.html +24 -5
  30. package/dist/ui/server/ssh-keys.html +4 -4
  31. package/dist/ui/server/terminal.html +1191 -0
  32. package/dist/ui/server/workers.html +4 -4
  33. package/dist/ui/serverless/alarms.html +1236 -0
  34. package/dist/ui/serverless/assets.html +53 -1
  35. package/dist/ui/serverless/cost.html +1 -1
  36. package/dist/ui/serverless/data.html +58 -1
  37. package/dist/ui/serverless/deployments.html +53 -1
  38. package/dist/ui/serverless/firewall.html +1 -1
  39. package/dist/ui/serverless/functions.html +63 -1
  40. package/dist/ui/serverless/logs.html +4 -4
  41. package/dist/ui/serverless/metrics.html +1 -1
  42. package/dist/ui/serverless/queues.html +94 -1
  43. package/dist/ui/serverless/scheduler.html +55 -1
  44. package/dist/ui/serverless/secrets.html +99 -1
  45. package/dist/ui/serverless/traces.html +1177 -0
  46. package/dist/ui/serverless.html +87 -1
  47. package/dist/ui-src/pages/index.stx +1 -1
  48. package/dist/ui-src/pages/partials/head.stx +6 -6
  49. package/dist/ui-src/pages/partials/nav.stx +4 -3
  50. package/dist/ui-src/pages/server/actions.stx +34 -1
  51. package/dist/ui-src/pages/server/backups.stx +1 -1
  52. package/dist/ui-src/pages/server/database.stx +32 -9
  53. package/dist/ui-src/pages/server/deployments.stx +2 -2
  54. package/dist/ui-src/pages/server/firewall.stx +134 -0
  55. package/dist/ui-src/pages/server/logs.stx +2 -2
  56. package/dist/ui-src/pages/server/metrics.stx +5 -5
  57. package/dist/ui-src/pages/server/security.stx +1 -1
  58. package/dist/ui-src/pages/server/services.stx +1 -1
  59. package/dist/ui-src/pages/server/sites.stx +24 -3
  60. package/dist/ui-src/pages/server/ssh-keys.stx +2 -2
  61. package/dist/ui-src/pages/server/terminal.stx +65 -0
  62. package/dist/ui-src/pages/server/workers.stx +1 -1
  63. package/dist/ui-src/pages/serverless/alarms.stx +153 -0
  64. package/dist/ui-src/pages/serverless/assets.stx +29 -2
  65. package/dist/ui-src/pages/serverless/cost.stx +4 -4
  66. package/dist/ui-src/pages/serverless/data.stx +56 -3
  67. package/dist/ui-src/pages/serverless/deployments.stx +30 -6
  68. package/dist/ui-src/pages/serverless/firewall.stx +1 -1
  69. package/dist/ui-src/pages/serverless/functions.stx +62 -4
  70. package/dist/ui-src/pages/serverless/logs.stx +2 -2
  71. package/dist/ui-src/pages/serverless/metrics.stx +5 -1
  72. package/dist/ui-src/pages/serverless/queues.stx +90 -26
  73. package/dist/ui-src/pages/serverless/scheduler.stx +31 -2
  74. package/dist/ui-src/pages/serverless/secrets.stx +94 -14
  75. package/dist/ui-src/pages/serverless/traces.stx +88 -0
  76. package/dist/ui-src/pages/serverless.stx +87 -24
  77. package/package.json +3 -3
@@ -35,4 +35,29 @@ export declare function listDatabases(config: CloudConfig, environment: Environm
35
35
  }>;
36
36
  export declare function createDatabase(config: CloudConfig, environment: EnvironmentType, name: string): Promise<DbRunResult>;
37
37
  export declare function createDatabaseUser(config: CloudConfig, environment: EnvironmentType, input: CreateUserInput): Promise<DbRunResult>;
38
+ /** Where per-database dumps are written on the box. */
39
+ export declare const DB_BACKUP_DIR = "/var/backups/ts-cloud/databases";
40
+ /**
41
+ * Script that dumps a single database to a timestamped, gzipped file. The name
42
+ * is a validated SQL identifier (no shell metacharacters), so it is safe to
43
+ * embed directly. The timestamp is computed on the box.
44
+ */
45
+ export declare function buildBackupScript(engine: DbEngine, name: string, destDir?: string): string[];
46
+ /** Script that lists the most recent dumps (newest first). */
47
+ export declare function buildListBackupsScript(destDir?: string): string[];
48
+ export declare function parseBackups(output: string): Array<{
49
+ file: string;
50
+ database: string;
51
+ }>;
52
+ /** Dump a single database to a gzipped file on the box. */
53
+ export declare function backupDatabase(config: CloudConfig, environment: EnvironmentType, name: string): Promise<DbRunResult & {
54
+ database: string;
55
+ }>;
56
+ /** List the per-database dumps present on the box. */
57
+ export declare function listDatabaseBackups(config: CloudConfig, environment: EnvironmentType): Promise<DbRunResult & {
58
+ backups: Array<{
59
+ file: string;
60
+ database: string;
61
+ }>;
62
+ }>;
38
63
  export {};
@@ -46,3 +46,10 @@ export interface RunOperationOptions {
46
46
  to?: string;
47
47
  }
48
48
  export declare function runDashboardOperation(config: CloudConfig, environment: EnvironmentType, operation: DashboardOperation, options?: RunOperationOptions): Promise<DashboardOperationResult>;
49
+ /**
50
+ * Run an arbitrary shell command on the app box (Forge-style "run command" /
51
+ * recipe runner). The dashboard is behind Basic auth and the caller must type a
52
+ * confirmation, so this is an operator affordance, not an open endpoint. Output
53
+ * is bounded and errors are captured rather than thrown.
54
+ */
55
+ export declare function runServerShellCommand(config: CloudConfig, environment: EnvironmentType, command: string): Promise<DashboardOperationResult>;
@@ -0,0 +1,15 @@
1
+ export declare function isValidPort(port: number): boolean;
2
+ export interface FirewallPortsInput {
3
+ configText: string;
4
+ /** The desired extra ports (SSH/80/443 stripped, deduped, sorted). */
5
+ ports: number[];
6
+ }
7
+ /** Normalize a port list: integers in range, minus the always-open set, unique + sorted. */
8
+ export declare function normalizePorts(ports: number[]): number[];
9
+ export declare function addFirewallPort(configText: string, port: number, existing?: number[]): string;
10
+ export declare function removeFirewallPort(configText: string, port: number, existing?: number[]): string;
11
+ /**
12
+ * Rewrite `compute.firewall.allowedPorts` to exactly `ports`. Creates the
13
+ * `firewall` object and/or the `allowedPorts` array if missing.
14
+ */
15
+ export declare function setFirewallPorts(input: FirewallPortsInput): string;
@@ -0,0 +1 @@
1
+ export {};
@@ -10,3 +10,4 @@ export { buildFunctionEnv, type CodeSource, deployServerlessApp, type DeployServ
10
10
  export { buildAndPushServerlessImage, type BuildImageOptions, type BuiltImage, } from './serverless-image';
11
11
  export { type DashboardData, resolveDashboardData, } from './dashboard-data';
12
12
  export { dashboardActions, resolveDashboardAction, sanitizeCloudConfig, startLocalDashboardServer, type DashboardAction, type LocalDashboardServer, type LocalDashboardServerOptions, } from './local-dashboard-server';
13
+ export { buildManagementDashboardArtifact, DASHBOARD_CREDENTIALS_FILE, ensureManagementDashboard, type EnsureDashboardLogger, MANAGEMENT_DASHBOARD_SITE, resolveDashboardAuth, type ResolvedDashboardAuth, resolveUiSource, } from './management-dashboard';
@@ -5,11 +5,15 @@
5
5
  * Resolves the UI directory (the repo's local `packages/ui/`, else the prebuilt
6
6
  * UI that ships inside the installed package at `dist/ui`), derives a `dashboard.<apex>`
7
7
  * host, and injects it into `config.sites` as a server-static site. It is served
8
- * behind htpasswd ONLY when `TS_CLOUD_UI_PASSWORD` is set; when it is not, the
9
- * dashboard is served without auth (no password is invented).
8
+ * SECURE BY DEFAULT: the dashboard is served behind htpasswd on every deploy.
9
+ * The password is resolved as: `TS_CLOUD_UI_PASSWORD` when set, else a strong
10
+ * auto-generated one (persisted to `.ts-cloud/dashboard-credentials.json` so it
11
+ * stays stable across deploys and printed once in the deploy log). Serving the
12
+ * dashboard publicly is an explicit, deliberate opt-in via `TS_CLOUD_UI_PUBLIC`.
10
13
  *
11
14
  * Env:
12
- * - `TS_CLOUD_UI_PASSWORD` htpasswd password (unset ⇒ no auth)
15
+ * - `TS_CLOUD_UI_PASSWORD` htpasswd password (unset ⇒ auto-generated + saved)
16
+ * - `TS_CLOUD_UI_PUBLIC` set truthy to serve WITHOUT auth (opt-out, insecure)
13
17
  * - `TS_CLOUD_UI_USERNAME` htpasswd user (default `admin`)
14
18
  * - `TS_CLOUD_UI_DOMAIN` explicit dashboard host (else `dashboard.<apex>`)
15
19
  * - `TS_CLOUD_UI_REALM` browser auth realm
@@ -18,6 +22,25 @@
18
22
  import type { CloudConfig } from '@ts-cloud/core';
19
23
  /** Site key under which the management dashboard is auto-injected. */
20
24
  export declare const MANAGEMENT_DASHBOARD_SITE = "dashboard";
25
+ /** Where an auto-generated dashboard password is persisted (per project checkout). */
26
+ export declare const DASHBOARD_CREDENTIALS_FILE: string;
27
+ export interface ResolvedDashboardAuth {
28
+ /** The htpasswd password, or undefined when serving publicly (opt-out). */
29
+ password?: string;
30
+ /** How the password was resolved: explicit env, generated+saved, or public. */
31
+ source: 'env' | 'generated' | 'public';
32
+ }
33
+ /**
34
+ * Resolve the dashboard's Basic-auth password (secure by default):
35
+ * 1. `TS_CLOUD_UI_PASSWORD` when set → use it verbatim.
36
+ * 2. `TS_CLOUD_UI_PUBLIC` truthy → serve with NO auth (deliberate opt-out).
37
+ * 3. Otherwise → reuse a previously-generated password from
38
+ * `.ts-cloud/dashboard-credentials.json`, or generate + persist a new one.
39
+ *
40
+ * Persisting the generated password keeps htpasswd stable across deploys (so a
41
+ * saved credential keeps working) and lets the operator retrieve it locally.
42
+ */
43
+ export declare function resolveDashboardAuth(cwd: string, username: string, logger: EnsureDashboardLogger): ResolvedDashboardAuth;
21
44
  export interface EnsureDashboardLogger {
22
45
  info: (msg: string) => void;
23
46
  warn: (msg: string) => void;
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Mutating serverless (Vapor-style) operations for the management cockpit:
3
+ * redeploy, rollback, maintenance mode, Aurora scaling, CloudFront asset
4
+ * invalidation, SQS queue purge, dead-letter-queue viewing + redrive, and
5
+ * Secrets Manager editing.
6
+ *
7
+ * The catalog (`buildServerlessOperations`) is derived purely from the cloud
8
+ * config + resolved dashboard data so it is trivially unit-testable; the runner
9
+ * dispatches each op to the existing serverless-app helpers (which perform the
10
+ * real AWS calls) and returns a structured result (never throws on a remote
11
+ * failure). DLQ + secrets are exposed as dedicated helpers because they carry
12
+ * their own payloads (messages / values) rather than a fixed confirm token.
13
+ */
14
+ import type { CloudConfig, EnvironmentType } from '@ts-cloud/core';
15
+ export type ServerlessOperationGroup = 'deploy' | 'maintenance' | 'assets' | 'database' | 'queue';
16
+ export interface ServerlessOperationInput {
17
+ name: string;
18
+ label: string;
19
+ placeholder?: string;
20
+ }
21
+ export interface ServerlessOperation {
22
+ id: string;
23
+ label: string;
24
+ group: ServerlessOperationGroup;
25
+ target: string;
26
+ mutates: boolean;
27
+ /** Token the operator must type to run a mutating operation. */
28
+ confirm: string;
29
+ /** Destructive operations rendered with a danger affordance. */
30
+ danger?: boolean;
31
+ /** Extra operator-supplied inputs (e.g. Aurora min/max ACUs). */
32
+ inputs?: ServerlessOperationInput[];
33
+ }
34
+ export interface ServerlessOperationResult {
35
+ operation: string;
36
+ command?: string;
37
+ ok: boolean;
38
+ stdout?: string;
39
+ error?: string;
40
+ }
41
+ /**
42
+ * Build the serverless operation catalog from config + live data. Pure: every
43
+ * operation here is runnable by {@link runServerlessOperation}.
44
+ */
45
+ export declare function buildServerlessOperations(config: CloudConfig, environment: EnvironmentType, data: Record<string, any>): ServerlessOperation[];
46
+ export declare function resolveServerlessOperation(id: string, config: CloudConfig, environment: EnvironmentType, data: Record<string, any>): ServerlessOperation | undefined;
47
+ export interface RunServerlessOperationOptions {
48
+ /** For db:scale — the requested Aurora min/max ACUs. */
49
+ min?: number;
50
+ max?: number;
51
+ }
52
+ /**
53
+ * Run a serverless operation over the live AWS environment. Returns a structured
54
+ * result; a remote failure is captured as `{ ok: false, error }` rather than
55
+ * thrown, so the cockpit always renders an outcome.
56
+ */
57
+ export declare function runServerlessOperation(config: CloudConfig, environment: EnvironmentType, operation: ServerlessOperation, options?: RunServerlessOperationOptions): Promise<ServerlessOperationResult>;
58
+ /** Run an arbitrary app command via the CLI function (Vapor-style command runner). */
59
+ export declare function runServerlessCommand(config: CloudConfig, environment: EnvironmentType, command: string): Promise<ServerlessOperationResult>;
60
+ export interface DlqMessage {
61
+ id: string;
62
+ receiptHandle: string;
63
+ body: string;
64
+ }
65
+ /** Peek at DLQ messages (visibility restored quickly so they aren't consumed). */
66
+ export declare function listDlqMessages(config: CloudConfig, environment: EnvironmentType, max?: number): Promise<{
67
+ ok: boolean;
68
+ messages: DlqMessage[];
69
+ error?: string;
70
+ }>;
71
+ /**
72
+ * Redrive up to `max` messages from the DLQ back onto a source queue (receive →
73
+ * send → delete). `targetQueue` is a configured queue short-name; it defaults to
74
+ * the first resolved queue for the app.
75
+ */
76
+ export declare function redriveDlq(config: CloudConfig, environment: EnvironmentType, opts?: {
77
+ max?: number;
78
+ targetQueue?: string;
79
+ }): Promise<ServerlessOperationResult>;
80
+ /** Purge every message from the DLQ (destructive). */
81
+ export declare function purgeDlq(config: CloudConfig, environment: EnvironmentType): Promise<ServerlessOperationResult>;
82
+ /** The Secrets Manager ids the app references (from `app.secrets`). */
83
+ export declare function configuredSecretIds(config: CloudConfig, environment: EnvironmentType): Array<{
84
+ key: string;
85
+ secretId: string;
86
+ }>;
87
+ /**
88
+ * Set (create or update) a Secrets Manager value. The change takes effect on the
89
+ * next deploy (function env is injected at deploy time), so the caller should
90
+ * surface that redeploy hint.
91
+ */
92
+ export declare function setServerlessSecret(config: CloudConfig, environment: EnvironmentType, secretId: string, value: string): Promise<ServerlessOperationResult>;
93
+ /** Delete a Secrets Manager entry (scheduled deletion; recoverable for 7 days). */
94
+ export declare function deleteServerlessSecret(config: CloudConfig, environment: EnvironmentType, secretId: string): Promise<ServerlessOperationResult>;
95
+ /**
96
+ * Update a function's memory and/or timeout. `mode` is one of the app's function
97
+ * modes (http/queue/cli). Memory takes effect immediately; the change is also
98
+ * re-applied on the next deploy from config.
99
+ */
100
+ export declare function updateFunctionConfig(config: CloudConfig, environment: EnvironmentType, mode: string, opts: {
101
+ memory?: number;
102
+ timeout?: number;
103
+ }): Promise<ServerlessOperationResult>;
104
+ export interface AlarmMetricPreset {
105
+ key: string;
106
+ label: string;
107
+ namespace: string;
108
+ metricName: string;
109
+ statistic: 'Sum' | 'Average' | 'Maximum' | 'Minimum';
110
+ comparison: string;
111
+ /** Function mode this metric attaches to (http/queue/cli), or undefined for account-wide. */
112
+ fnMode?: 'http' | 'queue' | 'cli';
113
+ unit: string;
114
+ }
115
+ /** The alarm metrics an operator can arm from the dashboard. */
116
+ export declare const ALARM_PRESETS: AlarmMetricPreset[];
117
+ export declare function resolveAlarmPreset(key: string): AlarmMetricPreset | undefined;
118
+ /** List the alarms ts-cloud manages for this environment (name-prefixed). */
119
+ export declare function listAlarms(config: CloudConfig, environment: EnvironmentType): Promise<{
120
+ ok: boolean;
121
+ alarms: any[];
122
+ presets: AlarmMetricPreset[];
123
+ error?: string;
124
+ }>;
125
+ /** Create (or update) an alarm from a preset + threshold. */
126
+ export declare function createAlarm(config: CloudConfig, environment: EnvironmentType, presetKey: string, threshold: number): Promise<ServerlessOperationResult>;
127
+ /** Delete an alarm by name (guarded to this project's prefix). */
128
+ export declare function deleteAlarm(config: CloudConfig, environment: EnvironmentType, alarmName: string): Promise<ServerlessOperationResult>;
129
+ export interface ShapedTrace {
130
+ id: string;
131
+ durationMs: number;
132
+ responseMs: number;
133
+ status: 'ok' | 'error' | 'fault' | 'throttle';
134
+ method: string;
135
+ url: string;
136
+ httpStatus: number;
137
+ }
138
+ /**
139
+ * List recent X-Ray trace summaries for the app's HTTP function (falling back to
140
+ * all traces in the window when the service filter returns nothing). Requires
141
+ * tracing to be enabled on the functions; returns an empty, ok:false result with
142
+ * a hint otherwise.
143
+ */
144
+ export declare function listTraces(config: CloudConfig, environment: EnvironmentType, minutes?: number): Promise<{
145
+ ok: boolean;
146
+ traces: ShapedTrace[];
147
+ error?: string;
148
+ }>;
149
+ /** Enable, disable, or run-now the serverless scheduler. */
150
+ export declare function controlScheduler(config: CloudConfig, environment: EnvironmentType, action: 'enable' | 'disable' | 'run'): Promise<ServerlessOperationResult>;
@@ -0,0 +1 @@
1
+ export {};
@@ -49,4 +49,10 @@ export declare function renderSslValue(ssl: boolean | {
49
49
  }): string;
50
50
  export declare function renderStringValue(value: string): string;
51
51
  export declare function renderEnvValue(env: Record<string, string>): string;
52
+ /** A validated hostname (letters, digits, dots, hyphens; at least one dot). */
53
+ export declare function isValidHostname(value: string): boolean;
54
+ /** Render a site's `aliases` array (additional nginx `server_name` hostnames). */
55
+ export declare function renderAliasesValue(aliases: string[]): string;
56
+ /** Render a site's `redirects` map (`from` path/host → `to` URL). Both are quoted strings. */
57
+ export declare function renderRedirectsValue(redirects: Record<string, string>): string;
52
58
  export declare function renderSiteSnippet(input: Omit<AddSiteConfigInput, 'configText'>): string;
@@ -20,3 +20,4 @@ export interface ManagedSshKey {
20
20
  export declare function addSshKeyToCloudConfig(input: AddSshKeyInput): string;
21
21
  export declare function removeSshKeyFromCloudConfig(input: RemoveSshKeyInput): string;
22
22
  export declare function describeSshKeys(keys?: SshKeyConfig[]): ManagedSshKey[];
23
+ export declare function findMatching(text: string, start: number, open: string, close: string): number;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * A persistent shell session for the dashboard's web terminal. Spawns an
3
+ * interactive shell on the host the dashboard runs on (in box mode that is the
4
+ * provisioned server, matching Forge's web SSH) and streams its output back
5
+ * through `onData`. Input is written to the shell's stdin.
6
+ *
7
+ * This is a line-oriented shell over pipes, not a full PTY: cwd and environment
8
+ * persist across commands and long-running output streams, but curses-style
9
+ * full-screen programs (vim, htop) are not supported. It is gated behind the
10
+ * dashboard's Basic auth like every other control surface.
11
+ */
12
+ export interface TerminalSession {
13
+ /** Write raw input (typically a command line ending in \n) to the shell. */
14
+ write: (data: string) => void;
15
+ /** Terminate the shell and release the streams. */
16
+ close: () => void;
17
+ }
18
+ export interface TerminalSessionOptions {
19
+ shell?: string;
20
+ cwd?: string;
21
+ onExit?: (code: number | null) => void;
22
+ }
23
+ export declare function createTerminalSession(onData: (chunk: string) => void, options?: TerminalSessionOptions): TerminalSession;
package/dist/index.d.ts CHANGED
@@ -9,8 +9,8 @@ export type { ObjectStorageConfig, ObjectStorageCredentials, ObjectStorageProvid
9
9
  export { keyMatchesFilters, migrateObjectStorage, remapKey, } from './object-storage/migrate';
10
10
  export type { MigrateEndpoint, MigrateError, MigrateOptions, MigratePlanItem, MigrateProgress, MigrateResult, MigrateVerification, } from './object-storage/migrate';
11
11
  export * from './ssl';
12
- export { deployStaticSite, deployStaticSiteFull, uploadStaticFiles, invalidateCache, deleteStaticSite, generateStaticSiteTemplate, deployStaticSiteWithExternalDns, deployStaticSiteWithExternalDnsFull, generateExternalDnsStaticSiteTemplate, deploySite, resolveSiteDeployTarget, resolveSiteKind, validateDeploymentConfig, buildAndPushServerlessImage, buildFunctionEnv, deployServerlessApp, infraEnvFromOutputs, redeployServerlessApp, rollbackServerlessApp, runRemoteCommand, setMaintenance, } from './deploy';
13
- export type { StaticSiteConfig, DeployResult, UploadOptions, ExternalDnsStaticSiteConfig, ExternalDnsDeployResult, DeploySiteConfig, DeploySiteResult, StaticSiteDnsProvider, SiteDeployKind, DeploymentValidationResult, BuildImageOptions, BuiltImage, CodeSource, DeployServerlessOptions, ResolvedContext, } from './deploy';
12
+ export { deployStaticSite, deployStaticSiteFull, uploadStaticFiles, invalidateCache, deleteStaticSite, generateStaticSiteTemplate, deployStaticSiteWithExternalDns, deployStaticSiteWithExternalDnsFull, generateExternalDnsStaticSiteTemplate, deploySite, resolveSiteDeployTarget, resolveSiteKind, validateDeploymentConfig, buildAndPushServerlessImage, buildFunctionEnv, deployServerlessApp, infraEnvFromOutputs, redeployServerlessApp, rollbackServerlessApp, runRemoteCommand, setMaintenance, buildManagementDashboardArtifact, DASHBOARD_CREDENTIALS_FILE, ensureManagementDashboard, MANAGEMENT_DASHBOARD_SITE, resolveDashboardAuth, resolveUiSource, } from './deploy';
13
+ export type { EnsureDashboardLogger, ResolvedDashboardAuth, StaticSiteConfig, DeployResult, UploadOptions, ExternalDnsStaticSiteConfig, ExternalDnsDeployResult, DeploySiteConfig, DeploySiteResult, StaticSiteDnsProvider, SiteDeployKind, DeploymentValidationResult, BuildImageOptions, BuiltImage, CodeSource, DeployServerlessOptions, ResolvedContext, } from './deploy';
14
14
  export { createCloudDriver, CloudDriverFactory, cloudDrivers, AwsDriver, HetznerDriver, HetznerClient, resolveHetznerApiToken, generateUbuntuAppCloudInit, wrapCloudInitUserData, buildSiteDeployScript, buildStaticSiteDeployScript, resolveExecStart, deployAllComputeSites, deploySiteRelease, } from './drivers';
15
15
  export type { CreateCloudDriverOptions } from './drivers/factory';
16
16
  export { dashboardActions, resolveDashboardAction, sanitizeCloudConfig, startLocalDashboardServer, } from './deploy/local-dashboard-server';