@griddo/cx 11.7.6-rc.1 → 11.7.6

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 (300) hide show
  1. package/README.md +228 -25
  2. package/build/adapters/gatsby/index.d.ts +4 -0
  3. package/build/adapters/gatsby/utils.d.ts +22 -0
  4. package/build/artifacts/index.d.ts +6 -0
  5. package/build/commands/move-assets.d.ts +1 -0
  6. package/build/commands/prepare-domains-render.d.ts +1 -0
  7. package/build/{exporter/constants → constants}/envs.d.ts +7 -1
  8. package/build/constants/index.d.ts +57 -0
  9. package/build/end-render.js +74 -0
  10. package/build/end-render.js.map +7 -0
  11. package/build/{exporter/constants/errors.d.ts → errors/errors-data.d.ts} +3 -5
  12. package/build/{exporter/utils/errors.d.ts → errors/index.d.ts} +3 -3
  13. package/build/index.d.ts +29 -0
  14. package/build/index.js +73 -0
  15. package/build/index.js.map +7 -0
  16. package/build/prepare-domains-render.js +73 -0
  17. package/build/prepare-domains-render.js.map +7 -0
  18. package/build/react/Favicon/index.d.ts +5 -0
  19. package/build/react/Favicon/utils.d.ts +9 -0
  20. package/build/react/GriddoIntegrations/index.d.ts +20 -0
  21. package/build/react/GriddoIntegrations/utils.d.ts +26 -0
  22. package/{react/index.tsx → build/react/index.d.ts} +0 -1
  23. package/build/react/index.js +3 -0
  24. package/build/registers/api.d.ts +9 -0
  25. package/build/registers/gatsby.d.ts +9 -0
  26. package/build/registers/index.d.ts +3 -0
  27. package/build/reset-render.js +74 -0
  28. package/build/reset-render.js.map +7 -0
  29. package/build/{exporter/services → services}/auth.d.ts +1 -1
  30. package/build/services/domains.d.ts +6 -0
  31. package/build/services/register.d.ts +36 -0
  32. package/build/{exporter/services → services}/robots.d.ts +6 -0
  33. package/build/services/settings.d.ts +4 -0
  34. package/build/{exporter/services → services}/sites.d.ts +2 -5
  35. package/build/services/store.d.ts +6 -0
  36. package/build/start-render.js +100 -0
  37. package/build/start-render.js.map +7 -0
  38. package/build/{exporter/types → types}/api.d.ts +4 -3
  39. package/build/{exporter/types → types}/global.d.ts +6 -6
  40. package/build/{exporter/types → types}/navigation.d.ts +1 -1
  41. package/build/{exporter/types → types}/sites.d.ts +2 -1
  42. package/build/upload-search-content.js +74 -0
  43. package/build/upload-search-content.js.map +7 -0
  44. package/build/utils/alerts.d.ts +3 -0
  45. package/build/{exporter/utils → utils}/cache.d.ts +12 -7
  46. package/build/utils/core-utils.d.ts +107 -0
  47. package/build/utils/create-build-data.d.ts +8 -0
  48. package/build/{exporter/utils → utils}/domains.d.ts +1 -1
  49. package/build/utils/folders.d.ts +53 -0
  50. package/build/{exporter/utils/check-health.d.ts → utils/health-checks.d.ts} +2 -2
  51. package/build/{exporter/utils → utils}/loggin.d.ts +16 -2
  52. package/build/{exporter/utils → utils}/pages.d.ts +2 -2
  53. package/build/utils/render.d.ts +13 -0
  54. package/build/utils/searches.d.ts +15 -0
  55. package/build/{exporter/utils → utils}/sites.d.ts +3 -3
  56. package/build/{exporter/utils → utils}/store.d.ts +38 -10
  57. package/cx.config.d.ts +5 -0
  58. package/cx.config.js +36 -0
  59. package/exporter/adapters/gatsby/index.ts +146 -60
  60. package/exporter/adapters/gatsby/utils.ts +161 -0
  61. package/exporter/artifacts/README.md +34 -0
  62. package/exporter/{utils/artifacts.ts → artifacts/index.ts} +8 -9
  63. package/exporter/build.sh +38 -5
  64. package/exporter/commands/end-render.ts +81 -56
  65. package/exporter/commands/move-assets.ts +11 -0
  66. package/exporter/commands/prepare-domains-render.ts +31 -149
  67. package/exporter/commands/reset-render.ts +3 -12
  68. package/exporter/commands/start-render.ts +47 -18
  69. package/exporter/commands/upload-search-content.ts +21 -206
  70. package/exporter/constants/envs.ts +51 -59
  71. package/exporter/constants/index.ts +129 -0
  72. package/exporter/{constants/errors.ts → errors/errors-data.ts} +15 -24
  73. package/exporter/{utils/errors.ts → errors/index.ts} +9 -10
  74. package/exporter/index.ts +82 -0
  75. package/{react → exporter/react}/Favicon/index.tsx +7 -1
  76. package/{react → exporter/react}/GriddoIntegrations/index.tsx +14 -6
  77. package/{react → exporter/react}/GriddoIntegrations/utils.ts +9 -4
  78. package/exporter/react/index.tsx +11 -0
  79. package/exporter/registers/api.ts +14 -0
  80. package/exporter/registers/gatsby.ts +14 -0
  81. package/exporter/registers/index.ts +4 -0
  82. package/exporter/services/auth.ts +6 -7
  83. package/exporter/services/domains.ts +16 -0
  84. package/exporter/services/navigation.ts +10 -4
  85. package/exporter/services/reference-fields.ts +23 -8
  86. package/exporter/services/register.ts +113 -0
  87. package/exporter/services/robots.ts +15 -8
  88. package/exporter/services/settings.ts +17 -0
  89. package/exporter/services/sites.ts +24 -35
  90. package/exporter/services/store.ts +76 -118
  91. package/exporter/types/api.ts +27 -24
  92. package/exporter/types/global.ts +10 -8
  93. package/exporter/types/navigation.ts +1 -1
  94. package/exporter/types/pages.ts +3 -2
  95. package/exporter/types/sites.ts +2 -1
  96. package/exporter/utils/alerts.ts +29 -0
  97. package/exporter/utils/api.ts +82 -46
  98. package/exporter/utils/cache.ts +59 -34
  99. package/exporter/utils/core-utils.ts +247 -86
  100. package/exporter/utils/create-build-data.ts +17 -0
  101. package/exporter/utils/domains.ts +7 -10
  102. package/exporter/utils/folders.ts +92 -161
  103. package/exporter/utils/health-checks.ts +64 -0
  104. package/exporter/utils/images.ts +6 -1
  105. package/exporter/utils/instance.ts +12 -9
  106. package/exporter/utils/loggin.ts +89 -24
  107. package/exporter/utils/pages.ts +88 -23
  108. package/exporter/utils/render.ts +48 -147
  109. package/exporter/utils/searches.ts +156 -0
  110. package/exporter/utils/sites.ts +77 -67
  111. package/exporter/utils/store.ts +178 -85
  112. package/gatsby-browser.tsx +58 -41
  113. package/gatsby-config.ts +12 -6
  114. package/gatsby-node.ts +77 -15
  115. package/gatsby-ssr.tsx +1 -2
  116. package/package.json +74 -33
  117. package/src/README.md +7 -0
  118. package/src/components/Head.tsx +46 -13
  119. package/src/components/template.tsx +30 -8
  120. package/src/gatsby-node-utils.ts +2 -91
  121. package/src/html.tsx +11 -2
  122. package/src/types.ts +5 -5
  123. package/start-render.js +3 -1
  124. package/tsconfig.json +2 -3
  125. package/build/adapters/gatsby/actions/clean.js +0 -10
  126. package/build/adapters/gatsby/actions/clean.js.map +0 -1
  127. package/build/adapters/gatsby/actions/close.js +0 -12
  128. package/build/adapters/gatsby/actions/close.js.map +0 -1
  129. package/build/adapters/gatsby/actions/data.js +0 -18
  130. package/build/adapters/gatsby/actions/data.js.map +0 -1
  131. package/build/adapters/gatsby/actions/healthCheck.js +0 -10
  132. package/build/adapters/gatsby/actions/healthCheck.js.map +0 -1
  133. package/build/adapters/gatsby/actions/init.js +0 -9
  134. package/build/adapters/gatsby/actions/init.js.map +0 -1
  135. package/build/adapters/gatsby/actions/meta.js +0 -14
  136. package/build/adapters/gatsby/actions/meta.js.map +0 -1
  137. package/build/adapters/gatsby/actions/prepare.js +0 -9
  138. package/build/adapters/gatsby/actions/prepare.js.map +0 -1
  139. package/build/adapters/gatsby/actions/relocation.js +0 -15
  140. package/build/adapters/gatsby/actions/relocation.js.map +0 -1
  141. package/build/adapters/gatsby/actions/restore.js +0 -26
  142. package/build/adapters/gatsby/actions/restore.js.map +0 -1
  143. package/build/adapters/gatsby/actions/ssg.js +0 -9
  144. package/build/adapters/gatsby/actions/ssg.js.map +0 -1
  145. package/build/adapters/gatsby/actions/sync.js +0 -50
  146. package/build/adapters/gatsby/actions/sync.js.map +0 -1
  147. package/build/adapters/gatsby/index.js +0 -74
  148. package/build/adapters/gatsby/index.js.map +0 -1
  149. package/build/adapters/gatsby/shared/context.js +0 -25
  150. package/build/adapters/gatsby/shared/context.js.map +0 -1
  151. package/build/adapters/gatsby/shared/extract-assets.js +0 -58
  152. package/build/adapters/gatsby/shared/extract-assets.js.map +0 -1
  153. package/build/adapters/gatsby/shared/gatsby-build.js +0 -49
  154. package/build/adapters/gatsby/shared/gatsby-build.js.map +0 -1
  155. package/build/adapters/gatsby/shared/sync-render.js +0 -208
  156. package/build/adapters/gatsby/shared/sync-render.js.map +0 -1
  157. package/build/adapters/gatsby/shared/types.js +0 -3
  158. package/build/adapters/gatsby/shared/types.js.map +0 -1
  159. package/build/commands/end-render.js +0 -63
  160. package/build/commands/end-render.js.map +0 -1
  161. package/build/commands/prepare-assets-directory.js +0 -32
  162. package/build/commands/prepare-assets-directory.js.map +0 -1
  163. package/build/commands/prepare-domains-render.js +0 -138
  164. package/build/commands/prepare-domains-render.js.map +0 -1
  165. package/build/commands/reset-render.js +0 -22
  166. package/build/commands/reset-render.js.map +0 -1
  167. package/build/commands/start-render.js +0 -35
  168. package/build/commands/start-render.js.map +0 -1
  169. package/build/commands/upload-search-content.js +0 -189
  170. package/build/commands/upload-search-content.js.map +0 -1
  171. package/build/constants/endpoints.js +0 -42
  172. package/build/constants/endpoints.js.map +0 -1
  173. package/build/constants/envs.js +0 -73
  174. package/build/constants/envs.js.map +0 -1
  175. package/build/constants/errors.js +0 -89
  176. package/build/constants/errors.js.map +0 -1
  177. package/build/exporter/adapters/gatsby/actions/clean.d.ts +0 -3
  178. package/build/exporter/adapters/gatsby/actions/close.d.ts +0 -3
  179. package/build/exporter/adapters/gatsby/actions/data.d.ts +0 -2
  180. package/build/exporter/adapters/gatsby/actions/healthCheck.d.ts +0 -2
  181. package/build/exporter/adapters/gatsby/actions/init.d.ts +0 -2
  182. package/build/exporter/adapters/gatsby/actions/meta.d.ts +0 -2
  183. package/build/exporter/adapters/gatsby/actions/prepare.d.ts +0 -2
  184. package/build/exporter/adapters/gatsby/actions/relocation.d.ts +0 -2
  185. package/build/exporter/adapters/gatsby/actions/restore.d.ts +0 -3
  186. package/build/exporter/adapters/gatsby/actions/ssg.d.ts +0 -3
  187. package/build/exporter/adapters/gatsby/actions/sync.d.ts +0 -3
  188. package/build/exporter/adapters/gatsby/index.d.ts +0 -9
  189. package/build/exporter/adapters/gatsby/shared/context.d.ts +0 -38
  190. package/build/exporter/adapters/gatsby/shared/extract-assets.d.ts +0 -7
  191. package/build/exporter/adapters/gatsby/shared/gatsby-build.d.ts +0 -7
  192. package/build/exporter/adapters/gatsby/shared/sync-render.d.ts +0 -36
  193. package/build/exporter/adapters/gatsby/shared/types.d.ts +0 -34
  194. package/build/exporter/commands/prepare-assets-directory.d.ts +0 -2
  195. package/build/exporter/commands/prepare-domains-render.d.ts +0 -2
  196. package/build/exporter/services/db.d.ts +0 -4
  197. package/build/exporter/services/store.d.ts +0 -15
  198. package/build/exporter/types/render.d.ts +0 -50
  199. package/build/exporter/utils/artifacts.d.ts +0 -6
  200. package/build/exporter/utils/brush.d.ts +0 -18
  201. package/build/exporter/utils/core-utils.d.ts +0 -77
  202. package/build/exporter/utils/folders.d.ts +0 -66
  203. package/build/exporter/utils/render.d.ts +0 -49
  204. package/build/services/auth.js +0 -39
  205. package/build/services/auth.js.map +0 -1
  206. package/build/services/db.js +0 -34
  207. package/build/services/db.js.map +0 -1
  208. package/build/services/navigation.js +0 -93
  209. package/build/services/navigation.js.map +0 -1
  210. package/build/services/reference-fields.js +0 -131
  211. package/build/services/reference-fields.js.map +0 -1
  212. package/build/services/robots.js +0 -58
  213. package/build/services/robots.js.map +0 -1
  214. package/build/services/sites.js +0 -109
  215. package/build/services/sites.js.map +0 -1
  216. package/build/services/store.js +0 -282
  217. package/build/services/store.js.map +0 -1
  218. package/build/types/api.js +0 -3
  219. package/build/types/api.js.map +0 -1
  220. package/build/types/global.js +0 -3
  221. package/build/types/global.js.map +0 -1
  222. package/build/types/navigation.js +0 -3
  223. package/build/types/navigation.js.map +0 -1
  224. package/build/types/pages.js +0 -3
  225. package/build/types/pages.js.map +0 -1
  226. package/build/types/render.js +0 -10
  227. package/build/types/render.js.map +0 -1
  228. package/build/types/sites.js +0 -3
  229. package/build/types/sites.js.map +0 -1
  230. package/build/types/templates.js +0 -3
  231. package/build/types/templates.js.map +0 -1
  232. package/build/utils/api.js +0 -161
  233. package/build/utils/api.js.map +0 -1
  234. package/build/utils/artifacts.js +0 -34
  235. package/build/utils/artifacts.js.map +0 -1
  236. package/build/utils/brush.js +0 -30
  237. package/build/utils/brush.js.map +0 -1
  238. package/build/utils/cache.js +0 -106
  239. package/build/utils/cache.js.map +0 -1
  240. package/build/utils/check-health.js +0 -68
  241. package/build/utils/check-health.js.map +0 -1
  242. package/build/utils/core-utils.js +0 -251
  243. package/build/utils/core-utils.js.map +0 -1
  244. package/build/utils/domains.js +0 -37
  245. package/build/utils/domains.js.map +0 -1
  246. package/build/utils/errors.js +0 -30
  247. package/build/utils/errors.js.map +0 -1
  248. package/build/utils/folders.js +0 -339
  249. package/build/utils/folders.js.map +0 -1
  250. package/build/utils/images.js +0 -45
  251. package/build/utils/images.js.map +0 -1
  252. package/build/utils/instance.js +0 -66
  253. package/build/utils/instance.js.map +0 -1
  254. package/build/utils/loggin.js +0 -102
  255. package/build/utils/loggin.js.map +0 -1
  256. package/build/utils/pages.js +0 -359
  257. package/build/utils/pages.js.map +0 -1
  258. package/build/utils/render.js +0 -144
  259. package/build/utils/render.js.map +0 -1
  260. package/build/utils/sites.js +0 -239
  261. package/build/utils/sites.js.map +0 -1
  262. package/build/utils/store.js +0 -193
  263. package/build/utils/store.js.map +0 -1
  264. package/exporter/adapters/gatsby/actions/clean.ts +0 -14
  265. package/exporter/adapters/gatsby/actions/close.ts +0 -17
  266. package/exporter/adapters/gatsby/actions/data.ts +0 -25
  267. package/exporter/adapters/gatsby/actions/healthCheck.ts +0 -10
  268. package/exporter/adapters/gatsby/actions/init.ts +0 -12
  269. package/exporter/adapters/gatsby/actions/meta.ts +0 -18
  270. package/exporter/adapters/gatsby/actions/prepare.ts +0 -9
  271. package/exporter/adapters/gatsby/actions/relocation.ts +0 -15
  272. package/exporter/adapters/gatsby/actions/restore.ts +0 -36
  273. package/exporter/adapters/gatsby/actions/ssg.ts +0 -12
  274. package/exporter/adapters/gatsby/actions/sync.ts +0 -70
  275. package/exporter/adapters/gatsby/shared/context.ts +0 -50
  276. package/exporter/adapters/gatsby/shared/extract-assets.ts +0 -61
  277. package/exporter/adapters/gatsby/shared/gatsby-build.ts +0 -54
  278. package/exporter/adapters/gatsby/shared/sync-render.ts +0 -294
  279. package/exporter/adapters/gatsby/shared/types.ts +0 -35
  280. package/exporter/build-esbuild.noop +0 -42
  281. package/exporter/commands/prepare-assets-directory.ts +0 -33
  282. package/exporter/services/db.ts +0 -32
  283. package/exporter/types/render.ts +0 -59
  284. package/exporter/utils/brush.ts +0 -34
  285. package/exporter/utils/check-health.ts +0 -79
  286. package/plugins/gatsby-plugin-svgr-loader/gatsby-node.js +0 -55
  287. package/plugins/gatsby-plugin-svgr-loader/package.json +0 -8
  288. package/build/{exporter/commands → commands}/end-render.d.ts +0 -0
  289. package/build/{exporter/commands → commands}/reset-render.d.ts +0 -0
  290. package/build/{exporter/commands → commands}/start-render.d.ts +0 -0
  291. package/build/{exporter/commands → commands}/upload-search-content.d.ts +0 -0
  292. package/build/{exporter/constants → constants}/endpoints.d.ts +0 -0
  293. package/build/{exporter/services → services}/navigation.d.ts +0 -0
  294. package/build/{exporter/services → services}/reference-fields.d.ts +0 -0
  295. package/build/{exporter/types → types}/pages.d.ts +1 -1
  296. /package/build/{exporter/types → types}/templates.d.ts +0 -0
  297. /package/build/{exporter/utils → utils}/api.d.ts +0 -0
  298. /package/build/{exporter/utils → utils}/images.d.ts +0 -0
  299. /package/build/{exporter/utils → utils}/instance.d.ts +0 -0
  300. /package/{react → exporter/react}/Favicon/utils.ts +0 -0
@@ -6,16 +6,25 @@ import type {
6
6
  PutAPI,
7
7
  ShowApiErrorOptions,
8
8
  } from "../types/api";
9
+ import type { AxiosError, Method } from "axios";
10
+
11
+ import axios from "axios";
12
+ import dotenv from "dotenv";
13
+ import kleur from "kleur";
9
14
 
10
- import { AuthService } from "../services/auth";
11
- import { brush } from "./brush";
12
15
  import { saveCache, searchCacheData } from "./cache";
13
16
  import { delay, getSafeSiteId, msToSec } from "./core-utils";
14
17
  import { buildLog } from "./loggin";
18
+ import { envs } from "../constants";
19
+ import { apiRegister } from "../registers";
20
+ import { AuthService } from "../services/auth";
21
+
22
+ dotenv.config();
15
23
 
16
24
  // Envs
17
- const { env } = process;
18
- const { RETRY_WAIT_SECONDS = "4", RETRY_ATTEMPTS = "4" } = env;
25
+ const {
26
+ env: { RETRY_WAIT_SECONDS = "4", RETRY_ATTEMPTS = "4" },
27
+ } = process;
19
28
 
20
29
  /**
21
30
  * Make a GET/PUT/POST request to the Griddo API.
@@ -32,22 +41,31 @@ const { RETRY_WAIT_SECONDS = "4", RETRY_ATTEMPTS = "4" } = env;
32
41
  */
33
42
  async function requestAPI<T extends APIResponses>(
34
43
  props: APIRequest,
35
- method: string,
44
+ method: Method,
36
45
  appendToLog = "",
37
46
  ): Promise<T> {
38
- const { endpoint, body, cacheKey = "", attempt = 1, headers, useApiCacheDir = true } = props;
47
+ const {
48
+ endpoint,
49
+ body,
50
+ cacheKey = "",
51
+ attempt = 1,
52
+ headers,
53
+ useApiCacheDir = true,
54
+ } = props;
39
55
  const cacheOptions = { endpoint, body, headers, cacheKey };
40
56
 
41
57
  // Cache
42
58
  if (cacheKey && useApiCacheDir) {
43
59
  const start = new Date();
44
- const cacheData = await searchCacheData<T>(cacheOptions);
60
+ const cacheData = searchCacheData<T>(cacheOptions);
45
61
 
46
62
  if (cacheData) {
47
63
  const siteId = getSafeSiteId(cacheData);
48
64
  const siteIdMsg = siteId ? `site: ${siteId}` : "";
49
- const duration = msToSec(Date.now() - start.getTime());
50
- buildLog(`${method} (cache) ${siteIdMsg} ${endpoint} - ${duration}s ${appendToLog}`);
65
+ const duration = msToSec(new Date().getTime() - start.getTime());
66
+ buildLog(
67
+ `${method} (cache) ${siteIdMsg} ${endpoint} - ${duration}s ${appendToLog}`,
68
+ );
51
69
  return cacheData;
52
70
  }
53
71
  }
@@ -55,46 +73,47 @@ async function requestAPI<T extends APIResponses>(
55
73
  // Network
56
74
  try {
57
75
  const start = new Date();
58
-
59
- // Prepare fetch options
60
- const fetchOptions: RequestInit = {
61
- method: method.toUpperCase(),
62
- headers: Object.assign({}, headers, AuthService.headers) as Record<string, string>,
63
- };
64
-
65
- // Add body for non-GET requests
66
- if (method.toLowerCase() !== "get" && body) {
67
- fetchOptions.body = JSON.stringify(body);
68
- if (!fetchOptions.headers) fetchOptions.headers = {};
69
- (fetchOptions.headers as Record<string, string>)["Content-Type"] = "application/json";
70
- }
71
-
72
- const response = await fetch(endpoint, fetchOptions);
73
-
74
- // Handle non-2xx responses
75
- if (!response.ok) {
76
- if (response.status === 404) {
77
- // @ts-expect-error page maybe will be 404
78
- return null;
79
- }
80
-
81
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
82
- }
83
-
84
- const data: T = await response.json();
76
+ const {
77
+ data,
78
+ headers: responseHeaders,
79
+ }: { data: T; headers: { "content-length": string } } = await axios({
80
+ url: endpoint,
81
+ method,
82
+ headers: Object.assign({}, headers, AuthService.headers),
83
+ data: body,
84
+ });
85
85
 
86
86
  const siteId = getSafeSiteId(data);
87
87
  const siteIdMsg = siteId ? `site: ${siteId}` : "";
88
- const duration = msToSec(Date.now() - start.getTime());
89
- buildLog(`${method} (fetch) ${siteIdMsg} ${endpoint} - ${duration}s ${appendToLog}`);
88
+ const duration = msToSec(new Date().getTime() - start.getTime());
89
+ buildLog(
90
+ `${method} (fetch) ${siteIdMsg} ${endpoint} - ${duration}s ${appendToLog}`,
91
+ );
90
92
 
91
93
  if (useApiCacheDir) {
92
- await saveCache(cacheOptions, data);
94
+ saveCache(cacheOptions, data);
95
+ }
96
+
97
+ // Only save registers if alerts are enabled
98
+ if (envs.GRIDDO_ALERT_FEATURE) {
99
+ const responseSize = Number.parseInt(responseHeaders["content-length"]);
100
+ if (responseSize > envs.GRIDDO_API_MAX_RESPONSE_SIZE) {
101
+ apiRegister.insert("API_RESPONSE_TOO_BIG", {
102
+ endpoint,
103
+ responseSize,
104
+ duration,
105
+ });
106
+ }
93
107
  }
94
108
 
95
109
  return data;
96
110
  } catch (e) {
97
- const error = e as Error;
111
+ const error = e as AxiosError;
112
+
113
+ if (error.response?.status === 404) {
114
+ // @ts-expect-error page maybe will be 404
115
+ return null;
116
+ }
98
117
 
99
118
  if (attempt > parseInt(RETRY_ATTEMPTS)) {
100
119
  console.log(`
@@ -103,7 +122,7 @@ Max attempts ${RETRY_ATTEMPTS} reached
103
122
  - ${method.toUpperCase()} ${endpoint}
104
123
  - BODY: ${JSON.stringify(body)}
105
124
  - HEADERS: ${JSON.stringify(headers)}
106
- - ERROR: ${error.message}
125
+ - RESPONSE: ${error.response?.status} ${JSON.stringify(error.response?.data)}
107
126
  --------------------------------------
108
127
  `);
109
128
 
@@ -111,6 +130,12 @@ Max attempts ${RETRY_ATTEMPTS} reached
111
130
  process.exit(1);
112
131
  }
113
132
 
133
+ if (!error.response) {
134
+ console.log("Unknown error occurred");
135
+ console.log(JSON.stringify(error, null, 2));
136
+ process.exit(1);
137
+ }
138
+
114
139
  showApiError(error, {
115
140
  callInfo: { endpoint, body },
116
141
  });
@@ -163,7 +188,9 @@ async function postApi<T extends APIResponses>(props: PostAPI) {
163
188
  const { endpoint, body, headers } = props;
164
189
  const referenceFieldBodyParams =
165
190
  endpoint.endsWith("/distributor") &&
166
- `# ReferenceField body: ${JSON.stringify(body)} lang: ${JSON.stringify(headers?.lang)}`;
191
+ `# ReferenceField body: ${JSON.stringify(body)} lang: ${JSON.stringify(
192
+ headers?.lang,
193
+ )}`;
167
194
 
168
195
  return requestAPI<T>(props, "post", referenceFieldBodyParams || "");
169
196
  }
@@ -171,31 +198,40 @@ async function postApi<T extends APIResponses>(props: PostAPI) {
171
198
  /**
172
199
  * Shows an API error through the terminal.
173
200
  */
174
- function showApiError(error: Error, options: ShowApiErrorOptions) {
175
- const { message, stack } = error;
201
+ function showApiError(error: AxiosError, options: ShowApiErrorOptions) {
202
+ const { response, message, stack } = error;
176
203
  const { callInfo } = options;
204
+ const { status, statusText, data } = response || {};
177
205
  const callInfoArray = [];
178
206
 
179
207
  for (const item of Object.keys(callInfo) as Array<keyof typeof callInfo>) {
180
208
  callInfoArray.push(
181
209
  `${item}: ${
182
- typeof callInfo[item] === "object" ? JSON.stringify(callInfo[item]) : callInfo[item]
210
+ typeof callInfo[item] === "object"
211
+ ? JSON.stringify(callInfo[item])
212
+ : callInfo[item]
183
213
  }`,
184
214
  );
185
215
  }
186
216
 
187
217
  // Compose the errors output
188
218
  const callInfoStr = callInfoArray.join("\n");
219
+ const apiResponseStr = response
220
+ ? `Code: ${status} - ${statusText}\nResponse: ${JSON.stringify(data)}`
221
+ : "";
189
222
  const errorDetailsStr = `${message}\n${stack}`;
190
223
 
191
224
  // Print the error
192
225
  console.warn(
193
- brush.red(`
226
+ kleur.red(`
194
227
  =============
195
228
 
196
229
  { Call info }
197
230
  ${callInfoStr}
198
231
 
232
+ { API Response }
233
+ ${apiResponseStr}
234
+
199
235
  { Error details }
200
236
  ${errorDetailsStr}
201
237
 
@@ -2,21 +2,24 @@ import type { Petition } from "../types/global";
2
2
  import type { HashSites, SiteHash } from "../types/sites";
3
3
 
4
4
  import crypto from "node:crypto";
5
- import fsp from "node:fs/promises";
5
+ import fs from "node:fs";
6
6
  import path from "node:path";
7
7
 
8
- import { pathExists } from "../utils/folders";
9
- import { getRenderPathsFromDB } from "./render";
8
+ import fsx from "fs-extra";
9
+
10
+ import { getConfig } from "./core-utils";
11
+
12
+ const config = getConfig();
10
13
 
11
14
  /**
12
15
  * Creates an `apiCache` dir to store pages fetched from them API.
13
16
  */
14
- async function createAPICacheDir(options: { basePath: string }) {
15
- const { basePath } = options;
16
- const apiCacheDir = path.join(basePath, "apiCache");
17
+ function createAPICacheDir() {
18
+ const { __cx } = config.paths();
19
+ const apiCacheDir = path.join(__cx, "apiCache");
17
20
 
18
- if (!(await pathExists(apiCacheDir))) {
19
- await fsp.mkdir(apiCacheDir);
21
+ if (!fs.existsSync(apiCacheDir)) {
22
+ fs.mkdirSync(apiCacheDir);
20
23
  }
21
24
 
22
25
  console.info("Cache initialized");
@@ -24,10 +27,12 @@ async function createAPICacheDir(options: { basePath: string }) {
24
27
 
25
28
  /**
26
29
  * Generate a filename with a hash using a Petition object
30
+ *
31
+ * @todo Merge with createSha256
27
32
  * @param petition An object
28
33
  */
29
- async function generateFilenameWithHash(petition: Petition) {
30
- const { __cx } = await getRenderPathsFromDB();
34
+ function generateFilenameWithHash(petition: Petition) {
35
+ const { __cx } = config.paths();
31
36
  const apiCacheDir = path.join(__cx, "apiCache");
32
37
 
33
38
  const hashSum = crypto.createHash("sha256");
@@ -36,22 +41,35 @@ async function generateFilenameWithHash(petition: Petition) {
36
41
  return `${apiCacheDir}/${hashSum.digest("hex")}`;
37
42
  }
38
43
 
44
+ /**
45
+ * Generate a filename with a hash using a string.
46
+ *
47
+ * @todo Merge with generateFilenameWithHash
48
+ * @param data A string to create a sha256 based on.
49
+ */
50
+ function createSha256(data: string) {
51
+ const uniqueString = crypto.randomBytes(16).toString("hex");
52
+ const hash = crypto.createHash("sha256");
53
+ hash.update(`${data}${uniqueString}`);
54
+
55
+ return hash.digest("hex");
56
+ }
57
+
39
58
  /**
40
59
  * Save a file using a hash name.
41
60
  *
42
61
  * @param petition An object.
43
62
  * @param content Content to be saved.
44
63
  */
45
- async function saveCache<T>(petition: Petition, content: T) {
46
- const stringContent = typeof content === "string" ? content : JSON.stringify(content);
47
- const filename = await generateFilenameWithHash(petition);
64
+ function saveCache<T>(petition: Petition, content: T) {
65
+ const stringContent =
66
+ typeof content === "string" ? content : JSON.stringify(content);
67
+ const filename = generateFilenameWithHash(petition);
48
68
  const filepath = path.dirname(filename);
49
-
50
- if (!(await pathExists(filepath))) {
51
- await fsp.mkdir(filepath, { recursive: true });
69
+ if (!fs.existsSync(filepath)) {
70
+ fs.mkdirSync(filepath, { recursive: true });
52
71
  }
53
-
54
- await fsp.writeFile(filename, stringContent, "utf8");
72
+ fs.writeFileSync(filename, stringContent, "utf8");
55
73
  }
56
74
 
57
75
  /**
@@ -60,13 +78,13 @@ async function saveCache<T>(petition: Petition, content: T) {
60
78
  *
61
79
  * @param petition An object
62
80
  */
63
- async function searchCacheData<T>(petition: Petition) {
81
+ function searchCacheData<T>(petition: Petition) {
64
82
  try {
65
- const file = await generateFilenameWithHash(petition);
66
- const fileContent = await fsp.readFile(file, "utf8");
67
- const jsonData = JSON.parse(fileContent) as T;
68
-
69
- return jsonData;
83
+ const file = generateFilenameWithHash(petition);
84
+ const jsonData = fsx.readJSONSync(file, {
85
+ encoding: "utf-8",
86
+ });
87
+ return jsonData as T;
70
88
  } catch {
71
89
  return null;
72
90
  }
@@ -75,14 +93,15 @@ async function searchCacheData<T>(petition: Petition) {
75
93
  /**
76
94
  * Get site hashes from the file as an object
77
95
  */
78
- async function getHashSites(): Promise<HashSites> {
79
- const { __cx } = await getRenderPathsFromDB();
96
+ function getHashSites(): HashSites {
97
+ const { __cx } = config.paths();
80
98
  const apiCacheDir = path.join(__cx, "apiCache");
81
99
  const siteHasFilename = `${apiCacheDir}/siteHash.json`;
82
100
 
83
101
  try {
84
- const fileContent = await fsp.readFile(siteHasFilename, "utf8");
85
- const jsonData = JSON.parse(fileContent);
102
+ const jsonData = fsx.readJSONSync(siteHasFilename, {
103
+ encoding: "utf-8",
104
+ });
86
105
  return jsonData || {};
87
106
  } catch {
88
107
  return {};
@@ -95,18 +114,18 @@ async function getHashSites(): Promise<HashSites> {
95
114
  * @param siteId The id of the site.
96
115
  * @param siteHash The has of the site.
97
116
  */
98
- async function updatedSiteHash(siteId: number, siteHash: SiteHash) {
99
- const allHash = await getHashSites();
117
+ function updatedSiteHash(siteId: number, siteHash: SiteHash) {
118
+ const allHash = getHashSites();
100
119
  const lastHash = allHash[siteId];
101
- const currentHash = siteHash || lastHash || Date.now();
120
+ const currentHash = siteHash || lastHash || new Date().valueOf();
102
121
 
103
- const { __cx } = await getRenderPathsFromDB();
122
+ const { __cx } = config.paths();
104
123
  const apiCacheDir = path.join(__cx, "apiCache");
105
124
  const siteHasFilename = `${apiCacheDir}/siteHash.json`;
106
125
 
107
126
  if (currentHash !== lastHash) {
108
127
  allHash[siteId] = currentHash;
109
- await fsp.writeFile(siteHasFilename, JSON.stringify(allHash), {
128
+ fs.writeFileSync(siteHasFilename, JSON.stringify(allHash), {
110
129
  encoding: "utf-8",
111
130
  });
112
131
  }
@@ -114,4 +133,10 @@ async function updatedSiteHash(siteId: number, siteHash: SiteHash) {
114
133
  return currentHash.toString();
115
134
  }
116
135
 
117
- export { createAPICacheDir, saveCache, searchCacheData, updatedSiteHash };
136
+ export {
137
+ createAPICacheDir,
138
+ createSha256,
139
+ saveCache,
140
+ searchCacheData,
141
+ updatedSiteHash,
142
+ };