@faable/sdk-base 1.0.9 → 1.0.11

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.
@@ -25,5 +25,12 @@ export type Fetcher = {
25
25
  request: <T>(params: FetcherRequestParams) => Promise<T>;
26
26
  check: <T>(url: string, status?: number, config?: FetcherConfig) => Promise<boolean>;
27
27
  };
28
+ export type FetcherResponse = {
29
+ status?: number;
30
+ data?: any;
31
+ config?: {
32
+ url?: string;
33
+ };
34
+ };
28
35
  export {};
29
36
  //# sourceMappingURL=Fetcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Fetcher.d.ts","sourceRoot":"","sources":["../../src/fetcher/Fetcher.ts"],"names":[],"mappings":"AAAA,KAAK,MAAM,GACP,KAAK,GACL,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,MAAM,GACN,SAAS,GACT,SAAS,GACT,MAAM,GACN,MAAM,GACN,KAAK,GACL,KAAK,GACL,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,QAAQ,CAAC;AACb,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACxE,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,oBAAoB,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACzD,KAAK,EAAE,CAAC,CAAC,EACP,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,aAAa,KACnB,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB,CAAC"}
1
+ {"version":3,"file":"Fetcher.d.ts","sourceRoot":"","sources":["../../src/fetcher/Fetcher.ts"],"names":[],"mappings":"AAAA,KAAK,MAAM,GACP,KAAK,GACL,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,MAAM,GACN,SAAS,GACT,SAAS,GACT,MAAM,GACN,MAAM,GACN,KAAK,GACL,KAAK,GACL,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,QAAQ,CAAC;AACb,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACxE,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,oBAAoB,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACzD,KAAK,EAAE,CAAC,CAAC,EACP,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,aAAa,KACnB,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,CAAC,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher_axios.d.ts","sourceRoot":"","sources":["../../src/fetcher/fetcher_axios.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAiB,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAoB5C,eAAO,MAAM,aAAa,YAAY,SAAS,KAAQ,OAwDtD,CAAC"}
1
+ {"version":3,"file":"fetcher_axios.d.ts","sourceRoot":"","sources":["../../src/fetcher/fetcher_axios.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAiB,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAY5C,eAAO,MAAM,aAAa,YAAY,SAAS,KAAQ,OA6DtD,CAAC"}
@@ -1,16 +1,12 @@
1
1
  import axios from "axios";
2
- import { FaableApiError } from "../helpers/error_handler.js";
2
+ import { FaableApiError } from "../helpers/FaableApiError.js";
3
3
  const handleErrorInterceptor = async (e) => {
4
4
  if (!e.isAxiosError) {
5
- throw new FaableApiError(`Unknown error: ${e?.message}`);
5
+ throw new FaableApiError(e?.message);
6
6
  }
7
- const message = e.response?.data?.message || e.code;
8
- const payload = [message];
9
7
  // Add response highlight
10
- if (e.response) {
11
- payload.push(`(status=${e.response?.status}, url=${e.response?.config.url})`);
12
- }
13
- throw new FaableApiError(payload.join(" "));
8
+ const error = new FaableApiError(e.code, e.response);
9
+ throw error;
14
10
  };
15
11
  export const fetcher_axios = (params = {}) => {
16
12
  const instance = axios.create({
@@ -25,7 +21,8 @@ export const fetcher_axios = (params = {}) => {
25
21
  // Add base interceptor
26
22
  instance.interceptors.response.use((res) => {
27
23
  if (params.debug) {
28
- console.log(`[${res.status} ${res.statusText}] ${res.config.url}`);
24
+ const queryparams = new URLSearchParams(res.config.params);
25
+ console.log(`[${res.status}] ${res.config.url}${queryparams.size > 0 ? `?${queryparams.toString()}` : ""}`);
29
26
  }
30
27
  return res;
31
28
  }, handleErrorInterceptor);
@@ -0,0 +1,11 @@
1
+ import { FetcherResponse } from "../fetcher/Fetcher.js";
2
+ type Status = "not-found" | "created" | "ok" | "unauthorized" | "bad-request" | "internal-server-error" | "service-unavailable" | "bad-gateway";
3
+ export declare const build_error_message: (message?: string, response?: FetcherResponse) => string;
4
+ export declare class FaableApiError extends Error {
5
+ isFaableApiError: boolean;
6
+ response?: FetcherResponse;
7
+ constructor(message?: string, response?: FetcherResponse);
8
+ isStatus(code: number | Status): boolean;
9
+ }
10
+ export {};
11
+ //# sourceMappingURL=FaableApiError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FaableApiError.d.ts","sourceRoot":"","sources":["../../src/helpers/FaableApiError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,KAAK,MAAM,GACP,WAAW,GACX,SAAS,GACT,IAAI,GACJ,cAAc,GACd,aAAa,GACb,uBAAuB,GACvB,qBAAqB,GACrB,aAAa,CAAC;AAYlB,eAAO,MAAM,mBAAmB,aACpB,MAAM,aACL,eAAe,WAO3B,CAAC;AAEF,qBAAa,cAAe,SAAQ,KAAK;IACvC,gBAAgB,UAAQ;IACxB,QAAQ,CAAC,EAAE,eAAe,CAAC;gBACf,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe;IAOxD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAI/B"}
@@ -0,0 +1,31 @@
1
+ const codes = {
2
+ "not-found": 404,
3
+ created: 201,
4
+ ok: 200,
5
+ unauthorized: 401,
6
+ "bad-request": 400,
7
+ "internal-server-error": 500,
8
+ "service-unavailable": 503,
9
+ "bad-gateway": 502,
10
+ };
11
+ export const build_error_message = (message, response) => {
12
+ const payload = [response?.data?.message || message || "Unknown error"];
13
+ if (response) {
14
+ payload.push(`(status=${response?.status}, url=${response?.config?.url})`);
15
+ }
16
+ return payload.join(" ");
17
+ };
18
+ export class FaableApiError extends Error {
19
+ isFaableApiError = true;
20
+ response;
21
+ constructor(message, response) {
22
+ super(build_error_message(message, response));
23
+ this.name = "FaableApiError";
24
+ this.response = response;
25
+ Object.setPrototypeOf(this, FaableApiError.prototype);
26
+ }
27
+ isStatus(code) {
28
+ const _code = typeof code == "number" ? code : codes[code];
29
+ return this.response?.status == _code;
30
+ }
31
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"paginator.d.ts","sourceRoot":"","sources":["../../src/helpers/paginator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,WAAW,IAAI,CAAC,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,CAAC,EAAE,CAAC;CACd;AACD,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC1D,eAAO,MAAM,cAAc,YACf,OAAO,MAChB,CAAC,OAAO,oBAAoB;;;oBAiBJ;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;CAU9D,CAAC"}
1
+ {"version":3,"file":"paginator.d.ts","sourceRoot":"","sources":["../../src/helpers/paginator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAGtE,MAAM,WAAW,IAAI,CAAC,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,CAAC,EAAE,CAAC;CACd;AACD,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC1D,eAAO,MAAM,cAAc,YACf,OAAO,MAChB,CAAC,OAAO,oBAAoB;;;oBA0BJ;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;CAU9D,CAAC"}
@@ -1,13 +1,23 @@
1
+ import { FaableApiError } from "./FaableApiError.js";
1
2
  export const buildPaginator = (fetcher) => (req) => {
2
3
  return {
3
4
  all: async () => {
4
5
  const pages = [];
5
6
  let data;
7
+ let nextCurrent = null;
6
8
  do {
7
9
  data = await fetcher.request({
8
10
  ...req,
9
- params: { ...req.params, next: data && data?.next },
11
+ params: data?.next
12
+ ? { ...req.params, next: data.next }
13
+ : req.params,
10
14
  });
15
+ // Next cursor cannot be the same as previous received one. Sanity check the api.
16
+ if (nextCurrent == data?.next) {
17
+ throw new FaableApiError("Bad next cursor");
18
+ }
19
+ nextCurrent = data.next;
20
+ // Add to data array
11
21
  pages.push(data);
12
22
  } while (data.next);
13
23
  return pages.map((page) => page.results).flat();
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./FaableApi.js";
2
2
  export * from "./auth/apikey.js";
3
3
  export * from "./auth/client_credentials/client_credentials.js";
4
+ export * from "./helpers/FaableApiError.js";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iDAAiD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iDAAiD,CAAC;AAChE,cAAc,6BAA6B,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from "./FaableApi.js";
2
2
  export * from "./auth/apikey.js";
3
3
  export * from "./auth/client_credentials/client_credentials.js";
4
+ export * from "./helpers/FaableApiError.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faable/sdk-base",
3
- "version": "1.0.9",
3
+ "version": "1.0.11",
4
4
  "author": "Marc Pomar <marc@faable.com>",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -21,6 +21,7 @@
21
21
  "@types/ramda": "^0.30.2",
22
22
  "ava": "^6.1.3",
23
23
  "dotenv": "^16.4.5",
24
+ "nock": "^13.5.5",
24
25
  "openapi-typescript": "^7.4.0",
25
26
  "rimraf": "^6.0.1",
26
27
  "semantic-release": "^24.1.1",
@@ -1,4 +0,0 @@
1
- export declare class FaableApiError extends Error {
2
- constructor(msg: string);
3
- }
4
- //# sourceMappingURL=error_handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error_handler.d.ts","sourceRoot":"","sources":["../../src/helpers/error_handler.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,GAAG,EAAE,MAAM;CAKxB"}
@@ -1,7 +0,0 @@
1
- export class FaableApiError extends Error {
2
- constructor(msg) {
3
- super(msg);
4
- this.name = "FaableApiError";
5
- Object.setPrototypeOf(this, FaableApiError.prototype);
6
- }
7
- }