cloudcommerce 0.0.41 → 0.0.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/package.json +1 -1
  3. package/packages/api/lib/index.d.ts +9 -3
  4. package/packages/api/lib/index.js +12 -2
  5. package/packages/api/lib/index.js.map +1 -1
  6. package/packages/api/lib/types.d.ts +12 -2
  7. package/packages/api/package.json +1 -1
  8. package/packages/api/src/index.ts +28 -5
  9. package/packages/api/src/types.ts +13 -1
  10. package/packages/apps/discounts/lib/index.d.ts +3 -0
  11. package/packages/apps/discounts/lib/index.js +3 -1
  12. package/packages/apps/discounts/lib/index.js.map +1 -1
  13. package/packages/apps/discounts/package.json +3 -3
  14. package/packages/apps/discounts/src/index.ts +1 -1
  15. package/packages/apps/discounts/tsconfig.json +4 -1
  16. package/packages/cli/lib/build.js +5 -2
  17. package/packages/cli/package.json +1 -1
  18. package/packages/cli/src/build.ts +8 -5
  19. package/packages/events/CHANGELOG.md +1 -0
  20. package/packages/events/README.md +1 -0
  21. package/packages/events/package.json +36 -0
  22. package/packages/events/src/firebase.ts +30 -0
  23. package/packages/events/src/index.ts +1 -0
  24. package/packages/events/tsconfig.json +3 -0
  25. package/packages/firebase/lib/config.d.ts +5 -0
  26. package/packages/firebase/lib/config.js +5 -0
  27. package/packages/firebase/lib/config.js.map +1 -1
  28. package/packages/firebase/package.json +3 -2
  29. package/packages/firebase/src/config.ts +5 -0
  30. package/packages/modules/lib/firebase/ajv.js +33 -0
  31. package/packages/modules/lib/firebase/ajv.js.map +1 -0
  32. package/packages/modules/lib/firebase/call-app-module.js +76 -0
  33. package/packages/modules/lib/firebase/call-app-module.js.map +1 -0
  34. package/packages/modules/lib/firebase/checkout.js +1 -0
  35. package/packages/modules/lib/firebase/checkout.js.map +1 -0
  36. package/packages/modules/lib/firebase/handle-module.js +161 -0
  37. package/packages/modules/lib/firebase/handle-module.js.map +1 -0
  38. package/packages/modules/lib/firebase/proxy-apps.js +1 -0
  39. package/packages/modules/lib/firebase/proxy-apps.js.map +1 -0
  40. package/packages/modules/lib/firebase/serve-modules-api.js +57 -0
  41. package/packages/modules/lib/firebase/serve-modules-api.js.map +1 -0
  42. package/packages/modules/lib/firebase.js +10 -3
  43. package/packages/modules/lib/firebase.js.map +1 -1
  44. package/packages/modules/lib/index.js +11 -7
  45. package/packages/modules/lib/index.js.map +1 -1
  46. package/packages/modules/package.json +5 -1
  47. package/packages/modules/src/firebase/ajv.ts +38 -0
  48. package/packages/modules/src/firebase/call-app-module.ts +86 -0
  49. package/packages/modules/src/firebase/{.gitkeep → checkout.ts} +0 -0
  50. package/packages/modules/src/firebase/handle-module.ts +197 -0
  51. package/packages/modules/src/firebase/proxy-apps.ts +0 -0
  52. package/packages/modules/src/firebase/serve-modules-api.ts +66 -0
  53. package/packages/modules/src/firebase.ts +10 -3
  54. package/packages/modules/src/index.ts +11 -8
  55. package/packages/passport/package.json +1 -1
  56. package/packages/ssr/package.json +1 -1
  57. package/packages/storefront/package.json +1 -1
  58. package/packages/types/index.ts +10 -4
  59. package/packages/types/package.json +1 -1
  60. package/pnpm-lock.yaml +79 -13
package/CHANGELOG.md CHANGED
@@ -2,6 +2,40 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.0.44](https://github.com/ecomplus/cloud-commerce/compare/v0.0.43...v0.0.44) (2022-08-05)
6
+
7
+
8
+ ### Features
9
+
10
+ * **apps/discounts:** Start exporting apply discount function for module [[#29](https://github.com/ecomplus/cloud-commerce/issues/29)] ([a4ca745](https://github.com/ecomplus/cloud-commerce/commit/a4ca745ac69318e2c2ba1b4e94e68f37924b0682))
11
+ * **events:** Setup `@cloudcommerce/events` pkg with first listener start [[#29](https://github.com/ecomplus/cloud-commerce/issues/29)] ([3a4ae39](https://github.com/ecomplus/cloud-commerce/commit/3a4ae3996066ece4c502d55b39f79f9fab20fee3))
12
+ * **firebase:** Start defining apps on config with first (discount) app [[#29](https://github.com/ecomplus/cloud-commerce/issues/29)] ([8a810cf](https://github.com/ecomplus/cloud-commerce/commit/8a810cf45ad41c29adb14e111dccd63afd71b63c))
13
+ * **modules:** Start importing/calling internal apps dynamically [[#29](https://github.com/ecomplus/cloud-commerce/issues/29)] ([47db241](https://github.com/ecomplus/cloud-commerce/commit/47db24193c3423851246e691604a5e9f691c9077))
14
+ * **types:** Add `AppModuleName` enum definition ([642235c](https://github.com/ecomplus/cloud-commerce/commit/642235cf789d11b3208526a87bd7fc72e2dd38e4))
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **cli:** Prevent no such file error with optional `.env` on build ([201f30e](https://github.com/ecomplus/cloud-commerce/commit/201f30e6ce365ff01ae46dad83a8dfa899b6b91a))
20
+ * **types:** Edit some app events types (grammar) ([a552efa](https://github.com/ecomplus/cloud-commerce/commit/a552efa08b0eba6e25292f0a64a2a269bb812adb))
21
+
22
+ ### [0.0.43](https://github.com/ecomplus/cloud-commerce/compare/v0.0.42...v0.0.43) (2022-08-04)
23
+
24
+
25
+ ### Features
26
+
27
+ * **api:** Export types `ApiEndpoint` and `ApiConfig` ([056f6b4](https://github.com/ecomplus/cloud-commerce/commit/056f6b48d5add05aea7a437674b42a88061acd44))
28
+ * **api:** Parse error response and return `error.data` ([b37e561](https://github.com/ecomplus/cloud-commerce/commit/b37e56161ab5673028d4e14d5645bc64bbf9ccbd))
29
+ * **firebase:** Add `./lib/env` to pkg named exports ([31e9d0d](https://github.com/ecomplus/cloud-commerce/commit/31e9d0d0841f3e5a7e15f7e16babdeace4bf32b8))
30
+ * **modules:** Setup Modules API function ([2a58363](https://github.com/ecomplus/cloud-commerce/commit/2a58363b7e3bc0a3a4e19c1278a0d366deb6f393))
31
+
32
+
33
+ ### Bug Fixes
34
+
35
+ * **api:** Fix config params typedef to accept booleans ([d14ca33](https://github.com/ecomplus/cloud-commerce/commit/d14ca33cc9ad66f185856fed4fa0b11d32c192f7))
36
+
37
+ ### [0.0.42](https://github.com/ecomplus/cloud-commerce/compare/v0.0.41...v0.0.42) (2022-08-02)
38
+
5
39
  ### [0.0.41](https://github.com/ecomplus/cloud-commerce/compare/v0.0.40...v0.0.41) (2022-08-02)
6
40
 
7
41
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cloudcommerce",
3
3
  "type": "module",
4
- "version": "0.0.41",
4
+ "version": "0.0.44",
5
5
  "description": "Open fair-code headless commerce platform: API-first, microservices based, event driven and cloud native",
6
6
  "main": "packages/api/lib/index.js",
7
7
  "author": "E-Com Club Softwares para E-commerce <ti@e-com.club>",
@@ -1,10 +1,13 @@
1
- import type { ResourceOpQuery, Endpoint, Config, ResponseBody, RequestBody } from './types';
1
+ import type { ResourceOpQuery, Endpoint, Config, ResponseBody, RequestBody, ErrorBody } from './types';
2
2
  declare class ApiError extends Error {
3
3
  config: Config;
4
- response?: Response;
4
+ response?: Response & {
5
+ data?: ErrorBody;
6
+ };
5
7
  statusCode?: number;
8
+ data?: ErrorBody;
6
9
  isTimeout: boolean;
7
- constructor(config: Config, response?: Response, msg?: string, isTimeout?: boolean);
10
+ constructor(config: Config, response?: ApiError['response'], msg?: string, isTimeout?: boolean);
8
11
  }
9
12
  declare const def: {
10
13
  middleware(config: Config): {
@@ -10030,3 +10033,6 @@ declare const del: (endpoint: Endpoint, config: AbstractedAuthConfig) => Promise
10030
10033
  }>;
10031
10034
  export default api;
10032
10035
  export { setMiddleware, get, post, put, patch, del, ApiError, };
10036
+ export declare type ApiEndpoint = Endpoint;
10037
+ export declare type ApiConfig = Config;
10038
+ export declare type ApiErrorBody = ErrorBody;
@@ -4,10 +4,15 @@ const env = (typeof window === 'object' && window)
4
4
  || {};
5
5
  class ApiError extends Error {
6
6
  constructor(config, response, msg, isTimeout = false) {
7
- super(response?.statusText || msg || 'Request error');
7
+ if (response) {
8
+ super(response.statusText);
9
+ this.data = response.data;
10
+ this.statusCode = response.status;
11
+ } else {
12
+ super(msg || 'Request error');
13
+ }
8
14
  this.config = config;
9
15
  this.response = response;
10
- this.statusCode = response?.status;
11
16
  this.isTimeout = isTimeout;
12
17
  }
13
18
  }
@@ -101,6 +106,11 @@ const api = async (config, retries = 0) => {
101
106
  });
102
107
  }
103
108
  }
109
+ try {
110
+ response.data = await response?.json();
111
+ } catch (e) {
112
+ //
113
+ }
104
114
  throw new ApiError(config, response);
105
115
  };
106
116
  const get = (endpoint, config) => api({ ...config, endpoint });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,aAAa;AACb,MAAM,GAAG,GAA8B,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC;OACxE,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;OACvD,EAAE,CAAC;AAER,MAAM,QAAS,SAAQ,KAAK;IAK1B,YAAY,MAAc,EAAE,QAAmB,EAAE,GAAY,EAAE,YAAqB,KAAK;QACvF,KAAK,CAAC,QAAQ,EAAE,UAAU,IAAI,GAAG,IAAI,eAAe,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,QAAQ,EAAE,MAAM,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,GAAG,GAAG;IACV,UAAU,CAAC,MAAc;QACvB,MAAM,OAAO,GAAqC,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QACxE,IAAI,MAAM,CAAC,WAAW,EAAE;YACtB,wCAAwC;YACxC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,CAAC,WAAW,EAAE,CAAC;SAC3D;aAAM,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE;YACnD,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9D,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,UAAU;gBAC7C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5D,wCAAwC;YACxC,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,UAAU,EAAE,CAAC;SAClD;QACD,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,YAAY,IAAI,wBAAwB,CAAC;QACzE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QACpC,IACE,QAAQ,KAAK,OAAO;eACjB,QAAQ,KAAK,cAAc;eAC3B,QAAQ,KAAK,mBAAmB;eAChC,QAAQ,KAAK,gBAAgB,EAChC;YACA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,aAAa,CAAC;YACpD,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;aAC/E;YACD,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC;YAC1C,IAAI,IAAI,EAAE;gBACR,GAAG,IAAI,SAAS,IAAI,EAAE,CAAC;aACxB;SACF;QACD,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC;QACtB,IAAI,MAAM,EAAE;YACV,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC9B,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;aACrB;iBAAM;gBACL,uDAAuD;gBACvD,GAAG,IAAI,IAAI,IAAI,eAAe,CAAC,MAAgC,CAAC,EAAE,CAAC;aACpE;SACF;QACD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IAC1B,CAAC;CACF,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,UAAiC,EAAE,EAAE;IAC1D,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,KAAK,EAAiD,MAAS,EAAE,OAAO,GAAG,CAAC,EAIrF,EAAE;IACH,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,EACJ,MAAM,EACN,OAAO,GAAG,KAAK,EACf,UAAU,GAAG,CAAC,GACf,GAAG,MAAM,CAAC;IACX,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;IAC9C,IAAI,IAAwB,CAAC;IAC7B,IAAI,UAAU,EAAE;QACd,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAClC,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;QAC7C,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;KACpD;IAED,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC,EAAE,OAAO,CAAC,CAAC;IACZ,IAAI,QAA8B,CAAC;IACnC,IAAI;QACF,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,GAAG,EAAE;YAC5C,MAAM;YACN,OAAO;YACP,IAAI;YACJ,MAAM,EAAE,eAAe,CAAC,MAAM;SAC/B,CAAC,CAAC;KACJ;IAAC,OAAO,GAAQ,EAAE;QACjB,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;KAC9D;IACD,YAAY,CAAC,KAAK,CAAC,CAAC;IAEpB,IAAI,QAAQ,EAAE;QACZ,IAAI,QAAQ,CAAC,EAAE,EAAE;YACf,OAAO;gBACL,GAAG,QAAQ;gBACX,MAAM;gBACN,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE;aAC5B,CAAC;SACH;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;QAC5B,IAAI,UAAU,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,EAAE;YAC7D,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,UAAU,CAAC,GAAG,EAAE;oBACd,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACvD,CAAC,EAAE,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;SACJ;KACF;IACD,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC,CAAC;AAMF,MAAM,GAAG,GAAG,CACV,QAAW,EACX,MAAU,EAIT,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AAEnC,MAAM,IAAI,GAAG,CACX,QAAW,EACX,IAAkD,EAClD,MAAiE,EACjE,EAAE,CAAC,GAAG,CAAC;IACL,GAAG,MAAM;IACT,MAAM,EAAE,MAAM;IACd,QAAQ;IACR,IAAI;CACL,CAAC,CAAC;AAEL,MAAM,GAAG,GAAG,CACV,QAAW,EACX,IAAiD,EACjD,MAAS,EACT,EAAE,CAAC,GAAG,CAAC;IACL,GAAG,MAAM;IACT,MAAM,EAAE,KAAK;IACb,QAAQ;IACR,IAAI;CACL,CAAC,CAAC;AAEL,MAAM,KAAK,GAAG,CAAC,QAAkB,EAAE,IAAS,EAAE,MAA4B,EAAE,EAAE,CAAC,GAAG,CAAC;IACjF,GAAG,MAAM;IACT,MAAM,EAAE,OAAO;IACf,QAAQ;IACR,IAAI;CACL,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,CAAC,QAAkB,EAAE,MAA4B,EAAE,EAAE,CAAC,GAAG,CAAC;IACpE,GAAG,MAAM;IACT,MAAM,EAAE,QAAQ;IAChB,QAAQ;CACT,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AACd,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;AAChB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AACd,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;AAClB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AACd,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;AAEjB,eAAe,GAAG,CAAC;AAEnB,OAAO,EACL,aAAa,EACb,GAAG,EACH,IAAI,EACJ,GAAG,EACH,KAAK,EACL,GAAG,EACH,QAAQ,GACT,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,7 @@ declare type Config = {
27
27
  lang?: string;
28
28
  method?: Method;
29
29
  endpoint: Endpoint;
30
- params?: Record<string, string | number>;
30
+ params?: Record<string, string | number | boolean>;
31
31
  headers?: Headers | Record<string, string>;
32
32
  timeout?: number;
33
33
  maxRetries?: number;
@@ -91,4 +91,14 @@ declare type ResponseBody<TConfig extends Config> = TConfig['method'] extends 'p
91
91
  declare type DocSchema<Document extends any> = Omit<Document, '_id' | 'store_id' | 'store_ids' | 'created_at' | 'updated_at'>;
92
92
  declare type SetDocEndpoint<TResource extends Resource> = TResource | `${TResource}/${ResourceId}`;
93
93
  declare type RequestBody<TConfig extends Config> = TConfig['method'] extends undefined | 'get' | 'delete' ? undefined : TConfig['method'] extends 'patch' ? any : TConfig['endpoint'] extends SetDocEndpoint<'products'> ? DocSchema<Products> : TConfig['endpoint'] extends SetDocEndpoint<'categories'> ? DocSchema<Categories> : TConfig['endpoint'] extends SetDocEndpoint<'brands'> ? DocSchema<Brands> : TConfig['endpoint'] extends SetDocEndpoint<'collections'> ? DocSchema<Collections> : TConfig['endpoint'] extends SetDocEndpoint<'grids'> ? DocSchema<Grids> : TConfig['endpoint'] extends SetDocEndpoint<'carts'> ? DocSchema<Carts> : TConfig['endpoint'] extends SetDocEndpoint<'orders'> ? DocSchema<Orders> : TConfig['endpoint'] extends SetDocEndpoint<'customers'> ? DocSchema<Customers> : TConfig['endpoint'] extends SetDocEndpoint<'stores'> ? DocSchema<Stores> : TConfig['endpoint'] extends SetDocEndpoint<'applications'> ? DocSchema<Applications> : TConfig['endpoint'] extends SetDocEndpoint<'authentications'> ? DocSchema<Authentications> : any;
94
- export type { Products, Categories, Brands, Collections, Grids, Carts, Orders, Customers, Stores, Applications, Authentications, Resource, ResourceId, ResourceAndId, ResourceOpQuery, Endpoint, Method, Config, ResourceListResult, EventsResult, ResponseBody, RequestBody, };
94
+ declare type ErrorBody = {
95
+ status: number;
96
+ error_code: number;
97
+ message: string;
98
+ user_message?: {
99
+ en_us: string;
100
+ pt_br: string;
101
+ };
102
+ more_info?: string;
103
+ };
104
+ export type { Products, Categories, Brands, Collections, Grids, Carts, Orders, Customers, Stores, Applications, Authentications, Resource, ResourceId, ResourceAndId, ResourceOpQuery, Endpoint, Method, Config, ResourceListResult, EventsResult, ResponseBody, RequestBody, ErrorBody, };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/api",
3
3
  "type": "module",
4
- "version": "0.0.41",
4
+ "version": "0.0.44",
5
5
  "description": "E-Com Plus Cloud Commerce APIs client/adapter",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -4,6 +4,7 @@ import type {
4
4
  Config,
5
5
  ResponseBody,
6
6
  RequestBody,
7
+ ErrorBody,
7
8
  } from './types';
8
9
 
9
10
  // @ts-ignore
@@ -13,14 +14,25 @@ const env: { [key: string]: string } = (typeof window === 'object' && window)
13
14
 
14
15
  class ApiError extends Error {
15
16
  config: Config;
16
- response?: Response;
17
+ response?: Response & { data?: ErrorBody };
17
18
  statusCode?: number;
19
+ data?: ErrorBody;
18
20
  isTimeout: boolean;
19
- constructor(config: Config, response?: Response, msg?: string, isTimeout: boolean = false) {
20
- super(response?.statusText || msg || 'Request error');
21
+ constructor(
22
+ config: Config,
23
+ response?: ApiError['response'],
24
+ msg?: string,
25
+ isTimeout: boolean = false,
26
+ ) {
27
+ if (response) {
28
+ super(response.statusText);
29
+ this.data = response.data;
30
+ this.statusCode = response.status;
31
+ } else {
32
+ super(msg || 'Request error');
33
+ }
21
34
  this.config = config;
22
35
  this.response = response;
23
- this.statusCode = response?.status;
24
36
  this.isTimeout = isTimeout;
25
37
  }
26
38
  }
@@ -98,7 +110,7 @@ Promise<Response & {
98
110
  abortController.abort();
99
111
  isTimeout = true;
100
112
  }, timeout);
101
- let response: Response | undefined;
113
+ let response: Response & { data?: any } | undefined;
102
114
  try {
103
115
  response = await (config.fetch || fetch)(url, {
104
116
  method,
@@ -129,6 +141,11 @@ Promise<Response & {
129
141
  });
130
142
  }
131
143
  }
144
+ try {
145
+ response.data = await response?.json() as ErrorBody;
146
+ } catch (e) {
147
+ //
148
+ }
132
149
  throw new ApiError(config, response);
133
150
  };
134
151
 
@@ -197,3 +214,9 @@ export {
197
214
  del,
198
215
  ApiError,
199
216
  };
217
+
218
+ export type ApiEndpoint = Endpoint;
219
+
220
+ export type ApiConfig = Config;
221
+
222
+ export type ApiErrorBody = ErrorBody;
@@ -56,7 +56,7 @@ type Config = {
56
56
  lang?: string,
57
57
  method?: Method,
58
58
  endpoint: Endpoint,
59
- params?: Record<string, string | number>,
59
+ params?: Record<string, string | number | boolean>,
60
60
  headers?: Headers | Record<string, string>,
61
61
  timeout?: number,
62
62
  maxRetries?: number,
@@ -171,6 +171,17 @@ type RequestBody<TConfig extends Config> =
171
171
  TConfig['endpoint'] extends SetDocEndpoint<'authentications'> ? DocSchema<Authentications> :
172
172
  any;
173
173
 
174
+ type ErrorBody = {
175
+ status: number,
176
+ error_code: number,
177
+ message: string,
178
+ user_message?: {
179
+ en_us: string,
180
+ pt_br: string,
181
+ },
182
+ more_info?: string,
183
+ };
184
+
174
185
  export type {
175
186
  Products,
176
187
  Categories,
@@ -194,4 +205,5 @@ export type {
194
205
  EventsResult,
195
206
  ResponseBody,
196
207
  RequestBody,
208
+ ErrorBody,
197
209
  };
@@ -0,0 +1,3 @@
1
+ import type { AppEventsTopic } from '@cloudcommerce/types';
2
+ export declare const events: AppEventsTopic[];
3
+ export declare const applyDiscount: () => Promise<{}>;
@@ -1,4 +1,6 @@
1
1
  export const events = [];
2
2
 
3
- export const modules = {};
3
+ export const applyDiscount = async () => {
4
+ return {};
5
+ };
4
6
  // # sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAiB,EAAE,CAAC;AAEvC,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAqB,EAAE,CAAC;AAE3C,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;IACtC,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC"}
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-discounts",
3
3
  "type": "module",
4
- "version": "0.0.41",
4
+ "version": "0.0.44",
5
5
  "description": "E-Com Plus Cloud Commerce app for complex discount rules",
6
- "main": "functions/dist/index.js",
6
+ "main": "lib/index.js",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "git+https://github.com/ecomplus/cloud-commerce.git",
@@ -16,7 +16,7 @@
16
16
  },
17
17
  "homepage": "https://github.com/ecomplus/cloud-commerce/tree/main/packages/apps/discounts#readme",
18
18
  "scripts": {
19
- "build": "echo '@ecomplus/app-discounts'"
19
+ "build": "sh ../../../scripts/build-lib.sh"
20
20
  },
21
21
  "dependencies": {
22
22
  "@cloudcommerce/api": "workspace:*"
@@ -2,6 +2,6 @@ import type { AppEventsTopic } from '@cloudcommerce/types';
2
2
 
3
3
  export const events: AppEventsTopic[] = [];
4
4
 
5
- export const applyDiscount = () => {
5
+ export const applyDiscount = async () => {
6
6
  return {};
7
7
  };
@@ -1,3 +1,6 @@
1
1
  {
2
- "extends": "../../../tsconfig.json"
2
+ "extends": "../../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "declaration": true
5
+ }
3
6
  }
@@ -8,8 +8,11 @@ const copyFunctionsConfig = async () => {
8
8
  for (let i = 0; i < dirents.length; i++) {
9
9
  if (dirents[i].isDirectory() && dirents[i].name.charAt(0) !== '.') {
10
10
  for (let ii = 0; ii < filesToCopy.length; ii++) {
11
- // eslint-disable-next-line no-await-in-loop
12
- await fs.copy(path.join(functionsDir, filesToCopy[ii]), path.join(functionsDir, dirents[i].name, filesToCopy[ii]));
11
+ const srcPath = path.join(functionsDir, filesToCopy[ii]);
12
+ if (fs.existsSync(srcPath)) {
13
+ // eslint-disable-next-line no-await-in-loop
14
+ await fs.copy(srcPath, path.join(functionsDir, dirents[i].name, filesToCopy[ii]));
15
+ }
13
16
  }
14
17
  }
15
18
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/cli",
3
3
  "type": "module",
4
- "version": "0.0.41",
4
+ "version": "0.0.44",
5
5
  "description": "E-Com Plus Cloud Commerce CLI tools",
6
6
  "bin": {
7
7
  "cloudcommerce": "./bin/run.mjs"
@@ -8,11 +8,14 @@ const copyFunctionsConfig = async () => {
8
8
  for (let i = 0; i < dirents.length; i++) {
9
9
  if (dirents[i].isDirectory() && dirents[i].name.charAt(0) !== '.') {
10
10
  for (let ii = 0; ii < filesToCopy.length; ii++) {
11
- // eslint-disable-next-line no-await-in-loop
12
- await fs.copy(
13
- path.join(functionsDir, filesToCopy[ii]),
14
- path.join(functionsDir, dirents[i].name, filesToCopy[ii]),
15
- );
11
+ const srcPath = path.join(functionsDir, filesToCopy[ii]);
12
+ if (fs.existsSync(srcPath)) {
13
+ // eslint-disable-next-line no-await-in-loop
14
+ await fs.copy(
15
+ srcPath,
16
+ path.join(functionsDir, dirents[i].name, filesToCopy[ii]),
17
+ );
18
+ }
16
19
  }
17
20
  }
18
21
  }
@@ -0,0 +1 @@
1
+ Please refer to GitHub [repository releases](https://github.com/ecomplus/cloud-commerce/releases) or monorepo unified [CHANGELOG.md](https://github.com/ecomplus/cloud-commerce/blob/main/CHANGELOG.md).
@@ -0,0 +1 @@
1
+ # `@cloudcommerce/events`
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@cloudcommerce/events",
3
+ "type": "module",
4
+ "version": "0.0.44",
5
+ "description": "E-Com Plus Cloud Commerce app events",
6
+ "main": "lib/index.js",
7
+ "exports": {
8
+ ".": "./lib/index.js",
9
+ "./firebase": "./lib/firebase.js"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/ecomplus/cloud-commerce.git",
14
+ "directory": "packages/events"
15
+ },
16
+ "author": "E-Com Club Softwares para E-commerce <ti@e-com.club>",
17
+ "license": "Apache 2.0 with Commons Clause",
18
+ "bugs": {
19
+ "url": "https://github.com/ecomplus/cloud-commerce/issues"
20
+ },
21
+ "homepage": "https://github.com/ecomplus/cloud-commerce/tree/main/packages/events#readme",
22
+ "scripts": {
23
+ "build": "echo '@ecomplus/events'"
24
+ },
25
+ "dependencies": {
26
+ "@cloudcommerce/api": "workspace:*",
27
+ "@cloudcommerce/firebase": "workspace:*",
28
+ "firebase-admin": "^11.0.1",
29
+ "firebase-functions": "^3.22.0",
30
+ "source-map-support": "^0.5.21"
31
+ },
32
+ "devDependencies": {
33
+ "@cloudcommerce/types": "workspace:*",
34
+ "@firebase/app-types": "^0.7.0"
35
+ }
36
+ }
@@ -0,0 +1,30 @@
1
+ /* eslint-disable import/prefer-default-export */
2
+
3
+ import type { AppEventsTopic } from '@cloudcommerce/types';
4
+ import 'source-map-support/register.js';
5
+ // eslint-disable-next-line import/no-unresolved
6
+ import { initializeApp } from 'firebase-admin/app';
7
+ // eslint-disable-next-line import/no-unresolved
8
+ import { runWith, logger } from 'firebase-functions';
9
+
10
+ initializeApp();
11
+
12
+ const eventMaxAgeMs = 60000;
13
+ const newOrderTopic: AppEventsTopic = 'orders-new';
14
+
15
+ export const onNewOrder = runWith({ failurePolicy: true })
16
+ .pubsub.topic(newOrderTopic).onPublish((message, context) => {
17
+ const eventAgeMs = Date.now() - Date.parse(context.timestamp);
18
+ if (eventAgeMs > eventMaxAgeMs) {
19
+ logger.warn(`Dropping event ${context.eventId} with age[ms]: ${eventAgeMs}`);
20
+ return;
21
+ }
22
+ // Hide API key for security
23
+ process.env.ECOM_API_KEY = '***';
24
+ const { json } = message;
25
+ logger.info({
26
+ topic: newOrderTopic,
27
+ eventId: context.eventId,
28
+ json,
29
+ });
30
+ });
@@ -0,0 +1 @@
1
+ export default {};
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "../../tsconfig.json"
3
+ }
@@ -9,6 +9,11 @@ declare const _default: {
9
9
  httpsFunctionOptions: {
10
10
  region: string;
11
11
  };
12
+ apps: {
13
+ discounts: {
14
+ appId: number;
15
+ };
16
+ };
12
17
  };
13
18
  set(config: any): void;
14
19
  };
@@ -15,6 +15,11 @@ const self = {
15
15
  httpsFunctionOptions: {
16
16
  region: process.env.DEPLOY_REGION || 'us-east1',
17
17
  },
18
+ apps: {
19
+ discounts: {
20
+ appId: 912000,
21
+ },
22
+ },
18
23
  },
19
24
  };
20
25
 
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;AAE9B,MAAM,IAAI,GAAG;IACX,QAAQ,EAAE;QACR,KAAK,EAAE,8BAA8B;QACrC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,YAAY;QAC3C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,gBAAgB;QACvD,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,uBAAuB;QAC3E,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,oBAAoB;QAClE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC1C,oBAAoB,EAAE;YACpB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,UAAU;SAChD;KACF;CACF,CAAC;AAEF,eAAe;IACb,GAAG;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,GAAG,CAAC,MAAM;QACR,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;AAE9B,MAAM,IAAI,GAAG;IACX,QAAQ,EAAE;QACR,KAAK,EAAE,8BAA8B;QACrC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,YAAY;QAC3C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,gBAAgB;QACvD,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,uBAAuB;QAC3E,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,oBAAoB;QAClE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC1C,oBAAoB,EAAE;YACpB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,UAAU;SAChD;QACD,IAAI,EAAE;YACJ,SAAS,EAAE;gBACT,KAAK,EAAE,MAAM;aACd;SACF;KACF;CACF,CAAC;AAEF,eAAe;IACb,GAAG;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,GAAG,CAAC,MAAM;QACR,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;CACF,CAAC"}
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "@cloudcommerce/firebase",
3
3
  "type": "module",
4
- "version": "0.0.41",
4
+ "version": "0.0.44",
5
5
  "description": "E-Com Plus Cloud Commerce on Firebase",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
8
8
  "exports": {
9
9
  ".": "./lib/index.js",
10
10
  "./config": "./config.js",
11
- "./lib/config": "./lib/config.js"
11
+ "./lib/config": "./lib/config.js",
12
+ "./lib/env": "./lib/env.js"
12
13
  },
13
14
  "repository": {
14
15
  "type": "git",
@@ -19,6 +19,11 @@ const self = {
19
19
  httpsFunctionOptions: {
20
20
  region: process.env.DEPLOY_REGION || 'us-east1',
21
21
  },
22
+ apps: {
23
+ discounts: {
24
+ appId: 912000,
25
+ },
26
+ },
22
27
  },
23
28
  };
24
29
 
@@ -0,0 +1,33 @@
1
+ import Ajv from 'ajv';
2
+
3
+ const ajvOptions = {
4
+ coerceTypes: false,
5
+ useDefaults: true,
6
+ removeAdditional: true,
7
+ // Explicitly set `allErrors` to false, when set to true a DoS attack is possible
8
+ allErrors: false,
9
+ multipleOfPrecision: 5,
10
+ allowMatchingProperties: true,
11
+ };
12
+ const ajv = new Ajv(ajvOptions);
13
+ const parseAjvErrors = (errors, ajvInstance = ajv) => {
14
+ return ajvInstance.errorsText(errors, { separator: '\n' });
15
+ };
16
+ const sendRequestError = (res, modName, errors) => {
17
+ res.status(400).send({
18
+ status: 400,
19
+ error_code: 'MOD901',
20
+ message: 'Bad-formatted JSON body (POST) or URL params (GET), details in `user_message`',
21
+ user_message: {
22
+ en_us: ajv.errorsText(errors, { separator: '\n' }),
23
+ },
24
+ more_info: `/${modName}/schema`,
25
+ });
26
+ };
27
+
28
+ export default ajv;
29
+
30
+ export {
31
+ ajv, ajvOptions, parseAjvErrors, sendRequestError,
32
+ };
33
+ // # sourceMappingURL=ajv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ajv.js","sourceRoot":"","sources":["../../src/firebase/ajv.ts"],"names":[],"mappings":"AACA,OAAO,GAA6B,MAAM,KAAK,CAAC;AAEhD,MAAM,UAAU,GAAY;IAC1B,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,IAAI;IACjB,gBAAgB,EAAE,IAAI;IACtB,iFAAiF;IACjF,SAAS,EAAE,KAAK;IAChB,mBAAmB,EAAE,CAAC;IACtB,uBAAuB,EAAE,IAAI;CAC9B,CAAC;AACF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;AAEhC,MAAM,cAAc,GAAG,CAAC,MAA6B,EAAE,WAAW,GAAG,GAAG,EAAE,EAAE;IAC1E,OAAO,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,GAAa,EAAE,OAAe,EAAE,MAA6B,EAAE,EAAE;IACzF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,MAAM,EAAE,GAAG;QACX,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,+EAA+E;QACxF,YAAY,EAAE;YACZ,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SACnD;QACD,SAAS,EAAE,IAAI,OAAO,SAAS;KAChC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,GAAG,CAAC;AAEnB,OAAO,EACL,GAAG,EACH,UAAU,EACV,cAAc,EACd,gBAAgB,GACjB,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { logger } from 'firebase-functions';
2
+ import axios from 'axios';
3
+ import config from '@cloudcommerce/firebase/lib/config';
4
+
5
+ // Blacklist urls to prevent consecultive errors
6
+ const blacklist = {};
7
+
8
+ export default async (appId, modName, url, data, isBigTimeout) => {
9
+ if (blacklist[url] > 2) {
10
+ logger.log(`> Skipping blacklisted ${url}`);
11
+ const err = new Error('Blacklited endpoint URL');
12
+ return Promise.reject(err);
13
+ }
14
+ const { storeId, apps } = config.get();
15
+ const debug = (response) => {
16
+ const status = response ? response.status : 0;
17
+ if (!blacklist[url]) {
18
+ blacklist[url] = 1;
19
+ } else {
20
+ blacklist[url] += 1;
21
+ }
22
+ setTimeout(() => {
23
+ if (blacklist[url] > 1) {
24
+ blacklist[url] -= 1;
25
+ } else {
26
+ delete blacklist[url];
27
+ }
28
+ }, !status ? 180000 : 6000);
29
+ logger.info(`${url} : ${status}`);
30
+ if (status >= 400 && status < 500) {
31
+ const { data: resData } = response;
32
+ if (typeof resData === 'object' && resData !== null) {
33
+ const { error, message } = resData;
34
+ if (typeof error === 'string' && error.length && typeof message === 'string') {
35
+ logger.warn(JSON.stringify({ error, message }));
36
+ }
37
+ }
38
+ }
39
+ };
40
+ if (modName === 'apply_discount') {
41
+ if (appId === apps.discounts.appId) {
42
+ return import('@cloudcommerce/app-discounts')
43
+ .then(({ applyDiscount }) => applyDiscount());
44
+ }
45
+ }
46
+ return axios({
47
+ method: 'POST',
48
+ maxRedirects: 2,
49
+ responseType: 'json',
50
+ maxContentLength: 1000000,
51
+ url,
52
+ data,
53
+ headers: {
54
+ 'X-Store-ID': storeId.toString(),
55
+ },
56
+ // Wait 10s by default and 30s in specific cases
57
+ timeout: isBigTimeout ? 30000 : 10000,
58
+ })
59
+ .then((response) => {
60
+ debug(response);
61
+ return response.data;
62
+ })
63
+ .catch((err) => {
64
+ const { response } = err;
65
+ debug(response);
66
+ if (err.message || err.code) {
67
+ let msg = `Axios error ${err.code}: ${err.message}`;
68
+ if (data) {
69
+ msg += `\n\n${JSON.stringify(data)}`;
70
+ }
71
+ logger.warn(msg);
72
+ }
73
+ throw err;
74
+ });
75
+ };
76
+ // # sourceMappingURL=call-app-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-app-module.js","sourceRoot":"","sources":["../../src/firebase/call-app-module.ts"],"names":[],"mappings":"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"}