@zennify/sdk-js 1.0.0-beta.1 → 1.0.0-beta.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.
@@ -32,4 +32,4 @@ jobs:
32
32
  - run: npm run build
33
33
  - run: npm publish --access public --tag beta
34
34
  env:
35
- NPM_TOKEN: ${{secrets.NPM_TOKEN}}
35
+ NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ZennifyAPIRequestError = void 0;
7
+ const pt_BR_json_1 = __importDefault(require("../translations/pt_BR.json"));
8
+ const en_US_json_1 = __importDefault(require("../translations/en_US.json"));
9
+ const var_1 = require("./var");
10
+ const errors_translations = { pt_BR: pt_BR_json_1.default, en_US: en_US_json_1.default };
11
+ const match_regex = /{[\w.]+}/g;
12
+ const replacer = (body, value) => {
13
+ return body[value.slice(1, -1)];
14
+ };
15
+ class ZennifyAPIRequestError extends Error {
16
+ status = 0;
17
+ code = 0;
18
+ body;
19
+ constructor(response, body) {
20
+ super();
21
+ this.body = body;
22
+ this.status = response.status;
23
+ if (this.status === 403) {
24
+ this.name = "Usuário inválido";
25
+ this.message = "Por favor, se re-autentique";
26
+ }
27
+ if (this.status === 503) {
28
+ this.name = "API em atualização.";
29
+ this.message = "Por favor, tente novamente em alguns minutos.";
30
+ }
31
+ if (this.status === 429) {
32
+ this.name = "Calma ai!";
33
+ this.message = "Suas ações estão sendo limitadas!";
34
+ }
35
+ const error = errors_translations[var_1.ZENNIFY_API_RESPONSE_LANGUAGE][body.code] ||
36
+ errors_translations[var_1.ZENNIFY_API_RESPONSE_LANGUAGE]["UNKNOWN_TRANSLATION"];
37
+ this.name = error.name
38
+ .replace(match_regex, (value) => replacer(body, value));
39
+ this.message = error.message
40
+ .replace(match_regex, (value) => replacer(body, value));
41
+ }
42
+ }
43
+ exports.ZennifyAPIRequestError = ZennifyAPIRequestError;
package/dist/errors.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/dist/main.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./var"), exports);
18
+ __exportStar(require("./errors"), exports);
19
+ __exportStar(require("./utils"), exports);
20
+ __exportStar(require("./RequestError"), exports);
21
+ __exportStar(require("./interfaces/Media"), exports);
22
+ __exportStar(require("./interfaces/Panels"), exports);
23
+ __exportStar(require("./interfaces/Products"), exports);
package/dist/utils.js ADDED
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetResponseError = GetResponseError;
4
+ exports.TreatZennifyResponse = TreatZennifyResponse;
5
+ const RequestError_1 = require("./RequestError");
6
+ function GetResponseError(code, additional = {}) {
7
+ return { code, ...additional };
8
+ }
9
+ async function TreatZennifyResponse(response) {
10
+ const body = await response.json().catch(() => ({}));
11
+ if (response.ok) {
12
+ return body;
13
+ }
14
+ throw new RequestError_1.ZennifyAPIRequestError(response, body);
15
+ }
package/dist/var.js ADDED
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZENNIFY_API_RESPONSE_LANGUAGE = void 0;
4
+ exports.SetAPIResponseLanguage = SetAPIResponseLanguage;
5
+ exports.ZENNIFY_API_RESPONSE_LANGUAGE = 'en_US';
6
+ function SetAPIResponseLanguage(lang) {
7
+ return exports.ZENNIFY_API_RESPONSE_LANGUAGE = lang;
8
+ }
package/package.json CHANGED
@@ -1,14 +1,18 @@
1
1
  {
2
2
  "name": "@zennify/sdk-js",
3
- "version": "1.0.0-beta.1",
3
+ "version": "1.0.0-beta.11",
4
4
  "description": "A simple package to work with https://api.zennify.app",
5
5
  "main": "dist/main.js",
6
6
  "keywords": [],
7
7
  "author": "josejooj",
8
8
  "license": "ISC",
9
+ "publishConfig": {
10
+ "registry": "https://registry.npmjs.org/"
11
+ },
9
12
  "repository": {
10
13
  "url": "git+https://github.com/zennify-ofc/sdk-js.git"
11
14
  },
15
+ "types": "./types/main.d.ts",
12
16
  "devDependencies": {
13
17
  "@types/node": "^20.12.12",
14
18
  "typescript": "^5.5.3"
@@ -1,6 +1,7 @@
1
1
  import pt_BR from '../translations/pt_BR.json';
2
2
  import en_US from '../translations/en_US.json';
3
3
  import { ZENNIFY_API_RESPONSE_LANGUAGE } from './var';
4
+ import { APIErrors } from './errors';
4
5
 
5
6
  const errors_translations = { pt_BR, en_US };
6
7
  const match_regex = /{[\w.]+}/g;
@@ -9,7 +10,7 @@ const replacer = (body: any, value: string) => {
9
10
  }
10
11
 
11
12
  type Body = Record<string, any> & {
12
- code: number
13
+ code: APIErrors
13
14
  }
14
15
 
15
16
  export class ZennifyAPIRequestError extends Error {
@@ -41,8 +42,8 @@ export class ZennifyAPIRequestError extends Error {
41
42
  }
42
43
 
43
44
  const error: { name: string, message: string } =
44
- errors_translations[ZENNIFY_API_RESPONSE_LANGUAGE][body.code as 0] ||
45
- errors_translations[ZENNIFY_API_RESPONSE_LANGUAGE]["1"];
45
+ errors_translations[ZENNIFY_API_RESPONSE_LANGUAGE][body.code] ||
46
+ errors_translations[ZENNIFY_API_RESPONSE_LANGUAGE]["UNKNOWN_TRANSLATION"];
46
47
 
47
48
  this.name = error.name
48
49
  .replace(match_regex, (value) => replacer(body, value));
package/src/errors.ts CHANGED
@@ -1,108 +1,101 @@
1
- export enum APIErrors {
2
- UNKNOWN_ERROR = 0,
3
- UNKNOWN_TRANSLATION = 1,
4
- METHOD_NOT_ALLOWED = 2,
5
- EXPECTED_AN_OBJECT_ARRAY = 3,
6
- EXPECTED_A_STRING_ARRAY = 4,
7
- EXPECTED_A_NUMBER_ARRAY = 5,
8
- EXPECTED_AN_OBJECT = 6,
9
- EXPECTED_A_NON_EMPTY_OBJECT = 7,
10
- EXPECTED_A_STRING = 8,
11
- EXPECTED_A_NUMBER = 9,
12
- DUPLICATED_VALUES_ISNT_ALLOWED = 10,
13
- // 1000-1100 = oAuth errors
14
- GRANT_CODE_MISSING_IN_QUERY = 1000,
15
- INVALID_SCOPE = 1001,
16
- VERIFY_YOUR_EMAIL = 1002,
17
- PLEASE_REVERIFY = 1003,
18
- // 1500-2000 = user errors
19
- USER_NOT_FOUND = 1500,
20
- // 1501 - 1510
21
- // password errors
22
- INSERT_A_VALID_PASSWORD = 1501,
23
- YOU_MUST_INSERT_THE_ACTUAL_PASSWORD = 1502,
24
- THE_PASSWORD_DOES_NOT_MATCH = 1503,
25
- THE_PASSWORD_MUST_HAVE_AT_LEAST_8_CHARACTERS = 1504,
26
- THE_PASSWORD_MUST_HAVE_AT_LEAST_ONE_NUMBER = 1505,
27
- THE_PASSWORD_MUST_HAVE_AT_LEAST_ONE_LETTER = 1506,
28
- THE_PASSWORD_MUST_HAVE_AT_LEAST_ONE_SPECIAL_CHARACTER = 1507,
29
- // 1511 - 1520
30
- // pix key errors
31
- THE_PIX_KEY_SENDED_ISNT_A_VALID_STRING = 1511,
32
- THE_EMAIL_SENDED_ISNT_VALID = 1512,
33
- CELLPHONE_NUMBERS_MUST_HAVE_THE_9_DIGIT = 1513,
34
- THE_CELLPHONE_NUMBER_MUST_HAVE_ONLY_DIGITS = 1514,
35
- THE_PIX_KEY_INSERTED_ISNT_VALID = 1515,
36
- // 1521 - 1530
37
- // webhook url error
38
- INSERT_A_VALID_URL = 1521,
39
- THE_ONLY_ACCEPTED_PROTOCOL_IS_HTTPS = 1522,
40
- THIS_DOMAIN_IS_BLACKLISTED = 1523,
41
- THE_URL_EXTENSION_ISNT_ACCEPTED_YET = 1524,
42
- THE_URL_IS_INACCESSIBLE_BY_THE_WEBHOOK_SERVER = 1525,
43
- THE_URL_WOULD_NOT_HAVE_REDIRECTS = 1526,
44
- THE_URL_HAS_TIMEOUT_5S = 1527,
45
- // 2000-3000 = payment errors
46
- INVALID_PAYMENT_METHOD = 2000,
47
- // 2200-2500
1
+ export type APIErrors =
2
+ // = general errors
3
+ | 'UNKNOWN_ERROR'
4
+ | 'UNKNOWN_TRANSLATION'
5
+ | 'METHOD_NOT_ALLOWED'
6
+ | 'EXPECTED_AN_OBJECT_ARRAY'
7
+ | 'EXPECTED_A_STRING_ARRAY'
8
+ | 'EXPECTED_A_NUMBER_ARRAY'
9
+ | 'EXPECTED_AN_OBJECT'
10
+ | 'EXPECTED_A_NON_EMPTY_OBJECT'
11
+ | 'EXPECTED_A_STRING'
12
+ | 'EXPECTED_A_NUMBER'
13
+ | 'EXPECTED_A_VALID_ID'
14
+ | 'DUPLICATED_VALUES_ISNT_ALLOWED'
15
+ // = oAuth errors
16
+ | 'GRANT_CODE_MISSING_IN_QUERY'
17
+ | 'INVALID_SCOPE'
18
+ | 'VERIFY_YOUR_EMAIL'
19
+ | 'PLEASE_REVERIFY'
20
+ // = user errors
21
+ | 'USER_NOT_FOUND'
22
+ /// password errors
23
+ | 'INVALID_PASSWORD'
24
+ | 'YOU_MUST_INSERT_THE_ACTUAL_PASSWORD'
25
+ | 'THE_PASSWORD_DOES_NOT_MATCH'
26
+ | 'THE_PASSWORD_MUST_HAVE_AT_LEAST_8_CHARACTERS'
27
+ | 'THE_PASSWORD_MUST_HAVE_AT_LEAST_ONE_NUMBER'
28
+ | 'THE_PASSWORD_MUST_HAVE_AT_LEAST_ONE_LETTER'
29
+ | 'THE_PASSWORD_MUST_HAVE_AT_LEAST_ONE_SPECIAL_CHARACTER'
30
+ /// pix key errors
31
+ | 'THE_EMAIL_SENDED_ISNT_VALID'
32
+ | 'CELLPHONE_NUMBERS_MUST_HAVE_THE_9_DIGIT'
33
+ | 'THE_CELLPHONE_NUMBER_MUST_HAVE_ONLY_DIGITS'
34
+ | 'THE_PIX_KEY_INSERTED_ISNT_VALID'
35
+ /// webhook url error
36
+ | 'INSERT_A_VALID_URL'
37
+ | 'THE_ONLY_ACCEPTED_PROTOCOL_IS_HTTPS'
38
+ | 'THIS_DOMAIN_IS_BLACKLISTED'
39
+ | 'THE_URL_EXTENSION_ISNT_ACCEPTED_YET'
40
+ | 'THE_URL_IS_INACCESSIBLE_BY_THE_WEBHOOK_SERVER'
41
+ | 'THE_URL_WOULD_NOT_HAVE_REDIRECTS'
42
+ | 'THE_URL_HAS_TIMEOUT_5S'
43
+ /// payment errors
44
+ | 'INVALID_PAYMENT_METHOD'
48
45
  // Order Errors
49
- YOU_NEED_TO_INSERT_AT_LEAST_1_ITEM = 2200,
50
- ONE_PROVIDED_PRODUCT_IS_OUT_OF_STOCK = 2201,
51
- WE_DONT_HAVE_THIS_AMOUNT_IN_STOCK = 2202,
52
- THIS_SELLER_WAS_BANNED_FROM_ZENNIFY = 2203,
53
- WE_DO_NOT_YET_SUPPORT_MULTIPLE_USER_PRODUCTS = 2204,
54
- WE_DO_NOT_YET_SUPPORT_MULTIPLE_STORE_PRODUCTS = 2205,
55
- YOU_ALREADY_HAVE_ANOTHER_ORDER_WAITING_PAYMENT = 2206,
56
- YOU_INSERTED_AN_INVALID_ADDITIONAL = 2207,
57
- // 2211 - 2250
58
- // subtype
59
- // bad preference configuration
60
- THIS_SELLER_HAS_NOT_YET_CONFIGURED_RECEIPT_VIA_PIX = 2211,
61
- THIS_SELLER_HAS_NOT_YET_CONFIGURED_RECEIPT_VIA_BOLETO = 2212,
62
- THIS_SELLER_HAS_NOT_YET_CONFIGURED_RECEIPT_VIA_CRYPTO = 2213,
63
- // 2251 - 2275
64
- // subtype
65
- // coupons
66
- THIS_COUPON_DOES_NOT_EXISTS = 2251,
67
- THIS_COUPON_HAS_EXPIRED = 2252,
68
- THIS_COUPON_REACHED_THE_USE_LIMIT = 2253,
69
- YOU_NEED_TO_SELECT_MORE_ITENS_DO_REACH_THE_MINIMUM_VALUE_OF_THE_COUPON = 2254,
70
- THIS_COUPON_IS_VALID_ONLY_FOR_THE_FIRST_BUY = 2255,
71
- // 2500 - 2600 = store errors
72
- UNKNOWN_STORE = 2500,
73
- UNKNOWN_BANK = 2501,
74
- INVALID_STORE_NAME = 2502,
75
- // 2600 - 3000 = product errors
76
- UNKNOWN_PRODUCT = 2600,
77
- INVALID_PRODUCT_NAME = 2601,
78
- INVALID_PRODUCT_VALUE = 2602,
79
- YOU_REACHED_THE_PRODUCT_LIMIT = 2603,
80
- YOU_ALREADY_HAVE_ANOTHER_PRODUCT_WITH_THIS_NAME = 2604,
81
- // 2605 - 2610
82
- // Description errors
83
- INVALID_DISCORD_DESCRIPTION = 2605,
84
- // 2611 - 2650
85
- // Stock errors
86
- INVALID_STOCK_ID = 2611,
87
- UNKNOWN_STOCK = 2612,
88
- INVALID_STOCK_CONTENT = 2613,
89
- INVALID_STOCK_COST = 2614,
90
- // 3001 - 3100 = Media Errors
91
- UNKNOWN_FILE = 3001,
92
- NO_FILES_FOUND = 3002,
93
- INVALID_FILE_TYPE = 3003,
94
- INVALID_FILE_NAME = 3004,
95
- INVALID_FILE_SIZE = 3005,
96
- YOU_REACHED_THE_MAXIMUM_STORAGE = 3006,
97
- YOU_REACHED_THE_MAXIMUM_MEDIA_COUNT = 3007,
98
- YOU_ALREADY_HAVE_THIS_IMAGE_ON_ZENNIFY = 3008,
99
- YOU_ALREADY_HAVE_ANOTHER_IMAGE_WITH_THIS_NAME = 3009,
100
- // 3101 - 3200 = Discord Panels Errors
101
- UNKNOWN_PANEL = 3101,
102
- INVALID_PANEL_NAME = 3102,
103
- INVALID_PANEL_DESCRIPTION = 3103,
104
- INVALID_PANEL_PLACEHOLDER = 3104,
105
- YOU_REACHED_THE_PANEL_LIMIT = 3105,
106
- YOU_ALREADY_HAVE_ANOTHER_PANEL_WITH_THIS_NAME = 3106,
107
- YOU_REACHED_THE_PRODUCTS_LIMIT_ON_PANEL = 3107,
108
- }
46
+ | 'YOU_NEED_TO_INSERT_AT_LEAST_1_ITEM'
47
+ | 'ONE_PROVIDED_PRODUCT_IS_OUT_OF_STOCK'
48
+ | 'WE_DONT_HAVE_THIS_AMOUNT_IN_STOCK'
49
+ | 'THIS_SELLER_WAS_BANNED_FROM_ZENNIFY'
50
+ | 'WE_DO_NOT_YET_SUPPORT_MULTIPLE_USER_PRODUCTS'
51
+ | 'WE_DO_NOT_YET_SUPPORT_MULTIPLE_STORE_PRODUCTS'
52
+ | 'YOU_ALREADY_HAVE_ANOTHER_ORDER_WAITING_PAYMENT'
53
+ | 'YOU_INSERTED_AN_INVALID_ADDITIONAL'
54
+ /// bad preference configuration
55
+ | 'THIS_SELLER_HAS_NOT_YET_CONFIGURED_RECEIPT_VIA_PIX'
56
+ | 'THIS_SELLER_HAS_NOT_YET_CONFIGURED_RECEIPT_VIA_BOLETO'
57
+ | 'THIS_SELLER_HAS_NOT_YET_CONFIGURED_RECEIPT_VIA_CRYPTO'
58
+ /// coupons
59
+ | 'THIS_COUPON_DOES_NOT_EXISTS'
60
+ | 'THIS_COUPON_HAS_EXPIRED'
61
+ | 'THIS_COUPON_REACHED_THE_USE_LIMIT'
62
+ | 'SELECT_MORE_ITENS_TO_REACH_MINIMUM_COUPON_VALUE'
63
+ | 'THIS_COUPON_IS_VALID_ONLY_FOR_THE_FIRST_BUY'
64
+ // store errors
65
+ | 'UNKNOWN_STORE'
66
+ | 'UNKNOWN_BANK'
67
+ | 'INVALID_STORE_NAME'
68
+ /// bot errors
69
+ | 'WAIT_OR_TRY_AGAIN_WITH_ANOTHER_DISCORD_BOT'
70
+ | 'INVALID_DISCORD_BOT_TOKEN'
71
+ | 'DISABLE_REQUIRE_CODE_GRANT'
72
+ // product errors
73
+ | 'UNKNOWN_PRODUCT'
74
+ | 'INVALID_PRODUCT_NAME'
75
+ | 'INVALID_PRODUCT_VALUE'
76
+ | 'YOU_REACHED_THE_PRODUCT_LIMIT'
77
+ | 'PRODUCT_NAME_ALREADY_EXIST'
78
+ /// Description errors
79
+ | 'INVALID_PRODUCT_DESCRIPTION_FOR_DISCORD'
80
+ /// Stock errors
81
+ | 'UNKNOWN_STOCK'
82
+ | 'INVALID_STOCK_CONTENT'
83
+ | 'INVALID_STOCK_COST'
84
+ // Media Errors
85
+ | 'UNKNOWN_FILE'
86
+ | 'NO_FILES_FOUND'
87
+ | 'INVALID_FILE_TYPE'
88
+ | 'INVALID_FILE_NAME'
89
+ | 'INVALID_FILE_SIZE'
90
+ | 'YOU_REACHED_STORAGE_LIMIT'
91
+ | 'YOU_REACHED_MEDIA_LIMIT'
92
+ | 'YOU_ALREADY_HAVE_THIS_MEDIA'
93
+ | 'MEDIA_NAME_ALREADY_EXIST'
94
+ // Discord Panels Errors
95
+ | 'UNKNOWN_PANEL'
96
+ | 'INVALID_PANEL_NAME'
97
+ | 'INVALID_PANEL_DESCRIPTION'
98
+ | 'INVALID_PANEL_PLACEHOLDER'
99
+ | 'YOU_REACHED_PANEL_LIMIT'
100
+ | 'PANEL_NAME_ALREADY_EXIST'
101
+ | 'YOU_REACHED_THE_PRODUCT_LIMIT_ON_PANEL'
@@ -0,0 +1,6 @@
1
+ export interface Medium {
2
+ id: number,
3
+ name: string,
4
+ size: number,
5
+ mime_type: string,
6
+ }
@@ -0,0 +1,15 @@
1
+ export interface PanelProduct {
2
+ id: number,
3
+ position: number,
4
+ emoji: string
5
+ }
6
+
7
+ export interface Panel {
8
+ id: number,
9
+ name: string,
10
+ placeholder: string,
11
+ description: string | null,
12
+ icon_id: number | null,
13
+ banner_id: number | null,
14
+ products: PanelProduct[]
15
+ }
@@ -0,0 +1,29 @@
1
+ export interface PartialProduct {
2
+ id: number,
3
+ name: string,
4
+ value: number,
5
+ icon_id: number | null,
6
+ banner_id: number | null,
7
+ stock_locked: boolean | null,
8
+ stock_count: number
9
+ }
10
+
11
+ export interface Product {
12
+ id: number,
13
+ name: string,
14
+ created_at: string,
15
+ store_id: number,
16
+ owner_id: number,
17
+ icon_id: null | number,
18
+ banner_id: null | number,
19
+ value: number,
20
+ description: {
21
+ short: null | string,
22
+ discord: null | string,
23
+ website: null | string
24
+ },
25
+ stock: {
26
+ size: number,
27
+ locked: boolean
28
+ }
29
+ }
package/src/main.ts CHANGED
@@ -1,3 +1,7 @@
1
1
  export * from './var';
2
2
  export * from './errors';
3
- export * from './utils';
3
+ export * from './utils';
4
+ export * from './RequestError';
5
+ export * from './interfaces/Media';
6
+ export * from './interfaces/Panels';
7
+ export * from './interfaces/Products';
package/src/utils.ts CHANGED
@@ -1,20 +1,31 @@
1
1
  import { ZennifyAPIRequestError } from './RequestError';
2
2
  import { APIErrors } from './errors';
3
3
 
4
- export function GetResponseError(
5
- error: keyof typeof APIErrors,
6
- additional: any = {}
7
- ): { error: keyof APIErrors | string, code: number } & Record<string, any> {
8
-
9
- const code = APIErrors[error];
10
-
11
- return { error, code, ...additional }
12
-
4
+ type ExpectedErrorAdditional = { field: string; received: any; type: string }
5
+ type ExpectedError = Extract<
6
+ APIErrors,
7
+ | 'EXPECTED_AN_OBJECT_ARRAY'
8
+ | 'EXPECTED_A_STRING_ARRAY'
9
+ | 'EXPECTED_A_NUMBER_ARRAY'
10
+ | 'EXPECTED_AN_OBJECT'
11
+ | 'EXPECTED_A_NON_EMPTY_OBJECT'
12
+ | 'EXPECTED_A_STRING'
13
+ | 'EXPECTED_A_NUMBER'
14
+ | 'EXPECTED_A_VALID_ID'
15
+ >;
16
+
17
+ type CommonError = Exclude<APIErrors, ExpectedError>;
18
+
19
+ export function GetResponseError(code: CommonError): { code: CommonError };
20
+ export function GetResponseError(code: ExpectedError, additional: ExpectedErrorAdditional): { code: ExpectedError } & ExpectedErrorAdditional;
21
+ export function GetResponseError<T extends object>(code: CommonError, additional?: T): { code: CommonError } & T;
22
+ export function GetResponseError(code: APIErrors, additional: any = {}) {
23
+ return { code, ...additional };
13
24
  }
14
25
 
15
26
  export async function TreatZennifyResponse<T extends any>(response: Response): Promise<T> {
16
27
 
17
- const body = await response.json();
28
+ const body = await response.json().catch(() => ({}));
18
29
 
19
30
  if (response.ok) {
20
31
  return body as T;
package/src/var.ts CHANGED
@@ -1,3 +1,5 @@
1
- type Languages = 'pt_BR' | 'en_US';
2
-
3
- export let ZENNIFY_API_RESPONSE_LANGUAGE: Languages = 'en_US';
1
+ export type SupportedLanguages = 'pt_BR' | 'en_US';
2
+ export let ZENNIFY_API_RESPONSE_LANGUAGE: SupportedLanguages = 'en_US';
3
+ export function SetAPIResponseLanguage(lang: SupportedLanguages) {
4
+ return ZENNIFY_API_RESPONSE_LANGUAGE = lang;
5
+ }