/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/console/resource/resource.node.ts
71 строка
3 KB
Adam
feat: initial datalake and stats site (#28666)
26 май 2026, 01:34
Не верифицирован
26 май 2026, 01:34
5b02ac4
Код
Авторство
О чём код?
import type { KVNamespaceListOptions, KVNamespaceListResult, KVNamespacePutOptions } from "@cloudflare/workers-types" import { Resource as ResourceBase } from "sst" import Cloudflare from "cloudflare" export const waitUntil = async (promise: Promise<any>) => { await promise } export const Resource = new Proxy( {}, { get(_target, prop: keyof typeof ResourceBase) { const value = ResourceBase[prop] const secrets = ResourceBase as unknown as Record<string, { value: string }> if ("type" in value) { // @ts-ignore if (value.type === "sst.cloudflare.Bucket") { return { put: async () => {}, } } // @ts-ignore if (value.type === "sst.cloudflare.Kv") { const client = new Cloudflare({ apiToken: secrets.CLOUDFLARE_API_TOKEN.value, }) // @ts-ignore const namespaceId = value.namespaceId const accountId = secrets.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, 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<KVNamespaceListResult<unknown, string>> => 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 }, }, ) as Record<string, any>