@stacksjs/ts-cloud 0.7.84 → 0.7.85
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.
- package/dist/bin/cli.js +382 -382
- package/dist/{chunk-838t87x3.js → chunk-gx4288t5.js} +57 -1
- package/dist/{chunk-8m38yfba.js → chunk-qbj74thz.js} +5 -44
- package/dist/deploy/index.js +6 -4
- package/dist/deploy/server-dns.d.ts +18 -3
- package/dist/drivers/hetzner/state.d.ts +8 -0
- package/dist/drivers/index.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +6 -4
- package/dist/ui/access-denied.html +2 -2
- package/dist/ui/account/automation.html +3 -3
- package/dist/ui/account/security.html +2 -2
- package/dist/ui/applications/compose.html +4 -4
- package/dist/ui/applications/new.html +2 -2
- package/dist/ui/data/backups.html +4 -4
- package/dist/ui/data/services.html +4 -4
- package/dist/ui/data/volumes.html +4 -4
- package/dist/ui/index.html +4 -4
- package/dist/ui/integrations.html +2 -2
- package/dist/ui/operations/alerts.html +3 -3
- package/dist/ui/operations/configuration.html +4 -4
- package/dist/ui/operations/jobs.html +4 -4
- package/dist/ui/operations/maintenance.html +3 -3
- package/dist/ui/operations/observability.html +4 -4
- package/dist/ui/operations/previews.html +4 -4
- package/dist/ui/operations/queue.html +4 -4
- package/dist/ui/operations/regions.html +4 -4
- package/dist/ui/operations/releases.html +4 -4
- package/dist/ui/operations/workloads.html +4 -4
- package/dist/ui/security.html +2 -2
- package/dist/ui/server/actions.html +4 -4
- package/dist/ui/server/activity.html +2 -2
- package/dist/ui/server/capacity.html +4 -4
- package/dist/ui/server/database.html +4 -4
- package/dist/ui/server/deployments.html +4 -4
- package/dist/ui/server/diagnostics.html +2 -2
- package/dist/ui/server/firewall.html +4 -4
- package/dist/ui/server/fleet.html +4 -4
- package/dist/ui/server/logs.html +4 -4
- package/dist/ui/server/metrics.html +4 -4
- package/dist/ui/server/services.html +2 -2
- package/dist/ui/server/sites.html +4 -4
- package/dist/ui/server/ssh-keys.html +4 -4
- package/dist/ui/server/team.html +3 -3
- package/dist/ui/server/terminal.html +2 -2
- package/dist/ui/serverless/alarms.html +3 -3
- package/dist/ui/serverless/assets.html +2 -2
- package/dist/ui/serverless/cost.html +2 -2
- package/dist/ui/serverless/data.html +4 -4
- package/dist/ui/serverless/deployments.html +2 -2
- package/dist/ui/serverless/firewall.html +2 -2
- package/dist/ui/serverless/functions.html +4 -4
- package/dist/ui/serverless/logs.html +4 -4
- package/dist/ui/serverless/metrics.html +2 -2
- package/dist/ui/serverless/queues.html +4 -4
- package/dist/ui/serverless/secrets.html +4 -4
- package/dist/ui/serverless/traces.html +4 -4
- package/dist/ui/serverless.html +4 -4
- package/package.json +3 -3
|
@@ -2045,6 +2045,59 @@ import { execSync } from "node:child_process";
|
|
|
2045
2045
|
import { randomUUID } from "node:crypto";
|
|
2046
2046
|
import { existsSync, readFileSync as readFileSync2 } from "node:fs";
|
|
2047
2047
|
|
|
2048
|
+
// src/deploy/server-dns.ts
|
|
2049
|
+
function collectServerDnsDomains(sites = {}) {
|
|
2050
|
+
const domains = new Set;
|
|
2051
|
+
for (const site of Object.values(sites)) {
|
|
2052
|
+
if (!site.domain)
|
|
2053
|
+
continue;
|
|
2054
|
+
if (site.redirect || site.deploy === "server" || site.start)
|
|
2055
|
+
domains.add(site.domain);
|
|
2056
|
+
}
|
|
2057
|
+
return domains;
|
|
2058
|
+
}
|
|
2059
|
+
function normalizeName(name) {
|
|
2060
|
+
return name.replace(/\.$/, "").toLowerCase();
|
|
2061
|
+
}
|
|
2062
|
+
function matchesHostname(record, zone, hostname) {
|
|
2063
|
+
const recordName = normalizeName(record.name);
|
|
2064
|
+
const normalizedZone = normalizeName(zone);
|
|
2065
|
+
const normalizedHostname = normalizeName(hostname);
|
|
2066
|
+
const relativeName = normalizedHostname === normalizedZone ? "@" : normalizedHostname.endsWith(`.${normalizedZone}`) ? normalizedHostname.slice(0, -(normalizedZone.length + 1)) : normalizedHostname;
|
|
2067
|
+
return recordName === normalizedHostname || recordName === relativeName || relativeName === "@" && (recordName === "" || recordName === normalizedZone);
|
|
2068
|
+
}
|
|
2069
|
+
async function removeStaleServerAddressRecords(provider, zone, hostname, desiredAddress, recordType = "A") {
|
|
2070
|
+
const listed = await provider.listRecords(zone);
|
|
2071
|
+
if (!listed.success)
|
|
2072
|
+
return [`could not list ${recordType} records: ${listed.message || "unknown provider error"}`];
|
|
2073
|
+
const matching = listed.records.filter((record) => record.type === recordType && matchesHostname(record, zone, hostname));
|
|
2074
|
+
const desiredIndex = matching.findIndex((record) => record.content === desiredAddress);
|
|
2075
|
+
if (matching.length <= 1 || desiredIndex === -1)
|
|
2076
|
+
return [];
|
|
2077
|
+
const warnings = [];
|
|
2078
|
+
for (const [index, record] of matching.entries()) {
|
|
2079
|
+
if (index === desiredIndex)
|
|
2080
|
+
continue;
|
|
2081
|
+
const result = await provider.deleteRecord(zone, record);
|
|
2082
|
+
if (!result.success)
|
|
2083
|
+
warnings.push(`could not remove stale ${record.name} ${recordType} ${record.content}: ${result.message || "unknown provider error"}`);
|
|
2084
|
+
}
|
|
2085
|
+
return warnings;
|
|
2086
|
+
}
|
|
2087
|
+
function hetznerBoxIpv6(reported) {
|
|
2088
|
+
if (!reported)
|
|
2089
|
+
return;
|
|
2090
|
+
const trimmed = reported.trim();
|
|
2091
|
+
if (!trimmed)
|
|
2092
|
+
return;
|
|
2093
|
+
if (!trimmed.includes("/"))
|
|
2094
|
+
return trimmed;
|
|
2095
|
+
const [block] = trimmed.split("/");
|
|
2096
|
+
if (!block.endsWith("::"))
|
|
2097
|
+
return block || undefined;
|
|
2098
|
+
return `${block}1`;
|
|
2099
|
+
}
|
|
2100
|
+
|
|
2048
2101
|
// src/drivers/shared/fleet.ts
|
|
2049
2102
|
function resolveFleetTopology(compute = {}) {
|
|
2050
2103
|
const appServers = Math.max(1, compute.appServers ?? compute.instances ?? 1);
|
|
@@ -2613,6 +2666,7 @@ class HetznerDriver {
|
|
|
2613
2666
|
serverId: alreadyRunning.id,
|
|
2614
2667
|
serverName: alreadyRunning.name,
|
|
2615
2668
|
publicIp: alreadyRunning.public_net.ipv4?.ip,
|
|
2669
|
+
publicIpv6: hetznerBoxIpv6(alreadyRunning.public_net.ipv6?.ip),
|
|
2616
2670
|
deployStoragePath: "/var/ts-cloud/staging",
|
|
2617
2671
|
sshUser: this.sshUser
|
|
2618
2672
|
};
|
|
@@ -2660,6 +2714,7 @@ class HetznerDriver {
|
|
|
2660
2714
|
serverName: running.name,
|
|
2661
2715
|
firewallId: firewall.id,
|
|
2662
2716
|
publicIp: running.public_net.ipv4?.ip,
|
|
2717
|
+
publicIpv6: hetznerBoxIpv6(running.public_net.ipv6?.ip),
|
|
2663
2718
|
deployStoragePath: "/var/ts-cloud/staging",
|
|
2664
2719
|
sshUser: this.sshUser
|
|
2665
2720
|
};
|
|
@@ -3373,6 +3428,7 @@ ${out}`);
|
|
|
3373
3428
|
deployStoragePath: state.deployStoragePath || "/var/ts-cloud/staging",
|
|
3374
3429
|
appInstanceId: state.serverId ? String(state.serverId) : undefined,
|
|
3375
3430
|
appPublicIp: server?.public_net.ipv4?.ip || state.publicIp,
|
|
3431
|
+
appPublicIpv6: hetznerBoxIpv6(server?.public_net.ipv6?.ip) || state.publicIpv6,
|
|
3376
3432
|
sshUser: state.sshUser || this.sshUser,
|
|
3377
3433
|
servicesPrivateIp: state.servicesPrivateIp
|
|
3378
3434
|
};
|
|
@@ -6198,4 +6254,4 @@ function buildCloudFrontOriginConfig(options) {
|
|
|
6198
6254
|
CustomErrorResponses: { Quantity: 0 }
|
|
6199
6255
|
};
|
|
6200
6256
|
}
|
|
6201
|
-
export { PANTRY_PROJECT_DIR, pgAdminCommand, BACKUP_RUNNER_PATH, buildBackupRestoreScript, siteInstallBase, isPhpSite, resolveSiteDeployTarget, resolveSiteKind, validateDeploymentConfig, shipsARelease, DEFAULT_RPX_CERTS_DIR, normalizeRoutePath, deriveRouteId, buildRpxConfig, buildRpxLbConfig, renderRpxLauncher, RPX_DIR, RPX_LAUNCHER_PATH, RPX_SERVICE_NAME, buildRpxProvisionScript, buildRpxFragmentRefreshScript, buildUbuntuBootstrapScript, AwsDriver, resolveHetznerLocation, HetznerClient, resolveHetznerApiToken2 as resolveHetznerApiToken, normalizeSshPublicKey, wrapCloudInitUserData, HetznerDriver, LocalBoxDriver, isBoxMode, createCloudDriver, CloudDriverFactory, cloudDrivers, planHetznerServerResize, isHetznerCapacityError, executeHetznerServerResize, buildSshArgs, sshExec, sshExecOrThrow, scpUpload, waitForSsh, waitForCloudInit, collectHetznerResizeManifest, prepareHetznerResize, verifyHetznerResize, resolveHetznerHostOptimizationPlan, buildHetznerHostOptimizationScript, applyHetznerHostOptimization, collectHetznerHostOptimizationReport, verifyHetznerHostOptimization, resizeCheckpointPath, resizeLockPath, readResizeCheckpoint, writeResizeCheckpoint, acquireResizeLock, ensureSshKey, ensureFirewall, ensureServer, serverPublicIpv4, UBUNTU_2404_AMI_PARAM, buildBoxUserData, HetznerBoxProvisioner, AwsBoxProvisioner, createBoxProvisioner, releasePaths, buildRollbackScript, resolveExecStart, buildSiteDeployScript, buildStaticSiteDeployScript, releaseTarballTmpPath, buildAwsArtifactFetch, buildLocalArtifactFetch, buildHostCleanupScript, MANAGEMENT_DASHBOARD_SITE, dashboardCredentialsFile, resolveDashboardAuth, resolveUiSource, ensureManagementDashboard, buildManagementDashboardArtifact, resolveSiteFramework, deploySiteRelease, deployAllComputeSites, reloadRpxGateway, renewRpxCertificates, MANAGED_CACHE_POLICY_OPTIMIZED, MANAGED_CACHE_POLICY_DISABLED, MANAGED_ORIGIN_REQUEST_POLICY_ALL_VIEWER, buildCloudFrontOriginConfig };
|
|
6257
|
+
export { PANTRY_PROJECT_DIR, pgAdminCommand, BACKUP_RUNNER_PATH, buildBackupRestoreScript, siteInstallBase, isPhpSite, resolveSiteDeployTarget, resolveSiteKind, validateDeploymentConfig, shipsARelease, DEFAULT_RPX_CERTS_DIR, normalizeRoutePath, deriveRouteId, buildRpxConfig, buildRpxLbConfig, renderRpxLauncher, RPX_DIR, RPX_LAUNCHER_PATH, RPX_SERVICE_NAME, buildRpxProvisionScript, buildRpxFragmentRefreshScript, buildUbuntuBootstrapScript, AwsDriver, collectServerDnsDomains, removeStaleServerAddressRecords, hetznerBoxIpv6, resolveHetznerLocation, HetznerClient, resolveHetznerApiToken2 as resolveHetznerApiToken, normalizeSshPublicKey, wrapCloudInitUserData, HetznerDriver, LocalBoxDriver, isBoxMode, createCloudDriver, CloudDriverFactory, cloudDrivers, planHetznerServerResize, isHetznerCapacityError, executeHetznerServerResize, buildSshArgs, sshExec, sshExecOrThrow, scpUpload, waitForSsh, waitForCloudInit, collectHetznerResizeManifest, prepareHetznerResize, verifyHetznerResize, resolveHetznerHostOptimizationPlan, buildHetznerHostOptimizationScript, applyHetznerHostOptimization, collectHetznerHostOptimizationReport, verifyHetznerHostOptimization, resizeCheckpointPath, resizeLockPath, readResizeCheckpoint, writeResizeCheckpoint, acquireResizeLock, ensureSshKey, ensureFirewall, ensureServer, serverPublicIpv4, UBUNTU_2404_AMI_PARAM, buildBoxUserData, HetznerBoxProvisioner, AwsBoxProvisioner, createBoxProvisioner, releasePaths, buildRollbackScript, resolveExecStart, buildSiteDeployScript, buildStaticSiteDeployScript, releaseTarballTmpPath, buildAwsArtifactFetch, buildLocalArtifactFetch, buildHostCleanupScript, MANAGEMENT_DASHBOARD_SITE, dashboardCredentialsFile, resolveDashboardAuth, resolveUiSource, ensureManagementDashboard, buildManagementDashboardArtifact, resolveSiteFramework, deploySiteRelease, deployAllComputeSites, reloadRpxGateway, renewRpxCertificates, MANAGED_CACHE_POLICY_OPTIMIZED, MANAGED_CACHE_POLICY_DISABLED, MANAGED_ORIGIN_REQUEST_POLICY_ALL_VIEWER, buildCloudFrontOriginConfig };
|
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
resolveSiteKind,
|
|
46
46
|
resolveUiSource,
|
|
47
47
|
siteInstallBase
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-gx4288t5.js";
|
|
49
49
|
import {
|
|
50
50
|
artifactKey,
|
|
51
51
|
buildCloudFormationTemplate,
|
|
@@ -88,45 +88,6 @@ import {
|
|
|
88
88
|
import {
|
|
89
89
|
__require
|
|
90
90
|
} from "./chunk-v0bahtg2.js";
|
|
91
|
-
// src/deploy/server-dns.ts
|
|
92
|
-
function collectServerDnsDomains(sites = {}) {
|
|
93
|
-
const domains = new Set;
|
|
94
|
-
for (const site of Object.values(sites)) {
|
|
95
|
-
if (!site.domain)
|
|
96
|
-
continue;
|
|
97
|
-
if (site.redirect || site.deploy === "server" || site.start)
|
|
98
|
-
domains.add(site.domain);
|
|
99
|
-
}
|
|
100
|
-
return domains;
|
|
101
|
-
}
|
|
102
|
-
function normalizeName(name) {
|
|
103
|
-
return name.replace(/\.$/, "").toLowerCase();
|
|
104
|
-
}
|
|
105
|
-
function matchesHostname(record, zone, hostname) {
|
|
106
|
-
const recordName = normalizeName(record.name);
|
|
107
|
-
const normalizedZone = normalizeName(zone);
|
|
108
|
-
const normalizedHostname = normalizeName(hostname);
|
|
109
|
-
const relativeName = normalizedHostname === normalizedZone ? "@" : normalizedHostname.endsWith(`.${normalizedZone}`) ? normalizedHostname.slice(0, -(normalizedZone.length + 1)) : normalizedHostname;
|
|
110
|
-
return recordName === normalizedHostname || recordName === relativeName || relativeName === "@" && (recordName === "" || recordName === normalizedZone);
|
|
111
|
-
}
|
|
112
|
-
async function removeStaleServerAddressRecords(provider, zone, hostname, desiredAddress) {
|
|
113
|
-
const listed = await provider.listRecords(zone);
|
|
114
|
-
if (!listed.success)
|
|
115
|
-
return [`could not list A records: ${listed.message || "unknown provider error"}`];
|
|
116
|
-
const matching = listed.records.filter((record) => record.type === "A" && matchesHostname(record, zone, hostname));
|
|
117
|
-
const desiredIndex = matching.findIndex((record) => record.content === desiredAddress);
|
|
118
|
-
if (matching.length <= 1 || desiredIndex === -1)
|
|
119
|
-
return [];
|
|
120
|
-
const warnings = [];
|
|
121
|
-
for (const [index, record] of matching.entries()) {
|
|
122
|
-
if (index === desiredIndex)
|
|
123
|
-
continue;
|
|
124
|
-
const result = await provider.deleteRecord(zone, record);
|
|
125
|
-
if (!result.success)
|
|
126
|
-
warnings.push(`could not remove stale ${record.name} A ${record.content}: ${result.message || "unknown provider error"}`);
|
|
127
|
-
}
|
|
128
|
-
return warnings;
|
|
129
|
-
}
|
|
130
91
|
// src/deploy/dashboard-control-plane.ts
|
|
131
92
|
import { createHash as createHash5 } from "node:crypto";
|
|
132
93
|
|
|
@@ -13016,7 +12977,7 @@ function normalizeHost(value) {
|
|
|
13016
12977
|
throw new Error("Source host must use HTTPS");
|
|
13017
12978
|
return `${url.protocol}//${url.host}${url.pathname.replace(/\/$/, "")}`;
|
|
13018
12979
|
}
|
|
13019
|
-
function
|
|
12980
|
+
function normalizeName(value) {
|
|
13020
12981
|
const name = value.trim();
|
|
13021
12982
|
if (name.length < 2 || name.length > 80)
|
|
13022
12983
|
throw new Error("Connection name must contain 2-80 characters");
|
|
@@ -13207,7 +13168,7 @@ class SourceConnectionStore {
|
|
|
13207
13168
|
id,
|
|
13208
13169
|
input.organizationId,
|
|
13209
13170
|
input.provider,
|
|
13210
|
-
|
|
13171
|
+
normalizeName(input.name),
|
|
13211
13172
|
normalizeHost(input.host),
|
|
13212
13173
|
input.owner?.trim() || null,
|
|
13213
13174
|
input.authKind ?? (encoded ? "access_token" : "none"),
|
|
@@ -13340,7 +13301,7 @@ class SourceConnectionStore {
|
|
|
13340
13301
|
this.run(`INSERT INTO source_deploy_keys (id, connection_id, name, public_key, public_key_fingerprint, private_key_ciphertext, host, host_key, host_key_fingerprint, created_by_actor_id, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
13341
13302
|
id,
|
|
13342
13303
|
input.connectionId,
|
|
13343
|
-
|
|
13304
|
+
normalizeName(input.name),
|
|
13344
13305
|
input.publicKey.trim(),
|
|
13345
13306
|
publicFingerprint,
|
|
13346
13307
|
this.encrypt(input.privateKey),
|
|
@@ -49156,4 +49117,4 @@ data: ${JSON.stringify({ cursor: position, at: new Date().toISOString() })}
|
|
|
49156
49117
|
};
|
|
49157
49118
|
return { server, url: `http://${host2}:${server.port}/` };
|
|
49158
49119
|
}
|
|
49159
|
-
export { defaultConfig4 as defaultConfig, getConfig, loadCloudConfig, config5 as config, encodeBase32, decodeBase32, hotp, totp, verifyTotp, matchTotpCounter, totpUri, AUTH_SESSION_IDLE_TTL_MS, AUTH_SESSION_ABSOLUTE_TTL_MS, AUTH_ACTION_TOKEN_TTL_MS, AUTH_MFA_CHALLENGE_TTL_MS, AUTH_OIDC_TRANSACTION_TTL_MS, AuthenticationStore, sendAuthenticationEmail, authEncryptionKeyFile, resolveAuthEncryptionKey, sanitizeOidcReturnPath, discoverOidcProvider, beginOidcAuthorization, completeOidcAuthorization, CONTROL_PLANE_SCHEMA_VERSION, controlPlaneMigrations, AUTHORIZATION_CAPABILITIES, roleCapabilities, scopeContains, authorizeOrganization, effectiveCapabilities, OptimisticConcurrencyError, InvalidOperationTransitionError, UnsupportedSchemaVersionError, controlPlaneDatabaseFile, MAX_CONTROL_PLANE_JSON_BYTES, MAX_CONTROL_PLANE_ERROR_BYTES, sanitizeControlPlaneValue, ControlPlaneStore, searchControlPlane, API_TOKEN_DEFAULT_TTL_MS, API_TOKEN_MAX_TTL_MS, API_IDEMPOTENCY_TTL_MS, AutomationIdentityStore, TsCloudApiError, TsCloudClient, parseCompose, exportCompose, diffCompose, listComposeTemplates, getComposeTemplate, renderComposeTemplate, parseComposeCatalog, planComposeTemplateUpgrade, composeProjectName, buildComposeRuntimeCommand, buildComposeScaleCommand, buildComposeLogsCommand, buildComposeShellCommand, QueueCancellationError, QueueTimeoutError, RetryableOperationError, DurableOperationQueue, DurableQueueWorker, PreviewEnvironmentStore, PreviewEnvironmentService, DEPLOYMENT_QUEUE_KINDS, resolveQueuedDeploymentCommand, createDeploymentQueueHandlers, unsupportedVolumeCapabilities, volumeCapabilities, validateMountPath, validateAttachment, VolumeService, createVolumeQueueHandlers, DockerNamedVolumeDriver, ServerPathVolumeDriver, CloudBlockVolumeDriver, VolumeStore, synchronizeComposeVolumes, completeComposeVolumeDeletion, ComposeApplicationStore, ComposeApplicationService, releaseStrategyCapabilities, assertReleaseStrategy, ReleaseStore, ReleaseService, releaseTrafficPlan, activateImmutableRelease, rollbackImmutableRelease, RELEASE_QUEUE_KINDS, createReleaseQueueHandlers, SourceConnectionStore, SourceProviderError, GithubSourceAdapter, GitlabSourceAdapter, BitbucketSourceAdapter, GiteaSourceAdapter, createSourceAdapter, normalizeSourceEvent, processSourceWebhook, webhookEndpoint, discoverGitRefs, cloneSourceBinding, testSourceConnection, syncSourceRepositories, listSourceReferences, reconcileSourceWebhook, removeSourceWebhook, API_VERSION, openApiDocument, ApiServiceError, requestHash, AutomationApiService, createApiV1Handler, SecurityPostureStore, SECRET_PATTERNS, PreDeployScanner, scanForSecrets, formatScanResults, SecurityScannerRunner, SecretFindingScanner, TrivyImageScanner, AwsIamCapabilityScanner, generateCycloneDxSbom, generateImageSbom, attachSbomToRelease, attachVulnerabilitySummary, createReleaseProvenance, attachProvenanceToRelease, verifyArtifactSignature, securityScope, ensureDefaultSecurityPolicies, recordPreDeploySecretScan, recordSkippedSecretScan, recordDashboardHostPosture, productionChangeReview, secureContainerRelease, runtimeId2 as runtimeId, unsupportedCapabilities, capabilities2 as capabilities, normalizeRuntimeStatus, redactRuntimeConfig, ageSeconds, bytes, discoverRuntimeInventory, ecsWorkloads, lambdaWorkloads, parseDockerInspect, dockerWorkloads, DockerDiscoveryAdapter, parseSystemdRecords, systemdWorkloads, SystemdDiscoveryAdapter, EcsRuntimeAdapter, LambdaRuntimeAdapter, createRuntimeAdapters, resolveRuntimeInventory, authorizeRuntimePath, DIAGNOSTIC_PRESETS, RuntimeOperationService, RuntimeStreamRegistry, DEFAULT_TELEMETRY_POLICY, normalizeTelemetryPolicy, telemetryPolicyKey, loadTelemetryPolicy, saveTelemetryPolicy, telemetryEstimatedMonthlyCost, redactTelemetryText, redactTelemetryValue, pathTemplate, telemetryCursor, telemetryPercentile, telemetryBucketLabel, TelemetryStore, AlertStore, AlertEvaluator, isQuietHours, NotificationRouter, HealthCheckRunner, evaluateTelemetryAlertRules, normalizeScheduleExpression, nextScheduleRuns, previewSchedule, jobProviderCapability, renderServerCron, eventBridgeScheduleInput, reconcileJobObservation, desiredState, ServerCronJobAdapter, EventBridgeJobAdapter, JobProviderReconciler, synchronizeConfiguredJobs, JobService, createJobQueueHandlers, JobStore, dataServiceCapabilities, DataServiceStore, connectionGuidance, DataServiceLifecycle, createDataServiceQueueHandlers, AwsRdsDataAdapter, AwsAuroraDataAdapter, AwsElastiCacheDataAdapter, ServerDataAdapter, ContainerDataAdapter, AwsRdsTransport, AwsAuroraTransport, AwsElastiCacheTransport, BunDockerRuntime, DockerDataTransport, EncryptedDataSecretStore, SystemFleetSshTransport, SshFleetDriver, createFleetQueueHandlers, FleetStore, FleetService, zeroCapacity, capacity, PlacementStore, PlacementService, RemoteBuildService, createRemoteBuildQueueHandlers, TransportRemoteBuildDriver, createServerBuildDriver, createEcsBuildDriver, createAsgBuildDriver, RegionStore, RegionService, createRegionQueueHandlers, AwsRegionalDriver, UnavailableRegionalDriver, canonicalJson, manifestDigest, documentDigest, publicKeyFingerprint, verifyUpdateSignature, updateCompatibility, MaintenanceStore, maintenanceWindowOpen, MaintenanceService, createMaintenanceQueueHandlers, TransportPlatformMaintenanceDriver, ControlPlaneCleanupDriver, TransportDisasterRecoveryDriver,
|
|
49120
|
+
export { defaultConfig4 as defaultConfig, getConfig, loadCloudConfig, config5 as config, encodeBase32, decodeBase32, hotp, totp, verifyTotp, matchTotpCounter, totpUri, AUTH_SESSION_IDLE_TTL_MS, AUTH_SESSION_ABSOLUTE_TTL_MS, AUTH_ACTION_TOKEN_TTL_MS, AUTH_MFA_CHALLENGE_TTL_MS, AUTH_OIDC_TRANSACTION_TTL_MS, AuthenticationStore, sendAuthenticationEmail, authEncryptionKeyFile, resolveAuthEncryptionKey, sanitizeOidcReturnPath, discoverOidcProvider, beginOidcAuthorization, completeOidcAuthorization, CONTROL_PLANE_SCHEMA_VERSION, controlPlaneMigrations, AUTHORIZATION_CAPABILITIES, roleCapabilities, scopeContains, authorizeOrganization, effectiveCapabilities, OptimisticConcurrencyError, InvalidOperationTransitionError, UnsupportedSchemaVersionError, controlPlaneDatabaseFile, MAX_CONTROL_PLANE_JSON_BYTES, MAX_CONTROL_PLANE_ERROR_BYTES, sanitizeControlPlaneValue, ControlPlaneStore, searchControlPlane, API_TOKEN_DEFAULT_TTL_MS, API_TOKEN_MAX_TTL_MS, API_IDEMPOTENCY_TTL_MS, AutomationIdentityStore, TsCloudApiError, TsCloudClient, parseCompose, exportCompose, diffCompose, listComposeTemplates, getComposeTemplate, renderComposeTemplate, parseComposeCatalog, planComposeTemplateUpgrade, composeProjectName, buildComposeRuntimeCommand, buildComposeScaleCommand, buildComposeLogsCommand, buildComposeShellCommand, QueueCancellationError, QueueTimeoutError, RetryableOperationError, DurableOperationQueue, DurableQueueWorker, PreviewEnvironmentStore, PreviewEnvironmentService, DEPLOYMENT_QUEUE_KINDS, resolveQueuedDeploymentCommand, createDeploymentQueueHandlers, unsupportedVolumeCapabilities, volumeCapabilities, validateMountPath, validateAttachment, VolumeService, createVolumeQueueHandlers, DockerNamedVolumeDriver, ServerPathVolumeDriver, CloudBlockVolumeDriver, VolumeStore, synchronizeComposeVolumes, completeComposeVolumeDeletion, ComposeApplicationStore, ComposeApplicationService, releaseStrategyCapabilities, assertReleaseStrategy, ReleaseStore, ReleaseService, releaseTrafficPlan, activateImmutableRelease, rollbackImmutableRelease, RELEASE_QUEUE_KINDS, createReleaseQueueHandlers, SourceConnectionStore, SourceProviderError, GithubSourceAdapter, GitlabSourceAdapter, BitbucketSourceAdapter, GiteaSourceAdapter, createSourceAdapter, normalizeSourceEvent, processSourceWebhook, webhookEndpoint, discoverGitRefs, cloneSourceBinding, testSourceConnection, syncSourceRepositories, listSourceReferences, reconcileSourceWebhook, removeSourceWebhook, API_VERSION, openApiDocument, ApiServiceError, requestHash, AutomationApiService, createApiV1Handler, SecurityPostureStore, SECRET_PATTERNS, PreDeployScanner, scanForSecrets, formatScanResults, SecurityScannerRunner, SecretFindingScanner, TrivyImageScanner, AwsIamCapabilityScanner, generateCycloneDxSbom, generateImageSbom, attachSbomToRelease, attachVulnerabilitySummary, createReleaseProvenance, attachProvenanceToRelease, verifyArtifactSignature, securityScope, ensureDefaultSecurityPolicies, recordPreDeploySecretScan, recordSkippedSecretScan, recordDashboardHostPosture, productionChangeReview, secureContainerRelease, runtimeId2 as runtimeId, unsupportedCapabilities, capabilities2 as capabilities, normalizeRuntimeStatus, redactRuntimeConfig, ageSeconds, bytes, discoverRuntimeInventory, ecsWorkloads, lambdaWorkloads, parseDockerInspect, dockerWorkloads, DockerDiscoveryAdapter, parseSystemdRecords, systemdWorkloads, SystemdDiscoveryAdapter, EcsRuntimeAdapter, LambdaRuntimeAdapter, createRuntimeAdapters, resolveRuntimeInventory, authorizeRuntimePath, DIAGNOSTIC_PRESETS, RuntimeOperationService, RuntimeStreamRegistry, DEFAULT_TELEMETRY_POLICY, normalizeTelemetryPolicy, telemetryPolicyKey, loadTelemetryPolicy, saveTelemetryPolicy, telemetryEstimatedMonthlyCost, redactTelemetryText, redactTelemetryValue, pathTemplate, telemetryCursor, telemetryPercentile, telemetryBucketLabel, TelemetryStore, AlertStore, AlertEvaluator, isQuietHours, NotificationRouter, HealthCheckRunner, evaluateTelemetryAlertRules, normalizeScheduleExpression, nextScheduleRuns, previewSchedule, jobProviderCapability, renderServerCron, eventBridgeScheduleInput, reconcileJobObservation, desiredState, ServerCronJobAdapter, EventBridgeJobAdapter, JobProviderReconciler, synchronizeConfiguredJobs, JobService, createJobQueueHandlers, JobStore, dataServiceCapabilities, DataServiceStore, connectionGuidance, DataServiceLifecycle, createDataServiceQueueHandlers, AwsRdsDataAdapter, AwsAuroraDataAdapter, AwsElastiCacheDataAdapter, ServerDataAdapter, ContainerDataAdapter, AwsRdsTransport, AwsAuroraTransport, AwsElastiCacheTransport, BunDockerRuntime, DockerDataTransport, EncryptedDataSecretStore, SystemFleetSshTransport, SshFleetDriver, createFleetQueueHandlers, FleetStore, FleetService, zeroCapacity, capacity, PlacementStore, PlacementService, RemoteBuildService, createRemoteBuildQueueHandlers, TransportRemoteBuildDriver, createServerBuildDriver, createEcsBuildDriver, createAsgBuildDriver, RegionStore, RegionService, createRegionQueueHandlers, AwsRegionalDriver, UnavailableRegionalDriver, canonicalJson, manifestDigest, documentDigest, publicKeyFingerprint, verifyUpdateSignature, updateCompatibility, MaintenanceStore, maintenanceWindowOpen, MaintenanceService, createMaintenanceQueueHandlers, TransportPlatformMaintenanceDriver, ControlPlaneCleanupDriver, TransportDisasterRecoveryDriver, ensureDashboardActor, initializeDashboardControlPlane, synchronizeDashboardUsers, trackDashboardOperation, dashboardPageRoutes, resolveLegacyDashboardRoute, routesForDashboard, deploySite, createStaticApiOriginDependencies, deployStaticApiOrigin, verifyStaticApiOrigin, estimateStaticApiOriginMonthlyCost, createExistingStaticFullStackDependencies, generateExistingStaticFullStackTemplate, deployExistingStaticFullStack, estimateExistingStaticFullStackMonthlyCost, hashContainerContext, createContainerImageDependencies, buildAndPushContainerImage, infraEnvFromOutputs, buildFunctionEnv, deployServerlessApp, redeployServerlessApp, rollbackServerlessApp, setMaintenance, runRemoteCommand, resolveDashboardData, validateBackupDestination, BackupStore, encryptBackup, decryptBackup, backupCredentialStatus, S3BackupDestinationAdapter, BackupCoordinator, createBackupQueueHandlers, AwsDatabaseBackupSource, compressBackup, decompressBackup, BunFilesystemArchiveRuntime, FilesystemBackupSource, LogicalDatabaseBackupSource, BunDockerVolumeRuntime, DockerVolumeBackupSource, ControlPlaneBackupSource, AwsInfrastructureBackupSource, ConfigurationStore, parseDotenv, serializeDotenv, LocalEncryptedConfigurationBackend, AwsSecretsManagerConfigurationBackend, AwsSsmConfigurationBackend, ExternalConfigurationBackend, ConfigurationService, synchronizeConfiguredConfiguration, sanitizeCloudConfig, dashboardActions, resolveDashboardAction, startLocalDashboardServer };
|
package/dist/deploy/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildAndPushContainerImage,
|
|
3
3
|
buildFunctionEnv,
|
|
4
|
-
collectServerDnsDomains,
|
|
5
4
|
createContainerImageDependencies,
|
|
6
5
|
createExistingStaticFullStackDependencies,
|
|
7
6
|
createStaticApiOriginDependencies,
|
|
@@ -19,7 +18,6 @@ import {
|
|
|
19
18
|
infraEnvFromOutputs,
|
|
20
19
|
initializeDashboardControlPlane,
|
|
21
20
|
redeployServerlessApp,
|
|
22
|
-
removeStaleServerAddressRecords,
|
|
23
21
|
resolveDashboardAction,
|
|
24
22
|
resolveDashboardData,
|
|
25
23
|
resolveLegacyDashboardRoute,
|
|
@@ -32,7 +30,7 @@ import {
|
|
|
32
30
|
synchronizeDashboardUsers,
|
|
33
31
|
trackDashboardOperation,
|
|
34
32
|
verifyStaticApiOrigin
|
|
35
|
-
} from "../chunk-
|
|
33
|
+
} from "../chunk-qbj74thz.js";
|
|
36
34
|
import {
|
|
37
35
|
deleteStaticSite,
|
|
38
36
|
deployStaticSite,
|
|
@@ -55,9 +53,12 @@ import"../chunk-gttvakpv.js";
|
|
|
55
53
|
import {
|
|
56
54
|
MANAGEMENT_DASHBOARD_SITE,
|
|
57
55
|
buildManagementDashboardArtifact,
|
|
56
|
+
collectServerDnsDomains,
|
|
58
57
|
dashboardCredentialsFile,
|
|
59
58
|
ensureManagementDashboard,
|
|
59
|
+
hetznerBoxIpv6,
|
|
60
60
|
isPhpSite,
|
|
61
|
+
removeStaleServerAddressRecords,
|
|
61
62
|
resolveDashboardAuth,
|
|
62
63
|
resolveSiteDeployTarget,
|
|
63
64
|
resolveSiteKind,
|
|
@@ -65,7 +66,7 @@ import {
|
|
|
65
66
|
shipsARelease,
|
|
66
67
|
siteInstallBase,
|
|
67
68
|
validateDeploymentConfig
|
|
68
|
-
} from "../chunk-
|
|
69
|
+
} from "../chunk-gx4288t5.js";
|
|
69
70
|
import"../chunk-1qjyqrc5.js";
|
|
70
71
|
import"../chunk-703nkybg.js";
|
|
71
72
|
import"../chunk-4cjrg98a.js";
|
|
@@ -101,6 +102,7 @@ export {
|
|
|
101
102
|
invalidateCache,
|
|
102
103
|
initializeDashboardControlPlane,
|
|
103
104
|
infraEnvFromOutputs,
|
|
105
|
+
hetznerBoxIpv6,
|
|
104
106
|
hashContainerContext,
|
|
105
107
|
generateStaticSiteTemplate,
|
|
106
108
|
generateExternalDnsStaticSiteTemplate,
|
|
@@ -9,8 +9,23 @@ interface ServerSite {
|
|
|
9
9
|
export declare function collectServerDnsDomains(sites?: Record<string, ServerSite>): Set<string>;
|
|
10
10
|
/**
|
|
11
11
|
* A compute deployment owns one address per managed hostname. After an upsert,
|
|
12
|
-
* remove only duplicate
|
|
13
|
-
* of the desired address and leaving every unrelated record untouched.
|
|
12
|
+
* remove only duplicate address records for that exact hostname, preserving one
|
|
13
|
+
* copy of the desired address and leaving every unrelated record untouched.
|
|
14
|
+
*
|
|
15
|
+
* `recordType` selects the family. It used to be hardcoded to 'A', which meant
|
|
16
|
+
* a dual-stack box could clean up its stale IPv4 records but accumulated stale
|
|
17
|
+
* AAAA ones forever — and a stale AAAA is worse than a stale A, because
|
|
18
|
+
* dual-stack clients prefer IPv6 and would keep landing on the dead address.
|
|
14
19
|
*/
|
|
15
|
-
export declare function removeStaleServerAddressRecords(provider: DnsProvider, zone: string, hostname: string, desiredAddress: string): Promise<string[]>;
|
|
20
|
+
export declare function removeStaleServerAddressRecords(provider: DnsProvider, zone: string, hostname: string, desiredAddress: string, recordType?: 'A' | 'AAAA'): Promise<string[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Hetzner hands a cloud server a routed /64 and configures `::1` inside it on
|
|
23
|
+
* the interface, but the API reports the block (`2a01:4f8:c014:6186::/64`), not
|
|
24
|
+
* the address. Publishing the block verbatim as an AAAA record yields a host
|
|
25
|
+
* nothing answers on, so turn it into the address the box actually holds.
|
|
26
|
+
*
|
|
27
|
+
* A plain address (no prefix) is returned unchanged, so this is safe to apply
|
|
28
|
+
* to whatever the driver surfaced.
|
|
29
|
+
*/
|
|
30
|
+
export declare function hetznerBoxIpv6(reported: string | undefined | null): string | undefined;
|
|
16
31
|
export {};
|
|
@@ -6,6 +6,14 @@ export interface HetznerDriverState {
|
|
|
6
6
|
serverName?: string;
|
|
7
7
|
firewallId?: number;
|
|
8
8
|
publicIp?: string;
|
|
9
|
+
/**
|
|
10
|
+
* The box's public IPv6 address, already narrowed from the routed /64 the
|
|
11
|
+
* API reports to the address the interface actually holds. Recorded so a
|
|
12
|
+
* deploy can publish AAAA records alongside the A records without having to
|
|
13
|
+
* call the Hetzner API again — attach-mode tenants read this state and never
|
|
14
|
+
* see the server object at all.
|
|
15
|
+
*/
|
|
16
|
+
publicIpv6?: string;
|
|
9
17
|
deployStoragePath?: string;
|
|
10
18
|
sshUser?: string;
|
|
11
19
|
/** Fleet: network/LB ids + the services box private IP, for deploy + teardown. */
|
package/dist/drivers/index.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -30,7 +30,7 @@ export { keyMatchesFilters, migrateObjectStorage, remapKey } from './object-stor
|
|
|
30
30
|
export type { MigrateEndpoint, MigrateError, MigrateOptions, MigratePlanItem, MigrateProgress, MigrateResult, MigrateVerification, } from './object-storage/migrate';
|
|
31
31
|
export * from './ssl';
|
|
32
32
|
export { deployStaticSite, deployStaticSiteFull, uploadStaticFiles, invalidateCache, deleteStaticSite, generateStaticSiteTemplate, deployStaticSiteWithExternalDns, deployStaticSiteWithExternalDnsFull, generateExternalDnsStaticSiteTemplate, deploySite, resolveSiteDeployTarget, resolveSiteKind, validateDeploymentConfig, buildAndPushServerlessImage, buildFunctionEnv, deployServerlessApp, infraEnvFromOutputs, redeployServerlessApp, rollbackServerlessApp, runRemoteCommand, setMaintenance, buildManagementDashboardArtifact, dashboardCredentialsFile, ensureManagementDashboard, MANAGEMENT_DASHBOARD_SITE, resolveDashboardAuth, resolveUiSource, } from './deploy';
|
|
33
|
-
export { collectServerDnsDomains, removeStaleServerAddressRecords } from './deploy/server-dns';
|
|
33
|
+
export { collectServerDnsDomains, hetznerBoxIpv6, removeStaleServerAddressRecords } from './deploy/server-dns';
|
|
34
34
|
export type { EnsureDashboardLogger, ResolvedDashboardAuth, StaticSiteConfig, DeployResult, UploadOptions, ExternalDnsStaticSiteConfig, ExternalDnsDeployResult, DeploySiteConfig, DeploySiteResult, StaticSiteDnsProvider, SiteDeployKind, DeploymentValidationResult, BuildImageOptions, BuiltImage, CodeSource, DeployServerlessOptions, ResolvedContext, } from './deploy';
|
|
35
35
|
export { createCloudDriver, CloudDriverFactory, cloudDrivers, AwsDriver, HetznerDriver, HetznerClient, resolveHetznerApiToken, normalizeSshPublicKey, ensureFirewall, ensureServer, ensureSshKey, serverPublicIpv4, sshExec, sshExecOrThrow, scpUpload, waitForSsh, waitForCloudInit, buildSshArgs, generateUbuntuAppCloudInit, wrapCloudInitUserData, buildHostCleanupScript, buildSiteDeployScript, buildStaticSiteDeployScript, resolveExecStart, deployAllComputeSites, deploySiteRelease, } from './drivers';
|
|
36
36
|
export type { CreateCloudDriverOptions } from './drivers/factory';
|
package/dist/index.js
CHANGED
|
@@ -139,7 +139,6 @@ import {
|
|
|
139
139
|
capabilities,
|
|
140
140
|
capacity,
|
|
141
141
|
cloneSourceBinding,
|
|
142
|
-
collectServerDnsDomains,
|
|
143
142
|
completeComposeVolumeDeletion,
|
|
144
143
|
completeOidcAuthorization,
|
|
145
144
|
composeProjectName,
|
|
@@ -234,7 +233,6 @@ import {
|
|
|
234
233
|
releaseStrategyCapabilities,
|
|
235
234
|
releaseTrafficPlan,
|
|
236
235
|
removeSourceWebhook,
|
|
237
|
-
removeStaleServerAddressRecords,
|
|
238
236
|
renderComposeTemplate,
|
|
239
237
|
renderServerCron,
|
|
240
238
|
requestHash,
|
|
@@ -285,7 +283,7 @@ import {
|
|
|
285
283
|
volumeCapabilities,
|
|
286
284
|
webhookEndpoint,
|
|
287
285
|
zeroCapacity
|
|
288
|
-
} from "./chunk-
|
|
286
|
+
} from "./chunk-qbj74thz.js";
|
|
289
287
|
import {
|
|
290
288
|
deleteStaticSite,
|
|
291
289
|
deployStaticSite,
|
|
@@ -375,6 +373,7 @@ import {
|
|
|
375
373
|
buildStaticSiteDeployScript,
|
|
376
374
|
buildUbuntuBootstrapScript,
|
|
377
375
|
cloudDrivers,
|
|
376
|
+
collectServerDnsDomains,
|
|
378
377
|
createCloudDriver,
|
|
379
378
|
dashboardCredentialsFile,
|
|
380
379
|
deployAllComputeSites,
|
|
@@ -383,7 +382,9 @@ import {
|
|
|
383
382
|
ensureManagementDashboard,
|
|
384
383
|
ensureServer,
|
|
385
384
|
ensureSshKey,
|
|
385
|
+
hetznerBoxIpv6,
|
|
386
386
|
normalizeSshPublicKey,
|
|
387
|
+
removeStaleServerAddressRecords,
|
|
387
388
|
resolveDashboardAuth,
|
|
388
389
|
resolveExecStart,
|
|
389
390
|
resolveHetznerApiToken,
|
|
@@ -398,7 +399,7 @@ import {
|
|
|
398
399
|
waitForCloudInit,
|
|
399
400
|
waitForSsh,
|
|
400
401
|
wrapCloudInitUserData
|
|
401
|
-
} from "./chunk-
|
|
402
|
+
} from "./chunk-gx4288t5.js";
|
|
402
403
|
import {
|
|
403
404
|
ABTestManager,
|
|
404
405
|
AI,
|
|
@@ -5345,6 +5346,7 @@ export {
|
|
|
5345
5346
|
infraEnvFromOutputs,
|
|
5346
5347
|
imageScanningManager,
|
|
5347
5348
|
hotp,
|
|
5349
|
+
hetznerBoxIpv6,
|
|
5348
5350
|
healthCheckManager,
|
|
5349
5351
|
hashString,
|
|
5350
5352
|
hashManifest,
|