@super-repo/envx-plugins 0.2.3-b.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +380 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/auto-preload.d.ts +50 -0
  4. package/dist/auto-preload.d.ts.map +1 -0
  5. package/dist/auto-preload.js +81 -0
  6. package/dist/auto-preload.js.map +1 -0
  7. package/dist/aws.d.ts +52 -0
  8. package/dist/aws.d.ts.map +1 -0
  9. package/dist/aws.js +68 -0
  10. package/dist/aws.js.map +1 -0
  11. package/dist/azure.d.ts +46 -0
  12. package/dist/azure.d.ts.map +1 -0
  13. package/dist/azure.js +64 -0
  14. package/dist/azure.js.map +1 -0
  15. package/dist/doppler.d.ts +36 -0
  16. package/dist/doppler.d.ts.map +1 -0
  17. package/dist/doppler.js +48 -0
  18. package/dist/doppler.js.map +1 -0
  19. package/dist/gcp.d.ts +48 -0
  20. package/dist/gcp.d.ts.map +1 -0
  21. package/dist/gcp.js +56 -0
  22. package/dist/gcp.js.map +1 -0
  23. package/dist/index.d.ts +11 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +18 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/infisical.d.ts +51 -0
  28. package/dist/infisical.d.ts.map +1 -0
  29. package/dist/infisical.js +59 -0
  30. package/dist/infisical.js.map +1 -0
  31. package/dist/op.d.ts +52 -0
  32. package/dist/op.d.ts.map +1 -0
  33. package/dist/op.js +85 -0
  34. package/dist/op.js.map +1 -0
  35. package/dist/runtime.d.ts +95 -0
  36. package/dist/runtime.d.ts.map +1 -0
  37. package/dist/runtime.js +124 -0
  38. package/dist/runtime.js.map +1 -0
  39. package/dist/types.d.ts +54 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +64 -0
  42. package/dist/types.js.map +1 -0
  43. package/dist/vault.d.ts +47 -0
  44. package/dist/vault.d.ts.map +1 -0
  45. package/dist/vault.js +63 -0
  46. package/dist/vault.js.map +1 -0
  47. package/package.json +79 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-preload.js","sourceRoot":"","sources":["../src/auto-preload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAI7B,6DAA6D;AAE7D,yFAAyF;AACzF,MAAM,MAAM,GAAG,qCAAqC,CAAC;AAerD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAAoC,EACpC,IAAwB;IAExB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,UAAU,GAA6B,IAAI,GAAG,EAAE,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAE7D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAyB,CAAC;QAC9B,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,QAAQ,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;gBAAE,SAAS;YACzD,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,GAAG;gBAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAA6B,EAAE,CAAC;IAC/C,MAAM,OAAO,CAAC,GAAG,CACf,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAChD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrB,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;IAC1B,CAAC,CAAC,CACH,CAAC;IACF,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC;AAED,6DAA6D;AAE7D,2DAA2D;AAE3D;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,SAAoC;IAEpC,MAAM,GAAG,GAAuD,EAAE,CAAC;IACnE,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6DAA6D"}
package/dist/aws.d.ts ADDED
@@ -0,0 +1,52 @@
1
+ import { type SecretProvider } from "./types.js";
2
+ export interface AwsSecretsOptions {
3
+ /** AWS region the secrets live in (e.g. "us-east-1"). */
4
+ readonly region: string;
5
+ /**
6
+ * Override the default SDK client. Useful for tests, for sharing a
7
+ * client across plugins, or when your environment needs a custom
8
+ * credential provider chain. The object only needs a `send(command)`
9
+ * method that returns a `{ SecretString?: string; SecretBinary?: Uint8Array }`.
10
+ */
11
+ readonly client?: {
12
+ send: (cmd: unknown) => Promise<{
13
+ SecretString?: string;
14
+ SecretBinary?: Uint8Array;
15
+ }>;
16
+ };
17
+ /**
18
+ * Custom name for this provider instance. Defaults to `"aws-secrets"`,
19
+ * matching the conventional `${aws-secrets:my-id}` reference shape. If
20
+ * you want multiple AWS regions to coexist, give each a distinct name
21
+ * (`"aws-us"`, `"aws-eu"`) and reference accordingly.
22
+ */
23
+ readonly name?: string;
24
+ }
25
+ /**
26
+ * AWS Secrets Manager provider.
27
+ *
28
+ * ```ts
29
+ * import { awsSecrets } from "@super-repo/envx-plugins/aws";
30
+ *
31
+ * const aws = awsSecrets({ region: "us-east-1" });
32
+ * await aws.preload(["prod/db", "prod/api-key"]);
33
+ *
34
+ * envx({
35
+ * resolvers: { [aws.name]: aws.resolve },
36
+ * });
37
+ * ```
38
+ *
39
+ * Reference shape in `.env*`:
40
+ *
41
+ * ```
42
+ * DATABASE_URL=${aws-secrets:prod/db}
43
+ * API_KEY=${aws-secrets:prod/api-key}
44
+ * ```
45
+ *
46
+ * The plugin uses `@aws-sdk/client-secrets-manager` (lazy-loaded —
47
+ * only required when `preload()` runs). Install it in your app:
48
+ *
49
+ * pnpm add @aws-sdk/client-secrets-manager
50
+ */
51
+ export declare function awsSecrets(opts: AwsSecretsOptions): SecretProvider;
52
+ //# sourceMappingURL=aws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws.d.ts","sourceRoot":"","sources":["../src/aws.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjF,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;YAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,YAAY,CAAC,EAAE,UAAU,CAAC;SAC3B,CAAC,CAAC;KACJ,CAAC;IACF;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,CAkDlE"}
package/dist/aws.js ADDED
@@ -0,0 +1,68 @@
1
+ import { buildProvider, MissingSdkError } from "./types.js";
2
+ /**
3
+ * AWS Secrets Manager provider.
4
+ *
5
+ * ```ts
6
+ * import { awsSecrets } from "@super-repo/envx-plugins/aws";
7
+ *
8
+ * const aws = awsSecrets({ region: "us-east-1" });
9
+ * await aws.preload(["prod/db", "prod/api-key"]);
10
+ *
11
+ * envx({
12
+ * resolvers: { [aws.name]: aws.resolve },
13
+ * });
14
+ * ```
15
+ *
16
+ * Reference shape in `.env*`:
17
+ *
18
+ * ```
19
+ * DATABASE_URL=${aws-secrets:prod/db}
20
+ * API_KEY=${aws-secrets:prod/api-key}
21
+ * ```
22
+ *
23
+ * The plugin uses `@aws-sdk/client-secrets-manager` (lazy-loaded —
24
+ * only required when `preload()` runs). Install it in your app:
25
+ *
26
+ * pnpm add @aws-sdk/client-secrets-manager
27
+ */
28
+ export function awsSecrets(opts) {
29
+ const name = opts.name ?? "aws-secrets";
30
+ const injected = opts.client;
31
+ let client = injected ?? null;
32
+ let GetSecretValueCommand = null;
33
+ return buildProvider(name, async (id) => {
34
+ // If the caller didn't inject a client, lazy-load the SDK. With an
35
+ // injected client the SDK is bypassed entirely — useful for tests
36
+ // and for users who want a custom credential chain.
37
+ if (!client) {
38
+ try {
39
+ // Indirected through a variable so TS doesn't try to resolve
40
+ // the optional SDK at compile time (it's a peer dep).
41
+ const specifier = "@aws-sdk/client-secrets-manager";
42
+ const sdk = (await import(/* @vite-ignore */ specifier));
43
+ client = new sdk.SecretsManagerClient({
44
+ region: opts.region,
45
+ });
46
+ GetSecretValueCommand = sdk.GetSecretValueCommand;
47
+ }
48
+ catch {
49
+ throw new MissingSdkError("aws", "@aws-sdk/client-secrets-manager");
50
+ }
51
+ }
52
+ // For an injected client we hand `send()` a plain object — the test
53
+ // / custom client decides what to do with it. For the real SDK
54
+ // client we use the proper Command class.
55
+ const cmd = GetSecretValueCommand
56
+ ? new GetSecretValueCommand({ SecretId: id })
57
+ : { SecretId: id };
58
+ const r = await client.send(cmd);
59
+ if (typeof r.SecretString === "string")
60
+ return r.SecretString;
61
+ if (r.SecretBinary) {
62
+ return Buffer.from(r.SecretBinary).toString("utf8");
63
+ }
64
+ throw new Error(`secret '${id}' has neither SecretString nor SecretBinary`);
65
+ });
66
+ }
67
+ // #endregion -----------------------------------------------
68
+ //# sourceMappingURL=aws.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws.js","sourceRoot":"","sources":["../src/aws.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAuB,MAAM,YAAY,CAAC;AA4BjF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,UAAU,CAAC,IAAuB;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7B,IAAI,MAAM,GAAuC,QAAQ,IAAI,IAAI,CAAC;IAClE,IAAI,qBAAqB,GAEd,IAAI,CAAC;IAEhB,OAAO,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QACtC,mEAAmE;QACnE,kEAAkE;QAClE,oDAAoD;QACpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC;gBAWH,6DAA6D;gBAC7D,sDAAsD;gBACtD,MAAM,SAAS,GAAG,iCAAiC,CAAC;gBACpD,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAsB,CAAC;gBAC9E,MAAM,GAAG,IAAI,GAAG,CAAC,oBAAoB,CAAC;oBACpC,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAA2C,CAAC;gBAC7C,qBAAqB,GAAG,GAAG,CAAC,qBAAqB,CAAC;YACpD,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,eAAe,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,oEAAoE;QACpE,+DAA+D;QAC/D,0CAA0C;QAC1C,MAAM,GAAG,GAAG,qBAAqB;YAC/B,CAAC,CAAC,IAAI,qBAAqB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YAC7C,CAAC,CAAE,EAAE,QAAQ,EAAE,EAAE,EAAc,CAAC;QAClC,MAAM,CAAC,GAAG,MAAM,MAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC,YAAY,CAAC;QAC9D,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;YACnB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,6CAA6C,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,6DAA6D"}
@@ -0,0 +1,46 @@
1
+ import { type SecretProvider } from "./types.js";
2
+ export interface AzureKeyVaultOptions {
3
+ /** Vault URL (e.g. "https://my-vault.vault.azure.net"). */
4
+ readonly vaultUrl: string;
5
+ /**
6
+ * Custom credential. Defaults to `new DefaultAzureCredential()` from
7
+ * `@azure/identity` — which walks env vars, managed identity, Azure
8
+ * CLI, etc. Override for tests or specialized credential chains.
9
+ */
10
+ readonly credential?: unknown;
11
+ /** Pre-built SecretClient for tests. */
12
+ readonly client?: {
13
+ getSecret: (name: string, opts?: {
14
+ version?: string;
15
+ }) => Promise<{
16
+ value?: string | null;
17
+ }>;
18
+ };
19
+ /** Provider name, defaults to `"azure-keyvault"`. */
20
+ readonly name?: string;
21
+ }
22
+ /**
23
+ * Azure Key Vault provider.
24
+ *
25
+ * ```ts
26
+ * import { azureKeyVault } from "@super-repo/envx-plugins/azure";
27
+ *
28
+ * const az = azureKeyVault({ vaultUrl: "https://my-vault.vault.azure.net" });
29
+ * await az.preload(["prod-db", "prod-api"]);
30
+ *
31
+ * envx({ resolvers: { [az.name]: az.resolve } });
32
+ * ```
33
+ *
34
+ * Reference shape:
35
+ *
36
+ * ```
37
+ * DB_URL=${azure-keyvault:prod-db}
38
+ * API_KEY=${azure-keyvault:prod-api@<version>}
39
+ * ```
40
+ *
41
+ * Uses `@azure/keyvault-secrets` + `@azure/identity` (lazy-loaded):
42
+ *
43
+ * pnpm add @azure/keyvault-secrets @azure/identity
44
+ */
45
+ export declare function azureKeyVault(opts: AzureKeyVaultOptions): SecretProvider;
46
+ //# sourceMappingURL=azure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure.d.ts","sourceRoot":"","sources":["../src/azure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjF,MAAM,WAAW,oBAAoB;IACnC,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,wCAAwC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC;YAChE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;SACvB,CAAC,CAAC;KACJ,CAAC;IACF,qDAAqD;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,cAAc,CAgDxE"}
package/dist/azure.js ADDED
@@ -0,0 +1,64 @@
1
+ import { buildProvider, MissingSdkError } from "./types.js";
2
+ /**
3
+ * Azure Key Vault provider.
4
+ *
5
+ * ```ts
6
+ * import { azureKeyVault } from "@super-repo/envx-plugins/azure";
7
+ *
8
+ * const az = azureKeyVault({ vaultUrl: "https://my-vault.vault.azure.net" });
9
+ * await az.preload(["prod-db", "prod-api"]);
10
+ *
11
+ * envx({ resolvers: { [az.name]: az.resolve } });
12
+ * ```
13
+ *
14
+ * Reference shape:
15
+ *
16
+ * ```
17
+ * DB_URL=${azure-keyvault:prod-db}
18
+ * API_KEY=${azure-keyvault:prod-api@<version>}
19
+ * ```
20
+ *
21
+ * Uses `@azure/keyvault-secrets` + `@azure/identity` (lazy-loaded):
22
+ *
23
+ * pnpm add @azure/keyvault-secrets @azure/identity
24
+ */
25
+ export function azureKeyVault(opts) {
26
+ const name = opts.name ?? "azure-keyvault";
27
+ let client = opts.client ?? null;
28
+ return buildProvider(name, async (id) => {
29
+ if (!client) {
30
+ let secretsSdk = null;
31
+ let credential = opts.credential;
32
+ try {
33
+ const secretsSpecifier = "@azure/keyvault-secrets";
34
+ secretsSdk = (await import(/* @vite-ignore */ secretsSpecifier));
35
+ }
36
+ catch {
37
+ throw new MissingSdkError("azure", "@azure/keyvault-secrets");
38
+ }
39
+ if (!credential) {
40
+ try {
41
+ const identitySpecifier = "@azure/identity";
42
+ const identity = (await import(/* @vite-ignore */ identitySpecifier));
43
+ credential = new identity.DefaultAzureCredential();
44
+ }
45
+ catch {
46
+ throw new MissingSdkError("azure", "@azure/identity");
47
+ }
48
+ }
49
+ client = new secretsSdk.SecretClient(opts.vaultUrl, credential);
50
+ }
51
+ const at = id.indexOf("@");
52
+ const secretName = at >= 0 ? id.slice(0, at) : id;
53
+ const version = at >= 0 ? id.slice(at + 1) : undefined;
54
+ const result = version
55
+ ? await client.getSecret(secretName, { version })
56
+ : await client.getSecret(secretName);
57
+ if (typeof result.value !== "string") {
58
+ throw new Error(`secret '${id}' had no value`);
59
+ }
60
+ return result.value;
61
+ });
62
+ }
63
+ // #endregion -----------------------------------------------
64
+ //# sourceMappingURL=azure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure.js","sourceRoot":"","sources":["../src/azure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAuB,MAAM,YAAY,CAAC;AAuBjF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,aAAa,CAAC,IAA0B;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,gBAAgB,CAAC;IAC3C,IAAI,MAAM,GAA0C,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IAExE,OAAO,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YASZ,IAAI,UAAU,GAA2B,IAAI,CAAC;YAC9C,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;gBACnD,UAAU,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAA+B,CAAC;YACjG,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;oBAC5C,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAgC,CAAC;oBACrG,UAAU,GAAG,IAAI,QAAQ,CAAC,sBAAsB,EAAE,CAAC;gBACrD,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;YACD,MAAM,GAAG,IAAI,UAAU,CAAC,YAAY,CAClC,IAAI,CAAC,QAAQ,EACb,UAAU,CACkC,CAAC;QACjD,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,UAAU,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,MAAM,MAAM,GAAG,OAAO;YACpB,CAAC,CAAC,MAAM,MAAO,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC;YAClD,CAAC,CAAC,MAAM,MAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,6DAA6D"}
@@ -0,0 +1,36 @@
1
+ import { type SecretProvider } from "./types.js";
2
+ export interface DopplerOptions {
3
+ /** Doppler service token (per-config). Required. */
4
+ readonly token: string;
5
+ /** Override Doppler's REST endpoint (testing / self-hosted). */
6
+ readonly endpoint?: string;
7
+ /** Override the global fetch (testing). */
8
+ readonly fetchImpl?: typeof fetch;
9
+ /** Provider name, defaults to `"doppler"`. */
10
+ readonly name?: string;
11
+ }
12
+ /**
13
+ * Doppler provider — fetches secrets via the REST API using a service
14
+ * token. No SDK install required (uses native `fetch`).
15
+ *
16
+ * ```ts
17
+ * import { doppler } from "@super-repo/envx-plugins/doppler";
18
+ *
19
+ * const dop = doppler({ token: process.env.DOPPLER_TOKEN! });
20
+ * await dop.preload(["DATABASE_URL", "API_KEY"]);
21
+ *
22
+ * envx({ resolvers: { [dop.name]: dop.resolve } });
23
+ * ```
24
+ *
25
+ * Reference shape — IDs are Doppler secret names:
26
+ *
27
+ * ```
28
+ * DATABASE_URL=${doppler:DATABASE_URL}
29
+ * API_KEY=${doppler:API_KEY}
30
+ * ```
31
+ *
32
+ * Service-account tokens scope to one config (project + environment),
33
+ * so you typically don't need to specify project/config explicitly.
34
+ */
35
+ export declare function doppler(opts: DopplerOptions): SecretProvider;
36
+ //# sourceMappingURL=doppler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doppler.d.ts","sourceRoot":"","sources":["../src/doppler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAIhE,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,2CAA2C;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CA0B5D"}
@@ -0,0 +1,48 @@
1
+ import { buildProvider } from "./types.js";
2
+ /**
3
+ * Doppler provider — fetches secrets via the REST API using a service
4
+ * token. No SDK install required (uses native `fetch`).
5
+ *
6
+ * ```ts
7
+ * import { doppler } from "@super-repo/envx-plugins/doppler";
8
+ *
9
+ * const dop = doppler({ token: process.env.DOPPLER_TOKEN! });
10
+ * await dop.preload(["DATABASE_URL", "API_KEY"]);
11
+ *
12
+ * envx({ resolvers: { [dop.name]: dop.resolve } });
13
+ * ```
14
+ *
15
+ * Reference shape — IDs are Doppler secret names:
16
+ *
17
+ * ```
18
+ * DATABASE_URL=${doppler:DATABASE_URL}
19
+ * API_KEY=${doppler:API_KEY}
20
+ * ```
21
+ *
22
+ * Service-account tokens scope to one config (project + environment),
23
+ * so you typically don't need to specify project/config explicitly.
24
+ */
25
+ export function doppler(opts) {
26
+ const name = opts.name ?? "doppler";
27
+ const endpoint = (opts.endpoint ?? "https://api.doppler.com").replace(/\/$/, "");
28
+ const doFetch = opts.fetchImpl ?? fetch;
29
+ const auth = "Basic " + Buffer.from(`${opts.token}:`).toString("base64");
30
+ return buildProvider(name, async (id) => {
31
+ const url = `${endpoint}/v3/configs/config/secret?name=${encodeURIComponent(id)}`;
32
+ const r = await doFetch(url, {
33
+ headers: { Authorization: auth, Accept: "application/json" },
34
+ });
35
+ if (!r.ok) {
36
+ const text = await r.text().catch(() => "");
37
+ throw new Error(`doppler GET ${url} → ${String(r.status)} ${r.statusText}${text ? `: ${text}` : ""}`);
38
+ }
39
+ const body = (await r.json());
40
+ const v = body.value?.computed ?? body.value?.raw;
41
+ if (typeof v !== "string") {
42
+ throw new Error(`doppler: secret '${id}' missing value.computed/raw`);
43
+ }
44
+ return v;
45
+ });
46
+ }
47
+ // #endregion -----------------------------------------------
48
+ //# sourceMappingURL=doppler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doppler.js","sourceRoot":"","sources":["../src/doppler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuB,MAAM,YAAY,CAAC;AAehE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,OAAO,CAAC,IAAoB;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;IACpC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,yBAAyB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEzE,OAAO,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QACtC,MAAM,GAAG,GAAG,GAAG,QAAQ,kCAAkC,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;QAClF,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE;YAC3B,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE;SAC7D,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,eAAe,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACrF,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAE3B,CAAC;QACF,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;QAClD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,8BAA8B,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC;AAED,6DAA6D"}
package/dist/gcp.d.ts ADDED
@@ -0,0 +1,48 @@
1
+ import { type SecretProvider } from "./types.js";
2
+ export interface GcpSecretsOptions {
3
+ /** Google Cloud project ID (e.g. "acme-prod"). */
4
+ readonly projectId: string;
5
+ /**
6
+ * Default version alias. `"latest"` (the default) reads the most
7
+ * recent enabled version. Override per-id by including `@<version>`
8
+ * in the reference: `${gcp-secrets:my-secret@3}`.
9
+ */
10
+ readonly version?: string;
11
+ /** Optional pre-built SecretManagerServiceClient (e.g. for tests). */
12
+ readonly client?: {
13
+ accessSecretVersion: (req: {
14
+ name: string;
15
+ }) => Promise<[{
16
+ payload?: {
17
+ data?: Buffer | string | null;
18
+ };
19
+ } | null, ...unknown[]]>;
20
+ };
21
+ /** Provider name, defaults to `"gcp-secrets"`. */
22
+ readonly name?: string;
23
+ }
24
+ /**
25
+ * GCP Secret Manager provider.
26
+ *
27
+ * ```ts
28
+ * import { gcpSecrets } from "@super-repo/envx-plugins/gcp";
29
+ *
30
+ * const gcp = gcpSecrets({ projectId: "acme-prod" });
31
+ * await gcp.preload(["prod-db-url", "prod-api-key"]);
32
+ *
33
+ * envx({ resolvers: { [gcp.name]: gcp.resolve } });
34
+ * ```
35
+ *
36
+ * Reference shape:
37
+ *
38
+ * ```
39
+ * DB_URL=${gcp-secrets:prod-db-url} # uses default version (latest)
40
+ * API_KEY=${gcp-secrets:prod-api-key@3} # pin to version 3
41
+ * ```
42
+ *
43
+ * Uses `@google-cloud/secret-manager` (lazy-loaded). Install:
44
+ *
45
+ * pnpm add @google-cloud/secret-manager
46
+ */
47
+ export declare function gcpSecrets(opts: GcpSecretsOptions): SecretProvider;
48
+ //# sourceMappingURL=gcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp.d.ts","sourceRoot":"","sources":["../src/gcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjF,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,mBAAmB,EAAE,CAAC,GAAG,EAAE;YACzB,IAAI,EAAE,MAAM,CAAC;SACd,KAAK,OAAO,CAAC,CAAC;YAAE,OAAO,CAAC,EAAE;gBAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;aAAE,CAAA;SAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;KACvF,CAAC;IACF,kDAAkD;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,CAgClE"}
package/dist/gcp.js ADDED
@@ -0,0 +1,56 @@
1
+ import { buildProvider, MissingSdkError } from "./types.js";
2
+ /**
3
+ * GCP Secret Manager provider.
4
+ *
5
+ * ```ts
6
+ * import { gcpSecrets } from "@super-repo/envx-plugins/gcp";
7
+ *
8
+ * const gcp = gcpSecrets({ projectId: "acme-prod" });
9
+ * await gcp.preload(["prod-db-url", "prod-api-key"]);
10
+ *
11
+ * envx({ resolvers: { [gcp.name]: gcp.resolve } });
12
+ * ```
13
+ *
14
+ * Reference shape:
15
+ *
16
+ * ```
17
+ * DB_URL=${gcp-secrets:prod-db-url} # uses default version (latest)
18
+ * API_KEY=${gcp-secrets:prod-api-key@3} # pin to version 3
19
+ * ```
20
+ *
21
+ * Uses `@google-cloud/secret-manager` (lazy-loaded). Install:
22
+ *
23
+ * pnpm add @google-cloud/secret-manager
24
+ */
25
+ export function gcpSecrets(opts) {
26
+ const name = opts.name ?? "gcp-secrets";
27
+ const defaultVersion = opts.version ?? "latest";
28
+ let client = opts.client ?? null;
29
+ return buildProvider(name, async (id) => {
30
+ if (!client) {
31
+ try {
32
+ const specifier = "@google-cloud/secret-manager";
33
+ const sdk = (await import(/* @vite-ignore */ specifier));
34
+ client = new sdk.SecretManagerServiceClient();
35
+ }
36
+ catch {
37
+ throw new MissingSdkError("gcp", "@google-cloud/secret-manager");
38
+ }
39
+ }
40
+ // `id` may include an `@<version>` suffix.
41
+ const at = id.indexOf("@");
42
+ const secretId = at >= 0 ? id.slice(0, at) : id;
43
+ const version = at >= 0 ? id.slice(at + 1) : defaultVersion;
44
+ const fullName = `projects/${opts.projectId}/secrets/${secretId}/versions/${version}`;
45
+ const [response] = await client.accessSecretVersion({ name: fullName });
46
+ const data = response?.payload?.data;
47
+ if (data === null || data === undefined) {
48
+ throw new Error(`secret '${id}' had empty payload`);
49
+ }
50
+ if (typeof data === "string")
51
+ return data;
52
+ return Buffer.from(data).toString("utf8");
53
+ });
54
+ }
55
+ // #endregion -----------------------------------------------
56
+ //# sourceMappingURL=gcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp.js","sourceRoot":"","sources":["../src/gcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAuB,MAAM,YAAY,CAAC;AAuBjF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,UAAU,CAAC,IAAuB;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC;IACxC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC;IAChD,IAAI,MAAM,GAAuC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IAErE,OAAO,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC;gBAIH,MAAM,SAAS,GAAG,8BAA8B,CAAC;gBACjD,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAsB,CAAC;gBAC9E,MAAM,GAAG,IAAI,GAAG,CAAC,0BAA0B,EAA4C,CAAC;YAC1F,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,eAAe,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;QAC5D,MAAM,QAAQ,GAAG,YAAY,IAAI,CAAC,SAAS,YAAY,QAAQ,aAAa,OAAO,EAAE,CAAC;QACtF,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,MAAO,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;QACrC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,6DAA6D"}
@@ -0,0 +1,11 @@
1
+ export { buildProvider, MissingSdkError, type SecretProvider, } from "./types.js";
2
+ export { autoPreload, asResolvers, type AutoPreloadOptions } from "./auto-preload.js";
3
+ export { createSecretRuntime, type SecretRuntime, type SecretRuntimeOptions, type SecretRuntimeStats, } from "./runtime.js";
4
+ export { awsSecrets, type AwsSecretsOptions } from "./aws.js";
5
+ export { gcpSecrets, type GcpSecretsOptions } from "./gcp.js";
6
+ export { azureKeyVault, type AzureKeyVaultOptions } from "./azure.js";
7
+ export { hcVault, type HcVaultOptions } from "./vault.js";
8
+ export { onePassword, type OnePasswordOptions } from "./op.js";
9
+ export { doppler, type DopplerOptions } from "./doppler.js";
10
+ export { infisical, type InfisicalOptions } from "./infisical.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,aAAa,EACb,eAAe,EACf,KAAK,cAAc,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAMtF,OAAO,EACL,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ // #region -- @super-repo/envx-plugins ----------------------
2
+ // Shared contract + helpers
3
+ export { buildProvider, MissingSdkError, } from "./types.js";
4
+ export { autoPreload, asResolvers } from "./auto-preload.js";
5
+ // Per-provider re-exports for the convenience of single-line imports.
6
+ // Subpath imports (`@super-repo/envx-plugins/aws`) skip the others'
7
+ // dynamic-import code paths entirely, so they're preferred when bundle
8
+ // size matters.
9
+ export { createSecretRuntime, } from "./runtime.js";
10
+ export { awsSecrets } from "./aws.js";
11
+ export { gcpSecrets } from "./gcp.js";
12
+ export { azureKeyVault } from "./azure.js";
13
+ export { hcVault } from "./vault.js";
14
+ export { onePassword } from "./op.js";
15
+ export { doppler } from "./doppler.js";
16
+ export { infisical } from "./infisical.js";
17
+ // #endregion -----------------------------------------------
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,4BAA4B;AAC5B,OAAO,EACL,aAAa,EACb,eAAe,GAEhB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,WAAW,EAA2B,MAAM,mBAAmB,CAAC;AAEtF,sEAAsE;AACtE,oEAAoE;AACpE,uEAAuE;AACvE,gBAAgB;AAChB,OAAO,EACL,mBAAmB,GAIpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAA0B,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,UAAU,EAA0B,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,aAAa,EAA6B,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,OAAO,EAAuB,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,WAAW,EAA2B,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAuB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAyB,MAAM,gBAAgB,CAAC;AAElE,6DAA6D"}
@@ -0,0 +1,51 @@
1
+ import { type SecretProvider } from "./types.js";
2
+ export interface InfisicalOptions {
3
+ /**
4
+ * Service token or universal-auth access token. Required. Pass a
5
+ * universal-auth token from your machine identity flow, or a project
6
+ * service token for simpler setups.
7
+ */
8
+ readonly token: string;
9
+ /** Project ID (workspace ID, "workspaceId"). */
10
+ readonly projectId: string;
11
+ /** Environment slug — `dev`, `staging`, `prod`, etc. */
12
+ readonly environment: string;
13
+ /**
14
+ * Folder path inside the environment. Defaults to `/`.
15
+ */
16
+ readonly secretPath?: string;
17
+ /** Self-hosted Infisical endpoint. Defaults to the SaaS host. */
18
+ readonly endpoint?: string;
19
+ /** Override the global fetch (testing). */
20
+ readonly fetchImpl?: typeof fetch;
21
+ /** Provider name, defaults to `"infisical"`. */
22
+ readonly name?: string;
23
+ }
24
+ /**
25
+ * Infisical provider — uses the v3 REST API with a service / machine
26
+ * identity token. No SDK install required (uses native `fetch`).
27
+ *
28
+ * ```ts
29
+ * import { infisical } from "@super-repo/envx-plugins/infisical";
30
+ *
31
+ * const inf = infisical({
32
+ * token: process.env.INFISICAL_TOKEN!,
33
+ * projectId: process.env.INFISICAL_PROJECT_ID!,
34
+ * environment: "prod",
35
+ * });
36
+ * await inf.preload(["DATABASE_URL", "API_KEY"]);
37
+ *
38
+ * envx({ resolvers: { [inf.name]: inf.resolve } });
39
+ * ```
40
+ *
41
+ * Reference shape — IDs are Infisical secret names:
42
+ *
43
+ * ```
44
+ * DATABASE_URL=${infisical:DATABASE_URL}
45
+ * API_KEY=${infisical:API_KEY}
46
+ * ```
47
+ *
48
+ * Self-hosted? Pass `endpoint: "https://infisical.example.com"`.
49
+ */
50
+ export declare function infisical(opts: InfisicalOptions): SecretProvider;
51
+ //# sourceMappingURL=infisical.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infisical.d.ts","sourceRoot":"","sources":["../src/infisical.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAIhE,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wDAAwD;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,2CAA2C;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,gDAAgD;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,cAAc,CAkChE"}
@@ -0,0 +1,59 @@
1
+ import { buildProvider } from "./types.js";
2
+ /**
3
+ * Infisical provider — uses the v3 REST API with a service / machine
4
+ * identity token. No SDK install required (uses native `fetch`).
5
+ *
6
+ * ```ts
7
+ * import { infisical } from "@super-repo/envx-plugins/infisical";
8
+ *
9
+ * const inf = infisical({
10
+ * token: process.env.INFISICAL_TOKEN!,
11
+ * projectId: process.env.INFISICAL_PROJECT_ID!,
12
+ * environment: "prod",
13
+ * });
14
+ * await inf.preload(["DATABASE_URL", "API_KEY"]);
15
+ *
16
+ * envx({ resolvers: { [inf.name]: inf.resolve } });
17
+ * ```
18
+ *
19
+ * Reference shape — IDs are Infisical secret names:
20
+ *
21
+ * ```
22
+ * DATABASE_URL=${infisical:DATABASE_URL}
23
+ * API_KEY=${infisical:API_KEY}
24
+ * ```
25
+ *
26
+ * Self-hosted? Pass `endpoint: "https://infisical.example.com"`.
27
+ */
28
+ export function infisical(opts) {
29
+ const name = opts.name ?? "infisical";
30
+ const endpoint = (opts.endpoint ?? "https://app.infisical.com").replace(/\/$/, "");
31
+ const secretPath = opts.secretPath ?? "/";
32
+ const doFetch = opts.fetchImpl ?? fetch;
33
+ return buildProvider(name, async (id) => {
34
+ const params = new URLSearchParams({
35
+ workspaceId: opts.projectId,
36
+ environment: opts.environment,
37
+ secretPath,
38
+ });
39
+ const url = `${endpoint}/api/v3/secrets/raw/${encodeURIComponent(id)}?${params.toString()}`;
40
+ const r = await doFetch(url, {
41
+ headers: {
42
+ Authorization: `Bearer ${opts.token}`,
43
+ Accept: "application/json",
44
+ },
45
+ });
46
+ if (!r.ok) {
47
+ const text = await r.text().catch(() => "");
48
+ throw new Error(`infisical GET ${url} → ${String(r.status)} ${r.statusText}${text ? `: ${text}` : ""}`);
49
+ }
50
+ const body = (await r.json());
51
+ const v = body.secret?.secretValue;
52
+ if (typeof v !== "string") {
53
+ throw new Error(`infisical: secret '${id}' missing secret.secretValue`);
54
+ }
55
+ return v;
56
+ });
57
+ }
58
+ // #endregion -----------------------------------------------
59
+ //# sourceMappingURL=infisical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infisical.js","sourceRoot":"","sources":["../src/infisical.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuB,MAAM,YAAY,CAAC;AA2BhE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,SAAS,CAAC,IAAsB;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC;IACtC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,2BAA2B,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAExC,OAAO,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YACjC,WAAW,EAAE,IAAI,CAAC,SAAS;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU;SACX,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,GAAG,QAAQ,uBAAuB,kBAAkB,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC5F,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE;YAC3B,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;gBACrC,MAAM,EAAE,kBAAkB;aAC3B;SACF,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,iBAAiB,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACvF,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAE3B,CAAC;QACF,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC;QACnC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,sBAAsB,EAAE,8BAA8B,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC;AAED,6DAA6D"}