This repository has no description
1.8 kB
44 lines
1import { Container } from "@cloudflare/containers";
2import type { DurableObject } from "cloudflare:workers";
3
4interface ContainerEnv {
5 CARRY_GITHUB_TOKEN: string;
6 OBSIDIAN_AUTH_TOKEN: string;
7 OBSIDIAN_ENCRYPTION_KEY: string;
8 OBSIDIAN_ENCRYPTION_SALT: string;
9 LETTA_API_KEY: string;
10 LETTA_AGENT_ID: string;
11}
12
13export class StrataContainer extends Container<ContainerEnv> {
14 defaultPort = 8080;
15 sleepAfter = "5m";
16
17 constructor(ctx: DurableObject["ctx"], env: ContainerEnv) {
18 super(ctx, env);
19 // Set env vars before container starts — inject secrets from worker bindings
20 this.envVars = {
21 VAULT_PATH: "/data/vault",
22 CARRY_PATH: "/data/carry",
23 CARRY_BRANCH: "main",
24 ...(env.CARRY_GITHUB_TOKEN ? { CARRY_GITHUB_TOKEN: env.CARRY_GITHUB_TOKEN } : {}),
25 ...(env.OBSIDIAN_AUTH_TOKEN ? { OBSIDIAN_AUTH_TOKEN: env.OBSIDIAN_AUTH_TOKEN } : {}),
26 OBSIDIAN_VAULT_ID: "6472c50492efb918c2878e61048218f2",
27 OBSIDIAN_VAULT_NAME: "notes",
28 OBSIDIAN_SYNC_HOST: "sync-53.obsidian.md",
29 ...(env.OBSIDIAN_ENCRYPTION_KEY ? { OBSIDIAN_ENCRYPTION_KEY: env.OBSIDIAN_ENCRYPTION_KEY } : {}),
30 ...(env.OBSIDIAN_ENCRYPTION_SALT ? { OBSIDIAN_ENCRYPTION_SALT: env.OBSIDIAN_ENCRYPTION_SALT } : {}),
31 ...(env.LETTA_API_KEY ? { LETTA_API_KEY: env.LETTA_API_KEY } : {}),
32 ...(env.LETTA_AGENT_ID ? { LETTA_AGENT_ID: env.LETTA_AGENT_ID } : {}),
33 };
34 }
35
36 async onStart() {
37 const has = (k: string) => !!this.envVars?.[k];
38 console.log("[strata-container] started, carry:", has("CARRY_GITHUB_TOKEN") ? "set" : "missing", "obsidian:", has("OBSIDIAN_AUTH_TOKEN") ? "set" : "missing", "letta:", has("LETTA_API_KEY") ? "set" : "missing");
39 }
40
41 async onStop() {
42 console.log("[strata-container] stopped");
43 }
44}