@distilled.cloud/expo-eas 1.0.0-rc.12 → 1.0.0-rc.14
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 +34 -0
- package/lib/credentials.d.ts.map +1 -1
- package/lib/credentials.js.map +1 -1
- package/lib/errors.d.ts.map +1 -1
- package/lib/errors.js +1 -1
- package/lib/errors.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/protocol.d.ts +3 -3
- package/lib/protocol.d.ts.map +1 -1
- package/lib/protocol.js +32 -18
- package/lib/protocol.js.map +1 -1
- package/lib/protocol.test.d.ts +2 -0
- package/lib/protocol.test.d.ts.map +1 -0
- package/lib/protocol.test.js +267 -0
- package/lib/protocol.test.js.map +1 -0
- package/lib/retry.d.ts +1 -1
- package/lib/retry.d.ts.map +1 -1
- package/lib/retry.js +1 -1
- package/lib/retry.js.map +1 -1
- package/lib/services/eas.d.ts +5840 -2078
- package/lib/services/eas.d.ts.map +1 -1
- package/lib/services/eas.js +8323 -7210
- package/lib/services/eas.js.map +1 -1
- package/lib/traits.d.ts.map +1 -1
- package/lib/traits.js.map +1 -1
- package/package.json +14 -12
- package/src/credentials.ts +3 -4
- package/src/errors.ts +14 -27
- package/src/index.ts +1 -5
- package/src/protocol.test.ts +362 -0
- package/src/protocol.ts +48 -38
- package/src/retry.ts +2 -8
- package/src/services/eas.ts +50589 -50427
- package/src/traits.ts +5 -12
package/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# @distilled.cloud/expo-eas
|
|
2
|
+
|
|
3
|
+
Effect-native SDK for [expo-eas](https://www.npmjs.com/package/@distilled.cloud/expo-eas).
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @distilled.cloud/expo-eas 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 Eas from "@distilled.cloud/expo-eas";
|
|
17
|
+
|
|
18
|
+
const program = Effect.gen(function* () {
|
|
19
|
+
const result = yield* Eas.getUserPreference({});
|
|
20
|
+
return result;
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const Live = Layer.mergeAll(
|
|
24
|
+
FetchHttpClient.layer,
|
|
25
|
+
Eas.CredentialsFromEnv,
|
|
26
|
+
Eas.ExpoGraphqlProtocol,
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
program.pipe(Effect.provide(Live), Effect.runPromise);
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Auth
|
|
33
|
+
|
|
34
|
+
Required: `EXPO_TOKEN`. Optional: `EXPO_API_URL`. Sent as `Authorization: Bearer`.
|
package/lib/credentials.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAWA,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;AAE5C,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;;AAED,qBAAa,WAAY,SAAQ,
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAWA,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;AAE5C,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;;AAED,qBAAa,WAAY,SAAQ,gBAEhC;CAAG;AASJ;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,wCAe9B,CAAC"}
|
package/lib/credentials.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,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;AAE5C,qFAAqF;AACrF,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAO3D,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,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;AAE5C,qFAAqF;AACrF,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAO3D,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,OAAO,EAAsC,CACpF,gBAAgB,CACjB;CAAG;AAEJ,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC;IACjC,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC;IAC9C,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAClD,YAAY,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAC/C;CACF,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAC7C,WAAW,EACX,SAAS,CAAC,IAAI,CACZ,MAAM,CAAC,QAAQ,CACb,GAAG,EAAE,CACH,IAAI,WAAW,CAAC;IACd,OAAO,EAAE,6CAA6C;CACvD,CAAC,CACL,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3C,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;IACvC,UAAU;CACX,CAAC,CAAC,EACH,MAAM,CAAC,KAAK,CACb,CACF,CAAC"}
|
package/lib/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,MAAM,EACN,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,MAAM,EACN,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,aAAa,IAAI,iBAAiB,EAClC,SAAS,EACT,MAAM,EACN,QAAQ,EACR,mBAAmB,EACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;;;;;;;;;;AAExC;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,oBAIJ;CAAG;;;;;;;;;AAEpC,qFAAqF;AACrF,qBAAa,aAAc,SAAQ,kBAGH;CAAG;;;;;;;;AAEnC;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,uBAKR;CAAG;;;;;;;;AAEnC,uEAAuE;AACvE,qBAAa,kBAAmB,SAAQ,uBAKR;CAAG;;;;;;;;AAEnC;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,2BAKZ;CAAG;;;;;;;;AAEnC,qDAAqD;AACrD,qBAAa,0BAA2B,SAAQ,+BAKhB;CAAG;;;;;;;;;AAEnC,0EAA0E;AAC1E,qBAAa,wBAAyB,SAAQ,6BAMd;CAAG;;;;;;;;;AAEnC,wDAAwD;AACxD,qBAAa,6BAA8B,SAAQ,kCAMnB;CAAG;;;;;;;;AAEnC,0EAA0E;AAC1E,qBAAa,4BAA6B,SAAQ,iCAKlB;CAAG;;;;;;;;AAEnC;;;;GAIG;AACH,qBAAa,2CAA4C,SAAQ,gDAKjC;CAAG;;;;;;;;AAEnC;;;GAGG;AACH,qBAAa,uCAAwC,SAAQ,4CAK7B;CAAG;;;;;;;;;AAEnC;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,4BAKqC;CAAG;;;;;;;;AAErF;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,6BAKhB;CAAG;;;;;;;;AAEjC;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,0BAKT;CAAG;;;;;;;;AAErC;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,0BAKP;CAAG;;;;;;;;;AAEvC;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,0BAKuC;CAAG;AAErF;;;GAGG;AAEH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAuBlD,CAAC;AAEF,4DAA4D;AAC5D,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,kBAAkB,GAClB,sBAAsB,GACtB,0BAA0B,GAC1B,wBAAwB,GACxB,6BAA6B,GAC7B,4BAA4B,GAC5B,2CAA2C,GAC3C,uCAAuC,GACvC,uBAAuB,GACvB,wBAAwB,GACxB,qBAAqB,GACrB,qBAAqB,GACrB,qBAAqB,CAAC;AAE1B;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,eAAe,GAAG,aAAa,CAAC;AAE5E;;;;GAIG;AACH,MAAM,MAAM,aAAa,GACrB,iBAAiB,GACjB,UAAU,GACV,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,mBAAmB,GACnB,MAAM,GACN,YAAY,CAAC"}
|
package/lib/errors.js
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* Ported verbatim from distilled v0 `packages/expo-eas/src/errors.ts`.
|
|
10
10
|
*/
|
|
11
11
|
export { BadGateway, BadRequest, Conflict, ConfigError, Forbidden, GatewayTimeout, InternalServerError, Locked, NotFound, ServiceUnavailable, TooManyRequests, Unauthorized, UnprocessableEntity, HTTP_STATUS_MAP, DEFAULT_ERRORS, API_ERRORS, } from "@distilled.cloud/core/errors";
|
|
12
|
-
import * as Schema from "effect/Schema";
|
|
13
12
|
import * as Category from "@distilled.cloud/core/category";
|
|
13
|
+
import * as Schema from "effect/Schema";
|
|
14
14
|
/**
|
|
15
15
|
* Catch-all for EAS GraphQL errors that don't match any other tagged class.
|
|
16
16
|
* Carries the raw `errors[]` envelope and a best-effort `code` / `message`.
|
package/lib/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,MAAM,EACN,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
export * from "./credentials.ts";
|
|
14
14
|
export * from "./errors.ts";
|
|
15
15
|
export * as T from "./traits.ts";
|
|
16
|
-
export { ExpoGraphqlProtocol, type ExpoEasOpError, type ExpoEasOpContext
|
|
16
|
+
export { ExpoGraphqlProtocol, type ExpoEasOpError, type ExpoEasOpContext } from "./protocol.ts";
|
|
17
17
|
export * as Retry from "./retry.ts";
|
|
18
18
|
export * as Services from "./services/index.ts";
|
|
19
19
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChG,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
export * from "./credentials.js";
|
|
14
14
|
export * from "./errors.js";
|
|
15
15
|
export * as T from "./traits.js";
|
|
16
|
-
export { ExpoGraphqlProtocol
|
|
16
|
+
export { ExpoGraphqlProtocol } from "./protocol.js";
|
|
17
17
|
export * as Retry from "./retry.js";
|
|
18
18
|
export * as Services from "./services/index.js";
|
|
19
19
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAA8C,MAAM,eAAe,CAAC;AAChG,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC"}
|
package/lib/protocol.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * 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";
|
|
4
1
|
import * as API from "@distilled.cloud/core/api";
|
|
2
|
+
import type * as HttpClient from "effect/http/HttpClient";
|
|
3
|
+
import type * as HttpClientError from "effect/http/HttpClientError";
|
|
4
|
+
import * as Layer from "effect/Layer";
|
|
5
5
|
import { Credentials } from "./credentials.ts";
|
|
6
6
|
import { type DefaultErrors } from "./errors.ts";
|
|
7
7
|
/**
|
package/lib/protocol.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,2BAA2B,CAAC;AAgCjD,OAAO,KAAK,KAAK,UAAU,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAGpE,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAItC,OAAO,EAAe,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,KAAK,aAAa,EAInB,MAAM,aAAa,CAAC;AASrB;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,eAAe,CAAC,eAAe,CAAC;AAE7E,sEAAsE;AACtE,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC;AAoQnE;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAOzD,CAAC"}
|
package/lib/protocol.js
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import * as API from "@distilled.cloud/core/api";
|
|
2
|
+
import { HTTP_STATUS_MAP } from "@distilled.cloud/core/errors";
|
|
3
|
+
import { getAnn } from "@distilled.cloud/core/protocol-http";
|
|
4
|
+
import { failIfStrict, validateResponse } from "@distilled.cloud/core/response-validation";
|
|
5
|
+
import { parseRetryAfterForStatus } from "@distilled.cloud/core/retry-after";
|
|
1
6
|
/**
|
|
2
7
|
* ExpoGraphqlProtocol — hand-written.
|
|
3
8
|
*
|
|
@@ -18,21 +23,17 @@
|
|
|
18
23
|
* `EAS_ERROR_CODE_MAP`, then the HTTP status map, then
|
|
19
24
|
* `UnknownEasError`.
|
|
20
25
|
* 2. HTTP status >= 400 (network/auth/proxy errors) — body
|
|
21
|
-
* usually `{ message }
|
|
22
|
-
* envelope
|
|
23
|
-
* parsing.
|
|
26
|
+
* usually `{ message }`, a plain `{ errors: [...] }`
|
|
27
|
+
* envelope, or non-JSON text (proxy HTML, plain-text 429);
|
|
28
|
+
* mapped via the status map with retry-after parsing.
|
|
24
29
|
* On success the value of `data.<responsePath>` (see
|
|
25
30
|
* `T.ResponsePath`) is returned verbatim.
|
|
26
31
|
*/
|
|
27
32
|
import * as Effect from "effect/Effect";
|
|
33
|
+
import * as HttpClientRequest from "effect/http/HttpClientRequest";
|
|
28
34
|
import * as Layer from "effect/Layer";
|
|
29
35
|
import * as Redacted from "effect/Redacted";
|
|
30
36
|
import * as Schema from "effect/Schema";
|
|
31
|
-
import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest";
|
|
32
|
-
import * as API from "@distilled.cloud/core/api";
|
|
33
|
-
import { getAnn } from "@distilled.cloud/core/protocol-http";
|
|
34
|
-
import { HTTP_STATUS_MAP } from "@distilled.cloud/core/errors";
|
|
35
|
-
import { parseRetryAfterForStatus } from "@distilled.cloud/core/retry-after";
|
|
36
37
|
import { Credentials } from "./credentials.js";
|
|
37
38
|
import { EAS_ERROR_CODE_MAP, EasParseError, UnknownEasError, } from "./errors.js";
|
|
38
39
|
import { graphqlOpSymbol, httpSymbol, responsePathSymbol, } from "./traits.js";
|
|
@@ -69,6 +70,7 @@ const RestErrorResponse = Schema.Struct({
|
|
|
69
70
|
});
|
|
70
71
|
const decodeEnvelope = Schema.decodeUnknownOption(GraphQLEnvelope);
|
|
71
72
|
const decodeRest = Schema.decodeUnknownOption(RestErrorResponse);
|
|
73
|
+
const statusClass = (status) => HTTP_STATUS_MAP[status];
|
|
72
74
|
/**
|
|
73
75
|
* Match an EAS error response (GraphQL envelope or HTTP-level body) to the
|
|
74
76
|
* appropriate error class. Ported from distilled v0's `matchError`:
|
|
@@ -89,7 +91,7 @@ const matchError = (status, errorBody, headers) => {
|
|
|
89
91
|
return fail(new TypedClass({ message }));
|
|
90
92
|
}
|
|
91
93
|
}
|
|
92
|
-
const StatusClass =
|
|
94
|
+
const StatusClass = statusClass(status);
|
|
93
95
|
if (StatusClass && status >= 400) {
|
|
94
96
|
return fail(new StatusClass({
|
|
95
97
|
message,
|
|
@@ -102,10 +104,22 @@ const matchError = (status, errorBody, headers) => {
|
|
|
102
104
|
body: errorBody,
|
|
103
105
|
}));
|
|
104
106
|
}
|
|
107
|
+
// Non-JSON body (HTML proxy page, plain-text 429/401): the trimmed text
|
|
108
|
+
// is the message.
|
|
109
|
+
if (typeof errorBody === "string") {
|
|
110
|
+
const StatusClass = statusClass(status);
|
|
111
|
+
if (StatusClass) {
|
|
112
|
+
return fail(new StatusClass({
|
|
113
|
+
message: errorBody.trim() || `HTTP ${status}`,
|
|
114
|
+
retryAfter: parseRetryAfterForStatus(status, headers),
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
return fail(new UnknownEasError({ body: errorBody }));
|
|
118
|
+
}
|
|
105
119
|
// Plain REST-ish error body
|
|
106
120
|
const rest = decodeRest(errorBody);
|
|
107
121
|
if (rest._tag === "Some") {
|
|
108
|
-
const StatusClass =
|
|
122
|
+
const StatusClass = statusClass(status);
|
|
109
123
|
if (StatusClass) {
|
|
110
124
|
return fail(new StatusClass({
|
|
111
125
|
message: rest.value.message ?? "",
|
|
@@ -128,7 +142,7 @@ const matchError = (status, errorBody, headers) => {
|
|
|
128
142
|
// fiber's context on every request instead. The requirement is erased at this
|
|
129
143
|
// boundary (Protocol effects are typed with no requirements) and reintroduced
|
|
130
144
|
// for callers by the generated `ExpoEasOpContext` annotations.
|
|
131
|
-
const encode = ({ input, inputAst
|
|
145
|
+
const encode = ({ input, inputAst }) => Effect.gen(function* () {
|
|
132
146
|
// The Credentials service holds an effect — resolving it here (per
|
|
133
147
|
// request) picks up rotations.
|
|
134
148
|
const resolveCredentials = yield* Credentials;
|
|
@@ -183,10 +197,11 @@ const decode = ({ response, outputAst, }) => Effect.gen(function* () {
|
|
|
183
197
|
if (status >= 400) {
|
|
184
198
|
return yield* matchError(status, text, headers);
|
|
185
199
|
}
|
|
186
|
-
|
|
200
|
+
// Lenient mode returns the body as read.
|
|
201
|
+
return yield* failIfStrict(new EasParseError({
|
|
187
202
|
body: text,
|
|
188
203
|
cause: "response body is not valid JSON",
|
|
189
|
-
}));
|
|
204
|
+
}), text).pipe(Effect.catch(fail));
|
|
190
205
|
}
|
|
191
206
|
// GraphQL errors[] (even on HTTP 200) or HTTP-level failure → typed
|
|
192
207
|
// error via the ported v0 matcher.
|
|
@@ -199,11 +214,10 @@ const decode = ({ response, outputAst, }) => Effect.gen(function* () {
|
|
|
199
214
|
return yield* matchError(status, json, headers);
|
|
200
215
|
}
|
|
201
216
|
// Success: unwrap `data.<responsePath>` and return it verbatim (member
|
|
202
|
-
// names are GraphQL field names — no wire renames).
|
|
217
|
+
// names are GraphQL field names — no wire renames). Strict mode
|
|
218
|
+
// (core/response-validation) checks it against the output schema.
|
|
203
219
|
const path = getAnn(outputAst, responsePathSymbol);
|
|
204
|
-
let payload = envelope !== null && typeof envelope === "object"
|
|
205
|
-
? envelope.data
|
|
206
|
-
: undefined;
|
|
220
|
+
let payload = envelope !== null && typeof envelope === "object" ? envelope.data : undefined;
|
|
207
221
|
if (path !== undefined) {
|
|
208
222
|
for (const seg of path.split(".")) {
|
|
209
223
|
payload =
|
|
@@ -212,7 +226,7 @@ const decode = ({ response, outputAst, }) => Effect.gen(function* () {
|
|
|
212
226
|
: undefined;
|
|
213
227
|
}
|
|
214
228
|
}
|
|
215
|
-
return payload === undefined ? null : payload;
|
|
229
|
+
return yield* validateResponse(outputAst, payload === undefined ? null : payload, (cause) => new EasParseError({ body: json, cause })).pipe(Effect.catch(fail));
|
|
216
230
|
});
|
|
217
231
|
/**
|
|
218
232
|
* EAS GraphQL protocol layer.
|
package/lib/protocol.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.test.d.ts","sourceRoot":"","sources":["../src/protocol.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import * as ResponseValidation from "@distilled.cloud/core/response-validation";
|
|
2
|
+
import * as ConfigProvider from "effect/ConfigProvider";
|
|
3
|
+
import * as Duration from "effect/Duration";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as HttpClient from "effect/http/HttpClient";
|
|
6
|
+
import * as HttpClientRequest from "effect/http/HttpClientRequest";
|
|
7
|
+
import * as HttpClientResponse from "effect/http/HttpClientResponse";
|
|
8
|
+
import * as Layer from "effect/Layer";
|
|
9
|
+
import * as Redacted from "effect/Redacted";
|
|
10
|
+
import * as Result from "effect/Result";
|
|
11
|
+
import { describe, expect, test } from "vitest";
|
|
12
|
+
import { Credentials, CredentialsFromEnv } from "./credentials.js";
|
|
13
|
+
import { BadGateway, BadRequest, EasChannelAlreadyExists, EasExperienceNotFound, EasParseError, EasUnauthorizedOperation, InternalServerError, ServiceUnavailable, TooManyRequests, Unauthorized, UnknownEasError, } from "./errors.js";
|
|
14
|
+
import * as Retry from "./retry.js";
|
|
15
|
+
import { accessTokenDeleteAccessToken, accessTokenSetAccessTokenRevoked } from "./services/eas.js";
|
|
16
|
+
const credentialsLayer = (apiBaseUrl, token = "expo-token") => Layer.succeed(Credentials, Effect.succeed({ accessToken: Redacted.make(token), apiBaseUrl }));
|
|
17
|
+
const prod = credentialsLayer("https://api.expo.dev");
|
|
18
|
+
/** A fake HttpClient that records each request (as a web Request) and answers with `reply`. */
|
|
19
|
+
const fakeHttp = (reply) => {
|
|
20
|
+
const requests = [];
|
|
21
|
+
const http = Layer.succeed(HttpClient.HttpClient, HttpClient.make((request) => Effect.sync(() => {
|
|
22
|
+
requests.push(Result.getOrThrow(HttpClientRequest.toWebResult(request)));
|
|
23
|
+
return HttpClientResponse.fromWeb(request, new Response(reply.body ?? "", {
|
|
24
|
+
status: reply.status ?? 200,
|
|
25
|
+
headers: reply.headers,
|
|
26
|
+
}));
|
|
27
|
+
})));
|
|
28
|
+
return { requests, http };
|
|
29
|
+
};
|
|
30
|
+
const run = (operation, reply, creds = prod) => {
|
|
31
|
+
const { requests, http } = fakeHttp(reply);
|
|
32
|
+
const promise = Effect.runPromise(operation.pipe(Retry.none, Effect.provide(Layer.mergeAll(http, creds))));
|
|
33
|
+
return { requests, promise };
|
|
34
|
+
};
|
|
35
|
+
const deleteToken = () => accessTokenDeleteAccessToken({ id: "tok-1" });
|
|
36
|
+
const succeed = (reply) => run(deleteToken(), reply).promise;
|
|
37
|
+
const failWith = (reply, operation = deleteToken()) => run(Effect.flip(operation), reply).promise;
|
|
38
|
+
const data = (id) => JSON.stringify({ data: { accessToken: { deleteAccessToken: { id } } } });
|
|
39
|
+
const graphqlErrors = (errors, extra = {}) => JSON.stringify({ data: null, errors, ...extra });
|
|
40
|
+
describe("request envelope", () => {
|
|
41
|
+
test("POSTs { query, operationName, variables } to <base>/graphql with a Bearer token", async () => {
|
|
42
|
+
const { requests, promise } = run(deleteToken(), { body: data("tok-1") });
|
|
43
|
+
await promise;
|
|
44
|
+
expect(requests).toHaveLength(1);
|
|
45
|
+
const request = requests[0];
|
|
46
|
+
expect(request.method).toBe("POST");
|
|
47
|
+
expect(request.url).toBe("https://api.expo.dev/graphql");
|
|
48
|
+
expect(request.headers.get("authorization")).toBe("Bearer expo-token");
|
|
49
|
+
expect(request.headers.get("accept")).toBe("application/json");
|
|
50
|
+
expect(request.headers.get("content-type")).toContain("application/json");
|
|
51
|
+
const body = await request.json();
|
|
52
|
+
expect(body).toEqual({
|
|
53
|
+
query: expect.stringContaining("mutation accessTokenDeleteAccessToken($id: ID!)"),
|
|
54
|
+
operationName: "accessTokenDeleteAccessToken",
|
|
55
|
+
variables: { id: "tok-1" },
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
test("input members are variables verbatim: undefined dropped, null kept", async () => {
|
|
59
|
+
const omitted = run(accessTokenSetAccessTokenRevoked({ id: "tok-1", revoked: undefined }), {
|
|
60
|
+
body: JSON.stringify({ data: { accessToken: { setAccessTokenRevoked: null } } }),
|
|
61
|
+
});
|
|
62
|
+
await omitted.promise;
|
|
63
|
+
expect((await omitted.requests[0].json()).variables).toEqual({ id: "tok-1" });
|
|
64
|
+
const nulled = run(accessTokenSetAccessTokenRevoked({ id: "tok-1", revoked: null }), {
|
|
65
|
+
body: JSON.stringify({ data: { accessToken: { setAccessTokenRevoked: null } } }),
|
|
66
|
+
});
|
|
67
|
+
await nulled.promise;
|
|
68
|
+
expect((await nulled.requests[0].json()).variables).toEqual({ id: "tok-1", revoked: null });
|
|
69
|
+
});
|
|
70
|
+
test("the staging base URL is honoured", async () => {
|
|
71
|
+
const { requests, promise } = run(deleteToken(), { body: data("tok-1") }, credentialsLayer("https://staging-api.expo.dev", "staging-token"));
|
|
72
|
+
await promise;
|
|
73
|
+
expect(requests[0].url).toBe("https://staging-api.expo.dev/graphql");
|
|
74
|
+
expect(requests[0].headers.get("authorization")).toBe("Bearer staging-token");
|
|
75
|
+
});
|
|
76
|
+
const fromEnv = (env) => Layer.mergeAll(CredentialsFromEnv, Layer.succeed(ConfigProvider.ConfigProvider, ConfigProvider.fromUnknown(env)));
|
|
77
|
+
test("CredentialsFromEnv targets production by default and staging via EXPO_API_URL", async () => {
|
|
78
|
+
const production = run(deleteToken(), { body: data("tok-1") }, fromEnv({ EXPO_TOKEN: "env-token" }));
|
|
79
|
+
await production.promise;
|
|
80
|
+
expect(production.requests[0].url).toBe("https://api.expo.dev/graphql");
|
|
81
|
+
expect(production.requests[0].headers.get("authorization")).toBe("Bearer env-token");
|
|
82
|
+
const staging = run(deleteToken(), { body: data("tok-1") }, fromEnv({ EXPO_TOKEN: "env-token", EXPO_API_URL: "https://staging-api.expo.dev" }));
|
|
83
|
+
await staging.promise;
|
|
84
|
+
expect(staging.requests[0].url).toBe("https://staging-api.expo.dev/graphql");
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe("data envelope", () => {
|
|
88
|
+
test("returns the value at data.<responsePath>", async () => {
|
|
89
|
+
expect(await succeed({ body: data("tok-1") })).toEqual({ id: "tok-1" });
|
|
90
|
+
});
|
|
91
|
+
test("a missing or null path segment yields null", async () => {
|
|
92
|
+
expect(await succeed({ body: JSON.stringify({ data: { accessToken: null } }) })).toBeNull();
|
|
93
|
+
expect(await succeed({ body: JSON.stringify({ data: null }) })).toBeNull();
|
|
94
|
+
});
|
|
95
|
+
test("an empty errors array is not a failure", async () => {
|
|
96
|
+
const body = JSON.stringify({
|
|
97
|
+
data: { accessToken: { deleteAccessToken: { id: "tok-1" } } },
|
|
98
|
+
errors: [],
|
|
99
|
+
});
|
|
100
|
+
expect(await succeed({ body })).toEqual({ id: "tok-1" });
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
describe("GraphQL errors", () => {
|
|
104
|
+
test("errors[] inside HTTP 200 map extensions.errorCode to the typed class", async () => {
|
|
105
|
+
const error = await failWith({
|
|
106
|
+
body: graphqlErrors([
|
|
107
|
+
{ message: "Channel already exists", extensions: { errorCode: "CHANNEL_ALREADY_EXISTS" } },
|
|
108
|
+
]),
|
|
109
|
+
});
|
|
110
|
+
expect(error).toBeInstanceOf(EasChannelAlreadyExists);
|
|
111
|
+
expect(error).toMatchObject({ message: "Channel already exists" });
|
|
112
|
+
});
|
|
113
|
+
test("extensions.code is the fallback code field", async () => {
|
|
114
|
+
const error = await failWith({
|
|
115
|
+
body: graphqlErrors([{ message: "Not allowed", extensions: { code: "UNAUTHORIZED_ERROR" } }]),
|
|
116
|
+
});
|
|
117
|
+
expect(error).toBeInstanceOf(EasUnauthorizedOperation);
|
|
118
|
+
});
|
|
119
|
+
test("only the first error is used", async () => {
|
|
120
|
+
const error = await failWith({
|
|
121
|
+
body: graphqlErrors([
|
|
122
|
+
{ message: "missing", extensions: { errorCode: "EXPERIENCE_NOT_FOUND" } },
|
|
123
|
+
{ message: "taken", extensions: { errorCode: "CHANNEL_ALREADY_EXISTS" } },
|
|
124
|
+
]),
|
|
125
|
+
});
|
|
126
|
+
expect(error).toBeInstanceOf(EasExperienceNotFound);
|
|
127
|
+
expect(error).toMatchObject({ message: "missing" });
|
|
128
|
+
});
|
|
129
|
+
test("errors win over partial data", async () => {
|
|
130
|
+
const error = await failWith({
|
|
131
|
+
body: JSON.stringify({
|
|
132
|
+
data: { accessToken: { deleteAccessToken: { id: "tok-1" } } },
|
|
133
|
+
errors: [{ message: "partial", extensions: { errorCode: "CHANNEL_ALREADY_EXISTS" } }],
|
|
134
|
+
}),
|
|
135
|
+
});
|
|
136
|
+
expect(error).toBeInstanceOf(EasChannelAlreadyExists);
|
|
137
|
+
});
|
|
138
|
+
test("an unknown code inside HTTP 200 is UnknownEasError carrying code, message and body", async () => {
|
|
139
|
+
const body = graphqlErrors([
|
|
140
|
+
{ message: "Something new", extensions: { errorCode: "BRAND_NEW_CODE" } },
|
|
141
|
+
]);
|
|
142
|
+
const error = await failWith({ body });
|
|
143
|
+
expect(error).toBeInstanceOf(UnknownEasError);
|
|
144
|
+
expect(error).toMatchObject({
|
|
145
|
+
code: "BRAND_NEW_CODE",
|
|
146
|
+
message: "Something new",
|
|
147
|
+
body: JSON.parse(body),
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
test("an error without extensions inside HTTP 200 is UnknownEasError without a code", async () => {
|
|
151
|
+
const error = await failWith({
|
|
152
|
+
body: graphqlErrors([{ message: 'Cannot query field "nope" on type "Query".' }]),
|
|
153
|
+
});
|
|
154
|
+
expect(error).toBeInstanceOf(UnknownEasError);
|
|
155
|
+
expect(error).toMatchObject({ message: 'Cannot query field "nope" on type "Query".' });
|
|
156
|
+
expect(error.code).toBeUndefined();
|
|
157
|
+
});
|
|
158
|
+
test("an unknown code under an error status uses the HTTP status class", async () => {
|
|
159
|
+
const error = await failWith({
|
|
160
|
+
status: 400,
|
|
161
|
+
body: graphqlErrors([
|
|
162
|
+
{ message: "Variable $id is required", extensions: { code: "GRAPHQL_VALIDATION_FAILED" } },
|
|
163
|
+
]),
|
|
164
|
+
});
|
|
165
|
+
expect(error).toBeInstanceOf(BadRequest);
|
|
166
|
+
expect(error).toMatchObject({ message: "Variable $id is required" });
|
|
167
|
+
});
|
|
168
|
+
test("a typed code still wins under an error status", async () => {
|
|
169
|
+
const error = await failWith({
|
|
170
|
+
status: 403,
|
|
171
|
+
body: graphqlErrors([
|
|
172
|
+
{ message: "Not allowed", extensions: { errorCode: "UNAUTHORIZED_ERROR" } },
|
|
173
|
+
]),
|
|
174
|
+
});
|
|
175
|
+
expect(error).toBeInstanceOf(EasUnauthorizedOperation);
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
describe("HTTP-level failures", () => {
|
|
179
|
+
test("a REST-ish { message } body uses the status class", async () => {
|
|
180
|
+
const error = await failWith({
|
|
181
|
+
status: 401,
|
|
182
|
+
body: JSON.stringify({ message: "Invalid access token" }),
|
|
183
|
+
});
|
|
184
|
+
expect(error).toBeInstanceOf(Unauthorized);
|
|
185
|
+
expect(error).toMatchObject({ message: "Invalid access token" });
|
|
186
|
+
});
|
|
187
|
+
test("429 carries the Retry-After hint", async () => {
|
|
188
|
+
const error = await failWith({
|
|
189
|
+
status: 429,
|
|
190
|
+
body: JSON.stringify({ message: "Too many requests" }),
|
|
191
|
+
headers: { "retry-after": "5" },
|
|
192
|
+
});
|
|
193
|
+
expect(error).toBeInstanceOf(TooManyRequests);
|
|
194
|
+
expect(Duration.toSeconds(error.retryAfter)).toBe(5);
|
|
195
|
+
});
|
|
196
|
+
test("an empty JSON object under 500 is InternalServerError", async () => {
|
|
197
|
+
const error = await failWith({ status: 500, body: "{}" });
|
|
198
|
+
expect(error).toBeInstanceOf(InternalServerError);
|
|
199
|
+
});
|
|
200
|
+
test("a REST-ish body under an unmapped status is UnknownEasError", async () => {
|
|
201
|
+
const error = await failWith({
|
|
202
|
+
status: 418,
|
|
203
|
+
body: JSON.stringify({ message: "teapot", code: "TEAPOT" }),
|
|
204
|
+
});
|
|
205
|
+
expect(error).toBeInstanceOf(UnknownEasError);
|
|
206
|
+
expect(error).toMatchObject({ code: "TEAPOT", message: "teapot" });
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
describe("non-JSON HTTP-level failures", () => {
|
|
210
|
+
test("an HTML 502 proxy page is BadGateway with the trimmed body as message", async () => {
|
|
211
|
+
const html = "<html><body><h1>502 Bad Gateway</h1></body></html>";
|
|
212
|
+
const error = await failWith({
|
|
213
|
+
status: 502,
|
|
214
|
+
body: `\n ${html}\n`,
|
|
215
|
+
headers: { "content-type": "text/html" },
|
|
216
|
+
});
|
|
217
|
+
expect(error).toBeInstanceOf(BadGateway);
|
|
218
|
+
expect(error).toMatchObject({ message: html });
|
|
219
|
+
});
|
|
220
|
+
test("a plain-text 500 is InternalServerError", async () => {
|
|
221
|
+
const error = await failWith({ status: 500, body: "Internal Server Error" });
|
|
222
|
+
expect(error).toBeInstanceOf(InternalServerError);
|
|
223
|
+
expect(error).toMatchObject({ message: "Internal Server Error" });
|
|
224
|
+
});
|
|
225
|
+
test("a plain-text 429 is TooManyRequests carrying the Retry-After hint", async () => {
|
|
226
|
+
const error = await failWith({
|
|
227
|
+
status: 429,
|
|
228
|
+
body: "Too Many Requests",
|
|
229
|
+
headers: { "content-type": "text/plain", "retry-after": "7" },
|
|
230
|
+
});
|
|
231
|
+
expect(error).toBeInstanceOf(TooManyRequests);
|
|
232
|
+
expect(error).toMatchObject({ message: "Too Many Requests" });
|
|
233
|
+
expect(Duration.toSeconds(error.retryAfter)).toBe(7);
|
|
234
|
+
});
|
|
235
|
+
test("a plain-text 401 is Unauthorized", async () => {
|
|
236
|
+
const error = await failWith({ status: 401, body: "Unauthorized\n" });
|
|
237
|
+
expect(error).toBeInstanceOf(Unauthorized);
|
|
238
|
+
expect(error).toMatchObject({ message: "Unauthorized" });
|
|
239
|
+
});
|
|
240
|
+
test("an empty error body uses the status class with an HTTP <status> message", async () => {
|
|
241
|
+
const error = await failWith({ status: 503, body: "" });
|
|
242
|
+
expect(error).toBeInstanceOf(ServiceUnavailable);
|
|
243
|
+
expect(error).toMatchObject({ message: "HTTP 503" });
|
|
244
|
+
});
|
|
245
|
+
test("a non-JSON body under an unmapped status is UnknownEasError carrying the body", async () => {
|
|
246
|
+
const error = await failWith({ status: 418, body: "I'm a teapot" });
|
|
247
|
+
expect(error).toBeInstanceOf(UnknownEasError);
|
|
248
|
+
expect(error).toMatchObject({ body: "I'm a teapot" });
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
describe("response validation", () => {
|
|
252
|
+
const strict = deleteToken().pipe(Effect.provide(ResponseValidation.strict));
|
|
253
|
+
test("lenient mode returns a mismatched payload as read", async () => {
|
|
254
|
+
expect((await succeed({ body: data(42) }))).toEqual({ id: 42 });
|
|
255
|
+
});
|
|
256
|
+
test("strict mode fails a mismatched payload with EasParseError", async () => {
|
|
257
|
+
expect(await failWith({ body: data(42) }, strict)).toBeInstanceOf(EasParseError);
|
|
258
|
+
});
|
|
259
|
+
test("strict mode passes a matching payload", async () => {
|
|
260
|
+
expect(await run(strict, { body: data("tok-1") }).promise).toEqual({ id: "tok-1" });
|
|
261
|
+
});
|
|
262
|
+
test("a non-JSON 2xx body: lenient returns the text, strict fails", async () => {
|
|
263
|
+
expect((await succeed({ body: "not json" }))).toBe("not json");
|
|
264
|
+
expect(await failWith({ body: "not json" }, strict)).toBeInstanceOf(EasParseError);
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
//# sourceMappingURL=protocol.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.test.js","sourceRoot":"","sources":["../src/protocol.test.ts"],"names":[],"mappings":"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"}
|
package/lib/retry.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Policy } from "@distilled.cloud/core/retry";
|
|
1
2
|
/**
|
|
2
3
|
* ExpoEas retry configuration.
|
|
3
4
|
*
|
|
@@ -16,7 +17,6 @@
|
|
|
16
17
|
*/
|
|
17
18
|
import * as Context from "effect/Context";
|
|
18
19
|
import * as Effect from "effect/Effect";
|
|
19
|
-
import { type Policy } from "@distilled.cloud/core/retry";
|
|
20
20
|
export { type Options, type Factory, type Policy, makeDefault, jittered, capped, throttlingOptions, transientOptions, throttlingFactory, transientFactory, } from "@distilled.cloud/core/retry";
|
|
21
21
|
declare const Retry_base: Context.ServiceClass<Retry, "ExpoEasRetry", Policy>;
|
|
22
22
|
/** Context tag for configuring retry behavior of ExpoEas API calls. */
|