diff --git a/github/sst-env.d.ts b/github/sst-env.d.ts
index 6b69016e71..f742a12004 100644
--- a/github/sst-env.d.ts
+++ b/github/sst-env.d.ts
@@ -6,4 +6,4 @@
///
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/infra/console.ts b/infra/console.ts
index b614da4118..eddc97d2f1 100644
--- a/infra/console.ts
+++ b/infra/console.ts
@@ -116,6 +116,8 @@ const gatewayKv = new sst.cloudflare.Kv("GatewayKv")
// CONSOLE
////////////////
+const bucket = new sst.cloudflare.Bucket("ConsoleData")
+
const AWS_SES_ACCESS_KEY_ID = new sst.Secret("AWS_SES_ACCESS_KEY_ID")
const AWS_SES_SECRET_ACCESS_KEY = new sst.Secret("AWS_SES_SECRET_ACCESS_KEY")
@@ -132,6 +134,7 @@ new sst.cloudflare.x.SolidStart("Console", {
domain,
path: "packages/console/app",
link: [
+ bucket,
database,
AUTH_API_URL,
STRIPE_WEBHOOK_SECRET,
diff --git a/packages/console/app/src/routes/zen/util/dataDumper.ts b/packages/console/app/src/routes/zen/util/dataDumper.ts
new file mode 100644
index 0000000000..6a064138a7
--- /dev/null
+++ b/packages/console/app/src/routes/zen/util/dataDumper.ts
@@ -0,0 +1,26 @@
+import { Resource, waitUntil } from "@opencode-ai/console-resource"
+
+export function createDataDumper(sessionId: string, requestId: string) {
+ if (Resource.App.stage !== "production") return
+
+ let data: Record = {}
+ let modelName: string | undefined
+
+ return {
+ provideModel: (model?: string) => (modelName = model),
+ provideRequest: (request: string) => (data.request = request),
+ provideResponse: (response: string) => (data.response = response),
+ provideStream: (chunk: string) => (data.response = (data.response ?? "") + chunk),
+ flush: () => {
+ if (!modelName) return
+
+ const str = new Date().toISOString().replace(/[^0-9]/g, "")
+ const yyyymmdd = str.substring(0, 8)
+ const hh = str.substring(8, 10)
+
+ waitUntil(
+ Resource.ConsoleData.put(`${yyyymmdd}/${hh}/${modelName}/${sessionId}/${requestId}.json`, JSON.stringify(data)),
+ )
+ },
+ }
+}
diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts
index 3453a6d381..c40db6e1d4 100644
--- a/packages/console/app/src/routes/zen/util/handler.ts
+++ b/packages/console/app/src/routes/zen/util/handler.ts
@@ -19,6 +19,7 @@ import { googleHelper } from "./provider/google"
import { openaiHelper } from "./provider/openai"
import { oaCompatHelper } from "./provider/openai-compatible"
import { createRateLimiter } from "./rateLimiter"
+import { createDataDumper } from "./dataDumper"
type ZenData = Awaited>
type RetryOptions = {
@@ -48,16 +49,19 @@ export async function handler(
try {
const url = input.request.url
const body = await input.request.json()
- const ip = input.request.headers.get("x-real-ip") ?? ""
const model = opts.parseModel(url, body)
const isStream = opts.parseIsStream(url, body)
+ const ip = input.request.headers.get("x-real-ip") ?? ""
+ const sessionId = input.request.headers.get("x-opencode-session")
+ const requestId = input.request.headers.get("x-opencode-request")
logger.metric({
is_tream: isStream,
- session: input.request.headers.get("x-opencode-session"),
- request: input.request.headers.get("x-opencode-request"),
+ session: sessionId,
+ request: requestId,
})
const zenData = ZenData.list()
const modelInfo = validateModel(zenData, model)
+ const dataDumper = createDataDumper(sessionId, requestId)
const rateLimiter = createRateLimiter(modelInfo.id, modelInfo.rateLimit, ip)
await rateLimiter?.check()
@@ -104,10 +108,14 @@ export async function handler(
})
}
- return { providerInfo, authInfo, res, startTimestamp }
+ return { providerInfo, authInfo, reqBody, res, startTimestamp }
}
- const { providerInfo, authInfo, res, startTimestamp } = await retriableRequest()
+ const { providerInfo, authInfo, reqBody, res, startTimestamp } = await retriableRequest()
+
+ // Store model request
+ dataDumper?.provideModel(providerInfo.storeModel)
+ dataDumper?.provideRequest(reqBody)
// Scrub response headers
const resHeaders = new Headers()
@@ -126,6 +134,8 @@ export async function handler(
const body = JSON.stringify(responseConverter(json))
logger.metric({ response_length: body.length })
logger.debug("RESPONSE: " + body)
+ dataDumper?.provideResponse(body)
+ dataDumper?.flush()
await rateLimiter?.track()
await trackUsage(authInfo, modelInfo, providerInfo, json.usage)
await reload(authInfo)
@@ -155,6 +165,7 @@ export async function handler(
response_length: responseLength,
"timestamp.last_byte": Date.now(),
})
+ dataDumper?.flush()
await rateLimiter?.track()
const usage = usageParser.retrieve()
if (usage) {
@@ -174,6 +185,7 @@ export async function handler(
}
responseLength += value.length
buffer += decoder.decode(value, { stream: true })
+ dataDumper?.provideStream(buffer)
const parts = buffer.split(providerInfo.streamSeparator)
buffer = parts.pop() ?? ""
diff --git a/packages/console/app/sst-env.d.ts b/packages/console/app/sst-env.d.ts
index bd55882173..9b9de73273 100644
--- a/packages/console/app/sst-env.d.ts
+++ b/packages/console/app/sst-env.d.ts
@@ -6,4 +6,4 @@
///
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/packages/console/core/src/model.ts b/packages/console/core/src/model.ts
index ed7911ab99..fd6cd095e9 100644
--- a/packages/console/core/src/model.ts
+++ b/packages/console/core/src/model.ts
@@ -32,6 +32,7 @@ export namespace ZenData {
model: z.string(),
weight: z.number().optional(),
disabled: z.boolean().optional(),
+ storeModel: z.string().optional(),
}),
),
})
diff --git a/packages/console/core/sst-env.d.ts b/packages/console/core/sst-env.d.ts
index 0862ae4e37..8e38d38251 100644
--- a/packages/console/core/sst-env.d.ts
+++ b/packages/console/core/sst-env.d.ts
@@ -6,116 +6,126 @@
import "sst"
declare module "sst" {
export interface Resource {
- ADMIN_SECRET: {
- type: "sst.sst.Secret"
- value: string
+ "ADMIN_SECRET": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- AUTH_API_URL: {
- type: "sst.sst.Linkable"
- value: string
+ "AUTH_API_URL": {
+ "type": "sst.sst.Linkable"
+ "value": string
}
- AWS_SES_ACCESS_KEY_ID: {
- type: "sst.sst.Secret"
- value: string
+ "AWS_SES_ACCESS_KEY_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- AWS_SES_SECRET_ACCESS_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "AWS_SES_SECRET_ACCESS_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- CLOUDFLARE_API_TOKEN: {
- type: "sst.sst.Secret"
- value: string
+ "CLOUDFLARE_API_TOKEN": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- CLOUDFLARE_DEFAULT_ACCOUNT_ID: {
- type: "sst.sst.Secret"
- value: string
+ "CLOUDFLARE_DEFAULT_ACCOUNT_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- Console: {
- type: "sst.cloudflare.SolidStart"
- url: string
+ "Console": {
+ "type": "sst.cloudflare.SolidStart"
+ "url": string
}
- Database: {
- database: string
- host: string
- password: string
- port: number
- type: "sst.sst.Linkable"
- username: string
+ "Database": {
+ "database": string
+ "host": string
+ "password": string
+ "port": number
+ "type": "sst.sst.Linkable"
+ "username": string
}
- Desktop: {
- type: "sst.cloudflare.StaticSite"
- url: string
+ "Desktop": {
+ "type": "sst.cloudflare.StaticSite"
+ "url": string
}
- EMAILOCTOPUS_API_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "EMAILOCTOPUS_API_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GITHUB_APP_ID: {
- type: "sst.sst.Secret"
- value: string
+ "GITHUB_APP_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GITHUB_APP_PRIVATE_KEY: {
- 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_ID_CONSOLE": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GITHUB_CLIENT_SECRET_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
+ "GOOGLE_CLIENT_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- HONEYCOMB_API_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "HONEYCOMB_API_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- STRIPE_SECRET_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "R2AccessKey": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- STRIPE_WEBHOOK_SECRET: {
- type: "sst.sst.Linkable"
- value: string
+ "R2SecretKey": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- Web: {
- type: "sst.cloudflare.Astro"
- url: string
+ "STRIPE_SECRET_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- ZEN_MODELS1: {
- type: "sst.sst.Secret"
- value: string
+ "STRIPE_WEBHOOK_SECRET": {
+ "type": "sst.sst.Linkable"
+ "value": string
}
- ZEN_MODELS2: {
- type: "sst.sst.Secret"
- value: string
+ "Web": {
+ "type": "sst.cloudflare.Astro"
+ "url": string
}
- ZEN_MODELS3: {
- type: "sst.sst.Secret"
- value: string
+ "ZEN_MODELS1": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- ZEN_MODELS4: {
- type: "sst.sst.Secret"
- value: string
+ "ZEN_MODELS2": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS3": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS4": {
+ "type": "sst.sst.Secret"
+ "value": string
}
}
}
-// cloudflare
-import * as cloudflare from "@cloudflare/workers-types"
+// 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
- GatewayKv: cloudflare.KVNamespace
- LogProcessor: cloudflare.Service
+ "Api": cloudflare.Service
+ "AuthApi": cloudflare.Service
+ "AuthStorage": cloudflare.KVNamespace
+ "Bucket": cloudflare.R2Bucket
+ "ConsoleData": cloudflare.R2Bucket
+ "EnterpriseStorage": cloudflare.R2Bucket
+ "GatewayKv": cloudflare.KVNamespace
+ "LogProcessor": cloudflare.Service
}
}
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/packages/console/function/sst-env.d.ts b/packages/console/function/sst-env.d.ts
index 0862ae4e37..8e38d38251 100644
--- a/packages/console/function/sst-env.d.ts
+++ b/packages/console/function/sst-env.d.ts
@@ -6,116 +6,126 @@
import "sst"
declare module "sst" {
export interface Resource {
- ADMIN_SECRET: {
- type: "sst.sst.Secret"
- value: string
+ "ADMIN_SECRET": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- AUTH_API_URL: {
- type: "sst.sst.Linkable"
- value: string
+ "AUTH_API_URL": {
+ "type": "sst.sst.Linkable"
+ "value": string
}
- AWS_SES_ACCESS_KEY_ID: {
- type: "sst.sst.Secret"
- value: string
+ "AWS_SES_ACCESS_KEY_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- AWS_SES_SECRET_ACCESS_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "AWS_SES_SECRET_ACCESS_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- CLOUDFLARE_API_TOKEN: {
- type: "sst.sst.Secret"
- value: string
+ "CLOUDFLARE_API_TOKEN": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- CLOUDFLARE_DEFAULT_ACCOUNT_ID: {
- type: "sst.sst.Secret"
- value: string
+ "CLOUDFLARE_DEFAULT_ACCOUNT_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- Console: {
- type: "sst.cloudflare.SolidStart"
- url: string
+ "Console": {
+ "type": "sst.cloudflare.SolidStart"
+ "url": string
}
- Database: {
- database: string
- host: string
- password: string
- port: number
- type: "sst.sst.Linkable"
- username: string
+ "Database": {
+ "database": string
+ "host": string
+ "password": string
+ "port": number
+ "type": "sst.sst.Linkable"
+ "username": string
}
- Desktop: {
- type: "sst.cloudflare.StaticSite"
- url: string
+ "Desktop": {
+ "type": "sst.cloudflare.StaticSite"
+ "url": string
}
- EMAILOCTOPUS_API_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "EMAILOCTOPUS_API_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GITHUB_APP_ID: {
- type: "sst.sst.Secret"
- value: string
+ "GITHUB_APP_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GITHUB_APP_PRIVATE_KEY: {
- 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_ID_CONSOLE": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GITHUB_CLIENT_SECRET_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
+ "GOOGLE_CLIENT_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- HONEYCOMB_API_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "HONEYCOMB_API_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- STRIPE_SECRET_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "R2AccessKey": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- STRIPE_WEBHOOK_SECRET: {
- type: "sst.sst.Linkable"
- value: string
+ "R2SecretKey": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- Web: {
- type: "sst.cloudflare.Astro"
- url: string
+ "STRIPE_SECRET_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- ZEN_MODELS1: {
- type: "sst.sst.Secret"
- value: string
+ "STRIPE_WEBHOOK_SECRET": {
+ "type": "sst.sst.Linkable"
+ "value": string
}
- ZEN_MODELS2: {
- type: "sst.sst.Secret"
- value: string
+ "Web": {
+ "type": "sst.cloudflare.Astro"
+ "url": string
}
- ZEN_MODELS3: {
- type: "sst.sst.Secret"
- value: string
+ "ZEN_MODELS1": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- ZEN_MODELS4: {
- type: "sst.sst.Secret"
- value: string
+ "ZEN_MODELS2": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS3": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS4": {
+ "type": "sst.sst.Secret"
+ "value": string
}
}
}
-// cloudflare
-import * as cloudflare from "@cloudflare/workers-types"
+// 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
- GatewayKv: cloudflare.KVNamespace
- LogProcessor: cloudflare.Service
+ "Api": cloudflare.Service
+ "AuthApi": cloudflare.Service
+ "AuthStorage": cloudflare.KVNamespace
+ "Bucket": cloudflare.R2Bucket
+ "ConsoleData": cloudflare.R2Bucket
+ "EnterpriseStorage": cloudflare.R2Bucket
+ "GatewayKv": cloudflare.KVNamespace
+ "LogProcessor": cloudflare.Service
}
}
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/packages/console/mail/sst-env.d.ts b/packages/console/mail/sst-env.d.ts
index bd55882173..9b9de73273 100644
--- a/packages/console/mail/sst-env.d.ts
+++ b/packages/console/mail/sst-env.d.ts
@@ -6,4 +6,4 @@
///
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/packages/console/resource/resource.cloudflare.ts b/packages/console/resource/resource.cloudflare.ts
index a56b1e4174..745212ca9c 100644
--- a/packages/console/resource/resource.cloudflare.ts
+++ b/packages/console/resource/resource.cloudflare.ts
@@ -1,4 +1,5 @@
import { env } from "cloudflare:workers"
+export { waitUntil } from "cloudflare:workers"
export const Resource = new Proxy(
{},
diff --git a/packages/console/resource/resource.node.ts b/packages/console/resource/resource.node.ts
index f63d7bada9..46b9629ed2 100644
--- a/packages/console/resource/resource.node.ts
+++ b/packages/console/resource/resource.node.ts
@@ -2,54 +2,66 @@ import type { KVNamespaceListOptions, KVNamespaceListResult, KVNamespacePutOptio
import { Resource as ResourceBase } from "sst"
import Cloudflare from "cloudflare"
+export const waitUntil = async (fn: () => Promise) => {
+ await fn()
+}
+
export const Resource = new Proxy(
{},
{
get(_target, prop: keyof typeof ResourceBase) {
const value = ResourceBase[prop]
- // @ts-ignore
- if ("type" in value && value.type === "sst.cloudflare.Kv") {
- const client = new Cloudflare({
- apiToken: ResourceBase.CLOUDFLARE_API_TOKEN.value,
- })
+ if ("type" in value) {
// @ts-ignore
- const namespaceId = value.namespaceId
- const accountId = ResourceBase.CLOUDFLARE_DEFAULT_ACCOUNT_ID.value
- return {
- get: (k: string | string[]) => {
- const isMulti = Array.isArray(k)
- return client.kv.namespaces
- .bulkGet(namespaceId, {
- keys: Array.isArray(k) ? k : [k],
+ if (value.type === "sst.cloudflare.Bucket") {
+ return {
+ put: async () => {},
+ }
+ }
+ // @ts-ignore
+ if (value.type === "sst.cloudflare.Kv") {
+ const client = new Cloudflare({
+ apiToken: ResourceBase.CLOUDFLARE_API_TOKEN.value,
+ })
+ // @ts-ignore
+ const namespaceId = value.namespaceId
+ const accountId = ResourceBase.CLOUDFLARE_DEFAULT_ACCOUNT_ID.value
+ return {
+ get: (k: string | string[]) => {
+ const isMulti = Array.isArray(k)
+ return client.kv.namespaces
+ .bulkGet(namespaceId, {
+ keys: Array.isArray(k) ? k : [k],
+ account_id: accountId,
+ })
+ .then((result) => (isMulti ? new Map(Object.entries(result?.values ?? {})) : result?.values?.[k]))
+ },
+ put: (k: string, v: string, opts?: KVNamespacePutOptions) =>
+ client.kv.namespaces.values.update(namespaceId, k, {
account_id: accountId,
- })
- .then((result) => (isMulti ? new Map(Object.entries(result?.values ?? {})) : result?.values?.[k]))
- },
- put: (k: string, v: string, opts?: KVNamespacePutOptions) =>
- client.kv.namespaces.values.update(namespaceId, k, {
- account_id: accountId,
- value: v,
- expiration: opts?.expiration,
- expiration_ttl: opts?.expirationTtl,
- metadata: opts?.metadata,
- }),
- delete: (k: string) =>
- client.kv.namespaces.values.delete(namespaceId, k, {
- account_id: accountId,
- }),
- list: (opts?: KVNamespaceListOptions): Promise> =>
- client.kv.namespaces.keys
- .list(namespaceId, {
- account_id: accountId,
- prefix: opts?.prefix ?? undefined,
- })
- .then((result) => {
- return {
- keys: result.result,
- list_complete: true,
- cacheStatus: null,
- }
+ value: v,
+ expiration: opts?.expiration,
+ expiration_ttl: opts?.expirationTtl,
+ metadata: opts?.metadata,
}),
+ delete: (k: string) =>
+ client.kv.namespaces.values.delete(namespaceId, k, {
+ account_id: accountId,
+ }),
+ list: (opts?: KVNamespaceListOptions): Promise> =>
+ client.kv.namespaces.keys
+ .list(namespaceId, {
+ account_id: accountId,
+ prefix: opts?.prefix ?? undefined,
+ })
+ .then((result) => {
+ return {
+ keys: result.result,
+ list_complete: true,
+ cacheStatus: null,
+ }
+ }),
+ }
}
}
return value
diff --git a/packages/console/resource/sst-env.d.ts b/packages/console/resource/sst-env.d.ts
index 0862ae4e37..8e38d38251 100644
--- a/packages/console/resource/sst-env.d.ts
+++ b/packages/console/resource/sst-env.d.ts
@@ -6,116 +6,126 @@
import "sst"
declare module "sst" {
export interface Resource {
- ADMIN_SECRET: {
- type: "sst.sst.Secret"
- value: string
+ "ADMIN_SECRET": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- AUTH_API_URL: {
- type: "sst.sst.Linkable"
- value: string
+ "AUTH_API_URL": {
+ "type": "sst.sst.Linkable"
+ "value": string
}
- AWS_SES_ACCESS_KEY_ID: {
- type: "sst.sst.Secret"
- value: string
+ "AWS_SES_ACCESS_KEY_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- AWS_SES_SECRET_ACCESS_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "AWS_SES_SECRET_ACCESS_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- CLOUDFLARE_API_TOKEN: {
- type: "sst.sst.Secret"
- value: string
+ "CLOUDFLARE_API_TOKEN": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- CLOUDFLARE_DEFAULT_ACCOUNT_ID: {
- type: "sst.sst.Secret"
- value: string
+ "CLOUDFLARE_DEFAULT_ACCOUNT_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- Console: {
- type: "sst.cloudflare.SolidStart"
- url: string
+ "Console": {
+ "type": "sst.cloudflare.SolidStart"
+ "url": string
}
- Database: {
- database: string
- host: string
- password: string
- port: number
- type: "sst.sst.Linkable"
- username: string
+ "Database": {
+ "database": string
+ "host": string
+ "password": string
+ "port": number
+ "type": "sst.sst.Linkable"
+ "username": string
}
- Desktop: {
- type: "sst.cloudflare.StaticSite"
- url: string
+ "Desktop": {
+ "type": "sst.cloudflare.StaticSite"
+ "url": string
}
- EMAILOCTOPUS_API_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "EMAILOCTOPUS_API_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GITHUB_APP_ID: {
- type: "sst.sst.Secret"
- value: string
+ "GITHUB_APP_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GITHUB_APP_PRIVATE_KEY: {
- 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_ID_CONSOLE": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GITHUB_CLIENT_SECRET_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
+ "GOOGLE_CLIENT_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- HONEYCOMB_API_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "HONEYCOMB_API_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- STRIPE_SECRET_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "R2AccessKey": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- STRIPE_WEBHOOK_SECRET: {
- type: "sst.sst.Linkable"
- value: string
+ "R2SecretKey": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- Web: {
- type: "sst.cloudflare.Astro"
- url: string
+ "STRIPE_SECRET_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- ZEN_MODELS1: {
- type: "sst.sst.Secret"
- value: string
+ "STRIPE_WEBHOOK_SECRET": {
+ "type": "sst.sst.Linkable"
+ "value": string
}
- ZEN_MODELS2: {
- type: "sst.sst.Secret"
- value: string
+ "Web": {
+ "type": "sst.cloudflare.Astro"
+ "url": string
}
- ZEN_MODELS3: {
- type: "sst.sst.Secret"
- value: string
+ "ZEN_MODELS1": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- ZEN_MODELS4: {
- type: "sst.sst.Secret"
- value: string
+ "ZEN_MODELS2": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS3": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS4": {
+ "type": "sst.sst.Secret"
+ "value": string
}
}
}
-// cloudflare
-import * as cloudflare from "@cloudflare/workers-types"
+// 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
- GatewayKv: cloudflare.KVNamespace
- LogProcessor: cloudflare.Service
+ "Api": cloudflare.Service
+ "AuthApi": cloudflare.Service
+ "AuthStorage": cloudflare.KVNamespace
+ "Bucket": cloudflare.R2Bucket
+ "ConsoleData": cloudflare.R2Bucket
+ "EnterpriseStorage": cloudflare.R2Bucket
+ "GatewayKv": cloudflare.KVNamespace
+ "LogProcessor": cloudflare.Service
}
}
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/packages/desktop/src/sst-env.d.ts b/packages/desktop/src/sst-env.d.ts
index 1b1683a1e7..47a8fbec7b 100644
--- a/packages/desktop/src/sst-env.d.ts
+++ b/packages/desktop/src/sst-env.d.ts
@@ -2,7 +2,9 @@
/* tslint:disable */
/* eslint-disable */
///
-interface ImportMetaEnv {}
+interface ImportMetaEnv {
+
+}
interface ImportMeta {
readonly env: ImportMetaEnv
-}
+}
\ No newline at end of file
diff --git a/packages/desktop/sst-env.d.ts b/packages/desktop/sst-env.d.ts
index 0397645b50..b6a7e9066e 100644
--- a/packages/desktop/sst-env.d.ts
+++ b/packages/desktop/sst-env.d.ts
@@ -6,4 +6,4 @@
///
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/packages/enterprise/sst-env.d.ts b/packages/enterprise/sst-env.d.ts
new file mode 100644
index 0000000000..8e38d38251
--- /dev/null
+++ b/packages/enterprise/sst-env.d.ts
@@ -0,0 +1,131 @@
+/* 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 {
+ "ADMIN_SECRET": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "AUTH_API_URL": {
+ "type": "sst.sst.Linkable"
+ "value": string
+ }
+ "AWS_SES_ACCESS_KEY_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "AWS_SES_SECRET_ACCESS_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "CLOUDFLARE_API_TOKEN": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "CLOUDFLARE_DEFAULT_ACCOUNT_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "Console": {
+ "type": "sst.cloudflare.SolidStart"
+ "url": string
+ }
+ "Database": {
+ "database": string
+ "host": string
+ "password": string
+ "port": number
+ "type": "sst.sst.Linkable"
+ "username": string
+ }
+ "Desktop": {
+ "type": "sst.cloudflare.StaticSite"
+ "url": string
+ }
+ "EMAILOCTOPUS_API_KEY": {
+ "type": "sst.sst.Secret"
+ "value": 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
+ }
+ "HONEYCOMB_API_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "R2AccessKey": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "R2SecretKey": {
+ "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
+ }
+ "ZEN_MODELS1": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS2": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS3": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS4": {
+ "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
+ "ConsoleData": cloudflare.R2Bucket
+ "EnterpriseStorage": cloudflare.R2Bucket
+ "GatewayKv": cloudflare.KVNamespace
+ "LogProcessor": cloudflare.Service
+ }
+}
+
+import "sst"
+export {}
\ No newline at end of file
diff --git a/packages/function/sst-env.d.ts b/packages/function/sst-env.d.ts
index 0862ae4e37..8e38d38251 100644
--- a/packages/function/sst-env.d.ts
+++ b/packages/function/sst-env.d.ts
@@ -6,116 +6,126 @@
import "sst"
declare module "sst" {
export interface Resource {
- ADMIN_SECRET: {
- type: "sst.sst.Secret"
- value: string
+ "ADMIN_SECRET": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- AUTH_API_URL: {
- type: "sst.sst.Linkable"
- value: string
+ "AUTH_API_URL": {
+ "type": "sst.sst.Linkable"
+ "value": string
}
- AWS_SES_ACCESS_KEY_ID: {
- type: "sst.sst.Secret"
- value: string
+ "AWS_SES_ACCESS_KEY_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- AWS_SES_SECRET_ACCESS_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "AWS_SES_SECRET_ACCESS_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- CLOUDFLARE_API_TOKEN: {
- type: "sst.sst.Secret"
- value: string
+ "CLOUDFLARE_API_TOKEN": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- CLOUDFLARE_DEFAULT_ACCOUNT_ID: {
- type: "sst.sst.Secret"
- value: string
+ "CLOUDFLARE_DEFAULT_ACCOUNT_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- Console: {
- type: "sst.cloudflare.SolidStart"
- url: string
+ "Console": {
+ "type": "sst.cloudflare.SolidStart"
+ "url": string
}
- Database: {
- database: string
- host: string
- password: string
- port: number
- type: "sst.sst.Linkable"
- username: string
+ "Database": {
+ "database": string
+ "host": string
+ "password": string
+ "port": number
+ "type": "sst.sst.Linkable"
+ "username": string
}
- Desktop: {
- type: "sst.cloudflare.StaticSite"
- url: string
+ "Desktop": {
+ "type": "sst.cloudflare.StaticSite"
+ "url": string
}
- EMAILOCTOPUS_API_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "EMAILOCTOPUS_API_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GITHUB_APP_ID: {
- type: "sst.sst.Secret"
- value: string
+ "GITHUB_APP_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GITHUB_APP_PRIVATE_KEY: {
- 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_ID_CONSOLE": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GITHUB_CLIENT_SECRET_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
+ "GOOGLE_CLIENT_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- HONEYCOMB_API_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "HONEYCOMB_API_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- STRIPE_SECRET_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "R2AccessKey": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- STRIPE_WEBHOOK_SECRET: {
- type: "sst.sst.Linkable"
- value: string
+ "R2SecretKey": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- Web: {
- type: "sst.cloudflare.Astro"
- url: string
+ "STRIPE_SECRET_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- ZEN_MODELS1: {
- type: "sst.sst.Secret"
- value: string
+ "STRIPE_WEBHOOK_SECRET": {
+ "type": "sst.sst.Linkable"
+ "value": string
}
- ZEN_MODELS2: {
- type: "sst.sst.Secret"
- value: string
+ "Web": {
+ "type": "sst.cloudflare.Astro"
+ "url": string
}
- ZEN_MODELS3: {
- type: "sst.sst.Secret"
- value: string
+ "ZEN_MODELS1": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- ZEN_MODELS4: {
- type: "sst.sst.Secret"
- value: string
+ "ZEN_MODELS2": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS3": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS4": {
+ "type": "sst.sst.Secret"
+ "value": string
}
}
}
-// cloudflare
-import * as cloudflare from "@cloudflare/workers-types"
+// 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
- GatewayKv: cloudflare.KVNamespace
- LogProcessor: cloudflare.Service
+ "Api": cloudflare.Service
+ "AuthApi": cloudflare.Service
+ "AuthStorage": cloudflare.KVNamespace
+ "Bucket": cloudflare.R2Bucket
+ "ConsoleData": cloudflare.R2Bucket
+ "EnterpriseStorage": cloudflare.R2Bucket
+ "GatewayKv": cloudflare.KVNamespace
+ "LogProcessor": cloudflare.Service
}
}
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts
index bc212629d3..d632085cfc 100644
--- a/packages/opencode/src/provider/provider.ts
+++ b/packages/opencode/src/provider/provider.ts
@@ -676,7 +676,7 @@ export namespace Provider {
if (providerID === "github-copilot") {
priority = priority.filter((m) => m !== "claude-haiku-4.5")
}
- if (providerID === "opencode" || providerID === "local") {
+ if (providerID.startsWith("opencode")) {
priority = ["gpt-5-nano"]
}
for (const item of priority) {
diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts
index 6b255981b7..f550005b34 100644
--- a/packages/opencode/src/session/prompt.ts
+++ b/packages/opencode/src/session/prompt.ts
@@ -534,7 +534,7 @@ export namespace SessionPrompt {
}
},
headers: {
- ...(model.providerID === "opencode"
+ ...(model.providerID.startsWith("opencode")
? {
"x-opencode-session": sessionID,
"x-opencode-request": lastUser.id,
diff --git a/packages/opencode/sst-env.d.ts b/packages/opencode/sst-env.d.ts
index 0397645b50..b6a7e9066e 100644
--- a/packages/opencode/sst-env.d.ts
+++ b/packages/opencode/sst-env.d.ts
@@ -6,4 +6,4 @@
///
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/packages/plugin/sst-env.d.ts b/packages/plugin/sst-env.d.ts
index 0397645b50..b6a7e9066e 100644
--- a/packages/plugin/sst-env.d.ts
+++ b/packages/plugin/sst-env.d.ts
@@ -6,4 +6,4 @@
///
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/packages/script/sst-env.d.ts b/packages/script/sst-env.d.ts
index 0397645b50..b6a7e9066e 100644
--- a/packages/script/sst-env.d.ts
+++ b/packages/script/sst-env.d.ts
@@ -6,4 +6,4 @@
///
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/packages/sdk/js/sst-env.d.ts b/packages/sdk/js/sst-env.d.ts
index bd55882173..9b9de73273 100644
--- a/packages/sdk/js/sst-env.d.ts
+++ b/packages/sdk/js/sst-env.d.ts
@@ -6,4 +6,4 @@
///
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/packages/sdk/python/sst.pyi b/packages/sdk/python/sst.pyi
index 0598229ca3..1c423e9ac5 100644
--- a/packages/sdk/python/sst.pyi
+++ b/packages/sdk/python/sst.pyi
@@ -39,6 +39,9 @@ class Resource:
class Console:
type: str
url: str
+ class ConsoleData:
+ name: str
+ type: str
class Database:
database: str
host: str
@@ -52,6 +55,9 @@ class Resource:
class EMAILOCTOPUS_API_KEY:
type: str
value: str
+ class EnterpriseStorage:
+ name: str
+ type: str
class GITHUB_APP_ID:
type: str
value: str
@@ -75,6 +81,12 @@ class Resource:
value: str
class LogProcessor:
type: str
+ class R2AccessKey:
+ type: str
+ value: str
+ class R2SecretKey:
+ type: str
+ value: str
class STRIPE_SECRET_KEY:
type: str
value: str
diff --git a/packages/slack/sst-env.d.ts b/packages/slack/sst-env.d.ts
index 0397645b50..b6a7e9066e 100644
--- a/packages/slack/sst-env.d.ts
+++ b/packages/slack/sst-env.d.ts
@@ -6,4 +6,4 @@
///
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/packages/tauri/sst-env.d.ts b/packages/tauri/sst-env.d.ts
new file mode 100644
index 0000000000..b6a7e9066e
--- /dev/null
+++ b/packages/tauri/sst-env.d.ts
@@ -0,0 +1,9 @@
+/* This file is auto-generated by SST. Do not edit. */
+/* tslint:disable */
+/* eslint-disable */
+/* deno-fmt-ignore-file */
+
+///
+
+import "sst"
+export {}
\ No newline at end of file
diff --git a/packages/ui/sst-env.d.ts b/packages/ui/sst-env.d.ts
index 0397645b50..b6a7e9066e 100644
--- a/packages/ui/sst-env.d.ts
+++ b/packages/ui/sst-env.d.ts
@@ -6,4 +6,4 @@
///
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/packages/util/sst-env.d.ts b/packages/util/sst-env.d.ts
index 0397645b50..b6a7e9066e 100644
--- a/packages/util/sst-env.d.ts
+++ b/packages/util/sst-env.d.ts
@@ -6,4 +6,4 @@
///
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/packages/web/sst-env.d.ts b/packages/web/sst-env.d.ts
index 0397645b50..b6a7e9066e 100644
--- a/packages/web/sst-env.d.ts
+++ b/packages/web/sst-env.d.ts
@@ -6,4 +6,4 @@
///
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/sdks/vscode/sst-env.d.ts b/sdks/vscode/sst-env.d.ts
index 0397645b50..b6a7e9066e 100644
--- a/sdks/vscode/sst-env.d.ts
+++ b/sdks/vscode/sst-env.d.ts
@@ -6,4 +6,4 @@
///
import "sst"
-export {}
+export {}
\ No newline at end of file
diff --git a/sst-env.d.ts b/sst-env.d.ts
index 171ff4a071..361c2fdfa8 100644
--- a/sst-env.d.ts
+++ b/sst-env.d.ts
@@ -5,128 +5,144 @@
declare module "sst" {
export interface Resource {
- ADMIN_SECRET: {
- type: "sst.sst.Secret"
- value: string
+ "ADMIN_SECRET": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- AUTH_API_URL: {
- type: "sst.sst.Linkable"
- value: string
+ "AUTH_API_URL": {
+ "type": "sst.sst.Linkable"
+ "value": string
}
- AWS_SES_ACCESS_KEY_ID: {
- type: "sst.sst.Secret"
- value: string
+ "AWS_SES_ACCESS_KEY_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- AWS_SES_SECRET_ACCESS_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "AWS_SES_SECRET_ACCESS_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- Api: {
- type: "sst.cloudflare.Worker"
- url: string
+ "Api": {
+ "type": "sst.cloudflare.Worker"
+ "url": string
}
- AuthApi: {
- type: "sst.cloudflare.Worker"
- url: string
+ "AuthApi": {
+ "type": "sst.cloudflare.Worker"
+ "url": string
}
- AuthStorage: {
- namespaceId: string
- type: "sst.cloudflare.Kv"
+ "AuthStorage": {
+ "namespaceId": string
+ "type": "sst.cloudflare.Kv"
}
- Bucket: {
- name: string
- type: "sst.cloudflare.Bucket"
+ "Bucket": {
+ "name": string
+ "type": "sst.cloudflare.Bucket"
}
- CLOUDFLARE_API_TOKEN: {
- type: "sst.sst.Secret"
- value: string
+ "CLOUDFLARE_API_TOKEN": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- CLOUDFLARE_DEFAULT_ACCOUNT_ID: {
- type: "sst.sst.Secret"
- value: string
+ "CLOUDFLARE_DEFAULT_ACCOUNT_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- Console: {
- type: "sst.cloudflare.SolidStart"
- url: string
+ "Console": {
+ "type": "sst.cloudflare.SolidStart"
+ "url": string
}
- Database: {
- database: string
- host: string
- password: string
- port: number
- type: "sst.sst.Linkable"
- username: string
+ "ConsoleData": {
+ "name": string
+ "type": "sst.cloudflare.Bucket"
}
- Desktop: {
- type: "sst.cloudflare.StaticSite"
- url: string
+ "Database": {
+ "database": string
+ "host": string
+ "password": string
+ "port": number
+ "type": "sst.sst.Linkable"
+ "username": string
}
- EMAILOCTOPUS_API_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "Desktop": {
+ "type": "sst.cloudflare.StaticSite"
+ "url": string
}
- GITHUB_APP_ID: {
- type: "sst.sst.Secret"
- value: string
+ "EMAILOCTOPUS_API_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GITHUB_APP_PRIVATE_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "EnterpriseStorage": {
+ "name": string
+ "type": "sst.cloudflare.Bucket"
}
- GITHUB_CLIENT_ID_CONSOLE: {
- type: "sst.sst.Secret"
- value: string
+ "GITHUB_APP_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GITHUB_CLIENT_SECRET_CONSOLE: {
- type: "sst.sst.Secret"
- value: string
+ "GITHUB_APP_PRIVATE_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GOOGLE_CLIENT_ID: {
- type: "sst.sst.Secret"
- value: string
+ "GITHUB_CLIENT_ID_CONSOLE": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- GatewayKv: {
- namespaceId: string
- type: "sst.cloudflare.Kv"
+ "GITHUB_CLIENT_SECRET_CONSOLE": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- HONEYCOMB_API_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "GOOGLE_CLIENT_ID": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- LogProcessor: {
- type: "sst.cloudflare.Worker"
+ "GatewayKv": {
+ "namespaceId": string
+ "type": "sst.cloudflare.Kv"
}
- STRIPE_SECRET_KEY: {
- type: "sst.sst.Secret"
- value: string
+ "HONEYCOMB_API_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- STRIPE_WEBHOOK_SECRET: {
- type: "sst.sst.Linkable"
- value: string
+ "LogProcessor": {
+ "type": "sst.cloudflare.Worker"
}
- Web: {
- type: "sst.cloudflare.Astro"
- url: string
+ "R2AccessKey": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- ZEN_MODELS1: {
- type: "sst.sst.Secret"
- value: string
+ "R2SecretKey": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- ZEN_MODELS2: {
- type: "sst.sst.Secret"
- value: string
+ "STRIPE_SECRET_KEY": {
+ "type": "sst.sst.Secret"
+ "value": string
}
- ZEN_MODELS3: {
- type: "sst.sst.Secret"
- value: string
+ "STRIPE_WEBHOOK_SECRET": {
+ "type": "sst.sst.Linkable"
+ "value": string
}
- ZEN_MODELS4: {
- type: "sst.sst.Secret"
- value: string
+ "Web": {
+ "type": "sst.cloudflare.Astro"
+ "url": string
+ }
+ "ZEN_MODELS1": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS2": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS3": {
+ "type": "sst.sst.Secret"
+ "value": string
+ }
+ "ZEN_MODELS4": {
+ "type": "sst.sst.Secret"
+ "value": string
}
}
}
///
import "sst"
-export {}
+export {}
\ No newline at end of file