everything-dev 2.0.0-rc.1 → 2.0.0-rc.5
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/api-contract.cjs +3 -6
- package/dist/api-contract.cjs.map +1 -1
- package/dist/api-contract.mjs +3 -6
- package/dist/api-contract.mjs.map +1 -1
- package/dist/apps/upload/src/client.cjs +188 -0
- package/dist/apps/upload/src/client.cjs.map +1 -0
- package/dist/apps/upload/src/client.mjs +180 -0
- package/dist/apps/upload/src/client.mjs.map +1 -0
- package/dist/auth-login.cjs +1 -1
- package/dist/auth-login.mjs +1 -1
- package/dist/build.cjs +2 -2
- package/dist/build.mjs +2 -2
- package/dist/bundle-fs-resolve.cjs +9 -17
- package/dist/bundle-fs-resolve.cjs.map +1 -1
- package/dist/bundle-fs-resolve.d.cts +6 -0
- package/dist/bundle-fs-resolve.d.mts +6 -0
- package/dist/bundle-fs-resolve.mjs +9 -17
- package/dist/bundle-fs-resolve.mjs.map +1 -1
- package/dist/bundle-path.cjs +48 -0
- package/dist/bundle-path.cjs.map +1 -0
- package/dist/bundle-path.mjs +45 -0
- package/dist/bundle-path.mjs.map +1 -0
- package/dist/cdn-deploy.cjs +29 -11
- package/dist/cdn-deploy.cjs.map +1 -1
- package/dist/cdn-deploy.mjs +29 -11
- package/dist/cdn-deploy.mjs.map +1 -1
- package/dist/cli/init.cjs +4 -6
- package/dist/cli/init.cjs.map +1 -1
- package/dist/cli/init.d.cts +1 -1
- package/dist/cli/init.d.mts +1 -1
- package/dist/cli/init.mjs +4 -6
- package/dist/cli/init.mjs.map +1 -1
- package/dist/cli/status.cjs +69 -3
- package/dist/cli/status.cjs.map +1 -1
- package/dist/cli/status.mjs +67 -4
- package/dist/cli/status.mjs.map +1 -1
- package/dist/cli/sync.cjs +1 -2
- package/dist/cli/sync.cjs.map +1 -1
- package/dist/cli/sync.mjs +1 -2
- package/dist/cli/sync.mjs.map +1 -1
- package/dist/cli/upgrade.cjs +2 -2
- package/dist/cli/upgrade.cjs.map +1 -1
- package/dist/cli/upgrade.mjs +2 -2
- package/dist/cli/upgrade.mjs.map +1 -1
- package/dist/cli.cjs +5 -7
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.mjs +5 -7
- package/dist/cli.mjs.map +1 -1
- package/dist/commands/deploy.cjs +26 -18
- package/dist/commands/deploy.cjs.map +1 -1
- package/dist/commands/deploy.mjs +26 -18
- package/dist/commands/deploy.mjs.map +1 -1
- package/dist/commands/init.cjs +1 -1
- package/dist/commands/init.cjs.map +1 -1
- package/dist/commands/init.mjs +1 -1
- package/dist/commands/init.mjs.map +1 -1
- package/dist/commands/plugins.cjs +2 -2
- package/dist/commands/plugins.cjs.map +1 -1
- package/dist/commands/plugins.mjs +2 -2
- package/dist/commands/plugins.mjs.map +1 -1
- package/dist/commands/upgrade.cjs +31 -8
- package/dist/commands/upgrade.cjs.map +1 -1
- package/dist/commands/upgrade.mjs +31 -8
- package/dist/commands/upgrade.mjs.map +1 -1
- package/dist/components/dev-render.cjs +1 -1
- package/dist/components/dev-render.mjs +1 -1
- package/dist/config.cjs +3 -3
- package/dist/config.cjs.map +1 -1
- package/dist/config.mjs +3 -3
- package/dist/config.mjs.map +1 -1
- package/dist/contract.cjs +2 -0
- package/dist/contract.cjs.map +1 -1
- package/dist/contract.d.cts +3 -0
- package/dist/contract.d.mts +3 -0
- package/dist/contract.meta.cjs +2 -1
- package/dist/contract.meta.cjs.map +1 -1
- package/dist/contract.meta.d.cts +4 -1
- package/dist/contract.meta.d.mts +4 -1
- package/dist/contract.meta.mjs +2 -1
- package/dist/contract.meta.mjs.map +1 -1
- package/dist/contract.mjs +2 -0
- package/dist/contract.mjs.map +1 -1
- package/dist/db/driver.cjs +22 -2
- package/dist/db/driver.cjs.map +1 -1
- package/dist/db/driver.d.cts +13 -2
- package/dist/db/driver.d.mts +13 -2
- package/dist/db/driver.mjs +22 -3
- package/dist/db/driver.mjs.map +1 -1
- package/dist/db/index.cjs +1 -0
- package/dist/db/index.d.cts +2 -2
- package/dist/db/index.d.mts +2 -2
- package/dist/db/index.mjs +2 -2
- package/dist/deploy-diff.cjs +1 -1
- package/dist/deploy-diff.cjs.map +1 -1
- package/dist/deploy-diff.mjs +1 -1
- package/dist/deploy-diff.mjs.map +1 -1
- package/dist/dev-program.cjs +11 -2
- package/dist/dev-program.cjs.map +1 -1
- package/dist/dev-program.mjs +11 -3
- package/dist/dev-program.mjs.map +1 -1
- package/dist/image-deploy.cjs +103 -31
- package/dist/image-deploy.cjs.map +1 -1
- package/dist/image-deploy.mjs +103 -33
- package/dist/image-deploy.mjs.map +1 -1
- package/dist/internal/manifest-normalizer.cjs.map +1 -1
- package/dist/internal/manifest-normalizer.mjs.map +1 -1
- package/dist/plugin.d.cts +902 -1
- package/dist/plugin.d.mts +902 -1
- package/dist/publish.cjs +51 -2
- package/dist/publish.cjs.map +1 -1
- package/dist/publish.mjs +51 -4
- package/dist/publish.mjs.map +1 -1
- package/dist/resolution/session.cjs.map +1 -1
- package/dist/resolution/session.d.cts +5 -5
- package/dist/resolution/session.d.mts +5 -5
- package/dist/resolution/session.mjs.map +1 -1
- package/dist/storage-upload.cjs +7 -68
- package/dist/storage-upload.cjs.map +1 -1
- package/dist/storage-upload.mjs +7 -68
- package/dist/storage-upload.mjs.map +1 -1
- package/dist/types.d.cts +31 -1
- package/dist/types.d.mts +31 -1
- package/dist/ui/api.cjs +11 -69
- package/dist/ui/api.cjs.map +1 -1
- package/dist/ui/api.d.cts +2 -4
- package/dist/ui/api.d.mts +2 -4
- package/dist/ui/api.mjs +11 -69
- package/dist/ui/api.mjs.map +1 -1
- package/dist/ui/auth-guards.d.cts +78 -2
- package/dist/ui/auth-guards.d.mts +78 -2
- package/dist/ui/auth.cjs.map +1 -1
- package/dist/ui/auth.d.cts +4133 -7
- package/dist/ui/auth.d.mts +4133 -7
- package/dist/ui/auth.mjs.map +1 -1
- package/dist/ui/hydrate.cjs +2 -2
- package/dist/ui/hydrate.cjs.map +1 -1
- package/dist/ui/hydrate.mjs +2 -2
- package/dist/ui/hydrate.mjs.map +1 -1
- package/dist/utils/theme.cjs +2 -2
- package/dist/utils/theme.cjs.map +1 -1
- package/dist/utils/theme.mjs +2 -2
- package/dist/utils/theme.mjs.map +1 -1
- package/dist/version-manifest-resolve.cjs +55 -10
- package/dist/version-manifest-resolve.cjs.map +1 -1
- package/dist/version-manifest-resolve.mjs +53 -10
- package/dist/version-manifest-resolve.mjs.map +1 -1
- package/dist/workspace.cjs +26 -13
- package/dist/workspace.cjs.map +1 -1
- package/dist/workspace.mjs +26 -14
- package/dist/workspace.mjs.map +1 -1
- package/package.json +12 -10
package/dist/contract.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.mjs","names":["z"],"sources":["../src/contract.ts"],"sourcesContent":["import \"@orpc/openapi/extensions/route\";\nimport * as z from \"zod\";\nimport type { DevSessionData, StartSummary } from \"./dev-session-data\";\nimport { oc } from \"./sdk\";\nimport {\n BosConfigInputSchema,\n BosConfigSchema,\n SourceModeSchema,\n StarterLevelSchema,\n} from \"./types\";\n\nexport const PhaseTimingSchema = z.object({\n name: z.string(),\n durationMs: z.number(),\n});\n\nexport const DevOptionsSchema = z.object({\n host: SourceModeSchema.default(\"local\"),\n ui: SourceModeSchema.default(\"local\"),\n api: SourceModeSchema.default(\"local\"),\n auth: SourceModeSchema.default(\"local\"),\n remotePlugins: z.array(z.string()).optional(),\n proxy: z.boolean().default(false),\n ssr: z.boolean().default(false),\n port: z.number().optional(),\n apiPort: z.number().optional(),\n uiPort: z.number().optional(),\n authPort: z.number().optional(),\n pluginPortStart: z.number().optional(),\n interactive: z.boolean().optional(),\n logLevel: z.enum([\"error\", \"warn\", \"info\", \"debug\"]).optional(),\n});\n\nexport const DevResultSchema = z.object({\n status: z.enum([\"started\", \"error\"]),\n description: z.string(),\n processes: z.array(z.string()),\n timings: z.array(PhaseTimingSchema).optional(),\n session: z.custom<DevSessionData>().optional(),\n});\n\nexport const StartOptionsSchema = z.object({\n port: z.number().optional(),\n interactive: z.boolean().optional(),\n account: z.string().optional(),\n domain: z.string().optional(),\n env: z.enum([\"production\", \"staging\"]).default(\"production\"),\n registry: z.string().optional(),\n configPath: z.string().optional(),\n});\n\nexport const StartResultSchema = z.object({\n status: z.enum([\"running\", \"error\"]),\n url: z.string(),\n error: z.string().optional(),\n session: z.custom<DevSessionData>().optional(),\n summary: z.custom<StartSummary>().optional(),\n});\n\nexport const BuildOptionsSchema = z.object({\n packages: z\n .string()\n .default(\"all\")\n .describe(\n \"Comma-separated keys, 'all' (default), or 'local' (only this repo's local plugins hosted via 'local:…')\",\n ),\n force: z.boolean().default(false),\n});\n\nexport const BuildResultSchema = z.object({\n status: z.enum([\"success\", \"error\"]),\n error: z.string().optional(),\n built: z.array(z.string()),\n skipped: z.array(z.string()).optional(),\n});\n\nexport const ConfigOptionsSchema = z.object({\n full: z.boolean().default(false),\n});\n\nexport const ConfigResultSchema = z.object({\n config: z.union([BosConfigInputSchema, BosConfigSchema]).nullable(),\n packages: z.array(z.string()),\n remotes: z.array(z.string()),\n full: z.boolean().default(false),\n});\n\nexport const RegistryUseOptionsSchema = z.object({\n from: z.string().describe(\"Published runtime to compose from (account/gateway or bos:// URL)\"),\n sections: z\n .array(z.string())\n .min(1)\n .describe(\"Sections to compose: app.ui, app.host, app.api, app.auth, plugins.<key>\"),\n dryRun: z.boolean().default(false),\n});\n\nexport const RegistryUseResultSchema = z.object({\n status: z.enum([\"updated\", \"dry-run\", \"error\"]),\n from: z.string(),\n applied: z.array(z.string()),\n configPath: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const PluginAddOptionsSchema = z.object({\n source: z.string(),\n as: z.string().optional(),\n production: z.string().optional(),\n});\n\nexport const PluginAddResultSchema = z.object({\n status: z.enum([\"added\", \"error\"]),\n key: z.string(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n version: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const PluginRemoveOptionsSchema = z.object({\n key: z.string(),\n});\n\nexport const PluginRemoveResultSchema = z.object({\n status: z.enum([\"removed\", \"error\"]),\n key: z.string(),\n error: z.string().optional(),\n});\n\nexport const PluginListResultSchema = z.object({\n status: z.enum([\"listed\", \"error\"]),\n plugins: z.array(\n z.object({\n key: z.string(),\n development: z.string().optional(),\n production: z.string().optional(),\n localPath: z.string().optional(),\n source: z.enum([\"local\", \"remote\"]),\n integrity: z.string().optional(),\n version: z.string().optional(),\n name: z.string().optional(),\n }),\n ),\n error: z.string().optional(),\n});\n\nexport const PluginPublishOptionsSchema = z.object({\n key: z.string(),\n});\n\nexport const PluginPublishResultSchema = z.object({\n status: z.enum([\"published\", \"error\"]),\n key: z.string(),\n path: z.string().optional(),\n production: z.string().optional(),\n version: z.string().optional(),\n fingerprint: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const WorkspaceDeployResultSchema = z.object({\n key: z.string(),\n kind: z.enum([\"app\", \"plugin\"]),\n success: z.boolean(),\n error: z.string().optional(),\n durationMs: z.number().optional(),\n});\n\nexport const PublishOptionsSchema = z.object({\n dryRun: z.boolean().default(false),\n verbose: z.boolean().default(false),\n network: z.enum([\"mainnet\", \"testnet\"]).optional(),\n privateKey: z.string().optional(),\n wallet: z.boolean().default(false),\n env: z.enum([\"production\", \"staging\"]).default(\"production\"),\n registry: z.string().optional(),\n});\n\nexport const RollbackOptionsSchema = z.object({\n listOnly: z.boolean().default(false),\n version: z.string().optional(),\n previous: z.boolean().default(false),\n force: z.boolean().default(false),\n limit: z.number().int().min(1).max(200).default(20),\n dryRun: z.boolean().default(false),\n verbose: z.boolean().default(false),\n network: z.enum([\"mainnet\", \"testnet\"]).optional(),\n privateKey: z.string().optional(),\n wallet: z.boolean().default(false),\n env: z.enum([\"production\", \"staging\"]).default(\"production\"),\n registry: z.string().optional(),\n});\n\nexport const RollbackHistoryEntrySchema = z.object({\n blockHeight: z.number(),\n blockTimestamp: z.string(),\n txHash: z.string().optional(),\n summary: z.string(),\n});\n\nexport const RollbackSlotCheckSchema = z.object({\n slot: z.string(),\n ok: z.boolean(),\n reason: z.string().optional(),\n});\n\nexport const RollbackResultSchema = z.object({\n status: z.enum([\"published\", \"error\", \"dry-run\", \"list\"]),\n registryUrl: z.string(),\n txHash: z.string().optional(),\n error: z.string().optional(),\n history: z.array(RollbackHistoryEntrySchema).optional(),\n verification: z.array(RollbackSlotCheckSchema).optional(),\n});\n\nexport const PublishResultSchema = z.object({\n status: z.enum([\"published\", \"error\", \"dry-run\"]),\n registryUrl: z.string(),\n txHash: z.string().optional(),\n fingerprint: z.string().optional(),\n slotPins: z.record(z.string(), z.string()).optional(),\n error: z.string().optional(),\n built: z.array(z.string()).optional(),\n skipped: z.array(z.string()).optional(),\n deployResults: z.array(WorkspaceDeployResultSchema).optional(),\n});\n\nexport const DeployOptionsSchema = z.object({\n statusList: z.boolean().default(false),\n env: z.enum([\"production\", \"staging\"]).default(\"production\"),\n build: z.boolean().default(true),\n dryRun: z.boolean().default(false),\n verbose: z.boolean().default(false),\n packages: z\n .string()\n .default(\"all\")\n .describe(\n \"Comma-separated keys, 'all' (default), or 'local' (only this repo's local plugins hosted via 'local:…')\",\n ),\n network: z.enum([\"mainnet\", \"testnet\"]).optional(),\n privateKey: z.string().optional(),\n service: z.string().optional(),\n registry: z.string().optional(),\n fullUpload: z\n .boolean()\n .default(false)\n .describe(\n \"Re-upload every dist file instead of diffing unchanged files against the previous deploy\",\n ),\n});\n\nexport const DeployManifestListEntrySchema = z.object({\n key: z.string(),\n blockHeight: z.number(),\n blockTimestamp: z.string(),\n txHash: z.string().optional(),\n publishedAt: z.string().optional(),\n});\n\nexport const DeployResultSchema = z.object({\n status: z.enum([\"deployed\", \"published\", \"error\", \"dry-run\", \"list\"]),\n registryUrl: z.string(),\n txHash: z.string().optional(),\n fingerprint: z.string().optional(),\n slotPins: z.record(z.string(), z.string()).optional(),\n history: z.array(DeployManifestListEntrySchema).optional(),\n built: z.array(z.string()).optional(),\n skipped: z.array(z.string()).optional(),\n image: z.string().optional(),\n service: z.string().optional(),\n error: z.string().optional(),\n deployResults: z.array(WorkspaceDeployResultSchema).optional(),\n});\n\nfunction parseNearAmount(value: string): number {\n const cleaned = value.replace(/[\\s_,]/g, \"\");\n const match = cleaned.match(/^(\\d+(?:\\.\\d+)?)near$/i);\n if (!match) return NaN;\n return Number.parseFloat(match[1]!);\n}\n\nconst MIN_PUBLISH_ALLOWANCE_NEAR = 0.3;\n\nexport const KeyPublishOptionsSchema = z.object({\n allowance: z\n .string()\n .default(\"1NEAR\")\n .refine(\n (val) => {\n const amount = parseNearAmount(val);\n return !Number.isNaN(amount) && amount >= MIN_PUBLISH_ALLOWANCE_NEAR;\n },\n {\n message: `Allowance must be at least ${MIN_PUBLISH_ALLOWANCE_NEAR} NEAR to cover the transaction cost`,\n },\n ),\n env: z.enum([\"production\", \"staging\"]).default(\"production\"),\n registry: z.string().optional(),\n removeOldKeys: z.boolean().optional(),\n});\n\nexport const KeyPublishResultSchema = z.object({\n status: z.enum([\"published\", \"error\"]),\n account: z.string(),\n network: z.enum([\"mainnet\", \"testnet\"]),\n env: z.enum([\"production\", \"staging\"]),\n contract: z.string(),\n allowance: z.string(),\n functionNames: z.array(z.string()),\n publicKey: z.string().optional(),\n privateKey: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const OverrideSectionSchema = z.enum([\"ui\", \"api\", \"host\", \"plugins\"]);\n\nconst DEFAULT_LOGIN_EXPIRES_IN_SECONDS = 90 * 24 * 60 * 60;\n\nexport const LoginOptionsSchema = z.object({\n key: z.boolean().default(false),\n site: z.string().optional(),\n expiresIn: z.number().int().positive().default(DEFAULT_LOGIN_EXPIRES_IN_SECONDS),\n device: z.string().optional(),\n env: z.enum([\"production\", \"staging\"]).default(\"production\"),\n registry: z.string().optional(),\n});\n\nexport const LoginResultSchema = z.object({\n status: z.enum([\"logged-in\", \"error\"]),\n siteUrl: z.string(),\n accountId: z.string().nullish(),\n expiresAt: z.string().nullish(),\n loginUrl: z.string().nullish(),\n publishKey: z\n .object({\n publicKey: z.string(),\n network: z.enum([\"mainnet\", \"testnet\"]),\n contract: z.string(),\n exportedTo: z.string(),\n })\n .nullish(),\n warning: z.string().nullish(),\n error: z.string().optional(),\n});\n\nexport const LogoutOptionsSchema = z.object({\n configDir: z.string().optional(),\n});\n\nexport const LogoutResultSchema = z.object({\n status: z.enum([\"logged-out\", \"error\"]),\n revokedApiKey: z.boolean(),\n removedPublishKey: z.boolean(),\n warning: z.string().nullish(),\n error: z.string().optional(),\n});\n\nexport const RuntimeOverrideTargetBaseSchema = z.enum([\"ui\", \"api\", \"plugins\"]);\n\nexport const RuntimeOverrideTargetSchema = z.union([\n RuntimeOverrideTargetBaseSchema,\n z.string().regex(/^plugins\\.(\\*|[a-z0-9_-]+)$/),\n]);\n\nexport const InitOptionsSchema = z.object({\n extends: z.string().optional(),\n directory: z.string().optional(),\n account: z.string().optional(),\n domain: z.string().optional(),\n source: z.string().optional(),\n plugins: z.array(z.string()).optional(),\n overrides: z.array(OverrideSectionSchema).optional(),\n level: StarterLevelSchema.optional(),\n noInteractive: z.boolean().default(false),\n noInstall: z.boolean().default(false),\n});\n\nexport const InitResultSchema = z.object({\n status: z.enum([\"initialized\", \"error\"]),\n directory: z.string(),\n extendsRef: z.string(),\n account: z.string().optional(),\n domain: z.string().optional(),\n extends: z.string(),\n plugins: z.array(z.string()).optional(),\n overrides: z.array(OverrideSectionSchema).optional(),\n filesCopied: z.number(),\n timings: z.array(PhaseTimingSchema).optional(),\n targetDir: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const SyncOptionsSchema = z.object({\n dryRun: z.boolean().default(false),\n noInstall: z.boolean().default(false),\n json: z.boolean().default(false),\n});\n\nexport const SyncResultSchema = z.object({\n status: z.enum([\"synced\", \"dry-run\", \"error\"]),\n updated: z.array(z.string()),\n skipped: z.array(z.string()),\n added: z.array(z.string()),\n conflicted: z.array(z.string()).default([]),\n /** retired stub files deleted silently (unmodified) — ADR 0023 migration */\n retired: z.array(z.string()).optional(),\n /** retired stub files that were hand-modified — backed up, then deleted */\n retiredConflicted: z.array(z.string()).optional(),\n /** where the retired hand-modified copies were backed up */\n retiredBackupDir: z.string().optional(),\n backupDir: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const UpgradeOptionsSchema = z.object({\n dryRun: z.boolean().default(false),\n noInstall: z.boolean().default(false),\n noSync: z.boolean().default(false),\n json: z.boolean().default(false),\n migrationsOnly: z.boolean().default(false),\n});\n\nexport const UpgradeResultSchema = z.object({\n status: z.enum([\"upgraded\", \"dry-run\", \"error\"]),\n packages: z.array(\n z.object({\n name: z.string(),\n from: z.string().optional(),\n to: z.string(),\n }),\n ),\n sync: SyncResultSchema.optional(),\n migrated: z.array(z.string()).optional(),\n availablePlugins: z.array(z.string()).optional(),\n selectedPlugins: z.array(z.string()).optional(),\n timings: z.array(PhaseTimingSchema).optional(),\n changelogUrl: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const DeployedVersionStatusSchema = z.object({\n publishedFingerprint: z.string(),\n servedFingerprint: z.string().optional(),\n inSync: z.boolean(),\n error: z.string().optional(),\n});\n\nexport const StatusResultSchema = z.object({\n status: z.enum([\"ok\", \"error\"]),\n deployedVersion: DeployedVersionStatusSchema.optional(),\n extends: z.string().optional(),\n account: z.string().optional(),\n domain: z.string().optional(),\n packages: z.array(\n z.object({\n name: z.string(),\n installed: z.string().optional(),\n latest: z.string().optional(),\n isLinked: z.boolean().optional(),\n specifier: z.string().optional(),\n }),\n ),\n lastSync: z.string().optional(),\n envFile: z.enum([\"found\", \"missing\", \"example-only\"]),\n parentReachable: z.boolean().optional(),\n error: z.string().optional(),\n});\n\nexport const TypesGenOptionsSchema = z.object({\n env: z.enum([\"development\", \"production\"]).optional(),\n dryRun: z.boolean().default(false),\n remotePlugins: z.array(z.string()).optional(),\n});\n\nexport const TypesGenResultSchema = z.object({\n status: z.enum([\"success\", \"error\"]),\n generated: z.array(z.string()),\n fetched: z.array(z.string()),\n skipped: z.array(z.string()),\n failed: z.array(z.string()),\n error: z.string().optional(),\n});\n\nexport const DbStudioOptionsSchema = z.object({\n plugin: z.string().default(\"api\"),\n});\n\nexport const DbStudioResultSchema = z.object({\n status: z.enum([\"success\", \"error\"]),\n plugin: z.string(),\n source: z.enum([\"local\", \"remote\"]),\n section: z.string(),\n databaseSecret: z.string().optional(),\n databaseUrl: z.string().optional(),\n workspaceDir: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const DbDoctorOptionsSchema = z.object({\n plugin: z.string(),\n});\n\nexport const DbDoctorResultSchema = z.object({\n status: z.enum([\"success\", \"error\"]),\n plugin: z.string(),\n slug: z.string(),\n journalTable: z.string(),\n journalSchema: z.string(),\n diagnosis: z.string(),\n localMigrationCount: z.number(),\n appliedHashCount: z.number(),\n expectedTables: z.array(z.string()),\n missingTables: z.array(z.string()),\n workspaceDir: z.string().optional(),\n dbSecret: z.string().optional(),\n dbUrl: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const DbRepairOptionsSchema = z.object({\n plugin: z.string(),\n mode: z.enum([\"history-reset\", \"recreate\"]).default(\"history-reset\"),\n yes: z.boolean().optional(),\n});\n\nexport const DbRepairResultSchema = z.object({\n status: z.enum([\"repaired\", \"refused\", \"error\"]),\n message: z.string(),\n diagnosis: z.any(),\n error: z.string().optional(),\n});\n\nexport const ProcessRoleSchema = z.enum([\"standalone\", \"workspace-parent\", \"workspace-child\"]);\n\nexport const PidEntrySchema = z.object({\n pid: z.number(),\n configDir: z.string(),\n parentPid: z.number().optional(),\n role: ProcessRoleSchema,\n ports: z\n .object({\n host: z.number().optional(),\n api: z.number().optional(),\n ui: z.number().optional(),\n auth: z.number().optional(),\n })\n .default({}),\n budget: z\n .object({\n min: z.number(),\n max: z.number(),\n })\n .optional(),\n startedAt: z.number(),\n description: z.string(),\n});\n\nexport const PsResultSchema = z.object({\n status: z.enum([\"ok\", \"error\"]),\n entries: z.array(PidEntrySchema),\n error: z.string().optional(),\n});\n\nexport const LogsOptionsSchema = z.object({\n service: z.string().optional(),\n tail: z.number().int().positive().max(100_000).optional(),\n follow: z.boolean().optional(),\n});\n\nexport const LogsResultSchema = z.object({\n logFile: z.string(),\n lines: z.array(z.string()),\n});\n\nexport const KillOptionsSchema = z.object({\n configDir: z.string().optional(),\n signal: z.enum([\"SIGTERM\", \"SIGKILL\"]).default(\"SIGTERM\"),\n all: z.boolean().default(false),\n});\n\nexport const KillResultSchema = z.object({\n status: z.enum([\"killed\", \"error\"]),\n killed: z.array(z.object({ pid: z.number(), configDir: z.string() })),\n skipped: z.array(z.object({ pid: z.number(), reason: z.string() })),\n error: z.string().optional(),\n});\n\nexport const TypecheckOptionsSchema = z.object({\n packages: z.string().default(\"all\"),\n});\n\nexport const TypecheckWorkspaceResultSchema = z.object({\n workspace: z.string(),\n passed: z.boolean(),\n output: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const TypecheckResultSchema = z.object({\n status: z.enum([\"success\", \"error\"]),\n checked: z.array(z.string()),\n skipped: z.array(z.string()),\n results: z.array(TypecheckWorkspaceResultSchema),\n error: z.string().optional(),\n});\n\nexport const InfraExportServiceSchema = z.object({\n key: z.string(),\n image: z.string(),\n env: z.record(z.string(), z.string()).default({}),\n ports: z.array(z.string()),\n healthcheck: z\n .object({\n test: z.array(z.string()),\n interval: z.string(),\n timeout: z.string(),\n retries: z.number(),\n })\n .optional(),\n volumes: z.array(z.string()).default([]),\n});\n\nexport const InfraExportOptionsSchema = z.object({\n target: z.enum([\"ci\", \"local\"]).default(\"ci\"),\n network: z.enum([\"mainnet\", \"testnet\"]).optional(),\n configDir: z.string().optional(),\n});\n\nexport const InfraExportResultSchema = z.object({\n env: z.record(z.string(), z.string()),\n services: z.array(InfraExportServiceSchema),\n generatedAt: z.string(),\n project: z.string(),\n account: z.string(),\n gateway: z.string(),\n});\n\nexport const MfCheckOptionsSchema = z.object({\n timeoutMs: z.number().default(15_000),\n});\n\nexport const MfCheckRemoteResultSchema = z.object({\n role: z.string(),\n url: z.string(),\n reachable: z.boolean(),\n pluginVersion: z.string().nullable(),\n ok: z.boolean(),\n reason: z.string().optional(),\n});\n\nexport const MfCheckResultSchema = z.object({\n status: z.enum([\"ok\", \"fail\"]),\n hostVersion: z.string().nullable(),\n hostReachable: z.boolean(),\n hostReason: z.string().optional(),\n remotes: z.array(MfCheckRemoteResultSchema),\n});\n\nexport const commandOptionSchemas = {\n dev: DevOptionsSchema,\n start: StartOptionsSchema,\n build: BuildOptionsSchema,\n config: ConfigOptionsSchema,\n registryUse: RegistryUseOptionsSchema,\n pluginAdd: PluginAddOptionsSchema,\n pluginRemove: PluginRemoveOptionsSchema,\n pluginPublish: PluginPublishOptionsSchema,\n publish: PublishOptionsSchema,\n rollback: RollbackOptionsSchema,\n deploy: DeployOptionsSchema,\n keyPublish: KeyPublishOptionsSchema,\n login: LoginOptionsSchema,\n logout: LogoutOptionsSchema,\n init: InitOptionsSchema,\n sync: SyncOptionsSchema,\n upgrade: UpgradeOptionsSchema,\n typecheck: TypecheckOptionsSchema,\n mfCheck: MfCheckOptionsSchema,\n infraExport: InfraExportOptionsSchema,\n dbStudio: DbStudioOptionsSchema,\n dbDoctor: DbDoctorOptionsSchema,\n dbRepair: DbRepairOptionsSchema,\n logs: LogsOptionsSchema,\n kill: KillOptionsSchema,\n} satisfies Partial<Record<keyof typeof bosContract, z.ZodType>>;\n\nexport const bosContract = oc.router({\n dev: oc.route({ method: \"POST\", path: \"/dev\" }).input(DevOptionsSchema).output(DevResultSchema),\n start: oc\n .route({ method: \"POST\", path: \"/start\" })\n .input(StartOptionsSchema)\n .output(StartResultSchema),\n build: oc\n .route({ method: \"POST\", path: \"/build\" })\n .input(BuildOptionsSchema)\n .output(BuildResultSchema),\n config: oc\n .route({ method: \"GET\", path: \"/config\" })\n .input(ConfigOptionsSchema)\n .output(ConfigResultSchema),\n registryUse: oc\n .route({ method: \"POST\", path: \"/registry/use\" })\n .input(RegistryUseOptionsSchema)\n .output(RegistryUseResultSchema),\n pluginAdd: oc\n .route({ method: \"POST\", path: \"/plugin/add\" })\n .input(PluginAddOptionsSchema)\n .output(PluginAddResultSchema),\n pluginRemove: oc\n .route({ method: \"POST\", path: \"/plugin/remove\" })\n .input(PluginRemoveOptionsSchema)\n .output(PluginRemoveResultSchema),\n pluginList: oc.route({ method: \"GET\", path: \"/plugin/list\" }).output(PluginListResultSchema),\n pluginPublish: oc\n .route({ method: \"POST\", path: \"/plugin/publish\" })\n .input(PluginPublishOptionsSchema)\n .output(PluginPublishResultSchema),\n publish: oc\n .route({ method: \"POST\", path: \"/publish\" })\n .input(PublishOptionsSchema)\n .output(PublishResultSchema),\n rollback: oc\n .route({ method: \"POST\", path: \"/rollback\" })\n .input(RollbackOptionsSchema)\n .output(RollbackResultSchema),\n deploy: oc\n .route({ method: \"POST\", path: \"/deploy\" })\n .input(DeployOptionsSchema)\n .output(DeployResultSchema),\n keyPublish: oc\n .route({ method: \"POST\", path: \"/key/publish\" })\n .input(KeyPublishOptionsSchema)\n .output(KeyPublishResultSchema),\n login: oc\n .route({ method: \"POST\", path: \"/login\" })\n .input(LoginOptionsSchema)\n .output(LoginResultSchema),\n logout: oc\n .route({ method: \"POST\", path: \"/logout\" })\n .input(LogoutOptionsSchema)\n .output(LogoutResultSchema),\n init: oc\n .route({ method: \"POST\", path: \"/init\" })\n .input(InitOptionsSchema)\n .output(InitResultSchema),\n sync: oc\n .route({ method: \"POST\", path: \"/sync\" })\n .input(SyncOptionsSchema)\n .output(SyncResultSchema),\n upgrade: oc\n .route({ method: \"POST\", path: \"/upgrade\" })\n .input(UpgradeOptionsSchema)\n .output(UpgradeResultSchema),\n status: oc.route({ method: \"GET\", path: \"/status\" }).output(StatusResultSchema),\n typesGen: oc\n .route({ method: \"POST\", path: \"/types/gen\" })\n .input(TypesGenOptionsSchema)\n .output(TypesGenResultSchema),\n dbStudio: oc\n .route({ method: \"POST\", path: \"/db/studio\" })\n .input(DbStudioOptionsSchema)\n .output(DbStudioResultSchema),\n dbDoctor: oc\n .route({ method: \"POST\", path: \"/db/doctor\" })\n .input(DbDoctorOptionsSchema)\n .output(DbDoctorResultSchema),\n dbRepair: oc\n .route({ method: \"POST\", path: \"/db/repair\" })\n .input(DbRepairOptionsSchema)\n .output(DbRepairResultSchema),\n ps: oc.route({ method: \"GET\", path: \"/ps\" }).output(PsResultSchema),\n logs: oc\n .route({ method: \"GET\", path: \"/logs\" })\n .input(LogsOptionsSchema)\n .output(LogsResultSchema),\n kill: oc\n .route({ method: \"POST\", path: \"/kill\" })\n .input(KillOptionsSchema)\n .output(KillResultSchema),\n typecheck: oc\n .route({ method: \"POST\", path: \"/typecheck\" })\n .input(TypecheckOptionsSchema)\n .output(TypecheckResultSchema),\n mfCheck: oc\n .route({ method: \"POST\", path: \"/mf/check\" })\n .input(MfCheckOptionsSchema)\n .output(MfCheckResultSchema),\n infraExport: oc\n .route({ method: \"POST\", path: \"/infra/export\" })\n .input(InfraExportOptionsSchema)\n .output(InfraExportResultSchema),\n});\n\nexport type DevOptions = z.infer<typeof DevOptionsSchema>;\nexport type DevResult = z.infer<typeof DevResultSchema>;\nexport type StartOptions = z.infer<typeof StartOptionsSchema>;\nexport type StartResult = z.infer<typeof StartResultSchema>;\nexport type BuildOptions = z.infer<typeof BuildOptionsSchema>;\nexport type BosConfigResult = z.infer<typeof ConfigResultSchema>;\nexport type PluginAddOptions = z.infer<typeof PluginAddOptionsSchema>;\nexport type PluginAddResult = z.infer<typeof PluginAddResultSchema>;\nexport type PluginRemoveOptions = z.infer<typeof PluginRemoveOptionsSchema>;\nexport type PluginRemoveResult = z.infer<typeof PluginRemoveResultSchema>;\nexport type PluginListResult = z.infer<typeof PluginListResultSchema>;\nexport type PluginPublishOptions = z.infer<typeof PluginPublishOptionsSchema>;\nexport type PluginPublishResult = z.infer<typeof PluginPublishResultSchema>;\nexport type WorkspaceDeployResult = z.infer<typeof WorkspaceDeployResultSchema>;\nexport type PublishOptions = z.infer<typeof PublishOptionsSchema>;\nexport type PublishResult = z.infer<typeof PublishResultSchema>;\nexport type DeployOptions = z.infer<typeof DeployOptionsSchema>;\nexport type DeployResult = z.infer<typeof DeployResultSchema>;\nexport type KeyPublishOptions = z.infer<typeof KeyPublishOptionsSchema>;\nexport type KeyPublishResult = z.infer<typeof KeyPublishResultSchema>;\nexport type LoginOptions = z.infer<typeof LoginOptionsSchema>;\nexport type LoginResult = z.infer<typeof LoginResultSchema>;\nexport type LogoutOptions = z.infer<typeof LogoutOptionsSchema>;\nexport type LogoutResult = z.infer<typeof LogoutResultSchema>;\nexport type InitOptions = z.infer<typeof InitOptionsSchema>;\nexport type InitResult = z.infer<typeof InitResultSchema>;\nexport type OverrideSection = z.infer<typeof OverrideSectionSchema>;\nexport type PhaseTiming = z.infer<typeof PhaseTimingSchema>;\nexport type SyncOptions = z.infer<typeof SyncOptionsSchema>;\nexport type SyncResult = z.infer<typeof SyncResultSchema>;\nexport type UpgradeOptions = z.infer<typeof UpgradeOptionsSchema>;\nexport type UpgradeResult = z.infer<typeof UpgradeResultSchema>;\nexport type StatusResult = z.infer<typeof StatusResultSchema>;\nexport type TypesGenOptions = z.infer<typeof TypesGenOptionsSchema>;\nexport type TypesGenResult = z.infer<typeof TypesGenResultSchema>;\nexport type DbStudioOptions = z.infer<typeof DbStudioOptionsSchema>;\nexport type DbStudioResult = z.infer<typeof DbStudioResultSchema>;\nexport type DbDoctorOptions = z.infer<typeof DbDoctorOptionsSchema>;\nexport type DbDoctorResult = z.infer<typeof DbDoctorResultSchema>;\nexport type DbRepairOptions = z.infer<typeof DbRepairOptionsSchema>;\nexport type DbRepairResult = z.infer<typeof DbRepairResultSchema>;\nexport type RuntimeOverrideTarget = z.infer<typeof RuntimeOverrideTargetSchema>;\nexport type ProcessRole = z.infer<typeof ProcessRoleSchema>;\nexport type PidEntry = z.infer<typeof PidEntrySchema>;\nexport type PsResult = z.infer<typeof PsResultSchema>;\nexport type LogsOptions = z.infer<typeof LogsOptionsSchema>;\nexport type LogsResult = z.infer<typeof LogsResultSchema>;\nexport type KillOptions = z.infer<typeof KillOptionsSchema>;\nexport type KillResult = z.infer<typeof KillResultSchema>;\nexport type TypecheckOptions = z.infer<typeof TypecheckOptionsSchema>;\nexport type TypecheckResult = z.infer<typeof TypecheckResultSchema>;\nexport type TypecheckWorkspaceResult = z.infer<typeof TypecheckWorkspaceResultSchema>;\nexport type InfraExportOptions = z.infer<typeof InfraExportOptionsSchema>;\nexport type MfCheckOptions = z.infer<typeof MfCheckOptionsSchema>;\nexport type MfCheckResult = z.infer<typeof MfCheckResultSchema>;\nexport type InfraExportResult = z.infer<typeof InfraExportResultSchema>;\nexport type InfraExportService = z.infer<typeof InfraExportServiceSchema>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"contract.mjs","names":["z"],"sources":["../src/contract.ts"],"sourcesContent":["import \"@orpc/openapi/extensions/route\";\nimport * as z from \"zod\";\nimport type { DevSessionData, StartSummary } from \"./dev-session-data\";\nimport { isValidImageDigest } from \"./image-deploy\";\nimport { oc } from \"./sdk\";\nimport {\n BosConfigInputSchema,\n BosConfigSchema,\n SourceModeSchema,\n StarterLevelSchema,\n} from \"./types\";\n\nexport const PhaseTimingSchema = z.object({\n name: z.string(),\n durationMs: z.number(),\n});\n\nexport const DevOptionsSchema = z.object({\n host: SourceModeSchema.default(\"local\"),\n ui: SourceModeSchema.default(\"local\"),\n api: SourceModeSchema.default(\"local\"),\n auth: SourceModeSchema.default(\"local\"),\n remotePlugins: z.array(z.string()).optional(),\n proxy: z.boolean().default(false),\n ssr: z.boolean().default(false),\n port: z.number().optional(),\n apiPort: z.number().optional(),\n uiPort: z.number().optional(),\n authPort: z.number().optional(),\n pluginPortStart: z.number().optional(),\n interactive: z.boolean().optional(),\n logLevel: z.enum([\"error\", \"warn\", \"info\", \"debug\"]).optional(),\n});\n\nexport const DevResultSchema = z.object({\n status: z.enum([\"started\", \"error\"]),\n description: z.string(),\n processes: z.array(z.string()),\n timings: z.array(PhaseTimingSchema).optional(),\n session: z.custom<DevSessionData>().optional(),\n});\n\nexport const StartOptionsSchema = z.object({\n port: z.number().optional(),\n interactive: z.boolean().optional(),\n account: z.string().optional(),\n domain: z.string().optional(),\n env: z.enum([\"production\", \"staging\"]).default(\"production\"),\n registry: z.string().optional(),\n configPath: z.string().optional(),\n});\n\nexport const StartResultSchema = z.object({\n status: z.enum([\"running\", \"error\"]),\n url: z.string(),\n error: z.string().optional(),\n session: z.custom<DevSessionData>().optional(),\n summary: z.custom<StartSummary>().optional(),\n});\n\nexport const BuildOptionsSchema = z.object({\n packages: z\n .string()\n .default(\"all\")\n .describe(\n \"Comma-separated keys, 'all' (default), or 'local' (only this repo's local plugins hosted via 'local:…')\",\n ),\n force: z.boolean().default(false),\n});\n\nexport const BuildResultSchema = z.object({\n status: z.enum([\"success\", \"error\"]),\n error: z.string().optional(),\n built: z.array(z.string()),\n skipped: z.array(z.string()).optional(),\n});\n\nexport const ConfigOptionsSchema = z.object({\n full: z.boolean().default(false),\n});\n\nexport const ConfigResultSchema = z.object({\n config: z.union([BosConfigInputSchema, BosConfigSchema]).nullable(),\n packages: z.array(z.string()),\n remotes: z.array(z.string()),\n full: z.boolean().default(false),\n});\n\nexport const RegistryUseOptionsSchema = z.object({\n from: z.string().describe(\"Published runtime to compose from (account/gateway or bos:// URL)\"),\n sections: z\n .array(z.string())\n .min(1)\n .describe(\"Sections to compose: app.ui, app.host, app.api, app.auth, plugins.<key>\"),\n dryRun: z.boolean().default(false),\n});\n\nexport const RegistryUseResultSchema = z.object({\n status: z.enum([\"updated\", \"dry-run\", \"error\"]),\n from: z.string(),\n applied: z.array(z.string()),\n configPath: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const PluginAddOptionsSchema = z.object({\n source: z.string(),\n as: z.string().optional(),\n production: z.string().optional(),\n});\n\nexport const PluginAddResultSchema = z.object({\n status: z.enum([\"added\", \"error\"]),\n key: z.string(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n version: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const PluginRemoveOptionsSchema = z.object({\n key: z.string(),\n});\n\nexport const PluginRemoveResultSchema = z.object({\n status: z.enum([\"removed\", \"error\"]),\n key: z.string(),\n error: z.string().optional(),\n});\n\nexport const PluginListResultSchema = z.object({\n status: z.enum([\"listed\", \"error\"]),\n plugins: z.array(\n z.object({\n key: z.string(),\n development: z.string().optional(),\n production: z.string().optional(),\n localPath: z.string().optional(),\n source: z.enum([\"local\", \"remote\"]),\n integrity: z.string().optional(),\n version: z.string().optional(),\n name: z.string().optional(),\n }),\n ),\n error: z.string().optional(),\n});\n\nexport const PluginPublishOptionsSchema = z.object({\n key: z.string(),\n});\n\nexport const PluginPublishResultSchema = z.object({\n status: z.enum([\"published\", \"error\"]),\n key: z.string(),\n path: z.string().optional(),\n production: z.string().optional(),\n version: z.string().optional(),\n fingerprint: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const WorkspaceDeployResultSchema = z.object({\n key: z.string(),\n kind: z.enum([\"app\", \"plugin\"]),\n success: z.boolean(),\n error: z.string().optional(),\n durationMs: z.number().optional(),\n});\n\nexport const PublishOptionsSchema = z.object({\n dryRun: z.boolean().default(false),\n verbose: z.boolean().default(false),\n network: z.enum([\"mainnet\", \"testnet\"]).optional(),\n privateKey: z.string().optional(),\n wallet: z.boolean().default(false),\n env: z.enum([\"production\", \"staging\"]).default(\"production\"),\n registry: z.string().optional(),\n});\n\nexport const RollbackOptionsSchema = z.object({\n listOnly: z.boolean().default(false),\n version: z.string().optional(),\n previous: z.boolean().default(false),\n force: z.boolean().default(false),\n limit: z.number().int().min(1).max(200).default(20),\n dryRun: z.boolean().default(false),\n verbose: z.boolean().default(false),\n network: z.enum([\"mainnet\", \"testnet\"]).optional(),\n privateKey: z.string().optional(),\n wallet: z.boolean().default(false),\n env: z.enum([\"production\", \"staging\"]).default(\"production\"),\n registry: z.string().optional(),\n});\n\nexport const RollbackHistoryEntrySchema = z.object({\n blockHeight: z.number(),\n blockTimestamp: z.string(),\n txHash: z.string().optional(),\n summary: z.string(),\n});\n\nexport const RollbackSlotCheckSchema = z.object({\n slot: z.string(),\n ok: z.boolean(),\n reason: z.string().optional(),\n});\n\nexport const RollbackResultSchema = z.object({\n status: z.enum([\"published\", \"error\", \"dry-run\", \"list\"]),\n registryUrl: z.string(),\n txHash: z.string().optional(),\n error: z.string().optional(),\n history: z.array(RollbackHistoryEntrySchema).optional(),\n verification: z.array(RollbackSlotCheckSchema).optional(),\n});\n\nexport const PublishResultSchema = z.object({\n status: z.enum([\"published\", \"error\", \"dry-run\"]),\n registryUrl: z.string(),\n txHash: z.string().optional(),\n fingerprint: z.string().optional(),\n slotPins: z.record(z.string(), z.string()).optional(),\n error: z.string().optional(),\n built: z.array(z.string()).optional(),\n skipped: z.array(z.string()).optional(),\n deployResults: z.array(WorkspaceDeployResultSchema).optional(),\n});\n\nexport const DeployOptionsSchema = z.object({\n statusList: z.boolean().default(false),\n env: z.enum([\"production\", \"staging\"]).default(\"production\"),\n build: z.boolean().default(true),\n dryRun: z.boolean().default(false),\n verbose: z.boolean().default(false),\n packages: z\n .string()\n .default(\"all\")\n .describe(\n \"Comma-separated keys, 'all' (default), or 'local' (only this repo's local plugins hosted via 'local:…')\",\n ),\n network: z.enum([\"mainnet\", \"testnet\"]).optional(),\n privateKey: z.string().optional(),\n service: z.string().optional(),\n registry: z.string().optional(),\n imageDigest: z\n .string()\n .optional()\n .refine((digest) => digest === undefined || isValidImageDigest(digest), {\n message: \"image digest must be sha256:<64 hex characters>\",\n })\n .describe(\n \"Digest (sha256:…) of a pre-pushed runtime image — skips the image build/push leg and pins Railway to this digest\",\n ),\n fullUpload: z\n .boolean()\n .default(false)\n .describe(\n \"Re-upload every dist file instead of diffing unchanged files against the previous deploy\",\n ),\n});\n\nexport const DeployManifestListEntrySchema = z.object({\n key: z.string(),\n blockHeight: z.number(),\n blockTimestamp: z.string(),\n txHash: z.string().optional(),\n publishedAt: z.string().optional(),\n});\n\nexport const DeployResultSchema = z.object({\n status: z.enum([\"deployed\", \"published\", \"error\", \"dry-run\", \"list\"]),\n registryUrl: z.string(),\n txHash: z.string().optional(),\n fingerprint: z.string().optional(),\n slotPins: z.record(z.string(), z.string()).optional(),\n history: z.array(DeployManifestListEntrySchema).optional(),\n built: z.array(z.string()).optional(),\n skipped: z.array(z.string()).optional(),\n image: z.string().optional(),\n service: z.string().optional(),\n error: z.string().optional(),\n deployResults: z.array(WorkspaceDeployResultSchema).optional(),\n});\n\nfunction parseNearAmount(value: string): number {\n const cleaned = value.replace(/[\\s_,]/g, \"\");\n const match = cleaned.match(/^(\\d+(?:\\.\\d+)?)near$/i);\n if (!match) return NaN;\n return Number.parseFloat(match[1]!);\n}\n\nconst MIN_PUBLISH_ALLOWANCE_NEAR = 0.3;\n\nexport const KeyPublishOptionsSchema = z.object({\n allowance: z\n .string()\n .default(\"1NEAR\")\n .refine(\n (val) => {\n const amount = parseNearAmount(val);\n return !Number.isNaN(amount) && amount >= MIN_PUBLISH_ALLOWANCE_NEAR;\n },\n {\n message: `Allowance must be at least ${MIN_PUBLISH_ALLOWANCE_NEAR} NEAR to cover the transaction cost`,\n },\n ),\n env: z.enum([\"production\", \"staging\"]).default(\"production\"),\n registry: z.string().optional(),\n removeOldKeys: z.boolean().optional(),\n});\n\nexport const KeyPublishResultSchema = z.object({\n status: z.enum([\"published\", \"error\"]),\n account: z.string(),\n network: z.enum([\"mainnet\", \"testnet\"]),\n env: z.enum([\"production\", \"staging\"]),\n contract: z.string(),\n allowance: z.string(),\n functionNames: z.array(z.string()),\n publicKey: z.string().optional(),\n privateKey: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const OverrideSectionSchema = z.enum([\"ui\", \"api\", \"host\", \"plugins\"]);\n\nconst DEFAULT_LOGIN_EXPIRES_IN_SECONDS = 90 * 24 * 60 * 60;\n\nexport const LoginOptionsSchema = z.object({\n key: z.boolean().default(false),\n site: z.string().optional(),\n expiresIn: z.number().int().positive().default(DEFAULT_LOGIN_EXPIRES_IN_SECONDS),\n device: z.string().optional(),\n env: z.enum([\"production\", \"staging\"]).default(\"production\"),\n registry: z.string().optional(),\n});\n\nexport const LoginResultSchema = z.object({\n status: z.enum([\"logged-in\", \"error\"]),\n siteUrl: z.string(),\n accountId: z.string().nullish(),\n expiresAt: z.string().nullish(),\n loginUrl: z.string().nullish(),\n publishKey: z\n .object({\n publicKey: z.string(),\n network: z.enum([\"mainnet\", \"testnet\"]),\n contract: z.string(),\n exportedTo: z.string(),\n })\n .nullish(),\n warning: z.string().nullish(),\n error: z.string().optional(),\n});\n\nexport const LogoutOptionsSchema = z.object({\n configDir: z.string().optional(),\n});\n\nexport const LogoutResultSchema = z.object({\n status: z.enum([\"logged-out\", \"error\"]),\n revokedApiKey: z.boolean(),\n removedPublishKey: z.boolean(),\n warning: z.string().nullish(),\n error: z.string().optional(),\n});\n\nexport const RuntimeOverrideTargetBaseSchema = z.enum([\"ui\", \"api\", \"plugins\"]);\n\nexport const RuntimeOverrideTargetSchema = z.union([\n RuntimeOverrideTargetBaseSchema,\n z.string().regex(/^plugins\\.(\\*|[a-z0-9_-]+)$/),\n]);\n\nexport const InitOptionsSchema = z.object({\n extends: z.string().optional(),\n directory: z.string().optional(),\n account: z.string().optional(),\n domain: z.string().optional(),\n source: z.string().optional(),\n plugins: z.array(z.string()).optional(),\n overrides: z.array(OverrideSectionSchema).optional(),\n level: StarterLevelSchema.optional(),\n noInteractive: z.boolean().default(false),\n noInstall: z.boolean().default(false),\n});\n\nexport const InitResultSchema = z.object({\n status: z.enum([\"initialized\", \"error\"]),\n directory: z.string(),\n extendsRef: z.string(),\n account: z.string().optional(),\n domain: z.string().optional(),\n extends: z.string(),\n plugins: z.array(z.string()).optional(),\n overrides: z.array(OverrideSectionSchema).optional(),\n filesCopied: z.number(),\n timings: z.array(PhaseTimingSchema).optional(),\n targetDir: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const SyncOptionsSchema = z.object({\n dryRun: z.boolean().default(false),\n noInstall: z.boolean().default(false),\n json: z.boolean().default(false),\n});\n\nexport const SyncResultSchema = z.object({\n status: z.enum([\"synced\", \"dry-run\", \"error\"]),\n updated: z.array(z.string()),\n skipped: z.array(z.string()),\n added: z.array(z.string()),\n conflicted: z.array(z.string()).default([]),\n /** retired stub files deleted silently (unmodified) — ADR 0023 migration */\n retired: z.array(z.string()).optional(),\n /** retired stub files that were hand-modified — backed up, then deleted */\n retiredConflicted: z.array(z.string()).optional(),\n /** where the retired hand-modified copies were backed up */\n retiredBackupDir: z.string().optional(),\n backupDir: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const UpgradeOptionsSchema = z.object({\n dryRun: z.boolean().default(false),\n noInstall: z.boolean().default(false),\n noSync: z.boolean().default(false),\n json: z.boolean().default(false),\n migrationsOnly: z.boolean().default(false),\n});\n\nexport const UpgradeResultSchema = z.object({\n status: z.enum([\"upgraded\", \"dry-run\", \"error\"]),\n packages: z.array(\n z.object({\n name: z.string(),\n from: z.string().optional(),\n to: z.string(),\n }),\n ),\n sync: SyncResultSchema.optional(),\n migrated: z.array(z.string()).optional(),\n availablePlugins: z.array(z.string()).optional(),\n selectedPlugins: z.array(z.string()).optional(),\n timings: z.array(PhaseTimingSchema).optional(),\n changelogUrl: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const DeployedVersionStatusSchema = z.object({\n publishedFingerprint: z.string(),\n servedFingerprint: z.string().optional(),\n inSync: z.boolean(),\n error: z.string().optional(),\n});\n\nexport const StatusResultSchema = z.object({\n status: z.enum([\"ok\", \"error\"]),\n deployedVersion: DeployedVersionStatusSchema.optional(),\n extends: z.string().optional(),\n account: z.string().optional(),\n domain: z.string().optional(),\n packages: z.array(\n z.object({\n name: z.string(),\n installed: z.string().optional(),\n latest: z.string().optional(),\n isLinked: z.boolean().optional(),\n specifier: z.string().optional(),\n }),\n ),\n lastSync: z.string().optional(),\n envFile: z.enum([\"found\", \"missing\", \"example-only\"]),\n parentReachable: z.boolean().optional(),\n error: z.string().optional(),\n});\n\nexport const TypesGenOptionsSchema = z.object({\n env: z.enum([\"development\", \"production\"]).optional(),\n dryRun: z.boolean().default(false),\n remotePlugins: z.array(z.string()).optional(),\n});\n\nexport const TypesGenResultSchema = z.object({\n status: z.enum([\"success\", \"error\"]),\n generated: z.array(z.string()),\n fetched: z.array(z.string()),\n skipped: z.array(z.string()),\n failed: z.array(z.string()),\n error: z.string().optional(),\n});\n\nexport const DbStudioOptionsSchema = z.object({\n plugin: z.string().default(\"api\"),\n});\n\nexport const DbStudioResultSchema = z.object({\n status: z.enum([\"success\", \"error\"]),\n plugin: z.string(),\n source: z.enum([\"local\", \"remote\"]),\n section: z.string(),\n databaseSecret: z.string().optional(),\n databaseUrl: z.string().optional(),\n workspaceDir: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const DbDoctorOptionsSchema = z.object({\n plugin: z.string(),\n});\n\nexport const DbDoctorResultSchema = z.object({\n status: z.enum([\"success\", \"error\"]),\n plugin: z.string(),\n slug: z.string(),\n journalTable: z.string(),\n journalSchema: z.string(),\n diagnosis: z.string(),\n localMigrationCount: z.number(),\n appliedHashCount: z.number(),\n expectedTables: z.array(z.string()),\n missingTables: z.array(z.string()),\n workspaceDir: z.string().optional(),\n dbSecret: z.string().optional(),\n dbUrl: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const DbRepairOptionsSchema = z.object({\n plugin: z.string(),\n mode: z.enum([\"history-reset\", \"recreate\"]).default(\"history-reset\"),\n yes: z.boolean().optional(),\n});\n\nexport const DbRepairResultSchema = z.object({\n status: z.enum([\"repaired\", \"refused\", \"error\"]),\n message: z.string(),\n diagnosis: z.any(),\n error: z.string().optional(),\n});\n\nexport const ProcessRoleSchema = z.enum([\"standalone\", \"workspace-parent\", \"workspace-child\"]);\n\nexport const PidEntrySchema = z.object({\n pid: z.number(),\n configDir: z.string(),\n parentPid: z.number().optional(),\n role: ProcessRoleSchema,\n ports: z\n .object({\n host: z.number().optional(),\n api: z.number().optional(),\n ui: z.number().optional(),\n auth: z.number().optional(),\n })\n .default({}),\n budget: z\n .object({\n min: z.number(),\n max: z.number(),\n })\n .optional(),\n startedAt: z.number(),\n description: z.string(),\n});\n\nexport const PsResultSchema = z.object({\n status: z.enum([\"ok\", \"error\"]),\n entries: z.array(PidEntrySchema),\n error: z.string().optional(),\n});\n\nexport const LogsOptionsSchema = z.object({\n service: z.string().optional(),\n tail: z.number().int().positive().max(100_000).optional(),\n follow: z.boolean().optional(),\n});\n\nexport const LogsResultSchema = z.object({\n logFile: z.string(),\n lines: z.array(z.string()),\n});\n\nexport const KillOptionsSchema = z.object({\n configDir: z.string().optional(),\n signal: z.enum([\"SIGTERM\", \"SIGKILL\"]).default(\"SIGTERM\"),\n all: z.boolean().default(false),\n});\n\nexport const KillResultSchema = z.object({\n status: z.enum([\"killed\", \"error\"]),\n killed: z.array(z.object({ pid: z.number(), configDir: z.string() })),\n skipped: z.array(z.object({ pid: z.number(), reason: z.string() })),\n error: z.string().optional(),\n});\n\nexport const TypecheckOptionsSchema = z.object({\n packages: z.string().default(\"all\"),\n});\n\nexport const TypecheckWorkspaceResultSchema = z.object({\n workspace: z.string(),\n passed: z.boolean(),\n output: z.string().optional(),\n error: z.string().optional(),\n});\n\nexport const TypecheckResultSchema = z.object({\n status: z.enum([\"success\", \"error\"]),\n checked: z.array(z.string()),\n skipped: z.array(z.string()),\n results: z.array(TypecheckWorkspaceResultSchema),\n error: z.string().optional(),\n});\n\nexport const InfraExportServiceSchema = z.object({\n key: z.string(),\n image: z.string(),\n env: z.record(z.string(), z.string()).default({}),\n ports: z.array(z.string()),\n healthcheck: z\n .object({\n test: z.array(z.string()),\n interval: z.string(),\n timeout: z.string(),\n retries: z.number(),\n })\n .optional(),\n volumes: z.array(z.string()).default([]),\n});\n\nexport const InfraExportOptionsSchema = z.object({\n target: z.enum([\"ci\", \"local\"]).default(\"ci\"),\n network: z.enum([\"mainnet\", \"testnet\"]).optional(),\n configDir: z.string().optional(),\n});\n\nexport const InfraExportResultSchema = z.object({\n env: z.record(z.string(), z.string()),\n services: z.array(InfraExportServiceSchema),\n generatedAt: z.string(),\n project: z.string(),\n account: z.string(),\n gateway: z.string(),\n});\n\nexport const MfCheckOptionsSchema = z.object({\n timeoutMs: z.number().default(15_000),\n});\n\nexport const MfCheckRemoteResultSchema = z.object({\n role: z.string(),\n url: z.string(),\n reachable: z.boolean(),\n pluginVersion: z.string().nullable(),\n ok: z.boolean(),\n reason: z.string().optional(),\n});\n\nexport const MfCheckResultSchema = z.object({\n status: z.enum([\"ok\", \"fail\"]),\n hostVersion: z.string().nullable(),\n hostReachable: z.boolean(),\n hostReason: z.string().optional(),\n remotes: z.array(MfCheckRemoteResultSchema),\n});\n\nexport const commandOptionSchemas = {\n dev: DevOptionsSchema,\n start: StartOptionsSchema,\n build: BuildOptionsSchema,\n config: ConfigOptionsSchema,\n registryUse: RegistryUseOptionsSchema,\n pluginAdd: PluginAddOptionsSchema,\n pluginRemove: PluginRemoveOptionsSchema,\n pluginPublish: PluginPublishOptionsSchema,\n publish: PublishOptionsSchema,\n rollback: RollbackOptionsSchema,\n deploy: DeployOptionsSchema,\n keyPublish: KeyPublishOptionsSchema,\n login: LoginOptionsSchema,\n logout: LogoutOptionsSchema,\n init: InitOptionsSchema,\n sync: SyncOptionsSchema,\n upgrade: UpgradeOptionsSchema,\n typecheck: TypecheckOptionsSchema,\n mfCheck: MfCheckOptionsSchema,\n infraExport: InfraExportOptionsSchema,\n dbStudio: DbStudioOptionsSchema,\n dbDoctor: DbDoctorOptionsSchema,\n dbRepair: DbRepairOptionsSchema,\n logs: LogsOptionsSchema,\n kill: KillOptionsSchema,\n} satisfies Partial<Record<keyof typeof bosContract, z.ZodType>>;\n\nexport const bosContract = oc.router({\n dev: oc.route({ method: \"POST\", path: \"/dev\" }).input(DevOptionsSchema).output(DevResultSchema),\n start: oc\n .route({ method: \"POST\", path: \"/start\" })\n .input(StartOptionsSchema)\n .output(StartResultSchema),\n build: oc\n .route({ method: \"POST\", path: \"/build\" })\n .input(BuildOptionsSchema)\n .output(BuildResultSchema),\n config: oc\n .route({ method: \"GET\", path: \"/config\" })\n .input(ConfigOptionsSchema)\n .output(ConfigResultSchema),\n registryUse: oc\n .route({ method: \"POST\", path: \"/registry/use\" })\n .input(RegistryUseOptionsSchema)\n .output(RegistryUseResultSchema),\n pluginAdd: oc\n .route({ method: \"POST\", path: \"/plugin/add\" })\n .input(PluginAddOptionsSchema)\n .output(PluginAddResultSchema),\n pluginRemove: oc\n .route({ method: \"POST\", path: \"/plugin/remove\" })\n .input(PluginRemoveOptionsSchema)\n .output(PluginRemoveResultSchema),\n pluginList: oc.route({ method: \"GET\", path: \"/plugin/list\" }).output(PluginListResultSchema),\n pluginPublish: oc\n .route({ method: \"POST\", path: \"/plugin/publish\" })\n .input(PluginPublishOptionsSchema)\n .output(PluginPublishResultSchema),\n publish: oc\n .route({ method: \"POST\", path: \"/publish\" })\n .input(PublishOptionsSchema)\n .output(PublishResultSchema),\n rollback: oc\n .route({ method: \"POST\", path: \"/rollback\" })\n .input(RollbackOptionsSchema)\n .output(RollbackResultSchema),\n deploy: oc\n .route({ method: \"POST\", path: \"/deploy\" })\n .input(DeployOptionsSchema)\n .output(DeployResultSchema),\n keyPublish: oc\n .route({ method: \"POST\", path: \"/key/publish\" })\n .input(KeyPublishOptionsSchema)\n .output(KeyPublishResultSchema),\n login: oc\n .route({ method: \"POST\", path: \"/login\" })\n .input(LoginOptionsSchema)\n .output(LoginResultSchema),\n logout: oc\n .route({ method: \"POST\", path: \"/logout\" })\n .input(LogoutOptionsSchema)\n .output(LogoutResultSchema),\n init: oc\n .route({ method: \"POST\", path: \"/init\" })\n .input(InitOptionsSchema)\n .output(InitResultSchema),\n sync: oc\n .route({ method: \"POST\", path: \"/sync\" })\n .input(SyncOptionsSchema)\n .output(SyncResultSchema),\n upgrade: oc\n .route({ method: \"POST\", path: \"/upgrade\" })\n .input(UpgradeOptionsSchema)\n .output(UpgradeResultSchema),\n status: oc.route({ method: \"GET\", path: \"/status\" }).output(StatusResultSchema),\n typesGen: oc\n .route({ method: \"POST\", path: \"/types/gen\" })\n .input(TypesGenOptionsSchema)\n .output(TypesGenResultSchema),\n dbStudio: oc\n .route({ method: \"POST\", path: \"/db/studio\" })\n .input(DbStudioOptionsSchema)\n .output(DbStudioResultSchema),\n dbDoctor: oc\n .route({ method: \"POST\", path: \"/db/doctor\" })\n .input(DbDoctorOptionsSchema)\n .output(DbDoctorResultSchema),\n dbRepair: oc\n .route({ method: \"POST\", path: \"/db/repair\" })\n .input(DbRepairOptionsSchema)\n .output(DbRepairResultSchema),\n ps: oc.route({ method: \"GET\", path: \"/ps\" }).output(PsResultSchema),\n logs: oc\n .route({ method: \"GET\", path: \"/logs\" })\n .input(LogsOptionsSchema)\n .output(LogsResultSchema),\n kill: oc\n .route({ method: \"POST\", path: \"/kill\" })\n .input(KillOptionsSchema)\n .output(KillResultSchema),\n typecheck: oc\n .route({ method: \"POST\", path: \"/typecheck\" })\n .input(TypecheckOptionsSchema)\n .output(TypecheckResultSchema),\n mfCheck: oc\n .route({ method: \"POST\", path: \"/mf/check\" })\n .input(MfCheckOptionsSchema)\n .output(MfCheckResultSchema),\n infraExport: oc\n .route({ method: \"POST\", path: \"/infra/export\" })\n .input(InfraExportOptionsSchema)\n .output(InfraExportResultSchema),\n});\n\nexport type DevOptions = z.infer<typeof DevOptionsSchema>;\nexport type DevResult = z.infer<typeof DevResultSchema>;\nexport type StartOptions = z.infer<typeof StartOptionsSchema>;\nexport type StartResult = z.infer<typeof StartResultSchema>;\nexport type BuildOptions = z.infer<typeof BuildOptionsSchema>;\nexport type BosConfigResult = z.infer<typeof ConfigResultSchema>;\nexport type PluginAddOptions = z.infer<typeof PluginAddOptionsSchema>;\nexport type PluginAddResult = z.infer<typeof PluginAddResultSchema>;\nexport type PluginRemoveOptions = z.infer<typeof PluginRemoveOptionsSchema>;\nexport type PluginRemoveResult = z.infer<typeof PluginRemoveResultSchema>;\nexport type PluginListResult = z.infer<typeof PluginListResultSchema>;\nexport type PluginPublishOptions = z.infer<typeof PluginPublishOptionsSchema>;\nexport type PluginPublishResult = z.infer<typeof PluginPublishResultSchema>;\nexport type WorkspaceDeployResult = z.infer<typeof WorkspaceDeployResultSchema>;\nexport type PublishOptions = z.infer<typeof PublishOptionsSchema>;\nexport type PublishResult = z.infer<typeof PublishResultSchema>;\nexport type DeployOptions = z.infer<typeof DeployOptionsSchema>;\nexport type DeployResult = z.infer<typeof DeployResultSchema>;\nexport type KeyPublishOptions = z.infer<typeof KeyPublishOptionsSchema>;\nexport type KeyPublishResult = z.infer<typeof KeyPublishResultSchema>;\nexport type LoginOptions = z.infer<typeof LoginOptionsSchema>;\nexport type LoginResult = z.infer<typeof LoginResultSchema>;\nexport type LogoutOptions = z.infer<typeof LogoutOptionsSchema>;\nexport type LogoutResult = z.infer<typeof LogoutResultSchema>;\nexport type InitOptions = z.infer<typeof InitOptionsSchema>;\nexport type InitResult = z.infer<typeof InitResultSchema>;\nexport type OverrideSection = z.infer<typeof OverrideSectionSchema>;\nexport type PhaseTiming = z.infer<typeof PhaseTimingSchema>;\nexport type SyncOptions = z.infer<typeof SyncOptionsSchema>;\nexport type SyncResult = z.infer<typeof SyncResultSchema>;\nexport type UpgradeOptions = z.infer<typeof UpgradeOptionsSchema>;\nexport type UpgradeResult = z.infer<typeof UpgradeResultSchema>;\nexport type StatusResult = z.infer<typeof StatusResultSchema>;\nexport type TypesGenOptions = z.infer<typeof TypesGenOptionsSchema>;\nexport type TypesGenResult = z.infer<typeof TypesGenResultSchema>;\nexport type DbStudioOptions = z.infer<typeof DbStudioOptionsSchema>;\nexport type DbStudioResult = z.infer<typeof DbStudioResultSchema>;\nexport type DbDoctorOptions = z.infer<typeof DbDoctorOptionsSchema>;\nexport type DbDoctorResult = z.infer<typeof DbDoctorResultSchema>;\nexport type DbRepairOptions = z.infer<typeof DbRepairOptionsSchema>;\nexport type DbRepairResult = z.infer<typeof DbRepairResultSchema>;\nexport type RuntimeOverrideTarget = z.infer<typeof RuntimeOverrideTargetSchema>;\nexport type ProcessRole = z.infer<typeof ProcessRoleSchema>;\nexport type PidEntry = z.infer<typeof PidEntrySchema>;\nexport type PsResult = z.infer<typeof PsResultSchema>;\nexport type LogsOptions = z.infer<typeof LogsOptionsSchema>;\nexport type LogsResult = z.infer<typeof LogsResultSchema>;\nexport type KillOptions = z.infer<typeof KillOptionsSchema>;\nexport type KillResult = z.infer<typeof KillResultSchema>;\nexport type TypecheckOptions = z.infer<typeof TypecheckOptionsSchema>;\nexport type TypecheckResult = z.infer<typeof TypecheckResultSchema>;\nexport type TypecheckWorkspaceResult = z.infer<typeof TypecheckWorkspaceResultSchema>;\nexport type InfraExportOptions = z.infer<typeof InfraExportOptionsSchema>;\nexport type MfCheckOptions = z.infer<typeof MfCheckOptionsSchema>;\nexport type MfCheckResult = z.infer<typeof MfCheckResultSchema>;\nexport type InfraExportResult = z.infer<typeof InfraExportResultSchema>;\nexport type InfraExportService = z.infer<typeof InfraExportServiceSchema>;\n"],"mappings":"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"}
|
package/dist/db/driver.cjs
CHANGED
|
@@ -45,6 +45,20 @@ function connectionOptions(namespace) {
|
|
|
45
45
|
}
|
|
46
46
|
const isLocalDbUrl = (url) => url.includes("localhost") || url.includes("127.0.0.1") || url.includes("host.docker.internal") || url.includes(".railway.internal");
|
|
47
47
|
/**
|
|
48
|
+
* Railway's public proxy (`*.rlwy.net`) fronts the same Postgres as the
|
|
49
|
+
* internal hostname and presents the same self-signed certificate chain no
|
|
50
|
+
* client CA bundle can verify — but unlike `*.railway.internal` it crosses
|
|
51
|
+
* the public internet, so TLS must stay on (encrypted, unverified) rather
|
|
52
|
+
* than being dropped entirely.
|
|
53
|
+
*/
|
|
54
|
+
function isRailwayPublicProxyUrl(url) {
|
|
55
|
+
try {
|
|
56
|
+
return new URL(url).hostname.toLowerCase().endsWith(".rlwy.net");
|
|
57
|
+
} catch {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
48
62
|
* TLS behavior for a non-local Postgres URL, following libpq `sslmode`
|
|
49
63
|
* semantics from the connection string itself:
|
|
50
64
|
*
|
|
@@ -54,7 +68,10 @@ const isLocalDbUrl = (url) => url.includes("localhost") || url.includes("127.0.0
|
|
|
54
68
|
* providers (Railway, Neon, Supabase poolers…) hand out `sslmode=require`
|
|
55
69
|
* URLs backed by certificates no client CA bundle can verify.
|
|
56
70
|
* - `verify-ca`/`verify-full` → TLS + certificate verification.
|
|
57
|
-
* - absent → verification ON (secure default for bare URLs)
|
|
71
|
+
* - absent → verification ON (secure default for bare URLs), EXCEPT Railway's
|
|
72
|
+
* public proxy (`*.rlwy.net`), which fronts the same self-signed Postgres
|
|
73
|
+
* as `*.railway.internal` — those URLs default to encrypted-unverified
|
|
74
|
+
* TLS. `DB_SSL_REJECT_UNAUTHORIZED` still overrides.
|
|
58
75
|
*
|
|
59
76
|
* `DB_SSL_REJECT_UNAUTHORIZED` stays as an explicit operator override: it
|
|
60
77
|
* wins over whatever the URL says (`"false"` disables verification, `"true"`
|
|
@@ -77,7 +94,9 @@ function resolvePoolSsl(url) {
|
|
|
77
94
|
case "prefer":
|
|
78
95
|
case "allow":
|
|
79
96
|
case "require": return { rejectUnauthorized: false };
|
|
80
|
-
default:
|
|
97
|
+
default:
|
|
98
|
+
if (isRailwayPublicProxyUrl(url)) return { rejectUnauthorized: false };
|
|
99
|
+
return { rejectUnauthorized: true };
|
|
81
100
|
}
|
|
82
101
|
}
|
|
83
102
|
function buildPoolConfig(url, namespace) {
|
|
@@ -162,6 +181,7 @@ async function createDatabaseDriver(url, schema, namespace) {
|
|
|
162
181
|
|
|
163
182
|
//#endregion
|
|
164
183
|
exports.createDatabaseDriver = createDatabaseDriver;
|
|
184
|
+
exports.isRailwayPublicProxyUrl = isRailwayPublicProxyUrl;
|
|
165
185
|
exports.pluginSchemaName = pluginSchemaName;
|
|
166
186
|
exports.resolvePoolSsl = resolvePoolSsl;
|
|
167
187
|
//# sourceMappingURL=driver.cjs.map
|
package/dist/db/driver.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.cjs","names":["pluginMigrationSlug","dirname"],"sources":["../../src/db/driver.ts"],"sourcesContent":["import { mkdirSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport type { PgDatabase, PgQueryResultHKT } from \"drizzle-orm/pg-core\";\nimport { pluginMigrationSlug } from \"./core\";\n\nexport interface DatabaseDriver<TSchema extends Record<string, unknown>> {\n readonly db: PgDatabase<PgQueryResultHKT, TSchema>;\n close(): Promise<void>;\n}\n\n/**\n * Resolve a plugin id to its data-schema name on a shared database.\n *\n * Schema names are unconditional `plugin_<slug>` for every workspace on the\n * shared API database. The `pluginId === \"api\" ? undefined` special case found\n * in older plugin copies is dead code (a plugin is never `api`); api's own\n * tables already live in `plugin_api`.\n */\nexport function pluginSchemaName(pluginId: string): string {\n return `plugin_${pluginMigrationSlug(pluginId)}`;\n}\n\ninterface PoolLike {\n on(event: \"error\", listener: (err: Error) => void): unknown;\n connect(): Promise<{\n query: (sql: string, params?: unknown[]) => Promise<unknown>;\n release: () => void;\n }>;\n removeAllListeners(event?: string | symbol): unknown;\n end(): Promise<void>;\n}\n\n/**\n * Connection-level guardrails. `ALTER DATABASE ... SET` only reaches sessions\n * opened after it runs — pooled connections that already exist never inherit\n * it, so any bound must ride on every connection's startup options. Defaults:\n * a lock wait fails after 10s (unbounded waits wedge the whole pool silently),\n * a session idle inside a transaction is reaped after 30s, and statement\n * timeout stays off unless DB_STATEMENT_TIMEOUT_MS is set (long migrations and\n * analytical queries must not break).\n */\n/**\n * Parses a millisecond env value for a Postgres `-c` timeout setting.\n * A explicit `0` disables the timeout (Postgres semantics); garbage throws —\n * a typo must fail the boot loudly, never silently become the default.\n */\nfunction timeoutMsEnv(name: string, fallbackMs: number): number {\n const raw = process.env[name];\n if (raw === undefined || raw.trim() === \"\") return fallbackMs;\n const parsed = Number(raw);\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new Error(\n `[db] Invalid ${name}=\"${raw}\" — must be a non-negative number of milliseconds (0 disables the timeout).`,\n );\n }\n return parsed;\n}\n\nfunction connectionOptions(namespace: string | undefined): string {\n const settings = [\n ...(namespace ? [`-c search_path=\"${namespace}\",public`] : []),\n `-c lock_timeout=${timeoutMsEnv(\"DB_LOCK_TIMEOUT_MS\", 10_000)}`,\n `-c idle_in_transaction_session_timeout=${timeoutMsEnv(\"DB_IDLE_TX_TIMEOUT_MS\", 30_000)}`,\n ...(process.env.DB_STATEMENT_TIMEOUT_MS\n ? [`-c statement_timeout=${timeoutMsEnv(\"DB_STATEMENT_TIMEOUT_MS\", 0)}`]\n : []),\n ];\n return settings.join(\" \");\n}\n\n// host.docker.internal is docker-local development networking — the test\n// databases a container reaches through the host gateway, which do not\n// terminate TLS. `*.railway.internal` is Railway private-network traffic\n// (VPC-scoped, no public egress) whose Postgres presents a self-signed\n// certificate chain no client CA bundle can verify.\nconst isLocalDbUrl = (url: string): boolean =>\n url.includes(\"localhost\") ||\n url.includes(\"127.0.0.1\") ||\n url.includes(\"host.docker.internal\") ||\n url.includes(\".railway.internal\");\n\n/**\n * TLS behavior for a non-local Postgres URL, following libpq `sslmode`\n * semantics from the connection string itself:\n *\n * - `disable` → no TLS\n * - `prefer`/`allow`/`require` → TLS, but the server's certificate is NOT\n * verified (libpq: `require` encrypts, it does not trust). Managed\n * providers (Railway, Neon, Supabase poolers…) hand out `sslmode=require`\n * URLs backed by certificates no client CA bundle can verify.\n * - `verify-ca`/`verify-full` → TLS + certificate verification.\n * - absent → verification ON (secure default for bare URLs).\n *\n * `DB_SSL_REJECT_UNAUTHORIZED` stays as an explicit operator override: it\n * wins over whatever the URL says (`\"false\"` disables verification, `\"true\"`\n * forces it).\n */\nexport function resolvePoolSsl(url: string): false | { rejectUnauthorized: boolean } {\n if (isLocalDbUrl(url)) return false;\n\n let mode: string | null = null;\n try {\n mode = new URL(url).searchParams.get(\"sslmode\");\n } catch {\n mode = null;\n }\n\n if (process.env.DB_SSL_REJECT_UNAUTHORIZED === \"false\") return { rejectUnauthorized: false };\n if (process.env.DB_SSL_REJECT_UNAUTHORIZED === \"true\") return { rejectUnauthorized: true };\n\n switch (mode) {\n case \"disable\":\n return false;\n case \"verify-ca\":\n case \"verify-full\":\n return { rejectUnauthorized: true };\n case \"prefer\":\n case \"allow\":\n case \"require\":\n return { rejectUnauthorized: false };\n default:\n return { rejectUnauthorized: true };\n }\n}\n\nfunction buildPoolConfig(url: string, namespace: string | undefined) {\n return {\n connectionString: url,\n ssl: resolvePoolSsl(url),\n max: Number(process.env.DB_POOL_MAX) || 10,\n connectionTimeoutMillis: Number(process.env.DB_CONNECTION_TIMEOUT_MS) || 30_000,\n idleTimeoutMillis: Number(process.env.DB_IDLE_TIMEOUT_MS) || 30_000,\n options: connectionOptions(namespace),\n };\n}\n\nasync function ensureNamespaceExists(pool: PoolLike, namespace: string): Promise<void> {\n const client = await pool.connect();\n try {\n await client.query(\"BEGIN\");\n try {\n // Same journal-scoped advisory lock the migration runner holds, so this\n // CREATE SCHEMA cannot race a concurrent migration run (the runner also\n // creates the schema inside its locked transaction). Xact-scoped: the\n // lock releases at COMMIT/ROLLBACK or on connection death.\n await client.query(\"SELECT pg_advisory_xact_lock(hashtextextended($1, 0))\", [\n \"drizzle.__drizzle_migrations\",\n ]);\n await client.query(`CREATE SCHEMA IF NOT EXISTS \"${namespace}\"`);\n await client.query(\"COMMIT\");\n } catch (error) {\n await client.query(\"ROLLBACK\");\n throw error;\n }\n } finally {\n client.release();\n }\n}\n\nfunction createCloseHandler(pool: PoolLike): () => Promise<void> {\n let closed = false;\n return async () => {\n if (closed) return;\n closed = true;\n pool.removeAllListeners(\"error\");\n pool.removeAllListeners(\"connect\");\n await pool.end();\n };\n}\n\n/**\n * Create a drizzle database driver for a plugin, choosing the engine by URL\n * scheme: `pglite:` / `:memory:` → embedded PGlite, anything else → postgres\n * (`pg.Pool`).\n *\n * Drivers stay externalized (never statically imported, never in the Module\n * Federation singleton share set) — they are loaded here via dynamic `import()`\n * only, and `drizzle-orm` appears as a runtime import for the `drizzle` entry\n * points. The `namespace` option expresses every topology the platform needs:\n * `plugin_<slug>` on a shared database, undefined for public-schema (api) or\n * dedicated-database (auth) workloads.\n */\nexport async function createDatabaseDriver<TSchema extends Record<string, unknown>>(\n url: string,\n schema: TSchema,\n namespace?: string,\n): Promise<DatabaseDriver<TSchema>> {\n if (url.startsWith(\"pglite:\") || url === \":memory:\") {\n const { drizzle } = await import(\"drizzle-orm/pglite\");\n const { PGlite } = await import(\"@electric-sql/pglite\");\n const rawDir = url === \":memory:\" ? \":memory:\" : url.replace(\"pglite:\", \"\");\n const dataDir = rawDir.endsWith(\"/:memory:\") || rawDir === \":memory:\" ? \"memory://\" : rawDir;\n if (dataDir !== \"memory://\") {\n mkdirSync(dirname(dataDir), { recursive: true });\n }\n const pglite = new PGlite(dataDir);\n if (namespace) {\n await pglite.exec(`CREATE SCHEMA IF NOT EXISTS \"${namespace}\"`);\n await pglite.exec(`SET search_path TO \"${namespace}\", public`);\n }\n const db = drizzle(pglite, { schema: schema as never }) as unknown as PgDatabase<\n PgQueryResultHKT,\n TSchema\n >;\n return {\n db,\n close: async () => {\n await pglite.close();\n },\n };\n }\n\n const { Pool } = await import(\"pg\");\n const { drizzle } = await import(\"drizzle-orm/node-postgres\");\n const pool = new Pool(buildPoolConfig(url, namespace) as never) as unknown as PoolLike;\n pool.on(\"error\", (err: Error) => {\n console.error(\"[Database] Unexpected pool error:\", err.message);\n });\n\n if (namespace) {\n await ensureNamespaceExists(pool, namespace);\n }\n\n const db = drizzle(pool as never, { schema: schema as never }) as unknown as PgDatabase<\n PgQueryResultHKT,\n TSchema\n >;\n\n return {\n db,\n close: createCloseHandler(pool),\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"driver.cjs","names":["pluginMigrationSlug","dirname"],"sources":["../../src/db/driver.ts"],"sourcesContent":["import { mkdirSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport type { PgDatabase, PgQueryResultHKT } from \"drizzle-orm/pg-core\";\nimport { pluginMigrationSlug } from \"./core\";\n\nexport interface DatabaseDriver<TSchema extends Record<string, unknown>> {\n readonly db: PgDatabase<PgQueryResultHKT, TSchema>;\n close(): Promise<void>;\n}\n\n/**\n * Resolve a plugin id to its data-schema name on a shared database.\n *\n * Schema names are unconditional `plugin_<slug>` for every workspace on the\n * shared API database. The `pluginId === \"api\" ? undefined` special case found\n * in older plugin copies is dead code (a plugin is never `api`); api's own\n * tables already live in `plugin_api`.\n */\nexport function pluginSchemaName(pluginId: string): string {\n return `plugin_${pluginMigrationSlug(pluginId)}`;\n}\n\ninterface PoolLike {\n on(event: \"error\", listener: (err: Error) => void): unknown;\n connect(): Promise<{\n query: (sql: string, params?: unknown[]) => Promise<unknown>;\n release: () => void;\n }>;\n removeAllListeners(event?: string | symbol): unknown;\n end(): Promise<void>;\n}\n\n/**\n * Connection-level guardrails. `ALTER DATABASE ... SET` only reaches sessions\n * opened after it runs — pooled connections that already exist never inherit\n * it, so any bound must ride on every connection's startup options. Defaults:\n * a lock wait fails after 10s (unbounded waits wedge the whole pool silently),\n * a session idle inside a transaction is reaped after 30s, and statement\n * timeout stays off unless DB_STATEMENT_TIMEOUT_MS is set (long migrations and\n * analytical queries must not break).\n */\n/**\n * Parses a millisecond env value for a Postgres `-c` timeout setting.\n * A explicit `0` disables the timeout (Postgres semantics); garbage throws —\n * a typo must fail the boot loudly, never silently become the default.\n */\nfunction timeoutMsEnv(name: string, fallbackMs: number): number {\n const raw = process.env[name];\n if (raw === undefined || raw.trim() === \"\") return fallbackMs;\n const parsed = Number(raw);\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new Error(\n `[db] Invalid ${name}=\"${raw}\" — must be a non-negative number of milliseconds (0 disables the timeout).`,\n );\n }\n return parsed;\n}\n\nfunction connectionOptions(namespace: string | undefined): string {\n const settings = [\n ...(namespace ? [`-c search_path=\"${namespace}\",public`] : []),\n `-c lock_timeout=${timeoutMsEnv(\"DB_LOCK_TIMEOUT_MS\", 10_000)}`,\n `-c idle_in_transaction_session_timeout=${timeoutMsEnv(\"DB_IDLE_TX_TIMEOUT_MS\", 30_000)}`,\n ...(process.env.DB_STATEMENT_TIMEOUT_MS\n ? [`-c statement_timeout=${timeoutMsEnv(\"DB_STATEMENT_TIMEOUT_MS\", 0)}`]\n : []),\n ];\n return settings.join(\" \");\n}\n\n// host.docker.internal is docker-local development networking — the test\n// databases a container reaches through the host gateway, which do not\n// terminate TLS. `*.railway.internal` is Railway private-network traffic\n// (VPC-scoped, no public egress) whose Postgres presents a self-signed\n// certificate chain no client CA bundle can verify.\nconst isLocalDbUrl = (url: string): boolean =>\n url.includes(\"localhost\") ||\n url.includes(\"127.0.0.1\") ||\n url.includes(\"host.docker.internal\") ||\n url.includes(\".railway.internal\");\n\n/**\n * Railway's public proxy (`*.rlwy.net`) fronts the same Postgres as the\n * internal hostname and presents the same self-signed certificate chain no\n * client CA bundle can verify — but unlike `*.railway.internal` it crosses\n * the public internet, so TLS must stay on (encrypted, unverified) rather\n * than being dropped entirely.\n */\nexport function isRailwayPublicProxyUrl(url: string): boolean {\n try {\n return new URL(url).hostname.toLowerCase().endsWith(\".rlwy.net\");\n } catch {\n return false;\n }\n}\n\n/**\n * TLS behavior for a non-local Postgres URL, following libpq `sslmode`\n * semantics from the connection string itself:\n *\n * - `disable` → no TLS\n * - `prefer`/`allow`/`require` → TLS, but the server's certificate is NOT\n * verified (libpq: `require` encrypts, it does not trust). Managed\n * providers (Railway, Neon, Supabase poolers…) hand out `sslmode=require`\n * URLs backed by certificates no client CA bundle can verify.\n * - `verify-ca`/`verify-full` → TLS + certificate verification.\n * - absent → verification ON (secure default for bare URLs), EXCEPT Railway's\n * public proxy (`*.rlwy.net`), which fronts the same self-signed Postgres\n * as `*.railway.internal` — those URLs default to encrypted-unverified\n * TLS. `DB_SSL_REJECT_UNAUTHORIZED` still overrides.\n *\n * `DB_SSL_REJECT_UNAUTHORIZED` stays as an explicit operator override: it\n * wins over whatever the URL says (`\"false\"` disables verification, `\"true\"`\n * forces it).\n */\nexport function resolvePoolSsl(url: string): false | { rejectUnauthorized: boolean } {\n if (isLocalDbUrl(url)) return false;\n\n let mode: string | null = null;\n try {\n mode = new URL(url).searchParams.get(\"sslmode\");\n } catch {\n mode = null;\n }\n\n if (process.env.DB_SSL_REJECT_UNAUTHORIZED === \"false\") return { rejectUnauthorized: false };\n if (process.env.DB_SSL_REJECT_UNAUTHORIZED === \"true\") return { rejectUnauthorized: true };\n\n switch (mode) {\n case \"disable\":\n return false;\n case \"verify-ca\":\n case \"verify-full\":\n return { rejectUnauthorized: true };\n case \"prefer\":\n case \"allow\":\n case \"require\":\n return { rejectUnauthorized: false };\n default:\n if (isRailwayPublicProxyUrl(url)) return { rejectUnauthorized: false };\n return { rejectUnauthorized: true };\n }\n}\n\nfunction buildPoolConfig(url: string, namespace: string | undefined) {\n return {\n connectionString: url,\n ssl: resolvePoolSsl(url),\n max: Number(process.env.DB_POOL_MAX) || 10,\n connectionTimeoutMillis: Number(process.env.DB_CONNECTION_TIMEOUT_MS) || 30_000,\n idleTimeoutMillis: Number(process.env.DB_IDLE_TIMEOUT_MS) || 30_000,\n options: connectionOptions(namespace),\n };\n}\n\nasync function ensureNamespaceExists(pool: PoolLike, namespace: string): Promise<void> {\n const client = await pool.connect();\n try {\n await client.query(\"BEGIN\");\n try {\n // Same journal-scoped advisory lock the migration runner holds, so this\n // CREATE SCHEMA cannot race a concurrent migration run (the runner also\n // creates the schema inside its locked transaction). Xact-scoped: the\n // lock releases at COMMIT/ROLLBACK or on connection death.\n await client.query(\"SELECT pg_advisory_xact_lock(hashtextextended($1, 0))\", [\n \"drizzle.__drizzle_migrations\",\n ]);\n await client.query(`CREATE SCHEMA IF NOT EXISTS \"${namespace}\"`);\n await client.query(\"COMMIT\");\n } catch (error) {\n await client.query(\"ROLLBACK\");\n throw error;\n }\n } finally {\n client.release();\n }\n}\n\nfunction createCloseHandler(pool: PoolLike): () => Promise<void> {\n let closed = false;\n return async () => {\n if (closed) return;\n closed = true;\n pool.removeAllListeners(\"error\");\n pool.removeAllListeners(\"connect\");\n await pool.end();\n };\n}\n\n/**\n * Create a drizzle database driver for a plugin, choosing the engine by URL\n * scheme: `pglite:` / `:memory:` → embedded PGlite, anything else → postgres\n * (`pg.Pool`).\n *\n * Drivers stay externalized (never statically imported, never in the Module\n * Federation singleton share set) — they are loaded here via dynamic `import()`\n * only, and `drizzle-orm` appears as a runtime import for the `drizzle` entry\n * points. The `namespace` option expresses every topology the platform needs:\n * `plugin_<slug>` on a shared database, undefined for public-schema (api) or\n * dedicated-database (auth) workloads.\n */\nexport async function createDatabaseDriver<TSchema extends Record<string, unknown>>(\n url: string,\n schema: TSchema,\n namespace?: string,\n): Promise<DatabaseDriver<TSchema>> {\n if (url.startsWith(\"pglite:\") || url === \":memory:\") {\n const { drizzle } = await import(\"drizzle-orm/pglite\");\n const { PGlite } = await import(\"@electric-sql/pglite\");\n const rawDir = url === \":memory:\" ? \":memory:\" : url.replace(\"pglite:\", \"\");\n const dataDir = rawDir.endsWith(\"/:memory:\") || rawDir === \":memory:\" ? \"memory://\" : rawDir;\n if (dataDir !== \"memory://\") {\n mkdirSync(dirname(dataDir), { recursive: true });\n }\n const pglite = new PGlite(dataDir);\n if (namespace) {\n await pglite.exec(`CREATE SCHEMA IF NOT EXISTS \"${namespace}\"`);\n await pglite.exec(`SET search_path TO \"${namespace}\", public`);\n }\n const db = drizzle(pglite, { schema: schema as never }) as unknown as PgDatabase<\n PgQueryResultHKT,\n TSchema\n >;\n return {\n db,\n close: async () => {\n await pglite.close();\n },\n };\n }\n\n const { Pool } = await import(\"pg\");\n const { drizzle } = await import(\"drizzle-orm/node-postgres\");\n const pool = new Pool(buildPoolConfig(url, namespace) as never) as unknown as PoolLike;\n pool.on(\"error\", (err: Error) => {\n console.error(\"[Database] Unexpected pool error:\", err.message);\n });\n\n if (namespace) {\n await ensureNamespaceExists(pool, namespace);\n }\n\n const db = drizzle(pool as never, { schema: schema as never }) as unknown as PgDatabase<\n PgQueryResultHKT,\n TSchema\n >;\n\n return {\n db,\n close: createCloseHandler(pool),\n };\n}\n"],"mappings":"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"}
|
package/dist/db/driver.d.cts
CHANGED
|
@@ -13,6 +13,14 @@ interface DatabaseDriver<TSchema extends Record<string, unknown>> {
|
|
|
13
13
|
* tables already live in `plugin_api`.
|
|
14
14
|
*/
|
|
15
15
|
declare function pluginSchemaName(pluginId: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Railway's public proxy (`*.rlwy.net`) fronts the same Postgres as the
|
|
18
|
+
* internal hostname and presents the same self-signed certificate chain no
|
|
19
|
+
* client CA bundle can verify — but unlike `*.railway.internal` it crosses
|
|
20
|
+
* the public internet, so TLS must stay on (encrypted, unverified) rather
|
|
21
|
+
* than being dropped entirely.
|
|
22
|
+
*/
|
|
23
|
+
declare function isRailwayPublicProxyUrl(url: string): boolean;
|
|
16
24
|
/**
|
|
17
25
|
* TLS behavior for a non-local Postgres URL, following libpq `sslmode`
|
|
18
26
|
* semantics from the connection string itself:
|
|
@@ -23,7 +31,10 @@ declare function pluginSchemaName(pluginId: string): string;
|
|
|
23
31
|
* providers (Railway, Neon, Supabase poolers…) hand out `sslmode=require`
|
|
24
32
|
* URLs backed by certificates no client CA bundle can verify.
|
|
25
33
|
* - `verify-ca`/`verify-full` → TLS + certificate verification.
|
|
26
|
-
* - absent → verification ON (secure default for bare URLs)
|
|
34
|
+
* - absent → verification ON (secure default for bare URLs), EXCEPT Railway's
|
|
35
|
+
* public proxy (`*.rlwy.net`), which fronts the same self-signed Postgres
|
|
36
|
+
* as `*.railway.internal` — those URLs default to encrypted-unverified
|
|
37
|
+
* TLS. `DB_SSL_REJECT_UNAUTHORIZED` still overrides.
|
|
27
38
|
*
|
|
28
39
|
* `DB_SSL_REJECT_UNAUTHORIZED` stays as an explicit operator override: it
|
|
29
40
|
* wins over whatever the URL says (`"false"` disables verification, `"true"`
|
|
@@ -46,5 +57,5 @@ declare function resolvePoolSsl(url: string): false | {
|
|
|
46
57
|
*/
|
|
47
58
|
declare function createDatabaseDriver<TSchema extends Record<string, unknown>>(url: string, schema: TSchema, namespace?: string): Promise<DatabaseDriver<TSchema>>;
|
|
48
59
|
//#endregion
|
|
49
|
-
export { DatabaseDriver, createDatabaseDriver, pluginSchemaName, resolvePoolSsl };
|
|
60
|
+
export { DatabaseDriver, createDatabaseDriver, isRailwayPublicProxyUrl, pluginSchemaName, resolvePoolSsl };
|
|
50
61
|
//# sourceMappingURL=driver.d.cts.map
|
package/dist/db/driver.d.mts
CHANGED
|
@@ -13,6 +13,14 @@ interface DatabaseDriver<TSchema extends Record<string, unknown>> {
|
|
|
13
13
|
* tables already live in `plugin_api`.
|
|
14
14
|
*/
|
|
15
15
|
declare function pluginSchemaName(pluginId: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Railway's public proxy (`*.rlwy.net`) fronts the same Postgres as the
|
|
18
|
+
* internal hostname and presents the same self-signed certificate chain no
|
|
19
|
+
* client CA bundle can verify — but unlike `*.railway.internal` it crosses
|
|
20
|
+
* the public internet, so TLS must stay on (encrypted, unverified) rather
|
|
21
|
+
* than being dropped entirely.
|
|
22
|
+
*/
|
|
23
|
+
declare function isRailwayPublicProxyUrl(url: string): boolean;
|
|
16
24
|
/**
|
|
17
25
|
* TLS behavior for a non-local Postgres URL, following libpq `sslmode`
|
|
18
26
|
* semantics from the connection string itself:
|
|
@@ -23,7 +31,10 @@ declare function pluginSchemaName(pluginId: string): string;
|
|
|
23
31
|
* providers (Railway, Neon, Supabase poolers…) hand out `sslmode=require`
|
|
24
32
|
* URLs backed by certificates no client CA bundle can verify.
|
|
25
33
|
* - `verify-ca`/`verify-full` → TLS + certificate verification.
|
|
26
|
-
* - absent → verification ON (secure default for bare URLs)
|
|
34
|
+
* - absent → verification ON (secure default for bare URLs), EXCEPT Railway's
|
|
35
|
+
* public proxy (`*.rlwy.net`), which fronts the same self-signed Postgres
|
|
36
|
+
* as `*.railway.internal` — those URLs default to encrypted-unverified
|
|
37
|
+
* TLS. `DB_SSL_REJECT_UNAUTHORIZED` still overrides.
|
|
27
38
|
*
|
|
28
39
|
* `DB_SSL_REJECT_UNAUTHORIZED` stays as an explicit operator override: it
|
|
29
40
|
* wins over whatever the URL says (`"false"` disables verification, `"true"`
|
|
@@ -46,5 +57,5 @@ declare function resolvePoolSsl(url: string): false | {
|
|
|
46
57
|
*/
|
|
47
58
|
declare function createDatabaseDriver<TSchema extends Record<string, unknown>>(url: string, schema: TSchema, namespace?: string): Promise<DatabaseDriver<TSchema>>;
|
|
48
59
|
//#endregion
|
|
49
|
-
export { DatabaseDriver, createDatabaseDriver, pluginSchemaName, resolvePoolSsl };
|
|
60
|
+
export { DatabaseDriver, createDatabaseDriver, isRailwayPublicProxyUrl, pluginSchemaName, resolvePoolSsl };
|
|
50
61
|
//# sourceMappingURL=driver.d.mts.map
|
package/dist/db/driver.mjs
CHANGED
|
@@ -45,6 +45,20 @@ function connectionOptions(namespace) {
|
|
|
45
45
|
}
|
|
46
46
|
const isLocalDbUrl = (url) => url.includes("localhost") || url.includes("127.0.0.1") || url.includes("host.docker.internal") || url.includes(".railway.internal");
|
|
47
47
|
/**
|
|
48
|
+
* Railway's public proxy (`*.rlwy.net`) fronts the same Postgres as the
|
|
49
|
+
* internal hostname and presents the same self-signed certificate chain no
|
|
50
|
+
* client CA bundle can verify — but unlike `*.railway.internal` it crosses
|
|
51
|
+
* the public internet, so TLS must stay on (encrypted, unverified) rather
|
|
52
|
+
* than being dropped entirely.
|
|
53
|
+
*/
|
|
54
|
+
function isRailwayPublicProxyUrl(url) {
|
|
55
|
+
try {
|
|
56
|
+
return new URL(url).hostname.toLowerCase().endsWith(".rlwy.net");
|
|
57
|
+
} catch {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
48
62
|
* TLS behavior for a non-local Postgres URL, following libpq `sslmode`
|
|
49
63
|
* semantics from the connection string itself:
|
|
50
64
|
*
|
|
@@ -54,7 +68,10 @@ const isLocalDbUrl = (url) => url.includes("localhost") || url.includes("127.0.0
|
|
|
54
68
|
* providers (Railway, Neon, Supabase poolers…) hand out `sslmode=require`
|
|
55
69
|
* URLs backed by certificates no client CA bundle can verify.
|
|
56
70
|
* - `verify-ca`/`verify-full` → TLS + certificate verification.
|
|
57
|
-
* - absent → verification ON (secure default for bare URLs)
|
|
71
|
+
* - absent → verification ON (secure default for bare URLs), EXCEPT Railway's
|
|
72
|
+
* public proxy (`*.rlwy.net`), which fronts the same self-signed Postgres
|
|
73
|
+
* as `*.railway.internal` — those URLs default to encrypted-unverified
|
|
74
|
+
* TLS. `DB_SSL_REJECT_UNAUTHORIZED` still overrides.
|
|
58
75
|
*
|
|
59
76
|
* `DB_SSL_REJECT_UNAUTHORIZED` stays as an explicit operator override: it
|
|
60
77
|
* wins over whatever the URL says (`"false"` disables verification, `"true"`
|
|
@@ -77,7 +94,9 @@ function resolvePoolSsl(url) {
|
|
|
77
94
|
case "prefer":
|
|
78
95
|
case "allow":
|
|
79
96
|
case "require": return { rejectUnauthorized: false };
|
|
80
|
-
default:
|
|
97
|
+
default:
|
|
98
|
+
if (isRailwayPublicProxyUrl(url)) return { rejectUnauthorized: false };
|
|
99
|
+
return { rejectUnauthorized: true };
|
|
81
100
|
}
|
|
82
101
|
}
|
|
83
102
|
function buildPoolConfig(url, namespace) {
|
|
@@ -161,5 +180,5 @@ async function createDatabaseDriver(url, schema, namespace) {
|
|
|
161
180
|
}
|
|
162
181
|
|
|
163
182
|
//#endregion
|
|
164
|
-
export { createDatabaseDriver, pluginSchemaName, resolvePoolSsl };
|
|
183
|
+
export { createDatabaseDriver, isRailwayPublicProxyUrl, pluginSchemaName, resolvePoolSsl };
|
|
165
184
|
//# sourceMappingURL=driver.mjs.map
|
package/dist/db/driver.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.mjs","names":[],"sources":["../../src/db/driver.ts"],"sourcesContent":["import { mkdirSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport type { PgDatabase, PgQueryResultHKT } from \"drizzle-orm/pg-core\";\nimport { pluginMigrationSlug } from \"./core\";\n\nexport interface DatabaseDriver<TSchema extends Record<string, unknown>> {\n readonly db: PgDatabase<PgQueryResultHKT, TSchema>;\n close(): Promise<void>;\n}\n\n/**\n * Resolve a plugin id to its data-schema name on a shared database.\n *\n * Schema names are unconditional `plugin_<slug>` for every workspace on the\n * shared API database. The `pluginId === \"api\" ? undefined` special case found\n * in older plugin copies is dead code (a plugin is never `api`); api's own\n * tables already live in `plugin_api`.\n */\nexport function pluginSchemaName(pluginId: string): string {\n return `plugin_${pluginMigrationSlug(pluginId)}`;\n}\n\ninterface PoolLike {\n on(event: \"error\", listener: (err: Error) => void): unknown;\n connect(): Promise<{\n query: (sql: string, params?: unknown[]) => Promise<unknown>;\n release: () => void;\n }>;\n removeAllListeners(event?: string | symbol): unknown;\n end(): Promise<void>;\n}\n\n/**\n * Connection-level guardrails. `ALTER DATABASE ... SET` only reaches sessions\n * opened after it runs — pooled connections that already exist never inherit\n * it, so any bound must ride on every connection's startup options. Defaults:\n * a lock wait fails after 10s (unbounded waits wedge the whole pool silently),\n * a session idle inside a transaction is reaped after 30s, and statement\n * timeout stays off unless DB_STATEMENT_TIMEOUT_MS is set (long migrations and\n * analytical queries must not break).\n */\n/**\n * Parses a millisecond env value for a Postgres `-c` timeout setting.\n * A explicit `0` disables the timeout (Postgres semantics); garbage throws —\n * a typo must fail the boot loudly, never silently become the default.\n */\nfunction timeoutMsEnv(name: string, fallbackMs: number): number {\n const raw = process.env[name];\n if (raw === undefined || raw.trim() === \"\") return fallbackMs;\n const parsed = Number(raw);\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new Error(\n `[db] Invalid ${name}=\"${raw}\" — must be a non-negative number of milliseconds (0 disables the timeout).`,\n );\n }\n return parsed;\n}\n\nfunction connectionOptions(namespace: string | undefined): string {\n const settings = [\n ...(namespace ? [`-c search_path=\"${namespace}\",public`] : []),\n `-c lock_timeout=${timeoutMsEnv(\"DB_LOCK_TIMEOUT_MS\", 10_000)}`,\n `-c idle_in_transaction_session_timeout=${timeoutMsEnv(\"DB_IDLE_TX_TIMEOUT_MS\", 30_000)}`,\n ...(process.env.DB_STATEMENT_TIMEOUT_MS\n ? [`-c statement_timeout=${timeoutMsEnv(\"DB_STATEMENT_TIMEOUT_MS\", 0)}`]\n : []),\n ];\n return settings.join(\" \");\n}\n\n// host.docker.internal is docker-local development networking — the test\n// databases a container reaches through the host gateway, which do not\n// terminate TLS. `*.railway.internal` is Railway private-network traffic\n// (VPC-scoped, no public egress) whose Postgres presents a self-signed\n// certificate chain no client CA bundle can verify.\nconst isLocalDbUrl = (url: string): boolean =>\n url.includes(\"localhost\") ||\n url.includes(\"127.0.0.1\") ||\n url.includes(\"host.docker.internal\") ||\n url.includes(\".railway.internal\");\n\n/**\n * TLS behavior for a non-local Postgres URL, following libpq `sslmode`\n * semantics from the connection string itself:\n *\n * - `disable` → no TLS\n * - `prefer`/`allow`/`require` → TLS, but the server's certificate is NOT\n * verified (libpq: `require` encrypts, it does not trust). Managed\n * providers (Railway, Neon, Supabase poolers…) hand out `sslmode=require`\n * URLs backed by certificates no client CA bundle can verify.\n * - `verify-ca`/`verify-full` → TLS + certificate verification.\n * - absent → verification ON (secure default for bare URLs).\n *\n * `DB_SSL_REJECT_UNAUTHORIZED` stays as an explicit operator override: it\n * wins over whatever the URL says (`\"false\"` disables verification, `\"true\"`\n * forces it).\n */\nexport function resolvePoolSsl(url: string): false | { rejectUnauthorized: boolean } {\n if (isLocalDbUrl(url)) return false;\n\n let mode: string | null = null;\n try {\n mode = new URL(url).searchParams.get(\"sslmode\");\n } catch {\n mode = null;\n }\n\n if (process.env.DB_SSL_REJECT_UNAUTHORIZED === \"false\") return { rejectUnauthorized: false };\n if (process.env.DB_SSL_REJECT_UNAUTHORIZED === \"true\") return { rejectUnauthorized: true };\n\n switch (mode) {\n case \"disable\":\n return false;\n case \"verify-ca\":\n case \"verify-full\":\n return { rejectUnauthorized: true };\n case \"prefer\":\n case \"allow\":\n case \"require\":\n return { rejectUnauthorized: false };\n default:\n return { rejectUnauthorized: true };\n }\n}\n\nfunction buildPoolConfig(url: string, namespace: string | undefined) {\n return {\n connectionString: url,\n ssl: resolvePoolSsl(url),\n max: Number(process.env.DB_POOL_MAX) || 10,\n connectionTimeoutMillis: Number(process.env.DB_CONNECTION_TIMEOUT_MS) || 30_000,\n idleTimeoutMillis: Number(process.env.DB_IDLE_TIMEOUT_MS) || 30_000,\n options: connectionOptions(namespace),\n };\n}\n\nasync function ensureNamespaceExists(pool: PoolLike, namespace: string): Promise<void> {\n const client = await pool.connect();\n try {\n await client.query(\"BEGIN\");\n try {\n // Same journal-scoped advisory lock the migration runner holds, so this\n // CREATE SCHEMA cannot race a concurrent migration run (the runner also\n // creates the schema inside its locked transaction). Xact-scoped: the\n // lock releases at COMMIT/ROLLBACK or on connection death.\n await client.query(\"SELECT pg_advisory_xact_lock(hashtextextended($1, 0))\", [\n \"drizzle.__drizzle_migrations\",\n ]);\n await client.query(`CREATE SCHEMA IF NOT EXISTS \"${namespace}\"`);\n await client.query(\"COMMIT\");\n } catch (error) {\n await client.query(\"ROLLBACK\");\n throw error;\n }\n } finally {\n client.release();\n }\n}\n\nfunction createCloseHandler(pool: PoolLike): () => Promise<void> {\n let closed = false;\n return async () => {\n if (closed) return;\n closed = true;\n pool.removeAllListeners(\"error\");\n pool.removeAllListeners(\"connect\");\n await pool.end();\n };\n}\n\n/**\n * Create a drizzle database driver for a plugin, choosing the engine by URL\n * scheme: `pglite:` / `:memory:` → embedded PGlite, anything else → postgres\n * (`pg.Pool`).\n *\n * Drivers stay externalized (never statically imported, never in the Module\n * Federation singleton share set) — they are loaded here via dynamic `import()`\n * only, and `drizzle-orm` appears as a runtime import for the `drizzle` entry\n * points. The `namespace` option expresses every topology the platform needs:\n * `plugin_<slug>` on a shared database, undefined for public-schema (api) or\n * dedicated-database (auth) workloads.\n */\nexport async function createDatabaseDriver<TSchema extends Record<string, unknown>>(\n url: string,\n schema: TSchema,\n namespace?: string,\n): Promise<DatabaseDriver<TSchema>> {\n if (url.startsWith(\"pglite:\") || url === \":memory:\") {\n const { drizzle } = await import(\"drizzle-orm/pglite\");\n const { PGlite } = await import(\"@electric-sql/pglite\");\n const rawDir = url === \":memory:\" ? \":memory:\" : url.replace(\"pglite:\", \"\");\n const dataDir = rawDir.endsWith(\"/:memory:\") || rawDir === \":memory:\" ? \"memory://\" : rawDir;\n if (dataDir !== \"memory://\") {\n mkdirSync(dirname(dataDir), { recursive: true });\n }\n const pglite = new PGlite(dataDir);\n if (namespace) {\n await pglite.exec(`CREATE SCHEMA IF NOT EXISTS \"${namespace}\"`);\n await pglite.exec(`SET search_path TO \"${namespace}\", public`);\n }\n const db = drizzle(pglite, { schema: schema as never }) as unknown as PgDatabase<\n PgQueryResultHKT,\n TSchema\n >;\n return {\n db,\n close: async () => {\n await pglite.close();\n },\n };\n }\n\n const { Pool } = await import(\"pg\");\n const { drizzle } = await import(\"drizzle-orm/node-postgres\");\n const pool = new Pool(buildPoolConfig(url, namespace) as never) as unknown as PoolLike;\n pool.on(\"error\", (err: Error) => {\n console.error(\"[Database] Unexpected pool error:\", err.message);\n });\n\n if (namespace) {\n await ensureNamespaceExists(pool, namespace);\n }\n\n const db = drizzle(pool as never, { schema: schema as never }) as unknown as PgDatabase<\n PgQueryResultHKT,\n TSchema\n >;\n\n return {\n db,\n close: createCloseHandler(pool),\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAkBA,SAAgB,iBAAiB,UAA0B;CACzD,OAAO,UAAU,oBAAoB,QAAQ;AAC/C;;;;;;;;;;;;;;;AA0BA,SAAS,aAAa,MAAc,YAA4B;CAC9D,MAAM,MAAM,QAAQ,IAAI;CACxB,IAAI,QAAQ,UAAa,IAAI,KAAK,MAAM,IAAI,OAAO;CACnD,MAAM,SAAS,OAAO,GAAG;CACzB,IAAI,CAAC,OAAO,SAAS,MAAM,KAAK,SAAS,GACvC,MAAM,IAAI,MACR,gBAAgB,KAAK,IAAI,IAAI,4EAC/B;CAEF,OAAO;AACT;AAEA,SAAS,kBAAkB,WAAuC;CAShE,OAAO;EAPL,GAAI,YAAY,CAAC,mBAAmB,UAAU,SAAS,IAAI,CAAC;EAC5D,mBAAmB,aAAa,sBAAsB,GAAM;EAC5D,0CAA0C,aAAa,yBAAyB,GAAM;EACtF,GAAI,QAAQ,IAAI,0BACZ,CAAC,wBAAwB,aAAa,2BAA2B,CAAC,GAAG,IACrE,CAAC;CAEO,CAAC,CAAC,KAAK,GAAG;AAC1B;AAOA,MAAM,gBAAgB,QACpB,IAAI,SAAS,WAAW,KACxB,IAAI,SAAS,WAAW,KACxB,IAAI,SAAS,sBAAsB,KACnC,IAAI,SAAS,mBAAmB;;;;;;;;;;;;;;;;;AAkBlC,SAAgB,eAAe,KAAsD;CACnF,IAAI,aAAa,GAAG,GAAG,OAAO;CAE9B,IAAI,OAAsB;CAC1B,IAAI;EACF,OAAO,IAAI,IAAI,GAAG,CAAC,CAAC,aAAa,IAAI,SAAS;CAChD,QAAQ;EACN,OAAO;CACT;CAEA,IAAI,QAAQ,IAAI,+BAA+B,SAAS,OAAO,EAAE,oBAAoB,MAAM;CAC3F,IAAI,QAAQ,IAAI,+BAA+B,QAAQ,OAAO,EAAE,oBAAoB,KAAK;CAEzF,QAAQ,MAAR;EACE,KAAK,WACH,OAAO;EACT,KAAK;EACL,KAAK,eACH,OAAO,EAAE,oBAAoB,KAAK;EACpC,KAAK;EACL,KAAK;EACL,KAAK,WACH,OAAO,EAAE,oBAAoB,MAAM;EACrC,SACE,OAAO,EAAE,oBAAoB,KAAK;CACtC;AACF;AAEA,SAAS,gBAAgB,KAAa,WAA+B;CACnE,OAAO;EACL,kBAAkB;EAClB,KAAK,eAAe,GAAG;EACvB,KAAK,OAAO,QAAQ,IAAI,WAAW,KAAK;EACxC,yBAAyB,OAAO,QAAQ,IAAI,wBAAwB,KAAK;EACzE,mBAAmB,OAAO,QAAQ,IAAI,kBAAkB,KAAK;EAC7D,SAAS,kBAAkB,SAAS;CACtC;AACF;AAEA,eAAe,sBAAsB,MAAgB,WAAkC;CACrF,MAAM,SAAS,MAAM,KAAK,QAAQ;CAClC,IAAI;EACF,MAAM,OAAO,MAAM,OAAO;EAC1B,IAAI;GAKF,MAAM,OAAO,MAAM,yDAAyD,CAC1E,8BACF,CAAC;GACD,MAAM,OAAO,MAAM,gCAAgC,UAAU,EAAE;GAC/D,MAAM,OAAO,MAAM,QAAQ;EAC7B,SAAS,OAAO;GACd,MAAM,OAAO,MAAM,UAAU;GAC7B,MAAM;EACR;CACF,UAAU;EACR,OAAO,QAAQ;CACjB;AACF;AAEA,SAAS,mBAAmB,MAAqC;CAC/D,IAAI,SAAS;CACb,OAAO,YAAY;EACjB,IAAI,QAAQ;EACZ,SAAS;EACT,KAAK,mBAAmB,OAAO;EAC/B,KAAK,mBAAmB,SAAS;EACjC,MAAM,KAAK,IAAI;CACjB;AACF;;;;;;;;;;;;;AAcA,eAAsB,qBACpB,KACA,QACA,WACkC;CAClC,IAAI,IAAI,WAAW,SAAS,KAAK,QAAQ,YAAY;EACnD,MAAM,EAAE,YAAY,MAAM,OAAO;EACjC,MAAM,EAAE,WAAW,MAAM,OAAO;EAChC,MAAM,SAAS,QAAQ,aAAa,aAAa,IAAI,QAAQ,WAAW,EAAE;EAC1E,MAAM,UAAU,OAAO,SAAS,WAAW,KAAK,WAAW,aAAa,cAAc;EACtF,IAAI,YAAY,aACd,UAAU,QAAQ,OAAO,GAAG,EAAE,WAAW,KAAK,CAAC;EAEjD,MAAM,SAAS,IAAI,OAAO,OAAO;EACjC,IAAI,WAAW;GACb,MAAM,OAAO,KAAK,gCAAgC,UAAU,EAAE;GAC9D,MAAM,OAAO,KAAK,uBAAuB,UAAU,UAAU;EAC/D;EAKA,OAAO;GACL,IALS,QAAQ,QAAQ,EAAU,OAAgB,CAKlD;GACD,OAAO,YAAY;IACjB,MAAM,OAAO,MAAM;GACrB;EACF;CACF;CAEA,MAAM,EAAE,SAAS,MAAM,OAAO;CAC9B,MAAM,EAAE,YAAY,MAAM,OAAO;CACjC,MAAM,OAAO,IAAI,KAAK,gBAAgB,KAAK,SAAS,CAAU;CAC9D,KAAK,GAAG,UAAU,QAAe;EAC/B,QAAQ,MAAM,qCAAqC,IAAI,OAAO;CAChE,CAAC;CAED,IAAI,WACF,MAAM,sBAAsB,MAAM,SAAS;CAQ7C,OAAO;EACL,IANS,QAAQ,MAAe,EAAU,OAAgB,CAMzD;EACD,OAAO,mBAAmB,IAAI;CAChC;AACF"}
|
|
1
|
+
{"version":3,"file":"driver.mjs","names":[],"sources":["../../src/db/driver.ts"],"sourcesContent":["import { mkdirSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport type { PgDatabase, PgQueryResultHKT } from \"drizzle-orm/pg-core\";\nimport { pluginMigrationSlug } from \"./core\";\n\nexport interface DatabaseDriver<TSchema extends Record<string, unknown>> {\n readonly db: PgDatabase<PgQueryResultHKT, TSchema>;\n close(): Promise<void>;\n}\n\n/**\n * Resolve a plugin id to its data-schema name on a shared database.\n *\n * Schema names are unconditional `plugin_<slug>` for every workspace on the\n * shared API database. The `pluginId === \"api\" ? undefined` special case found\n * in older plugin copies is dead code (a plugin is never `api`); api's own\n * tables already live in `plugin_api`.\n */\nexport function pluginSchemaName(pluginId: string): string {\n return `plugin_${pluginMigrationSlug(pluginId)}`;\n}\n\ninterface PoolLike {\n on(event: \"error\", listener: (err: Error) => void): unknown;\n connect(): Promise<{\n query: (sql: string, params?: unknown[]) => Promise<unknown>;\n release: () => void;\n }>;\n removeAllListeners(event?: string | symbol): unknown;\n end(): Promise<void>;\n}\n\n/**\n * Connection-level guardrails. `ALTER DATABASE ... SET` only reaches sessions\n * opened after it runs — pooled connections that already exist never inherit\n * it, so any bound must ride on every connection's startup options. Defaults:\n * a lock wait fails after 10s (unbounded waits wedge the whole pool silently),\n * a session idle inside a transaction is reaped after 30s, and statement\n * timeout stays off unless DB_STATEMENT_TIMEOUT_MS is set (long migrations and\n * analytical queries must not break).\n */\n/**\n * Parses a millisecond env value for a Postgres `-c` timeout setting.\n * A explicit `0` disables the timeout (Postgres semantics); garbage throws —\n * a typo must fail the boot loudly, never silently become the default.\n */\nfunction timeoutMsEnv(name: string, fallbackMs: number): number {\n const raw = process.env[name];\n if (raw === undefined || raw.trim() === \"\") return fallbackMs;\n const parsed = Number(raw);\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new Error(\n `[db] Invalid ${name}=\"${raw}\" — must be a non-negative number of milliseconds (0 disables the timeout).`,\n );\n }\n return parsed;\n}\n\nfunction connectionOptions(namespace: string | undefined): string {\n const settings = [\n ...(namespace ? [`-c search_path=\"${namespace}\",public`] : []),\n `-c lock_timeout=${timeoutMsEnv(\"DB_LOCK_TIMEOUT_MS\", 10_000)}`,\n `-c idle_in_transaction_session_timeout=${timeoutMsEnv(\"DB_IDLE_TX_TIMEOUT_MS\", 30_000)}`,\n ...(process.env.DB_STATEMENT_TIMEOUT_MS\n ? [`-c statement_timeout=${timeoutMsEnv(\"DB_STATEMENT_TIMEOUT_MS\", 0)}`]\n : []),\n ];\n return settings.join(\" \");\n}\n\n// host.docker.internal is docker-local development networking — the test\n// databases a container reaches through the host gateway, which do not\n// terminate TLS. `*.railway.internal` is Railway private-network traffic\n// (VPC-scoped, no public egress) whose Postgres presents a self-signed\n// certificate chain no client CA bundle can verify.\nconst isLocalDbUrl = (url: string): boolean =>\n url.includes(\"localhost\") ||\n url.includes(\"127.0.0.1\") ||\n url.includes(\"host.docker.internal\") ||\n url.includes(\".railway.internal\");\n\n/**\n * Railway's public proxy (`*.rlwy.net`) fronts the same Postgres as the\n * internal hostname and presents the same self-signed certificate chain no\n * client CA bundle can verify — but unlike `*.railway.internal` it crosses\n * the public internet, so TLS must stay on (encrypted, unverified) rather\n * than being dropped entirely.\n */\nexport function isRailwayPublicProxyUrl(url: string): boolean {\n try {\n return new URL(url).hostname.toLowerCase().endsWith(\".rlwy.net\");\n } catch {\n return false;\n }\n}\n\n/**\n * TLS behavior for a non-local Postgres URL, following libpq `sslmode`\n * semantics from the connection string itself:\n *\n * - `disable` → no TLS\n * - `prefer`/`allow`/`require` → TLS, but the server's certificate is NOT\n * verified (libpq: `require` encrypts, it does not trust). Managed\n * providers (Railway, Neon, Supabase poolers…) hand out `sslmode=require`\n * URLs backed by certificates no client CA bundle can verify.\n * - `verify-ca`/`verify-full` → TLS + certificate verification.\n * - absent → verification ON (secure default for bare URLs), EXCEPT Railway's\n * public proxy (`*.rlwy.net`), which fronts the same self-signed Postgres\n * as `*.railway.internal` — those URLs default to encrypted-unverified\n * TLS. `DB_SSL_REJECT_UNAUTHORIZED` still overrides.\n *\n * `DB_SSL_REJECT_UNAUTHORIZED` stays as an explicit operator override: it\n * wins over whatever the URL says (`\"false\"` disables verification, `\"true\"`\n * forces it).\n */\nexport function resolvePoolSsl(url: string): false | { rejectUnauthorized: boolean } {\n if (isLocalDbUrl(url)) return false;\n\n let mode: string | null = null;\n try {\n mode = new URL(url).searchParams.get(\"sslmode\");\n } catch {\n mode = null;\n }\n\n if (process.env.DB_SSL_REJECT_UNAUTHORIZED === \"false\") return { rejectUnauthorized: false };\n if (process.env.DB_SSL_REJECT_UNAUTHORIZED === \"true\") return { rejectUnauthorized: true };\n\n switch (mode) {\n case \"disable\":\n return false;\n case \"verify-ca\":\n case \"verify-full\":\n return { rejectUnauthorized: true };\n case \"prefer\":\n case \"allow\":\n case \"require\":\n return { rejectUnauthorized: false };\n default:\n if (isRailwayPublicProxyUrl(url)) return { rejectUnauthorized: false };\n return { rejectUnauthorized: true };\n }\n}\n\nfunction buildPoolConfig(url: string, namespace: string | undefined) {\n return {\n connectionString: url,\n ssl: resolvePoolSsl(url),\n max: Number(process.env.DB_POOL_MAX) || 10,\n connectionTimeoutMillis: Number(process.env.DB_CONNECTION_TIMEOUT_MS) || 30_000,\n idleTimeoutMillis: Number(process.env.DB_IDLE_TIMEOUT_MS) || 30_000,\n options: connectionOptions(namespace),\n };\n}\n\nasync function ensureNamespaceExists(pool: PoolLike, namespace: string): Promise<void> {\n const client = await pool.connect();\n try {\n await client.query(\"BEGIN\");\n try {\n // Same journal-scoped advisory lock the migration runner holds, so this\n // CREATE SCHEMA cannot race a concurrent migration run (the runner also\n // creates the schema inside its locked transaction). Xact-scoped: the\n // lock releases at COMMIT/ROLLBACK or on connection death.\n await client.query(\"SELECT pg_advisory_xact_lock(hashtextextended($1, 0))\", [\n \"drizzle.__drizzle_migrations\",\n ]);\n await client.query(`CREATE SCHEMA IF NOT EXISTS \"${namespace}\"`);\n await client.query(\"COMMIT\");\n } catch (error) {\n await client.query(\"ROLLBACK\");\n throw error;\n }\n } finally {\n client.release();\n }\n}\n\nfunction createCloseHandler(pool: PoolLike): () => Promise<void> {\n let closed = false;\n return async () => {\n if (closed) return;\n closed = true;\n pool.removeAllListeners(\"error\");\n pool.removeAllListeners(\"connect\");\n await pool.end();\n };\n}\n\n/**\n * Create a drizzle database driver for a plugin, choosing the engine by URL\n * scheme: `pglite:` / `:memory:` → embedded PGlite, anything else → postgres\n * (`pg.Pool`).\n *\n * Drivers stay externalized (never statically imported, never in the Module\n * Federation singleton share set) — they are loaded here via dynamic `import()`\n * only, and `drizzle-orm` appears as a runtime import for the `drizzle` entry\n * points. The `namespace` option expresses every topology the platform needs:\n * `plugin_<slug>` on a shared database, undefined for public-schema (api) or\n * dedicated-database (auth) workloads.\n */\nexport async function createDatabaseDriver<TSchema extends Record<string, unknown>>(\n url: string,\n schema: TSchema,\n namespace?: string,\n): Promise<DatabaseDriver<TSchema>> {\n if (url.startsWith(\"pglite:\") || url === \":memory:\") {\n const { drizzle } = await import(\"drizzle-orm/pglite\");\n const { PGlite } = await import(\"@electric-sql/pglite\");\n const rawDir = url === \":memory:\" ? \":memory:\" : url.replace(\"pglite:\", \"\");\n const dataDir = rawDir.endsWith(\"/:memory:\") || rawDir === \":memory:\" ? \"memory://\" : rawDir;\n if (dataDir !== \"memory://\") {\n mkdirSync(dirname(dataDir), { recursive: true });\n }\n const pglite = new PGlite(dataDir);\n if (namespace) {\n await pglite.exec(`CREATE SCHEMA IF NOT EXISTS \"${namespace}\"`);\n await pglite.exec(`SET search_path TO \"${namespace}\", public`);\n }\n const db = drizzle(pglite, { schema: schema as never }) as unknown as PgDatabase<\n PgQueryResultHKT,\n TSchema\n >;\n return {\n db,\n close: async () => {\n await pglite.close();\n },\n };\n }\n\n const { Pool } = await import(\"pg\");\n const { drizzle } = await import(\"drizzle-orm/node-postgres\");\n const pool = new Pool(buildPoolConfig(url, namespace) as never) as unknown as PoolLike;\n pool.on(\"error\", (err: Error) => {\n console.error(\"[Database] Unexpected pool error:\", err.message);\n });\n\n if (namespace) {\n await ensureNamespaceExists(pool, namespace);\n }\n\n const db = drizzle(pool as never, { schema: schema as never }) as unknown as PgDatabase<\n PgQueryResultHKT,\n TSchema\n >;\n\n return {\n db,\n close: createCloseHandler(pool),\n };\n}\n"],"mappings":"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"}
|
package/dist/db/index.cjs
CHANGED
|
@@ -23,6 +23,7 @@ exports.getDatabaseUrlSecretName = require_core.getDatabaseUrlSecretName;
|
|
|
23
23
|
exports.getMigrationSlug = require_core.getMigrationSlug;
|
|
24
24
|
exports.getMigrationStorage = require_core.getMigrationStorage;
|
|
25
25
|
exports.isConcurrentDdlUniqueViolation = require_core.isConcurrentDdlUniqueViolation;
|
|
26
|
+
exports.isRailwayPublicProxyUrl = require_driver.isRailwayPublicProxyUrl;
|
|
26
27
|
exports.isRetryableMigrationError = require_core.isRetryableMigrationError;
|
|
27
28
|
exports.isRetryableMigrationExecutionError = require_core.isRetryableMigrationExecutionError;
|
|
28
29
|
exports.loadMigrations = require_run_migrations.loadMigrations;
|
package/dist/db/index.d.cts
CHANGED
|
@@ -2,8 +2,8 @@ import { DUPLICATE_OBJECT_SQLSTATES, MigrationStorage, extractExpectedTables, ge
|
|
|
2
2
|
import { WorkspaceIdentity, findWorkspaceDir, workspaceIdentityFromModuleUrl, workspaceIdentityFromWorkspaceDir } from "./identity.cjs";
|
|
3
3
|
import { bindingEnv, requiresDatabaseConnection, resolveDatabaseUrl } from "./binding.cjs";
|
|
4
4
|
import { DatabaseBinding, DatabaseBindingError, DatabaseBindings, DatabaseBindingsOptions, DatabaseBindingsService, makeDatabaseBindings } from "./bindings.cjs";
|
|
5
|
-
import { DatabaseDriver, createDatabaseDriver, pluginSchemaName, resolvePoolSsl } from "./driver.cjs";
|
|
5
|
+
import { DatabaseDriver, createDatabaseDriver, isRailwayPublicProxyUrl, pluginSchemaName, resolvePoolSsl } from "./driver.cjs";
|
|
6
6
|
import { DrizzleKit, DrizzleKitError, DrizzleKitOptions, DrizzleKitService, makeDrizzleKitLive } from "./drizzle-kit.cjs";
|
|
7
7
|
import { DatabaseError, unwrapDatabaseError } from "./errors.cjs";
|
|
8
8
|
import { DriftReport, LoadMigrationsOptions, LoadedMigrations, Migration, MigrationDatabase, MigrationReport, RunMigrationsOptions, detectDrift, loadMigrations, runMigrations } from "./run-migrations.cjs";
|
|
9
|
-
export { DUPLICATE_OBJECT_SQLSTATES, DatabaseBinding, DatabaseBindingError, DatabaseBindings, DatabaseBindingsOptions, DatabaseBindingsService, DatabaseDriver, DatabaseError, DriftReport, DrizzleKit, DrizzleKitError, DrizzleKitOptions, DrizzleKitService, LoadMigrationsOptions, LoadedMigrations, Migration, MigrationDatabase, MigrationReport, MigrationStorage, RunMigrationsOptions, WorkspaceIdentity, bindingEnv, createDatabaseDriver, detectDrift, extractExpectedTables, findWorkspaceDir, getDatabaseUrlSecretName, getMigrationSlug, getMigrationStorage, isConcurrentDdlUniqueViolation, isRetryableMigrationError, isRetryableMigrationExecutionError, loadMigrations, makeDatabaseBindings, makeDrizzleKitLive, normalizeSlug, pluginMigrationSlug, pluginSchemaName, requiresDatabaseConnection, resolveDatabaseUrl, resolvePoolSsl, runMigrations, suppressPgQueryQueueDeprecation, toSqlArray, unwrapDatabaseError, visitCauses, workspaceIdentityFromModuleUrl, workspaceIdentityFromWorkspaceDir };
|
|
9
|
+
export { DUPLICATE_OBJECT_SQLSTATES, DatabaseBinding, DatabaseBindingError, DatabaseBindings, DatabaseBindingsOptions, DatabaseBindingsService, DatabaseDriver, DatabaseError, DriftReport, DrizzleKit, DrizzleKitError, DrizzleKitOptions, DrizzleKitService, LoadMigrationsOptions, LoadedMigrations, Migration, MigrationDatabase, MigrationReport, MigrationStorage, RunMigrationsOptions, WorkspaceIdentity, bindingEnv, createDatabaseDriver, detectDrift, extractExpectedTables, findWorkspaceDir, getDatabaseUrlSecretName, getMigrationSlug, getMigrationStorage, isConcurrentDdlUniqueViolation, isRailwayPublicProxyUrl, isRetryableMigrationError, isRetryableMigrationExecutionError, loadMigrations, makeDatabaseBindings, makeDrizzleKitLive, normalizeSlug, pluginMigrationSlug, pluginSchemaName, requiresDatabaseConnection, resolveDatabaseUrl, resolvePoolSsl, runMigrations, suppressPgQueryQueueDeprecation, toSqlArray, unwrapDatabaseError, visitCauses, workspaceIdentityFromModuleUrl, workspaceIdentityFromWorkspaceDir };
|
package/dist/db/index.d.mts
CHANGED
|
@@ -2,8 +2,8 @@ import { DUPLICATE_OBJECT_SQLSTATES, MigrationStorage, extractExpectedTables, ge
|
|
|
2
2
|
import { WorkspaceIdentity, findWorkspaceDir, workspaceIdentityFromModuleUrl, workspaceIdentityFromWorkspaceDir } from "./identity.mjs";
|
|
3
3
|
import { bindingEnv, requiresDatabaseConnection, resolveDatabaseUrl } from "./binding.mjs";
|
|
4
4
|
import { DatabaseBinding, DatabaseBindingError, DatabaseBindings, DatabaseBindingsOptions, DatabaseBindingsService, makeDatabaseBindings } from "./bindings.mjs";
|
|
5
|
-
import { DatabaseDriver, createDatabaseDriver, pluginSchemaName, resolvePoolSsl } from "./driver.mjs";
|
|
5
|
+
import { DatabaseDriver, createDatabaseDriver, isRailwayPublicProxyUrl, pluginSchemaName, resolvePoolSsl } from "./driver.mjs";
|
|
6
6
|
import { DrizzleKit, DrizzleKitError, DrizzleKitOptions, DrizzleKitService, makeDrizzleKitLive } from "./drizzle-kit.mjs";
|
|
7
7
|
import { DatabaseError, unwrapDatabaseError } from "./errors.mjs";
|
|
8
8
|
import { DriftReport, LoadMigrationsOptions, LoadedMigrations, Migration, MigrationDatabase, MigrationReport, RunMigrationsOptions, detectDrift, loadMigrations, runMigrations } from "./run-migrations.mjs";
|
|
9
|
-
export { DUPLICATE_OBJECT_SQLSTATES, DatabaseBinding, DatabaseBindingError, DatabaseBindings, DatabaseBindingsOptions, DatabaseBindingsService, DatabaseDriver, DatabaseError, DriftReport, DrizzleKit, DrizzleKitError, DrizzleKitOptions, DrizzleKitService, LoadMigrationsOptions, LoadedMigrations, Migration, MigrationDatabase, MigrationReport, MigrationStorage, RunMigrationsOptions, WorkspaceIdentity, bindingEnv, createDatabaseDriver, detectDrift, extractExpectedTables, findWorkspaceDir, getDatabaseUrlSecretName, getMigrationSlug, getMigrationStorage, isConcurrentDdlUniqueViolation, isRetryableMigrationError, isRetryableMigrationExecutionError, loadMigrations, makeDatabaseBindings, makeDrizzleKitLive, normalizeSlug, pluginMigrationSlug, pluginSchemaName, requiresDatabaseConnection, resolveDatabaseUrl, resolvePoolSsl, runMigrations, suppressPgQueryQueueDeprecation, toSqlArray, unwrapDatabaseError, visitCauses, workspaceIdentityFromModuleUrl, workspaceIdentityFromWorkspaceDir };
|
|
9
|
+
export { DUPLICATE_OBJECT_SQLSTATES, DatabaseBinding, DatabaseBindingError, DatabaseBindings, DatabaseBindingsOptions, DatabaseBindingsService, DatabaseDriver, DatabaseError, DriftReport, DrizzleKit, DrizzleKitError, DrizzleKitOptions, DrizzleKitService, LoadMigrationsOptions, LoadedMigrations, Migration, MigrationDatabase, MigrationReport, MigrationStorage, RunMigrationsOptions, WorkspaceIdentity, bindingEnv, createDatabaseDriver, detectDrift, extractExpectedTables, findWorkspaceDir, getDatabaseUrlSecretName, getMigrationSlug, getMigrationStorage, isConcurrentDdlUniqueViolation, isRailwayPublicProxyUrl, isRetryableMigrationError, isRetryableMigrationExecutionError, loadMigrations, makeDatabaseBindings, makeDrizzleKitLive, normalizeSlug, pluginMigrationSlug, pluginSchemaName, requiresDatabaseConnection, resolveDatabaseUrl, resolvePoolSsl, runMigrations, suppressPgQueryQueueDeprecation, toSqlArray, unwrapDatabaseError, visitCauses, workspaceIdentityFromModuleUrl, workspaceIdentityFromWorkspaceDir };
|
package/dist/db/index.mjs
CHANGED
|
@@ -2,9 +2,9 @@ import { bindingEnv, requiresDatabaseConnection, resolveDatabaseUrl } from "./bi
|
|
|
2
2
|
import { DUPLICATE_OBJECT_SQLSTATES, extractExpectedTables, getDatabaseUrlSecretName, getMigrationSlug, getMigrationStorage, isConcurrentDdlUniqueViolation, isRetryableMigrationError, isRetryableMigrationExecutionError, normalizeSlug, pluginMigrationSlug, suppressPgQueryQueueDeprecation, toSqlArray, visitCauses } from "./core.mjs";
|
|
3
3
|
import { findWorkspaceDir, workspaceIdentityFromModuleUrl, workspaceIdentityFromWorkspaceDir } from "./identity.mjs";
|
|
4
4
|
import { DatabaseBindingError, DatabaseBindings, makeDatabaseBindings } from "./bindings.mjs";
|
|
5
|
-
import { createDatabaseDriver, pluginSchemaName, resolvePoolSsl } from "./driver.mjs";
|
|
5
|
+
import { createDatabaseDriver, isRailwayPublicProxyUrl, pluginSchemaName, resolvePoolSsl } from "./driver.mjs";
|
|
6
6
|
import { DrizzleKit, DrizzleKitError, makeDrizzleKitLive } from "./drizzle-kit.mjs";
|
|
7
7
|
import { DatabaseError, unwrapDatabaseError } from "./errors.mjs";
|
|
8
8
|
import { detectDrift, loadMigrations, runMigrations } from "./run-migrations.mjs";
|
|
9
9
|
|
|
10
|
-
export { DUPLICATE_OBJECT_SQLSTATES, DatabaseBindingError, DatabaseBindings, DatabaseError, DrizzleKit, DrizzleKitError, bindingEnv, createDatabaseDriver, detectDrift, extractExpectedTables, findWorkspaceDir, getDatabaseUrlSecretName, getMigrationSlug, getMigrationStorage, isConcurrentDdlUniqueViolation, isRetryableMigrationError, isRetryableMigrationExecutionError, loadMigrations, makeDatabaseBindings, makeDrizzleKitLive, normalizeSlug, pluginMigrationSlug, pluginSchemaName, requiresDatabaseConnection, resolveDatabaseUrl, resolvePoolSsl, runMigrations, suppressPgQueryQueueDeprecation, toSqlArray, unwrapDatabaseError, visitCauses, workspaceIdentityFromModuleUrl, workspaceIdentityFromWorkspaceDir };
|
|
10
|
+
export { DUPLICATE_OBJECT_SQLSTATES, DatabaseBindingError, DatabaseBindings, DatabaseError, DrizzleKit, DrizzleKitError, bindingEnv, createDatabaseDriver, detectDrift, extractExpectedTables, findWorkspaceDir, getDatabaseUrlSecretName, getMigrationSlug, getMigrationStorage, isConcurrentDdlUniqueViolation, isRailwayPublicProxyUrl, isRetryableMigrationError, isRetryableMigrationExecutionError, loadMigrations, makeDatabaseBindings, makeDrizzleKitLive, normalizeSlug, pluginMigrationSlug, pluginSchemaName, requiresDatabaseConnection, resolveDatabaseUrl, resolvePoolSsl, runMigrations, suppressPgQueryQueueDeprecation, toSqlArray, unwrapDatabaseError, visitCauses, workspaceIdentityFromModuleUrl, workspaceIdentityFromWorkspaceDir };
|