( values: T, )
| 22 | |
| 23 | /** Create a typed secrets object from a plain record of name→value pairs. */ |
| 24 | export function createSecrets<T extends Record<string, string>>( |
| 25 | values: T, |
| 26 | ): Secrets<keyof T & string> { |
| 27 | const registry = new Map<string, string>(Object.entries(values)) |
| 28 | const obj = {} as Record<string, SecretRef> |
| 29 | |
| 30 | for (const name of Object.keys(values)) { |
| 31 | obj[name] = Object.freeze({ __secretName: name }) |
| 32 | } |
| 33 | |
| 34 | Object.defineProperty(obj, REGISTRY, { |
| 35 | value: registry, |
| 36 | enumerable: false, |
| 37 | configurable: false, |
| 38 | writable: false, |
| 39 | }) |
| 40 | |
| 41 | return obj as Secrets<keyof T & string> |
| 42 | } |
| 43 | |
| 44 | /** Marker type for a bearer-token value derived from a SecretRef. */ |
| 45 | export type BearerRef = { readonly __bearerRef: SecretRef } |
no outgoing calls