every-plugin
Version:
48 lines (46 loc) • 1.78 kB
JavaScript
import { PluginRuntimeError } from "../errors.mjs";
import * as z$1 from "zod";
import { Context, Effect } from "effect";
//#region src/runtime/services/secrets.service.ts
const configSchema = z$1.object({ secrets: z$1.record(z$1.string(), z$1.unknown()) }).passthrough();
var SecretsConfigTag = class extends Context.Tag("SecretsConfig")() {};
var SecretsService = class extends Effect.Service()("SecretsService", { effect: Effect.gen(function* () {
const secrets = yield* SecretsConfigTag;
const hydrateValue = (value) => {
if (typeof value === "string") {
let result = value;
for (const [key, secretValue] of Object.entries(secrets)) {
const pattern = new RegExp(`{{${key}}}`, "g");
result = result.replace(pattern, String(secretValue));
}
return result;
}
if (Array.isArray(value)) return value.map(hydrateValue);
if (value && typeof value === "object") {
if (value.constructor === Object || value.constructor === void 0) {
const hydrated = {};
for (const [key, val] of Object.entries(value)) hydrated[key] = hydrateValue(val);
return hydrated;
}
const hydrated = Object.create(Object.getPrototypeOf(value));
for (const [key, val] of Object.entries(value)) hydrated[key] = hydrateValue(val);
return hydrated;
}
return value;
};
return { hydrateSecrets: (config) => Effect.gen(function* () {
const parseResult = configSchema.parse(config);
try {
return hydrateValue(parseResult);
} catch (error) {
return yield* Effect.fail(new PluginRuntimeError({
operation: "hydrate-secrets",
cause: error instanceof Error ? error : new Error(String(error)),
retryable: false
}));
}
}) };
}) }) {};
//#endregion
export { SecretsConfigTag, SecretsService };
//# sourceMappingURL=secrets.service.mjs.map