{"version":3,"file":"secrets.service.cjs","names":["z","Context","Effect","PluginRuntimeError"],"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,OAAO,GAAGA,IAAE,QAAQ,CAAC,EAC3C,CAAC,CAAC,CACD,YAAY;AAEf,IAAa,mBAAb,cAAsCC,eAAQ,IAAI,eAAe,CAAC,CAGhE,CAAC,CAAC,CAAC;AAEL,IAAa,iBAAb,cAAoCC,cAAO,QAAwB,CAAC,CAAC,kBAAkB,EACrF,QAAQA,cAAO,IAAI,aAAa;CAC9B,MAAM,UAAU,OAAO;CAEvB,MAAM,gBAAgB,UAA4B;EAChD,IAAI,OAAO,UAAU,UAAU;GAC7B,IAAI,SAAS;GACb,KAAK,MAAM,CAAC,KAAK,gBAAgB,OAAO,QAAQ,OAAO,GAAG;IACxD,MAAM,UAAU,IAAI,OAAO,KAAK,IAAI,KAAK,GAAG;IAC5C,SAAS,OAAO,QAAQ,SAAS,OAAO,WAAW,CAAC;GACtD;GACA,OAAO;EACT;EAEA,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,IAAI,YAAY;EAG/B,IAAI,SAAS,OAAO,UAAU,UAAU;GAGtC,IAFsB,MAAM,gBAAgB,UAAU,MAAM,gBAAgB,QAEzD;IACjB,MAAM,WAAoC,CAAC;IAC3C,KAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,KAAK,GAC3C,SAAS,OAAO,aAAa,GAAG;IAElC,OAAO;GACT;GAEA,MAAM,WAAW,OAAO,OAAO,OAAO,eAAe,KAAK,CAAC;GAC3D,KAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,KAAK,GAC3C,SAAS,OAAO,aAAa,GAAG;GAElC,OAAO;EACT;EAEA,OAAO;CACT;CAEA,OAAO,EACL,iBAAoB,WAClBA,cAAO,IAAI,aAAa;EACtB,MAAM,cAAc,aAAa,MAAM,MAAM;EAC7C,IAAI;GACF,OAAO,aAAa,WAAW;EACjC,SAAS,OAAO;GACd,OAAO,OAAOA,cAAO,KACnB,IAAIC,kCAAmB;IACrB,WAAW;IACX,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;IAC/D,WAAW;GACb,CAAC,CACH;EACF;CACF,CAAC,EACL;AACF,CAAC,EACH,CAAC,CAAC,CAAC,CAAC"}