mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-19 16:54:22 +01:00
zen: wip
This commit is contained in:
@@ -61,7 +61,13 @@ export const auth = new sst.cloudflare.Worker("AuthApi", {
|
|||||||
domain: `auth.${domain}`,
|
domain: `auth.${domain}`,
|
||||||
handler: "packages/console/function/src/auth.ts",
|
handler: "packages/console/function/src/auth.ts",
|
||||||
url: true,
|
url: true,
|
||||||
link: [database, authStorage, GITHUB_CLIENT_ID_CONSOLE, GITHUB_CLIENT_SECRET_CONSOLE, GOOGLE_CLIENT_ID],
|
link: [
|
||||||
|
database,
|
||||||
|
authStorage,
|
||||||
|
GITHUB_CLIENT_ID_CONSOLE,
|
||||||
|
GITHUB_CLIENT_SECRET_CONSOLE,
|
||||||
|
GOOGLE_CLIENT_ID,
|
||||||
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
////////////////
|
////////////////
|
||||||
@@ -97,7 +103,8 @@ export const stripeWebhook = new stripe.WebhookEndpoint("StripeWebhookEndpoint",
|
|||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
const ZEN_MODELS = new sst.Secret("ZEN_MODELS")
|
const ZEN_MODELS1 = new sst.Secret("ZEN_MODELS1")
|
||||||
|
const ZEN_MODELS2 = new sst.Secret("ZEN_MODELS2")
|
||||||
const STRIPE_SECRET_KEY = new sst.Secret("STRIPE_SECRET_KEY")
|
const STRIPE_SECRET_KEY = new sst.Secret("STRIPE_SECRET_KEY")
|
||||||
const AUTH_API_URL = new sst.Linkable("AUTH_API_URL", {
|
const AUTH_API_URL = new sst.Linkable("AUTH_API_URL", {
|
||||||
properties: { value: auth.url.apply((url) => url!) },
|
properties: { value: auth.url.apply((url) => url!) },
|
||||||
@@ -130,7 +137,8 @@ new sst.cloudflare.x.SolidStart("Console", {
|
|||||||
AUTH_API_URL,
|
AUTH_API_URL,
|
||||||
STRIPE_WEBHOOK_SECRET,
|
STRIPE_WEBHOOK_SECRET,
|
||||||
STRIPE_SECRET_KEY,
|
STRIPE_SECRET_KEY,
|
||||||
ZEN_MODELS,
|
ZEN_MODELS1,
|
||||||
|
ZEN_MODELS2,
|
||||||
EMAILOCTOPUS_API_KEY,
|
EMAILOCTOPUS_API_KEY,
|
||||||
AWS_SES_ACCESS_KEY_ID,
|
AWS_SES_ACCESS_KEY_ID,
|
||||||
AWS_SES_SECRET_ACCESS_KEY,
|
AWS_SES_SECRET_ACCESS_KEY,
|
||||||
|
|||||||
@@ -239,10 +239,10 @@ export async function handler(
|
|||||||
.filter((provider) => !provider.disabled)
|
.filter((provider) => !provider.disabled)
|
||||||
.flatMap((provider) => Array<typeof provider>(provider.weight ?? 1).fill(provider))
|
.flatMap((provider) => Array<typeof provider>(provider.weight ?? 1).fill(provider))
|
||||||
|
|
||||||
// Use last character of IP address to select a provider
|
// Use the last 2 characters of IP address to select a provider
|
||||||
const lastChar = ip.charCodeAt(ip.length - 1) || 0
|
const lastChars = ip.slice(-2)
|
||||||
const index = lastChar % providers.length
|
const index = parseInt(lastChars, 16) % providers.length
|
||||||
const provider = providers[index]
|
const provider = providers[index || 0]
|
||||||
|
|
||||||
if (!(provider.id in zenData.providers)) {
|
if (!(provider.id in zenData.providers)) {
|
||||||
throw new ModelError(`Provider ${provider.id} not supported`)
|
throw new ModelError(`Provider ${provider.id} not supported`)
|
||||||
|
|||||||
@@ -11,14 +11,20 @@ const root = path.resolve(process.cwd(), "..", "..", "..")
|
|||||||
|
|
||||||
// read the secret
|
// read the secret
|
||||||
const ret = await $`bun sst secret list`.cwd(root).text()
|
const ret = await $`bun sst secret list`.cwd(root).text()
|
||||||
const value = ret
|
const value1 = ret
|
||||||
.split("\n")
|
.split("\n")
|
||||||
.find((line) => line.startsWith("ZEN_MODELS"))
|
.find((line) => line.startsWith("ZEN_MODELS1"))
|
||||||
?.split("=")[1]
|
?.split("=")[1]
|
||||||
if (!value) throw new Error("ZEN_MODELS not found")
|
const value2 = ret
|
||||||
|
.split("\n")
|
||||||
|
.find((line) => line.startsWith("ZEN_MODELS2"))
|
||||||
|
?.split("=")[1]
|
||||||
|
if (!value1) throw new Error("ZEN_MODELS1 not found")
|
||||||
|
if (!value2) throw new Error("ZEN_MODELS2 not found")
|
||||||
|
|
||||||
// validate value
|
// validate value
|
||||||
ZenData.validate(JSON.parse(value))
|
ZenData.validate(JSON.parse(value1 + value2))
|
||||||
|
|
||||||
// update the secret
|
// update the secret
|
||||||
await $`bun sst secret set ZEN_MODELS ${value} --stage ${stage}`
|
await $`bun sst secret set ZEN_MODELS1 ${value1} --stage ${stage}`
|
||||||
|
await $`bun sst secret set ZEN_MODELS2 ${value2} --stage ${stage}`
|
||||||
|
|||||||
@@ -10,23 +10,29 @@ const models = await $`bun sst secret list`.cwd(root).text()
|
|||||||
console.log("models", models)
|
console.log("models", models)
|
||||||
|
|
||||||
// read the line starting with "ZEN_MODELS"
|
// read the line starting with "ZEN_MODELS"
|
||||||
const oldValue = models
|
const oldValue1 = models
|
||||||
.split("\n")
|
.split("\n")
|
||||||
.find((line) => line.startsWith("ZEN_MODELS"))
|
.find((line) => line.startsWith("ZEN_MODELS1"))
|
||||||
?.split("=")[1]
|
?.split("=")[1]
|
||||||
if (!oldValue) throw new Error("ZEN_MODELS not found")
|
const oldValue2 = models
|
||||||
console.log("oldValue", oldValue)
|
.split("\n")
|
||||||
|
.find((line) => line.startsWith("ZEN_MODELS2"))
|
||||||
|
?.split("=")[1]
|
||||||
|
if (!oldValue1) throw new Error("ZEN_MODELS1 not found")
|
||||||
|
if (!oldValue2) throw new Error("ZEN_MODELS2 not found")
|
||||||
|
|
||||||
// store the prettified json to a temp file
|
// store the prettified json to a temp file
|
||||||
const filename = `models-${Date.now()}.json`
|
const filename = `models-${Date.now()}.json`
|
||||||
const tempFile = Bun.file(path.join(os.tmpdir(), filename))
|
const tempFile = Bun.file(path.join(os.tmpdir(), filename))
|
||||||
await tempFile.write(JSON.stringify(JSON.parse(oldValue), null, 2))
|
await tempFile.write(JSON.stringify(JSON.parse(oldValue1 + oldValue2), null, 2))
|
||||||
console.log("tempFile", tempFile.name)
|
console.log("tempFile", tempFile.name)
|
||||||
|
|
||||||
// open temp file in vim and read the file on close
|
// open temp file in vim and read the file on close
|
||||||
await $`vim ${tempFile.name}`
|
await $`vim ${tempFile.name}`
|
||||||
const newValue = JSON.parse(await tempFile.text())
|
const newValue = JSON.stringify(JSON.parse(await tempFile.text()))
|
||||||
ZenData.validate(newValue)
|
ZenData.validate(JSON.parse(newValue))
|
||||||
|
|
||||||
// update the secret
|
// update the secret
|
||||||
await $`bun sst secret set ZEN_MODELS ${JSON.stringify(newValue)}`
|
const mid = Math.floor(newValue.length / 2)
|
||||||
|
await $`bun sst secret set ZEN_MODELS1 ${newValue.slice(0, mid)}`
|
||||||
|
await $`bun sst secret set ZEN_MODELS2 ${newValue.slice(mid)}`
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ export namespace ZenData {
|
|||||||
})
|
})
|
||||||
|
|
||||||
export const list = fn(z.void(), () => {
|
export const list = fn(z.void(), () => {
|
||||||
const json = JSON.parse(Resource.ZEN_MODELS.value)
|
const json = JSON.parse(Resource.ZEN_MODELS1.value + Resource.ZEN_MODELS2.value)
|
||||||
return ModelsSchema.parse(json)
|
return ModelsSchema.parse(json)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -56,7 +56,9 @@ export namespace Model {
|
|||||||
export const enable = fn(z.object({ model: z.string() }), ({ model }) => {
|
export const enable = fn(z.object({ model: z.string() }), ({ model }) => {
|
||||||
Actor.assertAdmin()
|
Actor.assertAdmin()
|
||||||
return Database.use((db) =>
|
return Database.use((db) =>
|
||||||
db.delete(ModelTable).where(and(eq(ModelTable.workspaceID, Actor.workspace()), eq(ModelTable.model, model))),
|
db
|
||||||
|
.delete(ModelTable)
|
||||||
|
.where(and(eq(ModelTable.workspaceID, Actor.workspace()), eq(ModelTable.model, model))),
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
97
packages/console/core/sst-env.d.ts
vendored
97
packages/console/core/sst-env.d.ts
vendored
@@ -3,7 +3,102 @@
|
|||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
/* deno-fmt-ignore-file */
|
/* deno-fmt-ignore-file */
|
||||||
|
|
||||||
/// <reference path="../../../sst-env.d.ts" />
|
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
|
||||||
|
}
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 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
|
||||||
|
"LogProcessor": cloudflare.Service
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
import "sst"
|
import "sst"
|
||||||
export {}
|
export {}
|
||||||
10
packages/console/function/sst-env.d.ts
vendored
10
packages/console/function/sst-env.d.ts
vendored
@@ -6,6 +6,10 @@
|
|||||||
import "sst"
|
import "sst"
|
||||||
declare module "sst" {
|
declare module "sst" {
|
||||||
export interface Resource {
|
export interface Resource {
|
||||||
|
"ADMIN_SECRET": {
|
||||||
|
"type": "sst.sst.Secret"
|
||||||
|
"value": string
|
||||||
|
}
|
||||||
"AUTH_API_URL": {
|
"AUTH_API_URL": {
|
||||||
"type": "sst.sst.Linkable"
|
"type": "sst.sst.Linkable"
|
||||||
"value": string
|
"value": string
|
||||||
@@ -74,7 +78,11 @@ declare module "sst" {
|
|||||||
"type": "sst.cloudflare.Astro"
|
"type": "sst.cloudflare.Astro"
|
||||||
"url": string
|
"url": string
|
||||||
}
|
}
|
||||||
"ZEN_MODELS": {
|
"ZEN_MODELS1": {
|
||||||
|
"type": "sst.sst.Secret"
|
||||||
|
"value": string
|
||||||
|
}
|
||||||
|
"ZEN_MODELS2": {
|
||||||
"type": "sst.sst.Secret"
|
"type": "sst.sst.Secret"
|
||||||
"value": string
|
"value": string
|
||||||
}
|
}
|
||||||
|
|||||||
10
packages/console/resource/sst-env.d.ts
vendored
10
packages/console/resource/sst-env.d.ts
vendored
@@ -6,6 +6,10 @@
|
|||||||
import "sst"
|
import "sst"
|
||||||
declare module "sst" {
|
declare module "sst" {
|
||||||
export interface Resource {
|
export interface Resource {
|
||||||
|
"ADMIN_SECRET": {
|
||||||
|
"type": "sst.sst.Secret"
|
||||||
|
"value": string
|
||||||
|
}
|
||||||
"AUTH_API_URL": {
|
"AUTH_API_URL": {
|
||||||
"type": "sst.sst.Linkable"
|
"type": "sst.sst.Linkable"
|
||||||
"value": string
|
"value": string
|
||||||
@@ -74,7 +78,11 @@ declare module "sst" {
|
|||||||
"type": "sst.cloudflare.Astro"
|
"type": "sst.cloudflare.Astro"
|
||||||
"url": string
|
"url": string
|
||||||
}
|
}
|
||||||
"ZEN_MODELS": {
|
"ZEN_MODELS1": {
|
||||||
|
"type": "sst.sst.Secret"
|
||||||
|
"value": string
|
||||||
|
}
|
||||||
|
"ZEN_MODELS2": {
|
||||||
"type": "sst.sst.Secret"
|
"type": "sst.sst.Secret"
|
||||||
"value": string
|
"value": string
|
||||||
}
|
}
|
||||||
|
|||||||
10
packages/function/sst-env.d.ts
vendored
10
packages/function/sst-env.d.ts
vendored
@@ -6,6 +6,10 @@
|
|||||||
import "sst"
|
import "sst"
|
||||||
declare module "sst" {
|
declare module "sst" {
|
||||||
export interface Resource {
|
export interface Resource {
|
||||||
|
"ADMIN_SECRET": {
|
||||||
|
"type": "sst.sst.Secret"
|
||||||
|
"value": string
|
||||||
|
}
|
||||||
"AUTH_API_URL": {
|
"AUTH_API_URL": {
|
||||||
"type": "sst.sst.Linkable"
|
"type": "sst.sst.Linkable"
|
||||||
"value": string
|
"value": string
|
||||||
@@ -74,7 +78,11 @@ declare module "sst" {
|
|||||||
"type": "sst.cloudflare.Astro"
|
"type": "sst.cloudflare.Astro"
|
||||||
"url": string
|
"url": string
|
||||||
}
|
}
|
||||||
"ZEN_MODELS": {
|
"ZEN_MODELS1": {
|
||||||
|
"type": "sst.sst.Secret"
|
||||||
|
"value": string
|
||||||
|
}
|
||||||
|
"ZEN_MODELS2": {
|
||||||
"type": "sst.sst.Secret"
|
"type": "sst.sst.Secret"
|
||||||
"value": string
|
"value": string
|
||||||
}
|
}
|
||||||
|
|||||||
9
packages/script/sst-env.d.ts
vendored
Normal file
9
packages/script/sst-env.d.ts
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/* This file is auto-generated by SST. Do not edit. */
|
||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
/* deno-fmt-ignore-file */
|
||||||
|
|
||||||
|
/// <reference path="../../sst-env.d.ts" />
|
||||||
|
|
||||||
|
import "sst"
|
||||||
|
export {}
|
||||||
83
packages/sdk/python/sst.pyi
Normal file
83
packages/sdk/python/sst.pyi
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
# Automatically generated by SST
|
||||||
|
# pylint: disable=all
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
class Resource:
|
||||||
|
class ADMIN_SECRET:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
class AUTH_API_URL:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
class AWS_SES_ACCESS_KEY_ID:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
class AWS_SES_SECRET_ACCESS_KEY:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
class Api:
|
||||||
|
type: str
|
||||||
|
url: str
|
||||||
|
class App:
|
||||||
|
name: str
|
||||||
|
stage: str
|
||||||
|
class AuthApi:
|
||||||
|
type: str
|
||||||
|
url: str
|
||||||
|
class AuthStorage:
|
||||||
|
type: str
|
||||||
|
class Bucket:
|
||||||
|
name: str
|
||||||
|
type: str
|
||||||
|
class Console:
|
||||||
|
type: str
|
||||||
|
url: str
|
||||||
|
class Database:
|
||||||
|
database: str
|
||||||
|
host: str
|
||||||
|
password: str
|
||||||
|
port: float
|
||||||
|
type: str
|
||||||
|
username: str
|
||||||
|
class Desktop:
|
||||||
|
type: str
|
||||||
|
url: str
|
||||||
|
class EMAILOCTOPUS_API_KEY:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
class GITHUB_APP_ID:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
class GITHUB_APP_PRIVATE_KEY:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
class GITHUB_CLIENT_ID_CONSOLE:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
class GITHUB_CLIENT_SECRET_CONSOLE:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
class GOOGLE_CLIENT_ID:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
class HONEYCOMB_API_KEY:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
class LogProcessor:
|
||||||
|
type: str
|
||||||
|
class STRIPE_SECRET_KEY:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
class STRIPE_WEBHOOK_SECRET:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
class Web:
|
||||||
|
type: str
|
||||||
|
url: str
|
||||||
|
class ZEN_MODELS1:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
class ZEN_MODELS2:
|
||||||
|
type: str
|
||||||
|
value: str
|
||||||
|
|
||||||
8
packages/slack/sst-env.d.ts
vendored
8
packages/slack/sst-env.d.ts
vendored
@@ -1,3 +1,9 @@
|
|||||||
/// <reference types="../../../sst-env.d.ts" />
|
/* This file is auto-generated by SST. Do not edit. */
|
||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
/* deno-fmt-ignore-file */
|
||||||
|
|
||||||
|
/// <reference path="../../sst-env.d.ts" />
|
||||||
|
|
||||||
|
import "sst"
|
||||||
export {}
|
export {}
|
||||||
9
packages/ui/sst-env.d.ts
vendored
Normal file
9
packages/ui/sst-env.d.ts
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/* This file is auto-generated by SST. Do not edit. */
|
||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
/* deno-fmt-ignore-file */
|
||||||
|
|
||||||
|
/// <reference path="../../sst-env.d.ts" />
|
||||||
|
|
||||||
|
import "sst"
|
||||||
|
export {}
|
||||||
10
sst-env.d.ts
vendored
10
sst-env.d.ts
vendored
@@ -5,6 +5,10 @@
|
|||||||
|
|
||||||
declare module "sst" {
|
declare module "sst" {
|
||||||
export interface Resource {
|
export interface Resource {
|
||||||
|
"ADMIN_SECRET": {
|
||||||
|
"type": "sst.sst.Secret"
|
||||||
|
"value": string
|
||||||
|
}
|
||||||
"AUTH_API_URL": {
|
"AUTH_API_URL": {
|
||||||
"type": "sst.sst.Linkable"
|
"type": "sst.sst.Linkable"
|
||||||
"value": string
|
"value": string
|
||||||
@@ -91,7 +95,11 @@ declare module "sst" {
|
|||||||
"type": "sst.cloudflare.Astro"
|
"type": "sst.cloudflare.Astro"
|
||||||
"url": string
|
"url": string
|
||||||
}
|
}
|
||||||
"ZEN_MODELS": {
|
"ZEN_MODELS1": {
|
||||||
|
"type": "sst.sst.Secret"
|
||||||
|
"value": string
|
||||||
|
}
|
||||||
|
"ZEN_MODELS2": {
|
||||||
"type": "sst.sst.Secret"
|
"type": "sst.sst.Secret"
|
||||||
"value": string
|
"value": string
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user