@c-rex/services 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -51,14 +51,6 @@ var LOG_LEVELS = {
51
51
  info: 6,
52
52
  debug: 7
53
53
  };
54
- var API = {
55
- MAX_RETRY: 3,
56
- API_TIMEOUT: 1e4,
57
- RETRY_DELAY: 500,
58
- API_HEADERS: {
59
- "content-Type": "application/json"
60
- }
61
- };
62
54
  var SDK_CONFIG_KEY = "crex-sdk-config";
63
55
  var CONTENT_LANG_KEY = "CONTENT_LANG_KEY";
64
56
  var UI_LANG_KEY = "UI_LANG_KEY";
@@ -91,7 +83,7 @@ var OPERATOR_OPTIONS = {
91
83
  };
92
84
 
93
85
  // ../core/src/requests.ts
94
- var import_headers = require("next/headers");
86
+ var import_headers2 = require("next/headers");
95
87
 
96
88
  // ../core/src/logger.ts
97
89
  var import_winston = __toESM(require("winston"));
@@ -174,8 +166,24 @@ var GraylogTransport = class extends import_winston_transport2.default {
174
166
  }
175
167
  };
176
168
 
169
+ // ../core/src/config.ts
170
+ var import_headers = require("next/headers");
171
+ var getClientConfig = () => {
172
+ const jsonConfigs = (0, import_headers.cookies)().get(SDK_CONFIG_KEY)?.value;
173
+ if (!jsonConfigs) {
174
+ throw new Error("Configs not found");
175
+ }
176
+ const configs = JSON.parse(jsonConfigs);
177
+ return configs;
178
+ };
179
+ function getServerConfig() {
180
+ if (!global.__GLOBAL_CONFIG__) {
181
+ throw new Error("Server config not initialized");
182
+ }
183
+ return global.__GLOBAL_CONFIG__;
184
+ }
185
+
177
186
  // ../core/src/logger.ts
178
- var import_next_cookies = require("@c-rex/utils/next-cookies");
179
187
  var CrexLogger = class {
180
188
  customerConfig;
181
189
  logger;
@@ -188,13 +196,13 @@ var CrexLogger = class {
188
196
  async initLogger() {
189
197
  try {
190
198
  if (!this.customerConfig) {
191
- this.customerConfig = await (0, import_next_cookies.getConfigs)();
199
+ this.customerConfig = getServerConfig();
192
200
  }
193
201
  if (!this.logger) {
194
202
  this.logger = this.createLogger();
195
203
  }
196
204
  } catch (error) {
197
- console.error("Error initializing logger:", error);
205
+ console.log("Error initializing logger:", error);
198
206
  }
199
207
  }
200
208
  /**
@@ -230,11 +238,31 @@ var CrexLogger = class {
230
238
  }
231
239
  };
232
240
 
241
+ // ../core/src/token.ts
242
+ var import_openid_client = require("openid-client");
243
+ var getToken = async () => {
244
+ console.log("veio buscar");
245
+ const config = getServerConfig();
246
+ const issuer = await import_openid_client.Issuer.discover(config.OIDC.client.issuer);
247
+ const client = new issuer.Client({
248
+ client_id: config.OIDC.client.id,
249
+ client_secret: config.OIDC.client.secret
250
+ });
251
+ const tokenSet = await client.grant({ grant_type: "client_credentials" });
252
+ const token = tokenSet.access_token;
253
+ const expiresAt = tokenSet.expires_at;
254
+ if (!token) {
255
+ throw new Error("Failed to get token");
256
+ }
257
+ return { token, expiresAt };
258
+ };
259
+
233
260
  // ../core/src/requests.ts
234
261
  var CrexApi = class {
235
262
  customerConfig;
236
263
  apiClient;
237
264
  logger;
265
+ publicNextApiUrl;
238
266
  /**
239
267
  * Initializes the API client if it hasn't been initialized yet.
240
268
  * Loads customer configuration, creates the axios instance, and initializes the logger.
@@ -244,16 +272,10 @@ var CrexApi = class {
244
272
  async initAPI() {
245
273
  this.logger = new CrexLogger();
246
274
  if (!this.customerConfig) {
247
- const aux = (0, import_headers.cookies)().get(SDK_CONFIG_KEY);
248
- if (aux != void 0) {
249
- this.customerConfig = JSON.parse(aux.value);
250
- } else {
251
- this.logger.log({
252
- level: "error",
253
- message: `utils.initAPI error: Config cookie not available`
254
- });
255
- throw new Error("Config cookie not available");
256
- }
275
+ this.customerConfig = getServerConfig();
276
+ }
277
+ if (!this.publicNextApiUrl) {
278
+ this.publicNextApiUrl = "http://localhost:3002";
257
279
  }
258
280
  if (!this.apiClient) {
259
281
  this.apiClient = import_axios.default.create({
@@ -261,36 +283,16 @@ var CrexApi = class {
261
283
  });
262
284
  }
263
285
  }
264
- async getToken() {
265
- for (let retry = 0; retry < API.MAX_RETRY; retry++) {
266
- try {
267
- const response = await fetch(`${this.customerConfig.publicNextApiUrl}/api/token`, {
268
- method: "POST",
269
- credentials: "include"
270
- });
271
- const { token } = await response.json();
272
- return token;
273
- } catch (error) {
274
- this.logger.log({
275
- level: "error",
276
- message: `utils.getToken ${retry + 1}\xBA error when request token. Error: ${error}`
277
- });
278
- await new Promise((resolve) => setTimeout(resolve, API.RETRY_DELAY));
279
- if (retry === API.MAX_RETRY) {
280
- throw error;
281
- }
282
- }
283
- }
284
- }
285
286
  async manageToken() {
286
287
  try {
287
288
  let token = "";
288
- const hasToken = (0, import_headers.cookies)().get(CREX_TOKEN_HEADER_KEY);
289
+ const hasToken = (0, import_headers2.cookies)().get(CREX_TOKEN_HEADER_KEY);
289
290
  if (hasToken == void 0 || hasToken.value === null) {
290
- const tokenResult = await this.getToken();
291
+ const { token: tokenResult } = await getToken();
291
292
  if (tokenResult === null) throw new Error("Token is undefined");
292
293
  token = tokenResult;
293
294
  } else {
295
+ console.log("j\xE1 tinha o token");
294
296
  token = hasToken.value;
295
297
  }
296
298
  return token;
@@ -321,38 +323,29 @@ var CrexApi = class {
321
323
  body,
322
324
  headers = {}
323
325
  }) {
324
- await this.initAPI();
325
- let response = void 0;
326
- if (this.customerConfig.OIDC.client.enabled) {
327
- const token = await this.manageToken();
328
- headers = {
329
- ...headers,
330
- Authorization: `Bearer ${token}`
331
- };
332
- this.apiClient.defaults.headers.common["Authorization"] = `Bearer ${token}`;
333
- }
334
- for (let retry = 0; retry < API.MAX_RETRY; retry++) {
335
- try {
336
- response = await this.apiClient.request({
337
- url,
338
- method,
339
- data: body,
340
- params,
341
- headers
342
- });
343
- break;
344
- } catch (error) {
345
- this.logger.log({
346
- level: "error",
347
- message: `API.execute ${retry + 1}\xBA error when request ${url}. Error: ${error}`
348
- });
349
- if (retry === API.MAX_RETRY - 1) {
350
- throw error;
351
- }
326
+ try {
327
+ await this.initAPI();
328
+ let response = void 0;
329
+ if (this.customerConfig.OIDC.client.enabled) {
330
+ const token = await this.manageToken();
331
+ headers = {
332
+ ...headers,
333
+ Authorization: `Bearer ${token}`
334
+ };
335
+ this.apiClient.defaults.headers.common["Authorization"] = `Bearer ${token}`;
352
336
  }
353
- }
354
- if (response) {
355
- return response.data;
337
+ response = await this.apiClient.request({
338
+ url,
339
+ method,
340
+ data: body,
341
+ params,
342
+ headers
343
+ });
344
+ if (response) {
345
+ return response.data;
346
+ }
347
+ } catch (error) {
348
+ console.log("erro brabo", error);
356
349
  }
357
350
  throw new Error("API.execute error: Failed to retrieve a valid response");
358
351
  }
@@ -384,10 +377,15 @@ var import_clsx = require("clsx");
384
377
  var import_tailwind_merge = require("tailwind-merge");
385
378
 
386
379
  // ../utils/src/params.ts
387
- var createParams = (fieldsList, key = "Fields") => fieldsList.map((item) => ({
388
- key,
389
- value: item
390
- }));
380
+ var createParams = (fieldsList, key = "Fields") => {
381
+ if (!fieldsList || fieldsList.length === 0) {
382
+ return [];
383
+ }
384
+ return fieldsList.map((item) => ({
385
+ key,
386
+ value: item
387
+ }));
388
+ };
391
389
  var generateQueryParams = (params) => {
392
390
  const queryParams = params.map((param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`).join("&");
393
391
  return queryParams;
@@ -535,12 +533,11 @@ var DirectoryNodesService = class extends BaseService {
535
533
  };
536
534
 
537
535
  // src/transforms/documentTypes.ts
538
- var import_next_cookies2 = require("@c-rex/utils/next-cookies");
539
- var import_headers2 = require("next/headers");
540
- var transformDocumentTypes = (data) => {
536
+ var import_headers3 = require("next/headers");
537
+ var transformDocumentTypes = async (data) => {
541
538
  const labels = [];
542
- const config = (0, import_next_cookies2.getConfigs)();
543
- const contentLanguage = (0, import_headers2.cookies)().get(CONTENT_LANG_KEY)?.value || config.languageSwitcher.default;
539
+ const config = getClientConfig();
540
+ const contentLanguage = (0, import_headers3.cookies)().get(CONTENT_LANG_KEY)?.value || config.languageSwitcher.default;
544
541
  const language = contentLanguage.split("-")[0];
545
542
  data.items.forEach((documentItem) => {
546
543
  const label = documentItem.labels.find((item) => item.language.toLowerCase() === language.toLowerCase());
@@ -575,57 +572,57 @@ var DocumentTypesService = class extends BaseService {
575
572
  };
576
573
 
577
574
  // src/transforms/information.ts
578
- var import_next_cookies3 = require("@c-rex/utils/next-cookies");
579
- var import_headers3 = require("next/headers");
575
+ var import_headers4 = require("next/headers");
580
576
  var import_logger2 = require("@c-rex/core/logger");
581
577
  var transformInformationUnits = async (data) => {
582
578
  const logger = new import_logger2.CrexLogger();
583
- const config = await (0, import_next_cookies3.getConfigs)();
579
+ const frontEndConfig = getClientConfig();
580
+ const backEndConfig = getServerConfig();
584
581
  const filteredTags = {};
585
582
  const items = data.items.map((item) => {
586
583
  const type = item.class.labels.filter((item2) => item2.language === EN_LANG)[0].value.toUpperCase();
587
584
  const files = getFileRenditions({ renditions: item?.renditions });
588
585
  let link = `/topics/${item.shortId}`;
589
- if (config.results.articlePageLayout == "BLOG") {
586
+ if (frontEndConfig.results.articlePageLayout == "BLOG") {
590
587
  link = `/blog/${item.shortId}`;
591
588
  } else if (type == RESULT_TYPES.DOCUMENT) {
592
589
  link = `/documents/${item.shortId}`;
593
590
  }
594
591
  let title = "NO TITLE";
592
+ if (item.titles) {
593
+ title = item.titles[0].value;
594
+ } else if (item.labels) {
595
+ title = item.labels[0].value;
596
+ }
595
597
  let language = "NO LANGUAGE";
596
- try {
597
- if (item.titles) {
598
- title = item.titles[0].value;
599
- language = item.titles[0].language;
600
- } else {
601
- title = item.labels[0].value;
602
- language = item.labels[0].language;
603
- }
604
- } catch {
605
- logger.log({
606
- level: "error",
607
- message: `No label or title on item ${item.shortId}`
608
- });
598
+ if (item.languages.length > 0) {
599
+ language = item.languages[0];
600
+ }
601
+ let versionOf = [];
602
+ if (item?.versionOf && item.versionOf?.labels) {
603
+ versionOf = item.versionOf.labels.map((item2) => item2.language).filter((value) => value !== void 0);
609
604
  }
610
605
  return {
611
606
  language,
612
607
  title,
613
608
  type,
614
609
  localeType: "",
610
+ revision: item.revision,
615
611
  shortId: item.shortId,
616
- disabled: config.results.disabledResults.includes(type),
612
+ multipleVersions: versionOf,
613
+ disabled: frontEndConfig.results.disabledResults.includes(type),
617
614
  link,
618
615
  files
619
616
  };
620
617
  });
621
618
  if (data.tags) {
622
- const contentLang = ((0, import_headers3.cookies)().get(CONTENT_LANG_KEY)?.value || EN_LANG).toLowerCase();
619
+ const contentLang = ((0, import_headers4.cookies)().get(CONTENT_LANG_KEY)?.value || EN_LANG).toLowerCase();
623
620
  const splittedContentLang = contentLang.split("-")[0];
624
621
  for (const [key, value] of Object.entries(data.tags)) {
625
622
  if (!value || !value.items || value.items.length === 0) {
626
623
  continue;
627
624
  }
628
- if (!config.search.tags.includes(key)) {
625
+ if (!backEndConfig.search.tags.includes(key)) {
629
626
  continue;
630
627
  }
631
628
  const aux = value.items.map((item) => {
@@ -720,7 +717,6 @@ var InformationUnitsService = class extends BaseService {
720
717
  const remainFilters = createParams(filters, "Filter");
721
718
  const restrictions = createParams(restrict, "Restrict");
722
719
  const remainTags = createParams(tags, "Tags");
723
- const languageParam = `VALUES ?lang { ${languages.map((lang) => `"${lang}"`).join(" ")} } ?s iirds:language ?lang .`;
724
720
  const params = [
725
721
  { key: "pageSize", value: "12" },
726
722
  { key: "wildcard", value: wildcard.toLowerCase() },
@@ -733,6 +729,7 @@ var InformationUnitsService = class extends BaseService {
733
729
  ...restrictions
734
730
  ];
735
731
  if (languages.length > 0) {
732
+ const languageParam = `VALUES ?lang { ${languages.map((lang) => `"${lang}"`).join(" ")} } ?s iirds:language ?lang .`;
736
733
  params.push({ key: "sparqlWhere", value: languageParam });
737
734
  }
738
735
  if (queries.length > 0) {
@@ -796,10 +793,9 @@ var InformationUnitsService = class extends BaseService {
796
793
  };
797
794
 
798
795
  // src/language.ts
799
- var import_next_cookies4 = require("@c-rex/utils/next-cookies");
800
796
  var LanguageService = class extends BaseService {
801
797
  constructor() {
802
- const configs = (0, import_next_cookies4.getConfigs)();
798
+ const configs = getClientConfig();
803
799
  super(configs.languageSwitcher.endpoint);
804
800
  }
805
801
  /**
@@ -836,13 +832,12 @@ var LanguageService = class extends BaseService {
836
832
  };
837
833
 
838
834
  // src/transforms/topics.ts
839
- var import_next_cookies5 = require("@c-rex/utils/next-cookies");
840
- var import_headers4 = require("next/headers");
835
+ var import_headers5 = require("next/headers");
841
836
  var import_logger3 = require("@c-rex/core/logger");
842
837
  var transformTopics = async (data) => {
843
838
  const logger = new import_logger3.CrexLogger();
844
- const config = (0, import_next_cookies5.getConfigs)();
845
- const uiLang = ((0, import_headers4.cookies)().get(UI_LANG_KEY)?.value || config.languageSwitcher.default).toLowerCase();
839
+ const config = getClientConfig();
840
+ const uiLang = ((0, import_headers5.cookies)().get(UI_LANG_KEY)?.value || config.languageSwitcher.default).toLowerCase();
846
841
  const items = data.items.map((item) => {
847
842
  const type = item.class.labels.filter((item2) => item2.language === EN_LANG)[0].value.toUpperCase();
848
843
  let link = `/topics/${item.shortId}`;