فهرست منبع

ignore: cloud resource

Dax Raad 5 ماه پیش
والد
کامیت
f821b55514

+ 11 - 0
bun.lock

@@ -29,6 +29,7 @@
       "version": "0.5.28",
       "dependencies": {
         "@aws-sdk/client-sts": "3.782.0",
+        "@opencode/cloud-resource": "workspace:*",
         "drizzle-orm": "0.41.0",
         "postgres": "3.4.7",
         "stripe": "18.0.0",
@@ -58,6 +59,12 @@
         "typescript": "catalog:",
       },
     },
+    "cloud/resource": {
+      "name": "@opencode/cloud-resource",
+      "dependencies": {
+        "@cloudflare/workers-types": "^4.20250830.0",
+      },
+    },
     "packages/function": {
       "name": "@opencode/function",
       "version": "0.5.28",
@@ -652,6 +659,8 @@
 
     "@opencode/cloud-function": ["@opencode/cloud-function@workspace:cloud/function"],
 
+    "@opencode/cloud-resource": ["@opencode/cloud-resource@workspace:cloud/resource"],
+
     "@opencode/function": ["@opencode/function@workspace:packages/function"],
 
     "@opencode/web": ["@opencode/web@workspace:packages/web"],
@@ -3034,6 +3043,8 @@
 
     "@openauthjs/openauth/jose": ["[email protected]", "", {}, "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ=="],
 
+    "@opencode/cloud-resource/@cloudflare/workers-types": ["@cloudflare/[email protected]", "", {}, "sha512-uAGZFqEBFnCiwIokxMnrrtjIkT8qyGT1LACSScEUyW7nKmtD0Viykp9QZWrIlssyEp/MDB6XsdALF8y6upxpcg=="],
+
     "@opentelemetry/instrumentation-grpc/@opentelemetry/semantic-conventions": ["@opentelemetry/[email protected]", "", {}, "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg=="],
 
     "@oslojs/jwt/@oslojs/encoding": ["@oslojs/[email protected]", "", {}, "sha512-hkjo6MuIK/kQR5CrGNdAPZhS01ZCXuWDRJ187zh6qqF2+yMHZpD9fAYpX8q2bOO6Ryhl3XpCT6kUX76N8hhm4Q=="],

+ 1 - 1
cloud/app/package.json

@@ -3,7 +3,7 @@
   "type": "module",
   "scripts": {
     "dev": "vinxi dev --host 0.0.0.0",
-    "dev:remote": "bun sst shell --target=Solid --stage=dev bun dev",
+    "dev:remote": "bun sst shell --target=Console --stage=dev bun dev",
     "build": "vinxi build",
     "start": "vinxi start",
     "version": "0.5.28"

+ 0 - 1
cloud/app/src/global.d.ts

@@ -1,2 +1 @@
 /// <reference types="@solidjs/start/env" />
-declare module "cloudflare:workers"

+ 9 - 0
cloud/app/src/routes/debug/index.ts

@@ -0,0 +1,9 @@
+import type { APIEvent } from "@solidjs/start/server"
+import { Resource } from "@opencode/cloud-resource"
+import { json } from "@solidjs/router"
+
+export async function GET(evt: APIEvent) {
+  return json({
+    data: Resource.Database.host,
+  })
+}

+ 1 - 1
cloud/app/src/routes/gateway/v1/chat/completions.ts

@@ -1,4 +1,4 @@
-import { Resource } from "@opencode/cloud-core/util/resource.js"
+import { Resource } from "@opencode/cloud-resource"
 import { Billing } from "@opencode/cloud-core/billing.js"
 import type { APIEvent } from "@solidjs/start/server"
 import { Database, eq, sql } from "@opencode/cloud-core/drizzle/index.js"

+ 1 - 1
cloud/app/src/routes/stripe/webhook.ts

@@ -5,7 +5,7 @@ import { BillingTable, PaymentTable } from "@opencode/cloud-core/schema/billing.
 import { Identifier } from "@opencode/cloud-core/identifier.js"
 import { centsToMicroCents } from "@opencode/cloud-core/util/price.js"
 import { Actor } from "@opencode/cloud-core/actor.js"
-import { Resource } from "@opencode/cloud-core/util/resource.js"
+import { Resource } from "@opencode/cloud-resource"
 
 export async function POST(input: APIEvent) {
   const body = await Billing.stripe().webhooks.constructEventAsync(

+ 10 - 2
cloud/app/tsconfig.json

@@ -1,5 +1,9 @@
 {
+  "$schema": "https://json.schemastore.org/tsconfig",
   "compilerOptions": {
+    "customConditions": [
+      "workers"
+    ],
     "target": "ESNext",
     "module": "ESNext",
     "moduleResolution": "bundler",
@@ -10,10 +14,14 @@
     "allowJs": true,
     "strict": true,
     "noEmit": true,
-    "types": ["vinxi/types/client"],
+    "types": [
+      "vinxi/types/client"
+    ],
     "isolatedModules": true,
     "paths": {
-      "~/*": ["./src/*"]
+      "~/*": [
+        "./src/*"
+      ]
     }
   }
 }

+ 1 - 1
cloud/core/drizzle.config.ts

@@ -1,5 +1,5 @@
+import { Resource } from "@opencode/cloud-resource"
 import { defineConfig } from "drizzle-kit"
-import { Resource } from "./src/util/resource"
 
 export default defineConfig({
   out: "./migrations/",

+ 1 - 0
cloud/core/package.json

@@ -6,6 +6,7 @@
   "type": "module",
   "dependencies": {
     "@aws-sdk/client-sts": "3.782.0",
+    "@opencode/cloud-resource": "workspace:*",
     "drizzle-orm": "0.41.0",
     "postgres": "3.4.7",
     "stripe": "18.0.0",

+ 1 - 1
cloud/core/src/billing.ts

@@ -7,7 +7,7 @@ import { z } from "zod"
 import { Identifier } from "./identifier"
 import { centsToMicroCents } from "./util/price"
 import { User } from "./user"
-import { Resource } from "./util/resource"
+import { Resource } from "@opencode/cloud-resource"
 
 export namespace Billing {
   export const stripe = () =>

+ 1 - 1
cloud/core/src/drizzle/index.ts

@@ -1,5 +1,5 @@
 import { drizzle } from "drizzle-orm/postgres-js"
-import { Resource } from "../util/resource"
+import { Resource } from "@opencode/cloud-resource"
 export * from "drizzle-orm"
 import postgres from "postgres"
 

+ 0 - 0
cloud/core/src/util/env.cloudflare.ts


+ 1 - 1
cloud/function/src/auth.ts

@@ -9,7 +9,7 @@ import { CloudflareStorage } from "@openauthjs/openauth/storage/cloudflare"
 import { Account } from "@opencode/cloud-core/account.js"
 import { Workspace } from "@opencode/cloud-core/workspace.js"
 import { Actor } from "@opencode/cloud-core/actor.js"
-import { Resource } from "@opencode/cloud-core/util/resource.js"
+import { Resource } from "@opencode/cloud-resource"
 
 type Env = {
   AuthStorage: KVNamespace

+ 1 - 1
cloud/function/src/gateway.ts

@@ -1,5 +1,4 @@
 import { Hono, MiddlewareHandler } from "hono"
-import { Resource } from "@opencode/cloud-core/util/resource.js"
 import { type ProviderMetadata, type LanguageModelUsage } from "ai"
 import { createAnthropic } from "@ai-sdk/anthropic"
 import { createOpenAI } from "@ai-sdk/openai"
@@ -10,6 +9,7 @@ import { Actor } from "@opencode/cloud-core/actor.js"
 import { Database, eq, sql } from "@opencode/cloud-core/drizzle/index.js"
 import { KeyTable } from "@opencode/cloud-core/schema/key.sql.js"
 import { Billing } from "@opencode/cloud-core/billing.js"
+import { Resource } from "@opencode/cloud-resource"
 
 type Env = {}
 

+ 13 - 0
cloud/resource/bun.lock

@@ -0,0 +1,13 @@
+{
+  "lockfileVersion": 1,
+  "workspaces": {
+    "": {
+      "dependencies": {
+        "@cloudflare/workers-types": "^4.20250830.0",
+      },
+    },
+  },
+  "packages": {
+    "@cloudflare/workers-types": ["@cloudflare/[email protected]", "", {}, "sha512-uAGZFqEBFnCiwIokxMnrrtjIkT8qyGT1LACSScEUyW7nKmtD0Viykp9QZWrIlssyEp/MDB6XsdALF8y6upxpcg=="],
+  }
+}

+ 15 - 0
cloud/resource/package.json

@@ -0,0 +1,15 @@
+{
+  "$schema": "https://json.schemastore.org/package.json",
+  "name": "@opencode/cloud-resource",
+  "dependencies": {
+    "@cloudflare/workers-types": "^4.20250830.0"
+  },
+  "exports": {
+    ".": {
+      "production": {
+        "import": "./resource.cloudflare.ts"
+      },
+      "import": "./resource.node.ts"
+    }
+  }
+}

+ 7 - 6
cloud/core/src/util/resource.ts → cloud/resource/resource.cloudflare.ts

@@ -1,14 +1,15 @@
-import { env } from "cloudflare:workers";
+import { env } from "cloudflare:workers"
 
 export const Resource = new Proxy(
   {},
   {
     get(_target, prop: string) {
       if (prop in env) {
-        const value = env[prop];
-        return typeof value === "string" ? JSON.parse(value) : value;
+        // @ts-expect-error
+        const value = env[prop]
+        return typeof value === "string" ? JSON.parse(value) : value
       }
-      throw new Error(`"${prop}" is not linked in your sst.config.ts`);
+      throw new Error(`"${prop}" is not linked in your sst.config.ts (cloudflare)`)
     },
-  }
-) as Record<string, any>;
+  },
+) as Record<string, any>

+ 2 - 0
cloud/resource/resource.node.ts

@@ -0,0 +1,2 @@
+console.log(process.env)
+export { Resource } from "sst"

+ 92 - 0
cloud/resource/sst-env.d.ts

@@ -0,0 +1,92 @@
+/* This file is auto-generated by SST. Do not edit. */
+/* tslint:disable */
+/* eslint-disable */
+/* deno-fmt-ignore-file */
+
+import "sst"
+declare module "sst" {
+  export interface Resource {
+    "ANTHROPIC_API_KEY": {
+      "type": "sst.sst.Secret"
+      "value": string
+    }
+    "AUTH_API_URL": {
+      "type": "sst.sst.Linkable"
+      "value": string
+    }
+    "Console": {
+      "type": "sst.cloudflare.SolidStart"
+      "url": string
+    }
+    "DATABASE_PASSWORD": {
+      "type": "sst.sst.Secret"
+      "value": string
+    }
+    "DATABASE_USERNAME": {
+      "type": "sst.sst.Secret"
+      "value": string
+    }
+    "Database": {
+      "database": string
+      "host": string
+      "password": string
+      "port": number
+      "type": "sst.sst.Linkable"
+      "username": string
+    }
+    "GITHUB_APP_ID": {
+      "type": "sst.sst.Secret"
+      "value": string
+    }
+    "GITHUB_APP_PRIVATE_KEY": {
+      "type": "sst.sst.Secret"
+      "value": string
+    }
+    "GITHUB_CLIENT_ID_CONSOLE": {
+      "type": "sst.sst.Secret"
+      "value": string
+    }
+    "GITHUB_CLIENT_SECRET_CONSOLE": {
+      "type": "sst.sst.Secret"
+      "value": string
+    }
+    "GOOGLE_CLIENT_ID": {
+      "type": "sst.sst.Secret"
+      "value": string
+    }
+    "OPENAI_API_KEY": {
+      "type": "sst.sst.Secret"
+      "value": string
+    }
+    "STRIPE_SECRET_KEY": {
+      "type": "sst.sst.Secret"
+      "value": string
+    }
+    "STRIPE_WEBHOOK_SECRET": {
+      "type": "sst.sst.Linkable"
+      "value": string
+    }
+    "Web": {
+      "type": "sst.cloudflare.Astro"
+      "url": string
+    }
+    "ZHIPU_API_KEY": {
+      "type": "sst.sst.Secret"
+      "value": string
+    }
+  }
+}
+// cloudflare 
+import * as cloudflare from "@cloudflare/workers-types";
+declare module "sst" {
+  export interface Resource {
+    "Api": cloudflare.Service
+    "AuthApi": cloudflare.Service
+    "AuthStorage": cloudflare.KVNamespace
+    "Bucket": cloudflare.R2Bucket
+    "GatewayApi": cloudflare.Service
+  }
+}
+
+import "sst"
+export {}

+ 12 - 0
cloud/resource/tsconfig.json

@@ -0,0 +1,12 @@
+{
+  "$schema": "https://json.schemastore.org/tsconfig",
+  "extends": "@tsconfig/node22/tsconfig.json",
+  "compilerOptions": {
+    "module": "ESNext",
+    "moduleResolution": "bundler",
+    "types": [
+      "@cloudflare/workers-types",
+      "node"
+    ]
+  }
+}