@distilled.cloud/doppler 1.0.0-rc.12 → 1.0.0-rc.13

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.
package/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # @distilled.cloud/doppler
2
+
3
+ Effect-native SDK for [doppler](https://www.npmjs.com/package/@distilled.cloud/doppler).
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @distilled.cloud/doppler effect
9
+ ```
10
+
11
+ ## Quick start
12
+
13
+ ```ts
14
+ import { Effect, Layer } from "effect";
15
+ import * as FetchHttpClient from "effect/http/FetchHttpClient";
16
+ import * as Doppler from "@distilled.cloud/doppler";
17
+
18
+ const program = Effect.gen(function* () {
19
+ const result = yield* Doppler.projectsList({});
20
+ return result;
21
+ });
22
+
23
+ const Live = Layer.mergeAll(
24
+ FetchHttpClient.layer,
25
+ Doppler.CredentialsFromEnv,
26
+ Doppler.DopplerProtocol,
27
+ );
28
+
29
+ program.pipe(Effect.provide(Live), Effect.runPromise);
30
+ ```
31
+
32
+ ## Auth
33
+
34
+ Required: `DOPPLER_API_KEY`, `DOPPLER_TOKEN`. Optional: `DOPPLER_API_BASE_URL`. Sent as `Authorization: Bearer`.
@@ -18,9 +18,9 @@ export interface Config {
18
18
  declare const Credentials_base: Context.ServiceClass<Credentials, "DopplerCredentials", Effect.Effect<Config, never, never>>;
19
19
  export declare class Credentials extends Credentials_base {
20
20
  }
21
- /** Layer from a plain API token + optional base URL. */
21
+ /** Layer from a plain or redacted API token and optional base URL. */
22
22
  export declare const fromApiKey: (config: {
23
- readonly apiKey: string;
23
+ readonly apiKey: string | Redacted.Redacted<string>;
24
24
  readonly apiBaseUrl?: string;
25
25
  }) => Layer.Layer<Credentials>;
26
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAG5C,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAE9D,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;;AAED,qBAAa,WAAY,SAAQ,gBAGR;CAAG;AAE5B,wDAAwD;AACxD,eAAO,MAAM,UAAU,WAAY;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,KAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAOxB,CAAC;AAEJ;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAiBvD,CAAC"}
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAG5C,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAE9D,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;;AAED,qBAAa,WAAY,SAAQ,gBAGR;CAAG;AAE5B,sEAAsE;AACtE,eAAO,MAAM,UAAU,WAAY;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,KAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CASxB,CAAC;AAEJ;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAiBvD,CAAC"}
@@ -14,9 +14,11 @@ import { ConfigError } from "@distilled.cloud/core/errors";
14
14
  export const DEFAULT_API_BASE_URL = "https://api.doppler.com";
15
15
  export class Credentials extends Context.Service()("DopplerCredentials") {
16
16
  }
17
- /** Layer from a plain API token + optional base URL. */
17
+ /** Layer from a plain or redacted API token and optional base URL. */
18
18
  export const fromApiKey = (config) => Layer.succeed(Credentials, Effect.succeed({
19
- apiKey: Redacted.make(config.apiKey),
19
+ apiKey: Redacted.isRedacted(config.apiKey)
20
+ ? config.apiKey
21
+ : Redacted.make(config.apiKey),
20
22
  apiBaseUrl: config.apiBaseUrl ?? DEFAULT_API_BASE_URL,
21
23
  }));
22
24
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;AAO9D,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,OAAO,EAG7C,CAAC,oBAAoB,CAAC;CAAG;AAE5B,wDAAwD;AACxD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAG1B,EAA4B,EAAE,CAC7B,KAAK,CAAC,OAAO,CACX,WAAW,EACX,MAAM,CAAC,OAAO,CAAC;IACb,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,oBAAoB;CACtD,CAAC,CACH,CAAC;AAEJ;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA6B,KAAK,CAAC,OAAO,CACvE,WAAW,EACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAExE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC,CAAC,IAAI,WAAW,CAAC;YAC5B,OAAO,EACL,qEAAqE;SACxE,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,oBAAoB;KACrE,CAAC;AACJ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CACtB,CAAC"}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;AAO9D,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,OAAO,EAG7C,CAAC,oBAAoB,CAAC;CAAG;AAE5B,sEAAsE;AACtE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAG1B,EAA4B,EAAE,CAC7B,KAAK,CAAC,OAAO,CACX,WAAW,EACX,MAAM,CAAC,OAAO,CAAC;IACb,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QACxC,CAAC,CAAC,MAAM,CAAC,MAAM;QACf,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,oBAAoB;CACtD,CAAC,CACH,CAAC;AAEJ;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA6B,KAAK,CAAC,OAAO,CACvE,WAAW,EACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAExE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC,CAAC,IAAI,WAAW,CAAC;YAC5B,OAAO,EACL,qEAAqE;SACxE,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,oBAAoB;KACrE,CAAC;AACJ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CACtB,CAAC"}
package/lib/protocol.d.ts CHANGED
@@ -1,18 +1,21 @@
1
1
  import type * as Layer from "effect/Layer";
2
- import type * as HttpClient from "effect/unstable/http/HttpClient";
3
- import type * as HttpClientError from "effect/unstable/http/HttpClientError";
2
+ import type * as HttpClient from "effect/http/HttpClient";
3
+ import type * as HttpClientError from "effect/http/HttpClientError";
4
4
  import type * as API from "@distilled.cloud/core/api";
5
5
  import type { API_ERRORS, ConfigError } from "@distilled.cloud/core/errors";
6
6
  import { Credentials } from "./credentials.ts";
7
- import { UnknownDopplerError } from "./errors.ts";
7
+ import { UnknownDopplerError, DopplerParseError } from "./errors.ts";
8
8
  /**
9
9
  * Error channel shared by every generated Doppler operation. Generated
10
10
  * service files annotate operations with `API.OperationMethod<I, O,
11
11
  * DopplerOpError, DopplerOpContext>` explicitly so the compiler never
12
12
  * infers these back out of the schema generics.
13
13
  */
14
- export type DopplerOpError = InstanceType<(typeof API_ERRORS)[number]> | UnknownDopplerError | ConfigError | HttpClientError.HttpClientError;
14
+ export type DopplerOpError = InstanceType<(typeof API_ERRORS)[number]> | UnknownDopplerError | ConfigError | HttpClientError.HttpClientError | DopplerParseError;
15
15
  /** Context (requirements) shared by every generated Doppler operation. */
16
16
  export type DopplerOpContext = Credentials | HttpClient.HttpClient;
17
17
  export declare const DopplerProtocol: Layer.Layer<API.Protocol>;
18
+ /** Unauthenticated browser-login operations never resolve or send credentials. */
19
+ export type DopplerPublicOpContext = HttpClient.HttpClient;
20
+ export declare const DopplerPublicProtocol: Layer.Layer<API.Protocol>;
18
21
  //# sourceMappingURL=protocol.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,KAAK,UAAU,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,KAAK,eAAe,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,KAAK,GAAG,MAAM,2BAA2B,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAe,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GACtB,YAAY,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GACzC,mBAAmB,GACnB,WAAW,GACX,eAAe,CAAC,eAAe,CAAC;AAEpC,0EAA0E;AAC1E,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC;AAEnE,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CA+ClD,CAAC"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,KAAK,UAAU,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,KAAK,eAAe,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,KAAK,GAAG,MAAM,2BAA2B,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAe,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErE;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GACtB,YAAY,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GACzC,mBAAmB,GACnB,WAAW,GACX,eAAe,CAAC,eAAe,GAC/B,iBAAiB,CAAC;AAEtB,0EAA0E;AAC1E,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC;AAEnE,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAmDlD,CAAC;AAEL,kFAAkF;AAClF,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,UAAU,CAAC;AAC3D,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAYxD,CAAC"}
package/lib/protocol.js CHANGED
@@ -19,7 +19,7 @@ import * as Effect from "effect/Effect";
19
19
  import * as Redacted from "effect/Redacted";
20
20
  import { makeRestProtocol } from "@distilled.cloud/core/protocol-rest";
21
21
  import { Credentials } from "./credentials.js";
22
- import { UnknownDopplerError } from "./errors.js";
22
+ import { UnknownDopplerError, DopplerParseError } from "./errors.js";
23
23
  export const DopplerProtocol = makeRestProtocol({
24
24
  // The Credentials service holds an effect — resolving it here (per
25
25
  // request, on the calling fiber) picks up context-provided credentials.
@@ -30,6 +30,9 @@ export const DopplerProtocol = makeRestProtocol({
30
30
  baseUrl: (creds) => creds.apiBaseUrl,
31
31
  headers: (creds) => ({
32
32
  Authorization: `Bearer ${Redacted.value(creds.apiKey)}`,
33
+ // Download negotiates its default format from Accept; without it the
34
+ // API returns 415 unless the caller explicitly supplies format=json.
35
+ Accept: "application/json",
33
36
  }),
34
37
  // Doppler's error body is `{ messages?: string[], message?: string,
35
38
  // success?: boolean }`. The factory's default envelope covers `message`;
@@ -64,5 +67,17 @@ export const DopplerProtocol = makeRestProtocol({
64
67
  message,
65
68
  body,
66
69
  }),
70
+ parseError: ({ body, cause }) => new DopplerParseError({ body, cause }),
71
+ });
72
+ export const DopplerPublicProtocol = makeRestProtocol({
73
+ credentials: Effect.succeed(undefined),
74
+ baseUrl: () => "https://api.doppler.com",
75
+ headers: () => ({ Accept: "application/json" }),
76
+ unknownError: ({ code, message }) => new UnknownDopplerError({
77
+ code: code === undefined ? undefined : String(code),
78
+ message,
79
+ body: undefined,
80
+ }),
81
+ parseError: ({ body, cause }) => new DopplerParseError({ body, cause }),
67
82
  });
68
83
  //# sourceMappingURL=protocol.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAe,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAiBlD,MAAM,CAAC,MAAM,eAAe,GAC1B,gBAAgB,CAAS;IACvB,mEAAmE;IACnE,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;QACnC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC;IACxB,CAAC,CAAC;IACF,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnB,aAAa,EAAE,UAAU,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;KACxD,CAAC;IACF,oEAAoE;IACpE,yEAAyE;IACzE,0DAA0D;IAC1D,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;QACtB,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAChE,MAAM,GAAG,GAAG,IAA+B,CAAC;QAC5C,MAAM,IAAI,GACR,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;YAC1B,CAAC,CAAC,GAAG,CAAC,IAAI;YACV,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;gBAC7B,CAAC,CAAC,GAAG,CAAC,KAAK;gBACX,CAAC,CAAC,SAAS,CAAC;QAClB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9C,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YACjD,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,OAAO,GACX,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;YAC7B,CAAC,CAAC,GAAG,CAAC,OAAO;YACb,CAAC,CAAC,OAAO,YAAY,KAAK,QAAQ;gBAChC,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,SAAS,CAAC;QAClB,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAClE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CACxC,IAAI,mBAAmB,CAAC;QACtB,IAAI,EACF,OAAO,IAAI,KAAK,QAAQ;YACtB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,IAAI,KAAK,SAAS;gBAClB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;gBACd,CAAC,CAAC,SAAS;QACjB,OAAO;QACP,IAAI;KACL,CAAC;CACL,CAAC,CAAC"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { DopplerParseError } from "./errors.ts";
2
+ import type { DopplerOpError } from "./protocol.ts";
3
+ export declare const parseErrorIsDeclared: [DopplerParseError] extends [DopplerOpError] ? true : false;
4
+ //# sourceMappingURL=response-validation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-validation.test.d.ts","sourceRoot":"","sources":["../src/response-validation.test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAkDpD,eAAO,MAAM,oBAAoB,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,cAAc,CAAC,GAC3E,IAAI,GACJ,KAAY,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import { runValidationModes } from "@distilled.cloud/core/testing";
3
+ import * as Redacted from "effect/Redacted";
4
+ import { DopplerParseError } from "./errors.js";
5
+ import * as Retry from "./retry.js";
6
+ import { generateCliAuth } from "./services/doppler.js";
7
+ // generateCliAuth declares required `code`, `polling_code` (sensitive), and
8
+ // `auth_url`. It uses the unauthenticated protocol, so no credentials.
9
+ const run = (body) => runValidationModes(generateCliAuth({
10
+ hostname: "host",
11
+ version: "3.0.0",
12
+ os: "linux",
13
+ arch: "x64",
14
+ }).pipe(Retry.none), { body });
15
+ describe("Doppler response validation", () => {
16
+ test("a matching body succeeds unchanged in both modes", async () => {
17
+ const body = {
18
+ code: "abc",
19
+ polling_code: "secret",
20
+ auth_url: "https://dashboard.doppler.com/workplace/auth/cli",
21
+ };
22
+ const { lenient, strict } = await run(JSON.stringify(body));
23
+ for (const result of [lenient, strict]) {
24
+ expect(result).toMatchObject({
25
+ _tag: "Success",
26
+ success: { code: body.code, auth_url: body.auth_url },
27
+ });
28
+ const pollingCode = result.success
29
+ .polling_code;
30
+ expect(Redacted.value(pollingCode)).toBe("secret");
31
+ }
32
+ });
33
+ test("a body missing required members: lenient returns it, strict fails", async () => {
34
+ const body = { code: "abc" };
35
+ const { lenient, strict } = await run(JSON.stringify(body));
36
+ expect(lenient).toMatchObject({ _tag: "Success", success: body });
37
+ expect(strict._tag).toBe("Failure");
38
+ expect(strict.failure).toBeInstanceOf(DopplerParseError);
39
+ });
40
+ test("a non-JSON body: lenient returns the text, strict fails", async () => {
41
+ const { lenient, strict } = await run("not json");
42
+ expect(lenient).toMatchObject({ _tag: "Success", success: "not json" });
43
+ expect(strict.failure).toBeInstanceOf(DopplerParseError);
44
+ });
45
+ });
46
+ // DopplerParseError is part of every operation's declared error type.
47
+ export const parseErrorIsDeclared = true;
48
+ //# sourceMappingURL=response-validation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-validation.test.js","sourceRoot":"","sources":["../src/response-validation.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,4EAA4E;AAC5E,uEAAuE;AACvE,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAC3B,kBAAkB,CAChB,eAAe,CAAC;IACd,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,OAAO;IAChB,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,KAAK;CACZ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EACnB,EAAE,IAAI,EAAE,CACT,CAAC;AAEJ,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,IAAI,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,KAAK;YACX,YAAY,EAAE,QAAQ;YACtB,QAAQ,EAAE,kDAAkD;SAC7D,CAAC;QACF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,KAAK,MAAM,MAAM,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;gBAC3B,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;aACtD,CAAC,CAAC;YACH,MAAM,WAAW,GAA+B,MAAc,CAAC,OAAO;iBACnE,YAAY,CAAC;YAChB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC7B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAE,MAAc,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QACxE,MAAM,CAAE,MAAc,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,sEAAsE;AACtE,MAAM,CAAC,MAAM,oBAAoB,GAErB,IAAI,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import * as S from "@distilled.cloud/core/schema";
2
2
  import * as Redacted from "effect/Redacted";
3
3
  import * as API from "@distilled.cloud/core/api";
4
- import { type DopplerOpError, type DopplerOpContext } from "../protocol.ts";
4
+ import { type DopplerPublicOpContext, type DopplerOpError, type DopplerOpContext } from "../protocol.ts";
5
5
  export type { DopplerOpError, DopplerOpContext };
6
6
  declare const BadRequest_base: S.Class<BadRequest, S.TaggedStruct<"BadRequest", {
7
7
  readonly code: any;
@@ -171,10 +171,20 @@ export interface AuthOidcRequest {
171
171
  }
172
172
  export declare const AuthOidcRequest: S.Schema<AuthOidcRequest>;
173
173
  export interface AuthOidcResponse {
174
- token?: string;
175
- expires_at?: string;
174
+ token: string | Redacted.Redacted<string>;
175
+ expires_at: string;
176
176
  }
177
177
  export declare const AuthOidcResponse: S.Schema<AuthOidcResponse>;
178
+ export interface AuthorizeCliAuthRequest {
179
+ code: string | Redacted.Redacted<string>;
180
+ }
181
+ export declare const AuthorizeCliAuthRequest: S.Schema<AuthorizeCliAuthRequest>;
182
+ export interface AuthorizeCliAuthResponse {
183
+ token: string | Redacted.Redacted<string>;
184
+ name: string;
185
+ dashboard_url: string;
186
+ }
187
+ export declare const AuthorizeCliAuthResponse: S.Schema<AuthorizeCliAuthResponse>;
178
188
  export interface CloneConfigRequest {
179
189
  /** Unique identifier for the project object. */
180
190
  project: string;
@@ -568,10 +578,31 @@ export interface CreateIntegrationRequest {
568
578
  data?: unknown;
569
579
  }
570
580
  export declare const CreateIntegrationRequest: S.Schema<CreateIntegrationRequest>;
581
+ export interface CreateIntegrationResponseIntegrationFederationCase0 {
582
+ kind: string;
583
+ /** The IAM principal to grant roles to. */
584
+ principal: string;
585
+ }
586
+ export declare const CreateIntegrationResponseIntegrationFederationCase0: S.Schema<CreateIntegrationResponseIntegrationFederationCase0>;
587
+ export interface CreateIntegrationResponseIntegrationFederationCase1 {
588
+ kind: string;
589
+ /** The issuer to enter on the app registration's federated credential. */
590
+ issuer: string;
591
+ /** The subject identifier to enter on the federated credential. */
592
+ subject: string;
593
+ /** The audience to enter on the federated credential. */
594
+ audience: string;
595
+ }
596
+ export declare const CreateIntegrationResponseIntegrationFederationCase1: S.Schema<CreateIntegrationResponseIntegrationFederationCase1>;
597
+ /** The keyless federation identity Doppler presents to your cloud, or null if this connection does not use keyless authentication. Grant this identity access after creating the connection. */
598
+ export type CreateIntegrationResponseIntegrationFederation = CreateIntegrationResponseIntegrationFederationCase0 | CreateIntegrationResponseIntegrationFederationCase1;
599
+ export declare const CreateIntegrationResponseIntegrationFederation: S.Schema<CreateIntegrationResponseIntegrationFederation>;
571
600
  export interface CreateIntegrationResponseIntegration {
572
601
  slug?: string;
573
602
  name?: string;
574
603
  type?: string;
604
+ /** The keyless federation identity Doppler presents to your cloud, or null if this connection does not use keyless authentication. Grant this identity access after creating the connection. */
605
+ federation?: CreateIntegrationResponseIntegrationFederation | null;
575
606
  }
576
607
  export declare const CreateIntegrationResponseIntegration: S.Schema<CreateIntegrationResponseIntegration>;
577
608
  export interface CreateIntegrationResponse {
@@ -790,9 +821,9 @@ export type DownloadSecretRequestNameTransformer = "camel" | "upper-camel" | "lo
790
821
  export declare const DownloadSecretRequestNameTransformer: any;
791
822
  export interface DownloadSecretRequest {
792
823
  /** Unique identifier for the project object. Not required if using a Service Token. */
793
- project: string;
824
+ project?: string;
794
825
  /** Name of the config object. Not required if using a Service Token. */
795
- config: string;
826
+ config?: string;
796
827
  format?: DownloadSecretRequestFormat | (string & {});
797
828
  /** Transform secret names to a different case */
798
829
  name_transformer?: DownloadSecretRequestNameTransformer | (string & {});
@@ -804,12 +835,11 @@ export interface DownloadSecretRequest {
804
835
  secrets?: string;
805
836
  }
806
837
  export declare const DownloadSecretRequest: S.Schema<DownloadSecretRequest>;
807
- export interface DownloadSecretResponse {
808
- STRIPE?: string;
809
- ALGOLIA?: string;
810
- DATABASE?: string;
811
- USER?: string;
812
- }
838
+ export type DownloadSecretResponseBodyMap = {
839
+ [key: string]: string | undefined;
840
+ };
841
+ export declare const DownloadSecretResponseBodyMap: S.Schema<DownloadSecretResponseBodyMap>;
842
+ export type DownloadSecretResponse = DownloadSecretResponseBodyMap;
813
843
  export declare const DownloadSecretResponse: S.Schema<DownloadSecretResponse>;
814
844
  export interface DynamicSecretsIssueLeaseRequest {
815
845
  /** The project where the dynamic secret is located */
@@ -853,6 +883,20 @@ export interface EnableWebhookRequest {
853
883
  export declare const EnableWebhookRequest: S.Schema<EnableWebhookRequest>;
854
884
  export type EnableWebhookResponse = unknown;
855
885
  export declare const EnableWebhookResponse: S.Schema<EnableWebhookResponse>;
886
+ export interface GenerateCliAuthRequest {
887
+ hostname: string;
888
+ /** CLI version in vMAJOR.MINOR.PATCH format. Other formats, including prerelease suffixes, are rejected. */
889
+ version: string;
890
+ os: string;
891
+ arch: string;
892
+ }
893
+ export declare const GenerateCliAuthRequest: S.Schema<GenerateCliAuthRequest>;
894
+ export interface GenerateCliAuthResponse {
895
+ code: string;
896
+ polling_code: string | Redacted.Redacted<string>;
897
+ auth_url: string;
898
+ }
899
+ export declare const GenerateCliAuthResponse: S.Schema<GenerateCliAuthResponse>;
856
900
  export interface GetChangeRequestPolicyRequest {
857
901
  /** Unique id of the policy */
858
902
  slug: string;
@@ -936,10 +980,23 @@ export interface GetIntegrationRequest {
936
980
  integration: string;
937
981
  }
938
982
  export declare const GetIntegrationRequest: S.Schema<GetIntegrationRequest>;
939
- export type GetIntegrationResponseIntegration = CreateIntegrationResponseIntegration;
940
- export declare const GetIntegrationResponseIntegration: S.Schema<CreateIntegrationResponseIntegration>;
983
+ export type GetIntegrationResponseIntegrationFederationCase0 = CreateIntegrationResponseIntegrationFederationCase0;
984
+ export declare const GetIntegrationResponseIntegrationFederationCase0: S.Schema<CreateIntegrationResponseIntegrationFederationCase0>;
985
+ export type GetIntegrationResponseIntegrationFederationCase1 = CreateIntegrationResponseIntegrationFederationCase1;
986
+ export declare const GetIntegrationResponseIntegrationFederationCase1: S.Schema<CreateIntegrationResponseIntegrationFederationCase1>;
987
+ /** The keyless federation identity Doppler presents to your cloud, or null if this connection does not use keyless authentication. Grant this identity access after creating the connection. */
988
+ export type GetIntegrationResponseIntegrationFederation = CreateIntegrationResponseIntegrationFederationCase0 | CreateIntegrationResponseIntegrationFederationCase1;
989
+ export declare const GetIntegrationResponseIntegrationFederation: S.Schema<GetIntegrationResponseIntegrationFederation>;
990
+ export interface GetIntegrationResponseIntegration {
991
+ slug?: string;
992
+ name?: string;
993
+ type?: string;
994
+ /** The keyless federation identity Doppler presents to your cloud, or null if this connection does not use keyless authentication. Grant this identity access after creating the connection. */
995
+ federation?: GetIntegrationResponseIntegrationFederation | null;
996
+ }
997
+ export declare const GetIntegrationResponseIntegration: S.Schema<GetIntegrationResponseIntegration>;
941
998
  export interface GetIntegrationResponse {
942
- integration?: CreateIntegrationResponseIntegration;
999
+ integration?: GetIntegrationResponseIntegration;
943
1000
  }
944
1001
  export declare const GetIntegrationResponse: S.Schema<GetIntegrationResponse>;
945
1002
  export interface GetIntegrationsIntegrationMembersRequest {
@@ -2278,6 +2335,12 @@ export declare const RevokeAuthRequest: S.Schema<RevokeAuthRequest>;
2278
2335
  export interface RevokeAuthResponse {
2279
2336
  }
2280
2337
  export declare const RevokeAuthResponse: S.Schema<RevokeAuthResponse>;
2338
+ export interface RevokeCliAuthRequest {
2339
+ token: string | Redacted.Redacted<string>;
2340
+ }
2341
+ export declare const RevokeCliAuthRequest: S.Schema<RevokeCliAuthRequest>;
2342
+ export type RevokeCliAuthResponse = unknown;
2343
+ export declare const RevokeCliAuthResponse: S.Schema<RevokeCliAuthResponse>;
2281
2344
  export interface SecretsNamesRequest {
2282
2345
  /** Unique identifier for the project object. */
2283
2346
  project: string;
@@ -3070,7 +3133,10 @@ export type AuthMeError = BadRequest | DopplerOpError;
3070
3133
  export declare const authMe: API.OperationMethod<AuthMeRequest, AuthMeResponse, AuthMeError, DopplerOpContext>;
3071
3134
  export type AuthOidcError = DopplerOpError;
3072
3135
  /** OIDC (Service Account Identity) Authenticate via a Service Account Identity with OIDC. Returns a short lived API token. */
3073
- export declare const authOidc: API.OperationMethod<AuthOidcRequest, AuthOidcResponse, AuthOidcError, DopplerOpContext>;
3136
+ export declare const authOidc: API.OperationMethod<AuthOidcRequest, AuthOidcResponse, AuthOidcError, DopplerPublicOpContext>;
3137
+ export type AuthorizeCliAuthError = Conflict | DopplerOpError;
3138
+ /** Doppler CLI browser authentication. Public endpoint; no bearer token required. Wire contract from DopplerHQ/cli pkg/http/api.go. */
3139
+ export declare const authorizeCliAuth: API.OperationMethod<AuthorizeCliAuthRequest, AuthorizeCliAuthResponse, AuthorizeCliAuthError, DopplerPublicOpContext>;
3074
3140
  export type CloneConfigError = DopplerOpError;
3075
3141
  /** Clone Create a new branch config by cloning another. This duplicates a branch config and all its secrets. */
3076
3142
  export declare const cloneConfig: API.OperationMethod<CloneConfigRequest, CloneConfigResponse, CloneConfigError, DopplerOpContext>;
@@ -3171,6 +3237,9 @@ export declare const dynamicSecretsRevokeLease: API.OperationMethod<DynamicSecre
3171
3237
  export type EnableWebhookError = BadRequest | DopplerOpError;
3172
3238
  /** Enable Webhook */
3173
3239
  export declare const enableWebhook: API.OperationMethod<EnableWebhookRequest, EnableWebhookResponse, EnableWebhookError, DopplerOpContext>;
3240
+ export type GenerateCliAuthError = DopplerOpError;
3241
+ /** Doppler CLI browser authentication. Public endpoint; no bearer token required. Wire contract from DopplerHQ/cli pkg/http/api.go. */
3242
+ export declare const generateCliAuth: API.OperationMethod<GenerateCliAuthRequest, GenerateCliAuthResponse, GenerateCliAuthError, DopplerPublicOpContext>;
3174
3243
  export type GetChangeRequestPolicyError = DopplerOpError;
3175
3244
  /** Retrieve Fetch an existing change request policy */
3176
3245
  export declare const getChangeRequestPolicy: API.OperationMethod<GetChangeRequestPolicyRequest, GetChangeRequestPolicyResponse, GetChangeRequestPolicyError, DopplerOpContext>;
@@ -3322,6 +3391,9 @@ export declare const renameEnvironment: API.OperationMethod<RenameEnvironmentReq
3322
3391
  export type RevokeAuthError = DopplerOpError;
3323
3392
  /** Revoke Revoke an auth token */
3324
3393
  export declare const revokeAuth: API.OperationMethod<RevokeAuthRequest, RevokeAuthResponse, RevokeAuthError, DopplerOpContext>;
3394
+ export type RevokeCliAuthError = DopplerOpError;
3395
+ /** Doppler CLI browser authentication. Public endpoint; no bearer token required. Wire contract from DopplerHQ/cli pkg/http/api.go. */
3396
+ export declare const revokeCliAuth: API.OperationMethod<RevokeCliAuthRequest, RevokeCliAuthResponse, RevokeCliAuthError, DopplerPublicOpContext>;
3325
3397
  export type SecretsNamesError = DopplerOpError;
3326
3398
  /** List Names Secret Names */
3327
3399
  export declare const secretsNames: API.OperationMethod<SecretsNamesRequest, SecretsNamesResponse, SecretsNamesError, DopplerOpContext>;