import { Container } from "@cloudflare/containers"; import type { DurableObject } from "cloudflare:workers"; interface ContainerEnv { CARRY_GITHUB_TOKEN: string; OBSIDIAN_AUTH_TOKEN: string; OBSIDIAN_ENCRYPTION_KEY: string; OBSIDIAN_ENCRYPTION_SALT: string; } export class StrataContainer extends Container { defaultPort = 8080; sleepAfter = "5m"; constructor(ctx: DurableObject["ctx"], env: ContainerEnv) { super(ctx, env); // Set env vars before container starts — inject secrets from worker bindings this.envVars = { VAULT_PATH: "/data/vault", CARRY_PATH: "/data/carry", CARRY_BRANCH: "main", ...(env.CARRY_GITHUB_TOKEN ? { CARRY_GITHUB_TOKEN: env.CARRY_GITHUB_TOKEN } : {}), ...(env.OBSIDIAN_AUTH_TOKEN ? { OBSIDIAN_AUTH_TOKEN: env.OBSIDIAN_AUTH_TOKEN } : {}), OBSIDIAN_VAULT_ID: "6472c50492efb918c2878e61048218f2", OBSIDIAN_VAULT_NAME: "notes", OBSIDIAN_SYNC_HOST: "sync-53.obsidian.md", ...(env.OBSIDIAN_ENCRYPTION_KEY ? { OBSIDIAN_ENCRYPTION_KEY: env.OBSIDIAN_ENCRYPTION_KEY } : {}), ...(env.OBSIDIAN_ENCRYPTION_SALT ? { OBSIDIAN_ENCRYPTION_SALT: env.OBSIDIAN_ENCRYPTION_SALT } : {}), }; } async onStart() { const has = (k: string) => !!this.envVars?.[k]; console.log("[strata-container] started, carry:", has("CARRY_GITHUB_TOKEN") ? "set" : "missing", "obsidian:", has("OBSIDIAN_AUTH_TOKEN") ? "set" : "missing"); } async onStop() { console.log("[strata-container] stopped"); } }