{"version":3,"file":"secrets.service.mjs","names":["z"],"sources":["../../../src/runtime/services/secrets.service.ts"],"sourcesContent":["import { Context, Effect } from \"effect\";\nimport * as z from \"zod\";\nimport type { SecretsConfig } from \"../../types\";\nimport { PluginRuntimeError } from \"../errors\";\n\nconst configSchema = z\n  .object({\n    secrets: z.record(z.string(), z.unknown()),\n  })\n  .passthrough();\n\nexport class SecretsConfigTag extends Context.Tag(\"SecretsConfig\")<\n  SecretsConfigTag,\n  SecretsConfig\n>() {}\n\nexport class SecretsService extends Effect.Service<SecretsService>()(\"SecretsService\", {\n  effect: Effect.gen(function* () {\n    const secrets = yield* SecretsConfigTag;\n\n    const hydrateValue = (value: unknown): unknown => {\n      if (typeof value === \"string\") {\n        let result = value;\n        for (const [key, secretValue] of Object.entries(secrets)) {\n          const pattern = new RegExp(`{{${key}}}`, \"g\");\n          result = result.replace(pattern, String(secretValue));\n        }\n        return result;\n      }\n\n      if (Array.isArray(value)) {\n        return value.map(hydrateValue);\n      }\n\n      if (value && typeof value === \"object\") {\n        const isPlainObject = value.constructor === Object || value.constructor === undefined;\n\n        if (isPlainObject) {\n          const hydrated: Record<string, unknown> = {};\n          for (const [key, val] of Object.entries(value)) {\n            hydrated[key] = hydrateValue(val);\n          }\n          return hydrated;\n        }\n\n        const hydrated = Object.create(Object.getPrototypeOf(value));\n        for (const [key, val] of Object.entries(value)) {\n          hydrated[key] = hydrateValue(val);\n        }\n        return hydrated;\n      }\n\n      return value;\n    };\n\n    return {\n      hydrateSecrets: <T>(config: T) =>\n        Effect.gen(function* () {\n          const parseResult = configSchema.parse(config);\n          try {\n            return hydrateValue(parseResult) as T;\n          } catch (error) {\n            return yield* Effect.fail(\n              new PluginRuntimeError({\n                operation: \"hydrate-secrets\",\n                cause: error instanceof Error ? error : new Error(String(error)),\n                retryable: false,\n              }),\n            );\n          }\n        }),\n    };\n  }),\n}) {}\n"],"mappings":";;;;;AAKA,MAAM,eAAeA,IAClB,OAAO,EACN,SAASA,IAAE,OAAOA,IAAE,QAAQ,EAAEA,IAAE,SAAS,CAAC,EAC3C,CAAC,CACD,aAAa;AAEhB,IAAa,mBAAb,cAAsC,QAAQ,IAAI,gBAAgB,EAG/D,CAAC;AAEJ,IAAa,iBAAb,cAAoC,OAAO,SAAyB,CAAC,kBAAkB,EACrF,QAAQ,OAAO,IAAI,aAAa;CAC9B,MAAM,UAAU,OAAO;CAEvB,MAAM,gBAAgB,UAA4B;AAChD,MAAI,OAAO,UAAU,UAAU;GAC7B,IAAI,SAAS;AACb,QAAK,MAAM,CAAC,KAAK,gBAAgB,OAAO,QAAQ,QAAQ,EAAE;IACxD,MAAM,UAAU,IAAI,OAAO,KAAK,IAAI,KAAK,IAAI;AAC7C,aAAS,OAAO,QAAQ,SAAS,OAAO,YAAY,CAAC;;AAEvD,UAAO;;AAGT,MAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,IAAI,aAAa;AAGhC,MAAI,SAAS,OAAO,UAAU,UAAU;AAGtC,OAFsB,MAAM,gBAAgB,UAAU,MAAM,gBAAgB,QAEzD;IACjB,MAAM,WAAoC,EAAE;AAC5C,SAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,MAAM,CAC5C,UAAS,OAAO,aAAa,IAAI;AAEnC,WAAO;;GAGT,MAAM,WAAW,OAAO,OAAO,OAAO,eAAe,MAAM,CAAC;AAC5D,QAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,MAAM,CAC5C,UAAS,OAAO,aAAa,IAAI;AAEnC,UAAO;;AAGT,SAAO;;AAGT,QAAO,EACL,iBAAoB,WAClB,OAAO,IAAI,aAAa;EACtB,MAAM,cAAc,aAAa,MAAM,OAAO;AAC9C,MAAI;AACF,UAAO,aAAa,YAAY;WACzB,OAAO;AACd,UAAO,OAAO,OAAO,KACnB,IAAI,mBAAmB;IACrB,WAAW;IACX,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,MAAM,CAAC;IAChE,WAAW;IACZ,CAAC,CACH;;GAEH,EACL;EACD,EACH,CAAC,CAAC"}