@c-rex/services 0.1.8 → 0.1.10

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.d.mts CHANGED
@@ -8,12 +8,17 @@ declare const WILD_CARD_OPTIONS: {
8
8
  readonly START: "START";
9
9
  readonly NONE: "NONE";
10
10
  };
11
+ declare const OPERATOR_OPTIONS: {
12
+ readonly AND: "AND";
13
+ readonly OR: "OR";
14
+ };
11
15
 
12
16
  type QueryParams = {
13
17
  key: string;
14
18
  value: string;
15
19
  };
16
20
  type WildCardType = keyof typeof WILD_CARD_OPTIONS;
21
+ type OperatorType = keyof typeof OPERATOR_OPTIONS;
17
22
 
18
23
  /**
19
24
  * Base service class that provides common functionality for API interactions.
@@ -139,7 +144,7 @@ declare class InformationUnitsService extends BaseService {
139
144
  tags?: string[];
140
145
  languages?: string[];
141
146
  wildcard?: WildCardType;
142
- operator?: string;
147
+ operator?: OperatorType;
143
148
  like?: boolean;
144
149
  }): Promise<informationUnitsResponse>;
145
150
  /**
@@ -193,7 +198,7 @@ type getListProps = {
193
198
  fields?: string[];
194
199
  languages?: string[];
195
200
  wildcard?: WildCardType;
196
- operator?: string;
201
+ operator?: OperatorType;
197
202
  like?: boolean;
198
203
  pageSize?: number;
199
204
  };
package/dist/index.d.ts CHANGED
@@ -8,12 +8,17 @@ declare const WILD_CARD_OPTIONS: {
8
8
  readonly START: "START";
9
9
  readonly NONE: "NONE";
10
10
  };
11
+ declare const OPERATOR_OPTIONS: {
12
+ readonly AND: "AND";
13
+ readonly OR: "OR";
14
+ };
11
15
 
12
16
  type QueryParams = {
13
17
  key: string;
14
18
  value: string;
15
19
  };
16
20
  type WildCardType = keyof typeof WILD_CARD_OPTIONS;
21
+ type OperatorType = keyof typeof OPERATOR_OPTIONS;
17
22
 
18
23
  /**
19
24
  * Base service class that provides common functionality for API interactions.
@@ -139,7 +144,7 @@ declare class InformationUnitsService extends BaseService {
139
144
  tags?: string[];
140
145
  languages?: string[];
141
146
  wildcard?: WildCardType;
142
- operator?: string;
147
+ operator?: OperatorType;
143
148
  like?: boolean;
144
149
  }): Promise<informationUnitsResponse>;
145
150
  /**
@@ -193,7 +198,7 @@ type getListProps = {
193
198
  fields?: string[];
194
199
  languages?: string[];
195
200
  wildcard?: WildCardType;
196
- operator?: string;
201
+ operator?: OperatorType;
197
202
  like?: boolean;
198
203
  pageSize?: number;
199
204
  };
package/dist/index.js CHANGED
@@ -54,6 +54,7 @@ var LOG_LEVELS = {
54
54
  var API = {
55
55
  MAX_RETRY: 3,
56
56
  API_TIMEOUT: 1e4,
57
+ RETRY_DELAY: 500,
57
58
  API_HEADERS: {
58
59
  "content-Type": "application/json"
59
60
  }
@@ -76,7 +77,7 @@ var RESULT_TYPES = {
76
77
  PACKAGE,
77
78
  FRAGMENT
78
79
  };
79
- var DEFAULT_COOKIE_LIMIT = 7 * 24 * 60 * 60 * 1e3;
80
+ var DEFAULT_COOKIE_LIMIT = 30 * 24 * 60 * 60 * 1e3;
80
81
  var CREX_TOKEN_HEADER_KEY = "crex-token";
81
82
  var WILD_CARD_OPTIONS = {
82
83
  BOTH: "BOTH",
@@ -139,21 +140,22 @@ var GraylogTransport = class extends import_winston_transport2.default {
139
140
  * @param configs - The application configuration containing logging settings
140
141
  */
141
142
  constructor(configs) {
143
+ if (!configs.logs.graylog.hostname || configs.logs.graylog.port === void 0) {
144
+ throw new Error("Graylog hostname and port must be defined");
145
+ }
142
146
  super({
143
147
  level: configs.logs.graylog.minimumLevel,
144
148
  silent: configs.logs.graylog.silent
145
149
  });
146
150
  this.configs = configs;
147
151
  this.graylogTransport = new import_winston_graylog2.default({
148
- name: "crex.net.documentation",
149
- //name: "crex.net.blog",
150
- silent: false,
152
+ name: configs.logs.graylog.app,
153
+ silent: configs.logs.graylog.silent,
151
154
  handleExceptions: false,
152
155
  graylog: {
153
156
  servers: [
154
157
  { host: "localhost", port: 12201 },
155
- { host: "https://log.c-rex.net", port: 12202 }
156
- //TODO: check the URL => https://log.c-rex.net:12202/gelf" GELF??
158
+ { host: configs.logs.graylog.hostname, port: configs.logs.graylog.port }
157
159
  ]
158
160
  }
159
161
  });
@@ -260,19 +262,24 @@ var CrexApi = class {
260
262
  }
261
263
  }
262
264
  async getToken() {
263
- try {
264
- const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/token`, {
265
- method: "POST",
266
- credentials: "include"
267
- });
268
- const { token } = await response.json();
269
- return token;
270
- } catch (error) {
271
- this.logger.log({
272
- level: "error",
273
- message: `utils.getToken error: ${error}`
274
- });
275
- throw error;
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
+ }
276
283
  }
277
284
  }
278
285
  async manageToken() {
@@ -290,7 +297,7 @@ var CrexApi = class {
290
297
  } catch (error) {
291
298
  this.logger.log({
292
299
  level: "error",
293
- message: `utils.manageToken error: ${error}`
300
+ message: `CrexAPI.manageToken error: ${error}`
294
301
  });
295
302
  throw error;
296
303
  }
@@ -352,14 +359,6 @@ var CrexApi = class {
352
359
  };
353
360
 
354
361
  // ../utils/src/utils.ts
355
- var _generateShaKey = (input) => {
356
- let hash = 0;
357
- for (let i = 0; i < input.length; i++) {
358
- hash = (hash << 5) - hash + input.charCodeAt(i);
359
- hash |= 0;
360
- }
361
- return Math.abs(hash).toString(16);
362
- };
363
362
  var getCountryCodeByLang = (lang) => {
364
363
  const mappedKeys = Object.keys(FLAGS_BY_LANG);
365
364
  if (!mappedKeys.includes(lang)) {
@@ -380,35 +379,6 @@ var formatDateToLocale = (date, locale) => {
380
379
  }).format(dateAux);
381
380
  };
382
381
 
383
- // ../utils/src/call.ts
384
- var call = async (method, params) => {
385
- const shaKey = _generateShaKey(JSON.stringify({ method, params }));
386
- const cache = localStorage.getItem(shaKey);
387
- if (cache !== null) {
388
- const { data, expireDate } = JSON.parse(cache);
389
- if (new Date(expireDate) > /* @__PURE__ */ new Date()) {
390
- return JSON.parse(data);
391
- } else {
392
- localStorage.removeItem(shaKey);
393
- }
394
- }
395
- const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/rpc`, {
396
- method: "POST",
397
- headers: { "Content-Type": "application/json" },
398
- body: JSON.stringify({ method, params }),
399
- credentials: "include"
400
- });
401
- const json = await res.json();
402
- if (!res.ok) throw new Error(json.error || "Unknown error");
403
- const today = /* @__PURE__ */ new Date();
404
- const result = {
405
- data: JSON.stringify(json.data),
406
- expireDate: new Date(today.getTime() + 1e3 * 60 * 60)
407
- };
408
- localStorage.setItem(shaKey, JSON.stringify(result));
409
- return json.data;
410
- };
411
-
412
382
  // ../utils/src/classMerge.ts
413
383
  var import_clsx = require("clsx");
414
384
  var import_tailwind_merge = require("tailwind-merge");
@@ -419,9 +389,7 @@ var createParams = (fieldsList, key = "Fields") => fieldsList.map((item) => ({
419
389
  value: item
420
390
  }));
421
391
  var generateQueryParams = (params) => {
422
- const queryParams = params.map(
423
- (param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`
424
- ).join("&");
392
+ const queryParams = params.map((param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`).join("&");
425
393
  return queryParams;
426
394
  };
427
395
 
@@ -482,25 +450,17 @@ var BaseService = class {
482
450
  headers = {},
483
451
  transformer = (response) => response
484
452
  }) {
485
- try {
486
- let url = `${this.endpoint}${path}`;
487
- const queryParams = generateQueryParams(params);
488
- if (queryParams.length > 0) {
489
- url += `?${queryParams}`;
490
- }
491
- const response = await this.api.execute({
492
- url,
493
- method,
494
- headers
495
- });
496
- return await transformer(response);
497
- } catch (error) {
498
- call("CrexLogger.log", {
499
- level: "error",
500
- message: `BaseService.request error when request ${path}. Error: ${error}`
501
- });
502
- throw error;
453
+ let url = `${this.endpoint}${path}`;
454
+ const queryParams = generateQueryParams(params);
455
+ if (queryParams.length > 0) {
456
+ url += `?${queryParams}`;
503
457
  }
458
+ const response = await this.api.execute({
459
+ url,
460
+ method,
461
+ headers
462
+ });
463
+ return await transformer(response);
504
464
  }
505
465
  };
506
466
 
@@ -766,8 +726,8 @@ var InformationUnitsService = class extends BaseService {
766
726
  { key: "wildcard", value: wildcard.toLowerCase() },
767
727
  { key: "PageNumber", value: page.toString() },
768
728
  { key: "Operator", value: operator },
769
- ...remainTags,
770
729
  { key: "Like", value: like.toString() },
730
+ ...remainTags,
771
731
  ...remainFields,
772
732
  ...remainFilters,
773
733
  ...restrictions
@@ -972,21 +932,17 @@ var TopicsService = class extends BaseService {
972
932
  }) {
973
933
  const remainFields = createParams(fields, "Fields");
974
934
  const remainFilters = createParams(filters, "Filter");
975
- const languageParam = `VALUES ?lang { ${languages.map((lang) => `"${lang}"`).join(" ")} } ?s iirds:language ?lang .`;
976
935
  const params = [
977
936
  { key: "pageSize", value: pageSize.toString() },
978
937
  { key: "PageNumber", value: page.toString() },
979
938
  { key: "Sort", value: "-created;-score" },
939
+ { key: "Operator", value: operator },
940
+ { key: "wildcard", value: wildcard.toLowerCase() },
980
941
  ...remainFields,
981
942
  ...remainFilters
982
943
  ];
983
- if (wildcard.length > 0) {
984
- params.push({ key: "Operator", value: operator });
985
- }
986
- if (wildcard.length > 0) {
987
- params.push({ key: "wildcard", value: wildcard.toLowerCase() });
988
- }
989
944
  if (languages.length > 0) {
945
+ const languageParam = `VALUES ?lang { ${languages.map((lang) => `"${lang}"`).join(" ")} } ?s iirds:language ?lang .`;
990
946
  params.push({ key: "sparqlWhere", value: languageParam });
991
947
  }
992
948
  if (queries.length > 0) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../../core/src/requests.ts","../../constants/src/index.ts","../../core/src/logger.ts","../../core/src/transports/matomo.ts","../../core/src/transports/graylog.ts","../../utils/src/utils.ts","../../utils/src/call.ts","../../utils/src/classMerge.ts","../../utils/src/params.ts","../../utils/src/renditions.ts","../src/baseService.ts","../src/renditions.ts","../src/directoryNodes.ts","../src/transforms/documentTypes.ts","../src/documentTypes.ts","../src/transforms/information.ts","../src/informationUnits.ts","../src/language.ts","../src/transforms/topics.ts","../src/topics.ts"],"sourcesContent":["export * from \"./renditions\"\nexport * from \"./directoryNodes\"\nexport * from \"./documentTypes\"\nexport * from \"./informationUnits\"\nexport * from \"./language\"\nexport * from \"./topics\"","import axios, { AxiosResponse, Method, AxiosInstance } from \"axios\";\nimport { API, CREX_TOKEN_HEADER_KEY, SDK_CONFIG_KEY } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\nimport { cookies } from \"next/headers\";\nimport { CrexLogger } from \"./logger\";\n\n/**\n * Interface for API response with generic data type.\n */\ninterface APIGenericResponse<T> extends AxiosResponse {\n data: T;\n statusCode: number;\n}\n\n/**\n * Interface for API call parameters.\n */\ninterface CallParams {\n url: string;\n method: Method;\n body?: any;\n headers?: any;\n params?: any;\n}\n\n/**\n * API client class for the CREX application.\n * Handles API requests with caching, authentication, and retry logic.\n */\nexport class CrexApi {\n private customerConfig!: ConfigInterface;\n private apiClient!: AxiosInstance;\n private logger!: CrexLogger;\n\n /**\n * Initializes the API client if it hasn't been initialized yet.\n * Loads customer configuration, creates the axios instance, and initializes the logger.\n * \n * @private\n */\n private async initAPI() {\n this.logger = new CrexLogger();\n\n if (!this.customerConfig) {\n const aux = cookies().get(SDK_CONFIG_KEY);\n if (aux != undefined) {\n this.customerConfig = JSON.parse(aux.value);\n } else {\n this.logger.log({\n level: \"error\",\n message: `utils.initAPI error: Config cookie not available`\n });\n\n throw new Error(\"Config cookie not available\");\n }\n }\n\n if (!this.apiClient) {\n this.apiClient = axios.create({\n baseURL: this.customerConfig.baseUrl,\n })\n }\n }\n\n private async getToken() {\n try {\n const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/token`, {\n method: 'POST',\n credentials: 'include',\n });\n\n const { token } = await response.json();\n\n return token;\n } catch (error) {\n this.logger.log({\n level: \"error\",\n message: `utils.getToken error: ${error}`\n });\n\n throw error\n }\n }\n\n private async manageToken() {\n try {\n let token = \"\";\n const hasToken = cookies().get(CREX_TOKEN_HEADER_KEY);\n\n if (hasToken == undefined || hasToken.value === null) {\n const tokenResult = await this.getToken();\n\n if (tokenResult === null) throw new Error(\"Token is undefined\");\n\n token = tokenResult;\n } else {\n token = hasToken.value;\n }\n\n return token;\n } catch (error) {\n this.logger.log({\n level: \"error\",\n message: `utils.manageToken error: ${error}`\n });\n\n throw error\n }\n }\n\n /**\n * Executes an API request with caching, authentication, and retry logic.\n * \n * @param options - Request options\n * @param options.url - The URL to request\n * @param options.method - The HTTP method to use\n * @param options.params - Optional query parameters\n * @param options.body - Optional request body\n * @param options.headers - Optional request headers\n * @returns The response data\n * @throws Error if the request fails after maximum retries\n */\n async execute<T>({\n url,\n method,\n params,\n body,\n headers = {},\n }: CallParams): Promise<T> {\n await this.initAPI();\n\n let response: APIGenericResponse<T> | undefined = undefined;\n\n if (this.customerConfig.OIDC.client.enabled) {\n const token = await this.manageToken();\n\n headers = {\n ...headers,\n Authorization: `Bearer ${token}`,\n };\n\n this.apiClient.defaults.headers.common['Authorization'] = `Bearer ${token}`;\n }\n\n for (let retry = 0; retry < API.MAX_RETRY; retry++) {\n try {\n response = await this.apiClient.request({\n url,\n method,\n data: body,\n params,\n headers,\n });\n\n break;\n } catch (error) {\n this.logger.log({\n level: \"error\",\n message: `API.execute ${retry + 1}º error when request ${url}. Error: ${error}`\n });\n\n if (retry === API.MAX_RETRY - 1) {\n throw error;\n }\n }\n }\n\n if (response) {\n return response.data;\n }\n\n throw new Error(\"API.execute error: Failed to retrieve a valid response\");\n }\n}","export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n\nexport const DEVICE_OPTIONS = {\n MOBILE: \"mobile\",\n TABLET: \"tablet\",\n DESKTOP: \"desktop\",\n}\nexport const BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};","import winston from \"winston\";\nimport { MatomoTransport } from \"./transports/matomo\";\nimport { GraylogTransport } from \"./transports/graylog\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { LOG_LEVELS } from \"@c-rex/constants\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\n\n/**\n * Logger class for the CREX application.\n * Provides logging functionality with multiple transports (Console, Matomo, Graylog).\n */\nexport class CrexLogger {\n private customerConfig!: ConfigInterface;\n public logger!: winston.Logger;\n\n /**\n * Initializes the logger instance if it hasn't been initialized yet.\n * Loads customer configuration and creates the logger with appropriate transports.\n * \n * @private\n */\n private async initLogger() {\n try {\n if (!this.customerConfig) {\n this.customerConfig = await getConfigs();\n }\n if (!this.logger) {\n this.logger = this.createLogger();\n }\n } catch (error) {\n console.error(\"Error initializing logger:\", error);\n }\n }\n\n /**\n * Logs a message with the specified level and optional category.\n * \n * @param options - Logging options\n * @param options.level - The log level (error, warn, info, etc.)\n * @param options.message - The message to log\n * @param options.category - Optional category for the log message\n */\n public async log({ level, message, category }: {\n level: LogLevelType,\n message: string,\n category?: LogCategoriesType\n }) {\n await this.initLogger();\n this.logger.log(level, message, category);\n }\n\n /**\n * Creates a new Winston logger instance with configured transports.\n * \n * @private\n * @returns A configured Winston logger instance\n */\n private createLogger() {\n return winston.createLogger({\n levels: LOG_LEVELS,\n transports: [\n new winston.transports.Console({\n level: this.customerConfig.logs.console.minimumLevel,\n silent: this.customerConfig.logs.console.silent,\n }),\n new MatomoTransport(this.customerConfig),\n new GraylogTransport(this.customerConfig),\n ],\n });\n }\n}","import Transport from \"winston-transport\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Matomo analytics.\n * Extends the base Winston transport with Matomo-specific functionality.\n */\nexport class MatomoTransport extends Transport {\n public matomoTransport: any;\n private configs: ConfigInterface;\n\n /**\n * Creates a new instance of MatomoTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n super({\n level: configs.logs.matomo.minimumLevel,\n silent: configs.logs.matomo.silent,\n });\n\n this.matomoTransport = new Transport();\n this.configs = configs;\n }\n\n /**\n * Logs a message to Matomo if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const matomoCategory = this.configs.logs.matomo.categoriesLevel\n\n if (matomoCategory.includes(info.category) || matomoCategory.includes(ALL)) {\n this.matomoTransport.log(info, callback);\n }\n }\n}\n","import Transport from \"winston-transport\";\nimport Graylog2Transport from \"winston-graylog2\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Graylog.\n * Extends the base Winston transport with Graylog-specific functionality.\n */\nexport class GraylogTransport extends Transport {\n public graylogTransport: any;\n private configs: ConfigInterface\n\n /**\n * Creates a new instance of GraylogTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n super({\n level: configs.logs.graylog.minimumLevel,\n silent: configs.logs.graylog.silent,\n });\n\n this.configs = configs;\n this.graylogTransport = new Graylog2Transport({\n name: \"crex.net.documentation\",\n //name: \"crex.net.blog\",\n silent: false,\n handleExceptions: false,\n graylog: {\n servers: [\n { host: \"localhost\", port: 12201 },\n { host: \"https://log.c-rex.net\", port: 12202 }\n\n //TODO: check the URL => https://log.c-rex.net:12202/gelf\" GELF??\n ],\n },\n });\n }\n\n /**\n * Logs a message to Graylog if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const graylogCategory = this.configs.logs.graylog.categoriesLevel\n\n if (graylogCategory.includes(info.category) || graylogCategory.includes(ALL)) {\n this.graylogTransport.log(info, callback);\n }\n }\n}\n","import { FLAGS_BY_LANG } from \"@c-rex/constants\";\nimport { AvailableVersionsInterface, informationUnitsResponseItem } from \"@c-rex/interfaces\";\n\nexport const _generateShaKey = (input: string): string => {\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n hash = (hash << 5) - hash + input.charCodeAt(i);\n hash |= 0;\n }\n return Math.abs(hash).toString(16);\n}\n\n/**\n * Retrieves the country code associated with a given language code.\n * @param lang - The language code to look up (e.g., \"en-US\")\n * @returns The corresponding country code, or the original language code if not found\n */\nexport const getCountryCodeByLang = (lang: string): string => {\n const mappedKeys = Object.keys(FLAGS_BY_LANG);\n\n if (!mappedKeys.includes(lang)) {\n return lang\n }\n\n type LangKey = keyof typeof FLAGS_BY_LANG;\n const country = FLAGS_BY_LANG[lang as LangKey]\n\n return country\n}\n\nexport const getFromCookieString = (cookieString: string, key: string): string => {\n const cookies = cookieString.split(';')\n\n for (const cookie of cookies) {\n const [cookieKey, cookieValue] = cookie.trim().split('=')\n\n if (cookieKey === key) {\n return cookieValue as string;\n }\n }\n\n return ''\n}\n\nexport const formatDateToLocale = (date: string, locale: string): string => {\n if (typeof date !== 'string' || !date) {\n return date;\n }\n\n const dateAux = new Date(date);\n return new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: 'long',\n year: 'numeric'\n }).format(dateAux);\n}\n\nexport const createAvailableVersionList = (\n versions: informationUnitsResponseItem[],\n articleLang: string,\n type: string\n): AvailableVersionsInterface[] => {\n\n const availableVersions = versions.map(item => {\n return {\n shortId: item.shortId,\n active: item.language === articleLang,\n lang: item.language,\n country: item.language.split(\"-\")[1],\n link: `/${type}/${item.shortId}`,\n }\n }).sort((a, b) => {\n if (a.lang < b.lang) return -1;\n if (a.lang > b.lang) return 1;\n return 0;\n }) as AvailableVersionsInterface[];\n\n return availableVersions;\n}","import { _generateShaKey } from \"./utils\"\n\n/**\n * Makes an asynchronous RPC API call to the server.\n * @param method - The RPC method name to call\n * @param params - Optional parameters to pass to the method\n * @returns A Promise resolving to the response data of type T\n */\nexport const call = async<T = unknown>(method: string, params?: any): Promise<T> => {\n type result = {\n data: string,\n expireDate: Date,\n }\n\n const shaKey = _generateShaKey(JSON.stringify({ method, params }))\n const cache = localStorage.getItem(shaKey)\n\n if (cache !== null) {\n const { data, expireDate } = JSON.parse(cache) as result\n\n if (new Date(expireDate) > new Date()) {\n return JSON.parse(data) as T\n } else {\n localStorage.removeItem(shaKey)\n }\n }\n\n const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/rpc`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ method, params }),\n credentials: 'include',\n });\n\n const json = await res.json();\n\n if (!res.ok) throw new Error(json.error || 'Unknown error');\n\n const today = new Date()\n const result: result = {\n data: JSON.stringify(json.data),\n expireDate: new Date(today.getTime() + 1000 * 60 * 60),\n }\n\n localStorage.setItem(shaKey, JSON.stringify(result))\n\n return json.data;\n}","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges multiple class values into a single string using clsx and tailwind-merge.\n * Useful for conditionally applying Tailwind CSS classes.\n * @param inputs - Any number of class values (strings, objects, arrays, etc.)\n * @returns A merged string of class names optimized for Tailwind CSS\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { QueryParams } from '@c-rex/types';\n\n/**\n * Creates an array of parameter objects from a list of field values.\n * @param fieldsList - Array of field values to transform into parameter objects\n * @param key - The key to use for each parameter object (defaults to \"Fields\")\n * @returns An array of objects with key-value pairs\n */\nexport const createParams = (fieldsList: string[], key: string = \"Fields\") =>\n fieldsList.map((item) => ({\n key: key,\n value: item,\n }));\n\n/**\n * Generates a URL query string from an array of parameter objects.\n * @param params - Array of QueryParams objects containing key-value pairs\n * @returns A URL-encoded query string\n */\nexport const generateQueryParams = (params: QueryParams[]): string => {\n const queryParams = params\n .map(\n (param) =>\n `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`,\n )\n .join(\"&\");\n return queryParams;\n};\n","import { informationUnitsRenditions } from \"@c-rex/interfaces\";\nimport { DocumentsType } from \"@c-rex/types\";\n\n\nexport const getFileRenditions = ({ renditions }: { renditions: informationUnitsRenditions[] }): DocumentsType => {\n if (renditions == undefined || renditions.length == 0) {\n return {};\n }\n\n const filteredRenditions = renditions.filter(\n (item) => item.format != \"application/xhtml+xml\" && item.format != \"application/json\" && item.format != \"application/llm+xml\"\n );\n\n if (filteredRenditions.length == 0 || filteredRenditions[0] == undefined) {\n return {};\n }\n\n const result: {\n [key: string]: {\n view: string;\n download: string;\n }\n } = {}\n\n filteredRenditions.forEach((item) => {\n const key = item.format\n\n if (result[key] == undefined) {\n result[key] = {\n view: \"\",\n download: \"\"\n }\n }\n\n result[key].download = item.links.filter((link) => link.rel == \"download\")[0]?.href\n result[key].view = item.links.filter((link) => link.rel == \"view\")[0]?.href\n })\n\n return result\n}","import { CrexApi } from \"@c-rex/core\";\nimport { QueryParams } from \"@c-rex/types\";\nimport { call, generateQueryParams } from \"@c-rex/utils\";\nimport { Method } from \"axios\";\n\n/**\n * Base service class that provides common functionality for API interactions.\n * All specific service classes extend this base class.\n */\nexport class BaseService {\n protected api: CrexApi;\n private endpoint: string;\n\n /**\n * Creates a new instance of BaseService.\n * \n * @param endpoint - The API endpoint URL for this service\n */\n constructor(endpoint: string) {\n this.api = new CrexApi();\n this.endpoint = endpoint;\n }\n\n /**\n * Makes an API request to the specified endpoint.\n * \n * @param options - Request configuration options\n * @param options.path - Optional path to append to the endpoint\n * @param options.params - Optional query parameters to include in the request\n * @param options.method - HTTP method to use (defaults to 'get')\n * @param options.transformer - Optional function to transform the response data\n * @returns The response data, optionally transformed\n * @throws Error if the API request fails\n */\n protected async request<T>({\n path = \"\",\n method = \"get\",\n params = [],\n headers = {},\n transformer = (response: any) => response,\n }: {\n path?: string,\n method?: Method,\n params?: QueryParams[],\n headers?: any,\n transformer?: (data: any) => T,\n }): Promise<T> {\n try {\n let url = `${this.endpoint}${path}`;\n\n const queryParams = generateQueryParams(params);\n if (queryParams.length > 0) {\n url += `?${queryParams}`;\n }\n\n const response = await this.api.execute({\n url,\n method,\n headers,\n })\n\n return await transformer(response);\n\n } catch (error) {\n call(\"CrexLogger.log\", {\n level: \"error\",\n message: `BaseService.request error when request ${path}. Error: ${error}`\n });\n\n throw error;\n }\n }\n}\n\n","import { BaseService } from \"./baseService\";\nimport { informationUnitsRenditions } from \"@c-rex/interfaces\";\n\n/**\n * Service for interacting with renditions in the API.\n * Provides methods to retrieve and process different types of renditions.\n */\nexport class RenditionsService extends BaseService {\n constructor() {\n super(\"Renditions/\");\n }\n\n /**\n * Retrieves the HTML rendition from a list of renditions.\n * Filters for renditions with format 'application/xhtml+xml' and rel 'view'.\n * \n * @param renditions - Array of rendition objects to process\n * @returns A promise that resolves to the HTML content as a string, or empty string if no suitable rendition is found\n * @throws Error if the API request fails\n */\n public async getHTMLRendition({ renditions }: { renditions: informationUnitsRenditions[] }): Promise<string> {\n const filteredRenditions = renditions.filter(\n (item) => item.format == \"application/xhtml+xml\",\n );\n\n if (filteredRenditions.length == 0 || filteredRenditions[0] == undefined) return \"\";\n const item = filteredRenditions[0];\n const filteredLinks = item.links.filter((item) => item.rel == \"view\");\n\n if (filteredLinks.length == 0 || filteredLinks[0] == undefined) return \"\";\n const url = filteredLinks[0].href;\n const response = await this.api.execute({\n url,\n method: \"get\",\n headers: {\n Accept: \"application/xhtml+xml\",\n },\n })\n\n return response as string;\n }\n}","import { BaseService } from \"./baseService\";\nimport { createParams } from \"@c-rex/utils\";\nimport { DirectoryNodes, DirectoryNodesResponse } from \"@c-rex/interfaces\";\n\n/**\n * Service for interacting with directory nodes in the API.\n * Provides methods to retrieve directory node information.\n */\nexport class DirectoryNodesService extends BaseService {\n constructor() {\n super(\"DirectoryNodes/\");\n }\n\n /**\n * Retrieves a specific directory node by its ID.\n * \n * @param id - The unique identifier of the directory node\n * @returns A promise that resolves to the directory node data\n * @throws Error if the API request fails\n */\n public async getItem(id: string): Promise<DirectoryNodes> {\n return await this.request({\n path: id,\n });\n }\n\n /**\n * Retrieves a list of directory nodes based on specified filters.\n * \n * @param options - Options for filtering the directory nodes list\n * @param options.filters - Optional array of filter strings to apply\n * @returns A promise that resolves to the directory nodes response\n * @throws Error if the API request fails\n */\n public async getList({\n filters = [],\n }: {\n filters?: string[],\n }): Promise<DirectoryNodesResponse> {\n\n const remainFilters = createParams(filters, \"Filter\");\n\n return await this.request({\n params: {\n ...remainFilters,\n },\n });\n }\n}\n","import { CONTENT_LANG_KEY } from \"@c-rex/constants\";\nimport { DefaultRequest } from \"@c-rex/interfaces\";\nimport { DocumentTypesItem } from \"@c-rex/interfaces\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\nimport { cookies } from \"next/headers\";\n\nexport const transformDocumentTypes = (data: DefaultRequest<DocumentTypesItem>) => {\n const labels: { shortId: string, label: string }[] = [];\n const config = getConfigs();\n const contentLanguage = cookies().get(CONTENT_LANG_KEY)?.value || config.languageSwitcher.default;\n const language = contentLanguage.split(\"-\")[0];\n\n data.items.forEach((documentItem) => {\n const label = documentItem.labels.find((item) => item.language.toLowerCase() === language.toLowerCase());\n\n labels.push({\n shortId: documentItem.shortId,\n label: label ? label.value : \"\"\n })\n });\n\n return labels;\n};\n","import { transformDocumentTypes } from \"./transforms/documentTypes\";\nimport { BaseService } from \"./baseService\";\n\n/**\n * Service for interacting with document types in the API.\n * Provides methods to retrieve document type information.\n */\nexport class DocumentTypesService extends BaseService {\n constructor() {\n super(\"DocumentTypes/\");\n }\n\n /**\n * Retrieves document type labels for the specified fields.\n * \n * @returns A promise that resolves to an array of label strings\n * @throws Error if the API request fails\n */\n public async getLabels(): Promise<{ shortId: string, label: string }[]> {\n return await this.request({\n params: [{\n key: \"sparqlWhere\",\n value: \"?iu iirds:is-applicable-for-document-type ?s . ?iu iirds:has-topic-type <https://www.c-rex.net/iirds/td#Blogpost>\"\n }],\n transformer: transformDocumentTypes,\n });\n }\n}\n","import { CONTENT_LANG_KEY, EN_LANG, RESULT_TYPES } from \"@c-rex/constants\";\nimport {\n DefaultRequest,\n informationUnitsResponse,\n informationUnitsItems,\n} from \"@c-rex/interfaces\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\nimport { cookies } from 'next/headers';\nimport { getFileRenditions } from \"@c-rex/utils\";\nimport { CrexLogger } from '@c-rex/core/logger';\nimport { AutocompleteSuggestion } from \"@c-rex/interfaces\";\n\nexport const transformInformationUnits = async (data: DefaultRequest<informationUnitsItems>): Promise<informationUnitsResponse> => {\n const logger = new CrexLogger()\n const config = await getConfigs();\n const filteredTags: any = {}\n\n const items = data.items.map((item) => {\n const type = item.class.labels.filter((item) => item.language === EN_LANG)[0].value.toUpperCase();\n const files = getFileRenditions({ renditions: item?.renditions });\n\n let link = `/topics/${item.shortId}`;\n\n if (config.results.articlePageLayout == \"BLOG\") {\n link = `/blog/${item.shortId}`\n } else if (type == RESULT_TYPES.DOCUMENT) {\n link = `/documents/${item.shortId}`;\n }\n\n let title = \"NO TITLE\"\n let language = \"NO LANGUAGE\"\n\n try {\n if (item.titles) {\n title = item.titles[0].value\n language = item.titles[0].language\n } else {\n title = item.labels[0].value\n language = item.labels[0].language\n }\n } catch {\n logger.log({\n level: \"error\",\n message: `No label or title on item ${item.shortId}`\n })\n }\n\n return {\n language: language,\n title: title,\n type: type,\n localeType: \"\",\n shortId: item.shortId,\n disabled: config.results.disabledResults.includes(type as any),\n link: link,\n files\n }\n });\n\n if (data.tags) {\n const contentLang = (cookies().get(CONTENT_LANG_KEY)?.value || EN_LANG).toLowerCase()\n const splittedContentLang = contentLang.split(\"-\")[0];\n\n for (const [key, value] of Object.entries(data.tags)) {\n\n if (!value || !value.items || value.items.length === 0) {\n continue;\n }\n if (!config.search.tags.includes(key)) {\n continue;\n }\n\n const aux = value.items.map(item => {\n if (item?.shortId === undefined) return null\n if (Number(item.hits) === 0) return null\n if (item?.labels === undefined || item?.labels.length === 0) {\n logger.log({\n level: \"warning\",\n message: `No labels on item with id ${item.shortId} from category ${key}`\n })\n return null;\n }\n\n let label = \"\"\n\n for (const labelItem of item.labels) {\n if (labelItem.language === undefined) {\n logger.log({\n level: \"info\",\n message: `No language on label ${labelItem.value} from category ${key}`\n })\n label = labelItem.value\n break;\n }\n\n if (labelItem.language.toLowerCase() === contentLang || labelItem.language.toLowerCase() === splittedContentLang) {\n label = labelItem.value\n break;\n }\n\n label = labelItem.value\n\n //TODO: fallback in english\n }\n\n return {\n hits: item.hits,\n total: item.total,\n label: label,\n active: false,\n shortId: item.shortId,\n }\n }).filter((item) => item !== null)\n\n if (aux.length === 0) {\n continue;\n }\n\n filteredTags[key] = aux;\n }\n }\n\n return {\n tags: filteredTags,\n items: items,\n pageInfo: data.pageInfo,\n };\n};\n\nexport const transformSuggestions = (data: AutocompleteSuggestion, query: string) => {\n const suggestions: string[] = []\n const comparableList: string[] = []\n\n data.suggestions.forEach((item) => {\n suggestions.push(item.value);\n comparableList.push(item.value.toLowerCase())\n })\n\n if (!comparableList.includes(query.toLowerCase())) {\n return [query, ...suggestions];\n }\n\n return suggestions\n}","import {\n AutocompleteSuggestion,\n informationUnitsResponse,\n informationUnitsItems,\n} from \"@c-rex/interfaces\";\nimport { transformInformationUnits, transformSuggestions } from \"./transforms/information\";\nimport { createParams } from \"@c-rex/utils\";\nimport { BaseService } from \"./baseService\";\nimport { WildCardType } from \"@c-rex/types\";\nimport { OPERATOR_OPTIONS, WILD_CARD_OPTIONS } from \"@c-rex/constants\";\n\n/**\n * Service for interacting with information units in the API.\n * Provides methods to retrieve and search information units.\n */\nexport class InformationUnitsService extends BaseService {\n constructor() {\n super(\"InformationUnits/\");\n }\n\n /**\n * Retrieves a list of information units based on specified criteria.\n * \n * @param options - Options for filtering and paginating the information units list\n * @param options.queries - Optional search query string\n * @param options.page - Optional page number for pagination (defaults to 1)\n * @param options.fields - Optional array of fields to include in the response\n * @param options.filters - Optional array of filter strings to apply\n * @param options.languages - Optional array of language codes to filter by\n * @returns A promise that resolves to the information units response\n * @throws Error if the API request fails\n */\n public async getList({\n queries = \"\",\n page = 1,\n fields = [],\n filters = [],\n tags = [],\n restrict = [],\n languages = [],\n wildcard = WILD_CARD_OPTIONS.BOTH,\n operator = OPERATOR_OPTIONS.AND,\n like = false,\n }: {\n queries?: string,\n page?: number,\n filters?: string[],\n restrict?: string[],\n fields?: string[],\n tags?: string[],\n languages?: string[],\n wildcard?: WildCardType,\n operator?: string,\n like?: boolean,\n }): Promise<informationUnitsResponse> {\n const remainFields = createParams(fields, \"Fields\");\n const remainFilters = createParams(filters, \"Filter\");\n const restrictions = createParams(restrict, \"Restrict\");\n const remainTags = createParams(tags, \"Tags\");\n const languageParam = `VALUES ?lang { ${languages.map(lang => `\"${lang}\"`).join(\" \")} } ?s iirds:language ?lang .`\n\n const params = [\n { key: \"pageSize\", value: \"12\" },\n { key: \"wildcard\", value: wildcard.toLowerCase() },\n { key: \"PageNumber\", value: page.toString() },\n { key: \"Operator\", value: operator },\n ...remainTags,\n { key: \"Like\", value: like.toString() },\n ...remainFields,\n ...remainFilters,\n ...restrictions\n ];\n if (languages.length > 0) {\n params.push({ key: \"sparqlWhere\", value: languageParam });\n }\n if (queries.length > 0) {\n params.push(\n { key: \"Query\", value: queries },\n );\n }\n\n return await this.request({\n params: params,\n transformer: transformInformationUnits\n });\n }\n\n /**\n * Retrieves a specific information unit by its ID.\n * Includes renditions, directory nodes, version information, titles, languages, and labels.\n * \n * @param options - Options for retrieving the information unit\n * @param options.id - The unique identifier of the information unit\n * @returns A promise that resolves to the information unit data\n * @throws Error if the API request fails\n */\n public async getItem({ id, shouldGetAllFields = false }: { id: string, shouldGetAllFields?: boolean }): Promise<informationUnitsItems> {\n const params = []\n\n if (!shouldGetAllFields) {\n params.push(\n { key: \"Fields\", value: \"renditions\" },\n { key: \"Fields\", value: \"directoryNodes\" },\n { key: \"Fields\", value: \"versionOf\" },\n { key: \"Fields\", value: \"titles\" },\n { key: \"Fields\", value: \"languages\" },\n { key: \"Fields\", value: \"labels\" },\n { key: \"Fields\", value: \"packages\" },\n { key: \"Fields\", value: \"created\" },\n { key: \"Fields\", value: \"revision\" },\n );\n }\n\n return await this.request({\n path: id,\n params,\n });\n }\n\n /**\n * Retrieves autocomplete suggestions based on a query prefix.\n * \n * @param options - Options for retrieving suggestions\n * @param options.query - The query prefix to get suggestions for\n * @param options.language - The language of the suggestions\n * @returns A promise that resolves to an array of suggestion strings\n * @throws Error if the API request fails\n */\n public async getSuggestions(\n { query, language }: { query: string, language: string }\n ): Promise<string[]> {\n\n return await this.request({\n path: 'Suggestions',\n params: [\n { key: \"prefix\", value: query },\n { key: \"lang\", value: language },\n ],\n transformer: (data: AutocompleteSuggestion) => transformSuggestions(data, query)\n });\n }\n}\n","import { LanguageAndCountries } from \"@c-rex/interfaces\";\nimport { BaseService } from \"./baseService\";\nimport { getCountryCodeByLang } from \"@c-rex/utils\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\n\n/**\n * Service for interacting with language-related functionality in the API.\n * Provides methods to retrieve language and country information.\n */\nexport class LanguageService extends BaseService {\n constructor() {\n const configs = getConfigs()\n super(configs.languageSwitcher.endpoint);\n }\n\n /**\n * Retrieves a list of available languages and their associated countries.\n * Transforms the API response to include language code, country code, and original value.\n * \n * @returns A promise that resolves to an array of language and country objects\n * @throws Error if the API request fails\n */\n public async getLanguagesAndCountries(): Promise<LanguageAndCountries[]> {\n return await this.request({\n transformer: (data: { value: string; score: number }[]) => {\n const countryCodeList = data.map((item) => {\n /*\n api -> en, en-US\n default -> en-US. Then use EN-US \n\n api -> en\n default -> en-US. Then use EN\n */\n //should be abble to handle this items: en-US, en, pt, pt-PT, pt-BR \n\n const splittedValue = item.value.split(\"-\")\n const lang = splittedValue[0]\n let country = splittedValue[0]\n\n if (splittedValue.length > 1) {\n country = splittedValue[1]\n } else {\n country = getCountryCodeByLang(lang)\n }\n\n return {\n country: country,\n lang: lang,\n value: item.value,\n }\n })\n\n return countryCodeList.sort((a, b) => {\n return a.value.localeCompare(b.value)\n })\n },\n });\n }\n}\n","import { EN_LANG, RESULT_TYPES, UI_LANG_KEY } from \"@c-rex/constants\";\nimport { DefaultRequest, TopicsRequestItem, DefaultResponse, TopicsResponseItem } from \"@c-rex/interfaces\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\nimport { cookies } from 'next/headers';\nimport { CrexLogger } from '@c-rex/core/logger';\nimport { formatDateToLocale } from \"@c-rex/utils\";\n\nexport const transformTopics = async (data: DefaultRequest<TopicsRequestItem>): Promise<DefaultResponse<TopicsResponseItem, null>> => {\n const logger = new CrexLogger()\n const config = getConfigs();\n const uiLang = (cookies().get(UI_LANG_KEY)?.value || config.languageSwitcher.default).toLowerCase()\n\n const items = data.items.map(item => {\n const type = item.class.labels.filter((item) => item.language === EN_LANG)[0].value.toUpperCase();\n\n let link = `/topics/${item.shortId}`;\n\n if (config.results.articlePageLayout == \"BLOG\") {\n link = `/blog/${item.shortId}`\n } else if (type == RESULT_TYPES.DOCUMENT) {\n link = `/documents/${item.shortId}`;\n }\n\n let title = \"NO TITLE\"\n let language = \"NO LANGUAGE\"\n\n try {\n if (item.titles) {\n title = item.titles[0].value\n language = item.titles[0].language\n } else {\n title = item.labels[0].value\n language = item.labels[0].language\n }\n } catch {\n logger.log({\n level: \"error\",\n message: `No label or title on item ${item.shortId}`\n })\n }\n\n let renditionUrl = \"\"\n const renditions = item.renditions.filter(item => item.format == \"application/xhtml+xml\");\n if (renditions.length > 0 || renditions[0] !== undefined) {\n const filteredLinks = renditions[0].links.filter((renditionItem) => renditionItem.rel == \"view\");\n if (filteredLinks.length > 0 || filteredLinks[0] !== undefined) {\n renditionUrl = filteredLinks[0].href;\n };\n };\n\n let categoryType = type\n if (item.applicableForTypes && item.applicableForTypes.length > 0) {\n const splittedContentLang = uiLang.split(\"-\")[0];\n categoryType = item.applicableForTypes[0].labels.find(item => item.language === splittedContentLang)?.value || categoryType;\n }\n\n return {\n language: language,\n title: title,\n type: categoryType,\n localeType: \"\",\n shortId: item.shortId,\n created: formatDateToLocale(item.created, uiLang),\n disabled: config.results.disabledResults.includes(type as any),\n link: link,\n renditionUrl: renditionUrl,\n image: null,\n description: null,\n }\n })\n\n return {\n tags: null,\n items: items,\n pageInfo: data.pageInfo,\n };\n};\n","import { transformTopics } from \"./transforms/topics\";\nimport { createParams } from \"@c-rex/utils\";\nimport { BaseService } from \"./baseService\";\nimport { WildCardType } from \"@c-rex/types\";\nimport { OPERATOR_OPTIONS, WILD_CARD_OPTIONS } from \"@c-rex/constants\";\nimport { DefaultResponse, TopicsResponseItem } from \"@c-rex/interfaces\";\n\ntype getListProps = {\n queries?: string,\n page?: number,\n filters?: string[],\n fields?: string[],\n languages?: string[],\n wildcard?: WildCardType,\n operator?: string,\n like?: boolean,\n pageSize?: number\n}\n\n\n/**\n * Service for interacting with information units in the API.\n * Provides methods to retrieve and search information units.\n */\nexport class TopicsService extends BaseService {\n constructor() {\n super(\"Topics/\");\n }\n\n /**\n * Retrieves a list of topics based on specified criteria.\n * \n * @param options - Options for filtering and paginating the topics list\n * @param options.queries - Optional search query string\n * @param options.page - Optional page number for pagination (defaults to 1)\n * @param options.fields - Optional array of fields to include in the response\n * @param options.filters - Optional array of filter strings to apply\n * @param options.languages - Optional array of language codes to filter by\n * @returns A promise that resolves to the information units response\n * @throws Error if the API request fails\n */\n public async getList({\n queries = \"\",\n page = 1,\n fields = [],\n filters = [],\n languages = [],\n wildcard = WILD_CARD_OPTIONS.BOTH,\n operator = OPERATOR_OPTIONS.AND,\n pageSize = 12\n }: getListProps): Promise<DefaultResponse<TopicsResponseItem, null>> {\n const remainFields = createParams(fields, \"Fields\");\n const remainFilters = createParams(filters, \"Filter\");\n const languageParam = `VALUES ?lang { ${languages.map(lang => `\"${lang}\"`).join(\" \")} } ?s iirds:language ?lang .`\n\n const params = [\n { key: \"pageSize\", value: pageSize.toString() },\n { key: \"PageNumber\", value: page.toString() },\n { key: \"Sort\", value: \"-created;-score\" },\n ...remainFields,\n ...remainFilters,\n ];\n\n if (wildcard.length > 0) {\n params.push({ key: \"Operator\", value: operator });\n }\n if (wildcard.length > 0) {\n params.push({ key: \"wildcard\", value: wildcard.toLowerCase() });\n }\n if (languages.length > 0) {\n params.push({ key: \"sparqlWhere\", value: languageParam });\n }\n if (queries.length > 0) {\n params.push(\n { key: \"Query\", value: queries },\n );\n }\n\n return await this.request({\n params: params,\n transformer: transformTopics\n });\n }\n}\n"],"mappings":"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","names":["Transport","import_winston_transport","Transport","Graylog2Transport","winston","axios","item","import_next_cookies","import_headers","import_next_cookies","import_headers","import_logger","item","import_next_cookies","import_next_cookies","import_headers","import_logger","item"]}
1
+ {"version":3,"sources":["../src/index.ts","../../core/src/requests.ts","../../constants/src/index.ts","../../core/src/logger.ts","../../core/src/transports/matomo.ts","../../core/src/transports/graylog.ts","../../utils/src/utils.ts","../../utils/src/classMerge.ts","../../utils/src/params.ts","../../utils/src/renditions.ts","../src/baseService.ts","../src/renditions.ts","../src/directoryNodes.ts","../src/transforms/documentTypes.ts","../src/documentTypes.ts","../src/transforms/information.ts","../src/informationUnits.ts","../src/language.ts","../src/transforms/topics.ts","../src/topics.ts"],"sourcesContent":["export * from \"./renditions\"\nexport * from \"./directoryNodes\"\nexport * from \"./documentTypes\"\nexport * from \"./informationUnits\"\nexport * from \"./language\"\nexport * from \"./topics\"","import axios, { AxiosResponse, Method, AxiosInstance } from \"axios\";\nimport { API, CREX_TOKEN_HEADER_KEY, SDK_CONFIG_KEY } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\nimport { cookies } from \"next/headers\";\nimport { CrexLogger } from \"./logger\";\n\n/**\n * Interface for API response with generic data type.\n */\ninterface APIGenericResponse<T> extends AxiosResponse {\n data: T;\n statusCode: number;\n}\n\n/**\n * Interface for API call parameters.\n */\ninterface CallParams {\n url: string;\n method: Method;\n body?: any;\n headers?: any;\n params?: any;\n}\n\n/**\n * API client class for the CREX application.\n * Handles API requests with caching, authentication, and retry logic.\n */\nexport class CrexApi {\n private customerConfig!: ConfigInterface;\n private apiClient!: AxiosInstance;\n private logger!: CrexLogger;\n\n /**\n * Initializes the API client if it hasn't been initialized yet.\n * Loads customer configuration, creates the axios instance, and initializes the logger.\n * \n * @private\n */\n private async initAPI() {\n this.logger = new CrexLogger();\n\n if (!this.customerConfig) {\n const aux = cookies().get(SDK_CONFIG_KEY);\n if (aux != undefined) {\n this.customerConfig = JSON.parse(aux.value);\n } else {\n this.logger.log({\n level: \"error\",\n message: `utils.initAPI error: Config cookie not available`\n });\n\n throw new Error(\"Config cookie not available\");\n }\n }\n\n if (!this.apiClient) {\n this.apiClient = axios.create({\n baseURL: this.customerConfig.baseUrl,\n })\n }\n }\n\n private async getToken() {\n for (let retry = 0; retry < API.MAX_RETRY; retry++) {\n try {\n const response = await fetch(`${this.customerConfig.publicNextApiUrl}/api/token`, {\n method: 'POST',\n credentials: 'include',\n });\n\n const { token } = await response.json();\n\n return token;\n } catch (error) {\n this.logger.log({\n level: \"error\",\n message: `utils.getToken ${retry + 1}º error when request token. Error: ${error}`\n });\n\n await new Promise(resolve => setTimeout(resolve, API.RETRY_DELAY));\n\n if (retry === API.MAX_RETRY) {\n throw error;\n }\n }\n }\n }\n\n private async manageToken() {\n try {\n let token = \"\";\n const hasToken = cookies().get(CREX_TOKEN_HEADER_KEY);\n\n if (hasToken == undefined || hasToken.value === null) {\n const tokenResult = await this.getToken();\n\n if (tokenResult === null) throw new Error(\"Token is undefined\");\n\n token = tokenResult;\n } else {\n token = hasToken.value;\n }\n\n return token;\n } catch (error) {\n this.logger.log({\n level: \"error\",\n message: `CrexAPI.manageToken error: ${error}`\n });\n\n throw error\n }\n }\n\n /**\n * Executes an API request with caching, authentication, and retry logic.\n * \n * @param options - Request options\n * @param options.url - The URL to request\n * @param options.method - The HTTP method to use\n * @param options.params - Optional query parameters\n * @param options.body - Optional request body\n * @param options.headers - Optional request headers\n * @returns The response data\n * @throws Error if the request fails after maximum retries\n */\n async execute<T>({\n url,\n method,\n params,\n body,\n headers = {},\n }: CallParams): Promise<T> {\n await this.initAPI();\n\n let response: APIGenericResponse<T> | undefined = undefined;\n\n if (this.customerConfig.OIDC.client.enabled) {\n const token = await this.manageToken();\n\n headers = {\n ...headers,\n Authorization: `Bearer ${token}`,\n };\n\n this.apiClient.defaults.headers.common['Authorization'] = `Bearer ${token}`;\n }\n\n for (let retry = 0; retry < API.MAX_RETRY; retry++) {\n try {\n response = await this.apiClient.request({\n url,\n method,\n data: body,\n params,\n headers,\n });\n\n break;\n } catch (error) {\n this.logger.log({\n level: \"error\",\n message: `API.execute ${retry + 1}º error when request ${url}. Error: ${error}`\n });\n\n if (retry === API.MAX_RETRY - 1) {\n throw error;\n }\n }\n }\n\n if (response) {\n return response.data;\n }\n\n throw new Error(\"API.execute error: Failed to retrieve a valid response\");\n }\n}","export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n RETRY_DELAY: 500,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 30 * 24 * 60 * 60 * 1000; // 30 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n\nexport const DEVICE_OPTIONS = {\n MOBILE: \"mobile\",\n TABLET: \"tablet\",\n DESKTOP: \"desktop\",\n}\nexport const BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};","import winston from \"winston\";\nimport { MatomoTransport } from \"./transports/matomo\";\nimport { GraylogTransport } from \"./transports/graylog\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { LOG_LEVELS } from \"@c-rex/constants\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\n\n/**\n * Logger class for the CREX application.\n * Provides logging functionality with multiple transports (Console, Matomo, Graylog).\n */\nexport class CrexLogger {\n private customerConfig!: ConfigInterface;\n public logger!: winston.Logger;\n\n /**\n * Initializes the logger instance if it hasn't been initialized yet.\n * Loads customer configuration and creates the logger with appropriate transports.\n * \n * @private\n */\n private async initLogger() {\n try {\n if (!this.customerConfig) {\n this.customerConfig = await getConfigs();\n }\n if (!this.logger) {\n this.logger = this.createLogger();\n }\n } catch (error) {\n console.error(\"Error initializing logger:\", error);\n }\n }\n\n /**\n * Logs a message with the specified level and optional category.\n * \n * @param options - Logging options\n * @param options.level - The log level (error, warn, info, etc.)\n * @param options.message - The message to log\n * @param options.category - Optional category for the log message\n */\n public async log({ level, message, category }: {\n level: LogLevelType,\n message: string,\n category?: LogCategoriesType\n }) {\n await this.initLogger();\n this.logger.log(level, message, category);\n }\n\n /**\n * Creates a new Winston logger instance with configured transports.\n * \n * @private\n * @returns A configured Winston logger instance\n */\n private createLogger() {\n return winston.createLogger({\n levels: LOG_LEVELS,\n transports: [\n new winston.transports.Console({\n level: this.customerConfig.logs.console.minimumLevel,\n silent: this.customerConfig.logs.console.silent,\n }),\n new MatomoTransport(this.customerConfig),\n new GraylogTransport(this.customerConfig),\n ],\n });\n }\n}","import Transport from \"winston-transport\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Matomo analytics.\n * Extends the base Winston transport with Matomo-specific functionality.\n */\nexport class MatomoTransport extends Transport {\n public matomoTransport: any;\n private configs: ConfigInterface;\n\n /**\n * Creates a new instance of MatomoTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n super({\n level: configs.logs.matomo.minimumLevel,\n silent: configs.logs.matomo.silent,\n });\n\n this.matomoTransport = new Transport();\n this.configs = configs;\n }\n\n /**\n * Logs a message to Matomo if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const matomoCategory = this.configs.logs.matomo.categoriesLevel\n\n if (matomoCategory.includes(info.category) || matomoCategory.includes(ALL)) {\n this.matomoTransport.log(info, callback);\n }\n }\n}\n","import Transport from \"winston-transport\";\nimport Graylog2Transport from \"winston-graylog2\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Graylog.\n * Extends the base Winston transport with Graylog-specific functionality.\n */\nexport class GraylogTransport extends Transport {\n public graylogTransport: any;\n private configs: ConfigInterface\n\n /**\n * Creates a new instance of GraylogTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n if (!configs.logs.graylog.hostname || configs.logs.graylog.port === undefined) {\n throw new Error(\"Graylog hostname and port must be defined\");\n }\n\n super({\n level: configs.logs.graylog.minimumLevel,\n silent: configs.logs.graylog.silent,\n });\n\n this.configs = configs;\n this.graylogTransport = new Graylog2Transport({\n name: configs.logs.graylog.app,\n silent: configs.logs.graylog.silent,\n handleExceptions: false,\n graylog: {\n servers: [\n { host: \"localhost\", port: 12201 },\n { host: configs.logs.graylog.hostname, port: configs.logs.graylog.port }\n ],\n },\n });\n }\n\n /**\n * Logs a message to Graylog if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const graylogCategory = this.configs.logs.graylog.categoriesLevel\n\n if (graylogCategory.includes(info.category) || graylogCategory.includes(ALL)) {\n this.graylogTransport.log(info, callback);\n }\n }\n}\n","import { FLAGS_BY_LANG } from \"@c-rex/constants\";\nimport { AvailableVersionsInterface, informationUnitsResponseItem } from \"@c-rex/interfaces\";\n\nexport const _generateShaKey = (input: string): string => {\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n hash = (hash << 5) - hash + input.charCodeAt(i);\n hash |= 0;\n }\n return Math.abs(hash).toString(16);\n}\n\n/**\n * Retrieves the country code associated with a given language code.\n * @param lang - The language code to look up (e.g., \"en-US\")\n * @returns The corresponding country code, or the original language code if not found\n */\nexport const getCountryCodeByLang = (lang: string): string => {\n const mappedKeys = Object.keys(FLAGS_BY_LANG);\n\n if (!mappedKeys.includes(lang)) {\n return lang\n }\n\n type LangKey = keyof typeof FLAGS_BY_LANG;\n const country = FLAGS_BY_LANG[lang as LangKey]\n\n return country\n}\n\nexport const formatDateToLocale = (date: string, locale: string): string => {\n if (typeof date !== 'string' || !date) {\n return date;\n }\n\n const dateAux = new Date(date);\n return new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: 'long',\n year: 'numeric'\n }).format(dateAux);\n}\n\nexport const createAvailableVersionList = (\n versions: informationUnitsResponseItem[],\n articleLang: string,\n type: string\n): AvailableVersionsInterface[] => {\n\n const availableVersions = versions.map(item => {\n return {\n shortId: item.shortId,\n active: item.language === articleLang,\n lang: item.language,\n country: item.language.split(\"-\")[1],\n link: `/${type}/${item.shortId}`,\n }\n }).sort((a, b) => {\n if (a.lang < b.lang) return -1;\n if (a.lang > b.lang) return 1;\n return 0;\n }) as AvailableVersionsInterface[];\n\n return availableVersions;\n}","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges multiple class values into a single string using clsx and tailwind-merge.\n * Useful for conditionally applying Tailwind CSS classes.\n * @param inputs - Any number of class values (strings, objects, arrays, etc.)\n * @returns A merged string of class names optimized for Tailwind CSS\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { QueryParams } from '@c-rex/types';\n\n/**\n * Creates an array of parameter objects from a list of field values.\n * @param fieldsList - Array of field values to transform into parameter objects\n * @param key - The key to use for each parameter object (defaults to \"Fields\")\n * @returns An array of objects with key-value pairs\n */\nexport const createParams = (fieldsList: string[], key: string = \"Fields\") =>\n fieldsList.map((item) => ({\n key: key,\n value: item,\n }));\n\n/**\n * Generates a URL query string from an array of parameter objects.\n * @param params - Array of QueryParams objects containing key-value pairs\n * @returns A URL-encoded query string\n */\nexport const generateQueryParams = (params: QueryParams[]): string => {\n const queryParams = params\n .map((param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`)\n .join(\"&\");\n return queryParams;\n};\n","import { informationUnitsRenditions } from \"@c-rex/interfaces\";\nimport { DocumentsType } from \"@c-rex/types\";\n\n\nexport const getFileRenditions = ({ renditions }: { renditions: informationUnitsRenditions[] }): DocumentsType => {\n if (renditions == undefined || renditions.length == 0) {\n return {};\n }\n\n const filteredRenditions = renditions.filter(\n (item) => item.format != \"application/xhtml+xml\" && item.format != \"application/json\" && item.format != \"application/llm+xml\"\n );\n\n if (filteredRenditions.length == 0 || filteredRenditions[0] == undefined) {\n return {};\n }\n\n const result: {\n [key: string]: {\n view: string;\n download: string;\n }\n } = {}\n\n filteredRenditions.forEach((item) => {\n const key = item.format\n\n if (result[key] == undefined) {\n result[key] = {\n view: \"\",\n download: \"\"\n }\n }\n\n result[key].download = item.links.filter((link) => link.rel == \"download\")[0]?.href\n result[key].view = item.links.filter((link) => link.rel == \"view\")[0]?.href\n })\n\n return result\n}","import { CrexApi } from \"@c-rex/core\";\nimport { QueryParams } from \"@c-rex/types\";\nimport { generateQueryParams } from \"@c-rex/utils\";\nimport { Method } from \"axios\";\n\n/**\n * Base service class that provides common functionality for API interactions.\n * All specific service classes extend this base class.\n */\nexport class BaseService {\n protected api: CrexApi;\n private endpoint: string;\n\n /**\n * Creates a new instance of BaseService.\n * \n * @param endpoint - The API endpoint URL for this service\n */\n constructor(endpoint: string) {\n this.api = new CrexApi();\n this.endpoint = endpoint;\n }\n\n /**\n * Makes an API request to the specified endpoint.\n * \n * @param options - Request configuration options\n * @param options.path - Optional path to append to the endpoint\n * @param options.params - Optional query parameters to include in the request\n * @param options.method - HTTP method to use (defaults to 'get')\n * @param options.transformer - Optional function to transform the response data\n * @returns The response data, optionally transformed\n * @throws Error if the API request fails\n */\n protected async request<T>({\n path = \"\",\n method = \"get\",\n params = [],\n headers = {},\n transformer = (response: any) => response,\n }: {\n path?: string,\n method?: Method,\n params?: QueryParams[],\n headers?: any,\n transformer?: (data: any) => T,\n }): Promise<T> {\n\n let url = `${this.endpoint}${path}`;\n\n const queryParams = generateQueryParams(params);\n if (queryParams.length > 0) {\n url += `?${queryParams}`;\n }\n\n const response = await this.api.execute({\n url,\n method,\n headers,\n })\n\n return await transformer(response);\n }\n}\n\n","import { BaseService } from \"./baseService\";\nimport { informationUnitsRenditions } from \"@c-rex/interfaces\";\n\n/**\n * Service for interacting with renditions in the API.\n * Provides methods to retrieve and process different types of renditions.\n */\nexport class RenditionsService extends BaseService {\n constructor() {\n super(\"Renditions/\");\n }\n\n /**\n * Retrieves the HTML rendition from a list of renditions.\n * Filters for renditions with format 'application/xhtml+xml' and rel 'view'.\n * \n * @param renditions - Array of rendition objects to process\n * @returns A promise that resolves to the HTML content as a string, or empty string if no suitable rendition is found\n * @throws Error if the API request fails\n */\n public async getHTMLRendition({ renditions }: { renditions: informationUnitsRenditions[] }): Promise<string> {\n const filteredRenditions = renditions.filter(\n (item) => item.format == \"application/xhtml+xml\",\n );\n\n if (filteredRenditions.length == 0 || filteredRenditions[0] == undefined) return \"\";\n const item = filteredRenditions[0];\n const filteredLinks = item.links.filter((item) => item.rel == \"view\");\n\n if (filteredLinks.length == 0 || filteredLinks[0] == undefined) return \"\";\n const url = filteredLinks[0].href;\n const response = await this.api.execute({\n url,\n method: \"get\",\n headers: {\n Accept: \"application/xhtml+xml\",\n },\n })\n\n return response as string;\n }\n}","import { BaseService } from \"./baseService\";\nimport { createParams } from \"@c-rex/utils\";\nimport { DirectoryNodes, DirectoryNodesResponse } from \"@c-rex/interfaces\";\n\n/**\n * Service for interacting with directory nodes in the API.\n * Provides methods to retrieve directory node information.\n */\nexport class DirectoryNodesService extends BaseService {\n constructor() {\n super(\"DirectoryNodes/\");\n }\n\n /**\n * Retrieves a specific directory node by its ID.\n * \n * @param id - The unique identifier of the directory node\n * @returns A promise that resolves to the directory node data\n * @throws Error if the API request fails\n */\n public async getItem(id: string): Promise<DirectoryNodes> {\n return await this.request({\n path: id,\n });\n }\n\n /**\n * Retrieves a list of directory nodes based on specified filters.\n * \n * @param options - Options for filtering the directory nodes list\n * @param options.filters - Optional array of filter strings to apply\n * @returns A promise that resolves to the directory nodes response\n * @throws Error if the API request fails\n */\n public async getList({\n filters = [],\n }: {\n filters?: string[],\n }): Promise<DirectoryNodesResponse> {\n\n const remainFilters = createParams(filters, \"Filter\");\n\n return await this.request({\n params: {\n ...remainFilters,\n },\n });\n }\n}\n","import { CONTENT_LANG_KEY } from \"@c-rex/constants\";\nimport { DefaultRequest } from \"@c-rex/interfaces\";\nimport { DocumentTypesItem } from \"@c-rex/interfaces\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\nimport { cookies } from \"next/headers\";\n\nexport const transformDocumentTypes = (data: DefaultRequest<DocumentTypesItem>) => {\n const labels: { shortId: string, label: string }[] = [];\n const config = getConfigs();\n const contentLanguage = cookies().get(CONTENT_LANG_KEY)?.value || config.languageSwitcher.default;\n const language = contentLanguage.split(\"-\")[0];\n\n data.items.forEach((documentItem) => {\n const label = documentItem.labels.find((item) => item.language.toLowerCase() === language.toLowerCase());\n\n labels.push({\n shortId: documentItem.shortId,\n label: label ? label.value : \"\"\n })\n });\n\n return labels;\n};\n","import { transformDocumentTypes } from \"./transforms/documentTypes\";\nimport { BaseService } from \"./baseService\";\n\n/**\n * Service for interacting with document types in the API.\n * Provides methods to retrieve document type information.\n */\nexport class DocumentTypesService extends BaseService {\n constructor() {\n super(\"DocumentTypes/\");\n }\n\n /**\n * Retrieves document type labels for the specified fields.\n * \n * @returns A promise that resolves to an array of label strings\n * @throws Error if the API request fails\n */\n public async getLabels(): Promise<{ shortId: string, label: string }[]> {\n return await this.request({\n params: [{\n key: \"sparqlWhere\",\n value: \"?iu iirds:is-applicable-for-document-type ?s . ?iu iirds:has-topic-type <https://www.c-rex.net/iirds/td#Blogpost>\"\n }],\n transformer: transformDocumentTypes,\n });\n }\n}\n","import { CONTENT_LANG_KEY, EN_LANG, RESULT_TYPES } from \"@c-rex/constants\";\nimport {\n DefaultRequest,\n informationUnitsResponse,\n informationUnitsItems,\n} from \"@c-rex/interfaces\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\nimport { cookies } from 'next/headers';\nimport { getFileRenditions } from \"@c-rex/utils\";\nimport { CrexLogger } from '@c-rex/core/logger';\nimport { AutocompleteSuggestion } from \"@c-rex/interfaces\";\n\nexport const transformInformationUnits = async (data: DefaultRequest<informationUnitsItems>): Promise<informationUnitsResponse> => {\n const logger = new CrexLogger()\n const config = await getConfigs();\n const filteredTags: any = {}\n\n const items = data.items.map((item) => {\n const type = item.class.labels.filter((item) => item.language === EN_LANG)[0].value.toUpperCase();\n const files = getFileRenditions({ renditions: item?.renditions });\n\n let link = `/topics/${item.shortId}`;\n\n if (config.results.articlePageLayout == \"BLOG\") {\n link = `/blog/${item.shortId}`\n } else if (type == RESULT_TYPES.DOCUMENT) {\n link = `/documents/${item.shortId}`;\n }\n\n let title = \"NO TITLE\"\n let language = \"NO LANGUAGE\"\n\n try {\n if (item.titles) {\n title = item.titles[0].value\n language = item.titles[0].language\n } else {\n title = item.labels[0].value\n language = item.labels[0].language\n }\n } catch {\n logger.log({\n level: \"error\",\n message: `No label or title on item ${item.shortId}`\n })\n }\n\n return {\n language: language,\n title: title,\n type: type,\n localeType: \"\",\n shortId: item.shortId,\n disabled: config.results.disabledResults.includes(type as any),\n link: link,\n files\n }\n });\n\n if (data.tags) {\n const contentLang = (cookies().get(CONTENT_LANG_KEY)?.value || EN_LANG).toLowerCase()\n const splittedContentLang = contentLang.split(\"-\")[0];\n\n for (const [key, value] of Object.entries(data.tags)) {\n\n if (!value || !value.items || value.items.length === 0) {\n continue;\n }\n if (!config.search.tags.includes(key)) {\n continue;\n }\n\n const aux = value.items.map(item => {\n if (item?.shortId === undefined) return null\n if (Number(item.hits) === 0) return null\n if (item?.labels === undefined || item?.labels.length === 0) {\n logger.log({\n level: \"warning\",\n message: `No labels on item with id ${item.shortId} from category ${key}`\n })\n return null;\n }\n\n let label = \"\"\n\n for (const labelItem of item.labels) {\n if (labelItem.language === undefined) {\n logger.log({\n level: \"info\",\n message: `No language on label ${labelItem.value} from category ${key}`\n })\n label = labelItem.value\n break;\n }\n\n if (labelItem.language.toLowerCase() === contentLang || labelItem.language.toLowerCase() === splittedContentLang) {\n label = labelItem.value\n break;\n }\n\n label = labelItem.value\n\n //TODO: fallback in english\n }\n\n return {\n hits: item.hits,\n total: item.total,\n label: label,\n active: false,\n shortId: item.shortId,\n }\n }).filter((item) => item !== null)\n\n if (aux.length === 0) {\n continue;\n }\n\n filteredTags[key] = aux;\n }\n }\n\n return {\n tags: filteredTags,\n items: items,\n pageInfo: data.pageInfo,\n };\n};\n\nexport const transformSuggestions = (data: AutocompleteSuggestion, query: string) => {\n const suggestions: string[] = []\n const comparableList: string[] = []\n\n data.suggestions.forEach((item) => {\n suggestions.push(item.value);\n comparableList.push(item.value.toLowerCase())\n })\n\n if (!comparableList.includes(query.toLowerCase())) {\n return [query, ...suggestions];\n }\n\n return suggestions\n}","import {\n AutocompleteSuggestion,\n informationUnitsResponse,\n informationUnitsItems,\n} from \"@c-rex/interfaces\";\nimport { transformInformationUnits, transformSuggestions } from \"./transforms/information\";\nimport { createParams } from \"@c-rex/utils\";\nimport { BaseService } from \"./baseService\";\nimport { OperatorType, WildCardType } from \"@c-rex/types\";\nimport { OPERATOR_OPTIONS, WILD_CARD_OPTIONS } from \"@c-rex/constants\";\n\n/**\n * Service for interacting with information units in the API.\n * Provides methods to retrieve and search information units.\n */\nexport class InformationUnitsService extends BaseService {\n constructor() {\n super(\"InformationUnits/\");\n }\n\n /**\n * Retrieves a list of information units based on specified criteria.\n * \n * @param options - Options for filtering and paginating the information units list\n * @param options.queries - Optional search query string\n * @param options.page - Optional page number for pagination (defaults to 1)\n * @param options.fields - Optional array of fields to include in the response\n * @param options.filters - Optional array of filter strings to apply\n * @param options.languages - Optional array of language codes to filter by\n * @returns A promise that resolves to the information units response\n * @throws Error if the API request fails\n */\n public async getList({\n queries = \"\",\n page = 1,\n fields = [],\n filters = [],\n tags = [],\n restrict = [],\n languages = [],\n wildcard = WILD_CARD_OPTIONS.BOTH,\n operator = OPERATOR_OPTIONS.AND,\n like = false,\n }: {\n queries?: string,\n page?: number,\n filters?: string[],\n restrict?: string[],\n fields?: string[],\n tags?: string[],\n languages?: string[],\n wildcard?: WildCardType,\n operator?: OperatorType,\n like?: boolean,\n }): Promise<informationUnitsResponse> {\n const remainFields = createParams(fields, \"Fields\");\n const remainFilters = createParams(filters, \"Filter\");\n const restrictions = createParams(restrict, \"Restrict\");\n const remainTags = createParams(tags, \"Tags\");\n const languageParam = `VALUES ?lang { ${languages.map(lang => `\"${lang}\"`).join(\" \")} } ?s iirds:language ?lang .`\n\n const params = [\n { key: \"pageSize\", value: \"12\" },\n { key: \"wildcard\", value: wildcard.toLowerCase() },\n { key: \"PageNumber\", value: page.toString() },\n { key: \"Operator\", value: operator },\n { key: \"Like\", value: like.toString() },\n ...remainTags,\n ...remainFields,\n ...remainFilters,\n ...restrictions\n ];\n if (languages.length > 0) {\n params.push({ key: \"sparqlWhere\", value: languageParam });\n }\n if (queries.length > 0) {\n params.push(\n { key: \"Query\", value: queries },\n );\n }\n\n return await this.request({\n params: params,\n transformer: transformInformationUnits\n });\n }\n\n /**\n * Retrieves a specific information unit by its ID.\n * Includes renditions, directory nodes, version information, titles, languages, and labels.\n * \n * @param options - Options for retrieving the information unit\n * @param options.id - The unique identifier of the information unit\n * @returns A promise that resolves to the information unit data\n * @throws Error if the API request fails\n */\n public async getItem({ id, shouldGetAllFields = false }: { id: string, shouldGetAllFields?: boolean }): Promise<informationUnitsItems> {\n const params = []\n\n if (!shouldGetAllFields) {\n params.push(\n { key: \"Fields\", value: \"renditions\" },\n { key: \"Fields\", value: \"directoryNodes\" },\n { key: \"Fields\", value: \"versionOf\" },\n { key: \"Fields\", value: \"titles\" },\n { key: \"Fields\", value: \"languages\" },\n { key: \"Fields\", value: \"labels\" },\n { key: \"Fields\", value: \"packages\" },\n { key: \"Fields\", value: \"created\" },\n { key: \"Fields\", value: \"revision\" },\n );\n }\n\n return await this.request({\n path: id,\n params,\n });\n }\n\n /**\n * Retrieves autocomplete suggestions based on a query prefix.\n * \n * @param options - Options for retrieving suggestions\n * @param options.query - The query prefix to get suggestions for\n * @param options.language - The language of the suggestions\n * @returns A promise that resolves to an array of suggestion strings\n * @throws Error if the API request fails\n */\n public async getSuggestions(\n { query, language }: { query: string, language: string }\n ): Promise<string[]> {\n\n return await this.request({\n path: 'Suggestions',\n params: [\n { key: \"prefix\", value: query },\n { key: \"lang\", value: language },\n ],\n transformer: (data: AutocompleteSuggestion) => transformSuggestions(data, query)\n });\n }\n}\n","import { LanguageAndCountries } from \"@c-rex/interfaces\";\nimport { BaseService } from \"./baseService\";\nimport { getCountryCodeByLang } from \"@c-rex/utils\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\n\n/**\n * Service for interacting with language-related functionality in the API.\n * Provides methods to retrieve language and country information.\n */\nexport class LanguageService extends BaseService {\n constructor() {\n const configs = getConfigs()\n super(configs.languageSwitcher.endpoint);\n }\n\n /**\n * Retrieves a list of available languages and their associated countries.\n * Transforms the API response to include language code, country code, and original value.\n * \n * @returns A promise that resolves to an array of language and country objects\n * @throws Error if the API request fails\n */\n public async getLanguagesAndCountries(): Promise<LanguageAndCountries[]> {\n return await this.request({\n transformer: (data: { value: string; score: number }[]) => {\n const countryCodeList = data.map((item) => {\n /*\n api -> en, en-US\n default -> en-US. Then use EN-US \n\n api -> en\n default -> en-US. Then use EN\n */\n //should be abble to handle this items: en-US, en, pt, pt-PT, pt-BR \n\n const splittedValue = item.value.split(\"-\")\n const lang = splittedValue[0]\n let country = splittedValue[0]\n\n if (splittedValue.length > 1) {\n country = splittedValue[1]\n } else {\n country = getCountryCodeByLang(lang)\n }\n\n return {\n country: country,\n lang: lang,\n value: item.value,\n }\n })\n\n return countryCodeList.sort((a, b) => {\n return a.value.localeCompare(b.value)\n })\n },\n });\n }\n}\n","import { EN_LANG, RESULT_TYPES, UI_LANG_KEY } from \"@c-rex/constants\";\nimport { DefaultRequest, TopicsRequestItem, DefaultResponse, TopicsResponseItem } from \"@c-rex/interfaces\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\nimport { cookies } from 'next/headers';\nimport { CrexLogger } from '@c-rex/core/logger';\nimport { formatDateToLocale } from \"@c-rex/utils\";\n\nexport const transformTopics = async (data: DefaultRequest<TopicsRequestItem>): Promise<DefaultResponse<TopicsResponseItem, null>> => {\n const logger = new CrexLogger()\n const config = getConfigs();\n const uiLang = (cookies().get(UI_LANG_KEY)?.value || config.languageSwitcher.default).toLowerCase()\n\n const items = data.items.map(item => {\n const type = item.class.labels.filter((item) => item.language === EN_LANG)[0].value.toUpperCase();\n\n let link = `/topics/${item.shortId}`;\n\n if (config.results.articlePageLayout == \"BLOG\") {\n link = `/blog/${item.shortId}`\n } else if (type == RESULT_TYPES.DOCUMENT) {\n link = `/documents/${item.shortId}`;\n }\n\n let title = \"NO TITLE\"\n let language = \"NO LANGUAGE\"\n\n try {\n if (item.titles) {\n title = item.titles[0].value\n language = item.titles[0].language\n } else {\n title = item.labels[0].value\n language = item.labels[0].language\n }\n } catch {\n logger.log({\n level: \"error\",\n message: `No label or title on item ${item.shortId}`\n })\n }\n\n let renditionUrl = \"\"\n const renditions = item.renditions.filter(item => item.format == \"application/xhtml+xml\");\n if (renditions.length > 0 || renditions[0] !== undefined) {\n const filteredLinks = renditions[0].links.filter((renditionItem) => renditionItem.rel == \"view\");\n if (filteredLinks.length > 0 || filteredLinks[0] !== undefined) {\n renditionUrl = filteredLinks[0].href;\n };\n };\n\n let categoryType = type\n if (item.applicableForTypes && item.applicableForTypes.length > 0) {\n const splittedContentLang = uiLang.split(\"-\")[0];\n categoryType = item.applicableForTypes[0].labels.find(item => item.language === splittedContentLang)?.value || categoryType;\n }\n\n return {\n language: language,\n title: title,\n type: categoryType,\n localeType: \"\",\n shortId: item.shortId,\n created: formatDateToLocale(item.created, uiLang),\n disabled: config.results.disabledResults.includes(type as any),\n link: link,\n renditionUrl: renditionUrl,\n image: null,\n description: null,\n }\n })\n\n return {\n tags: null,\n items: items,\n pageInfo: data.pageInfo,\n };\n};\n","import { transformTopics } from \"./transforms/topics\";\nimport { createParams } from \"@c-rex/utils\";\nimport { BaseService } from \"./baseService\";\nimport { OperatorType, WildCardType } from \"@c-rex/types\";\nimport { OPERATOR_OPTIONS, WILD_CARD_OPTIONS } from \"@c-rex/constants\";\nimport { DefaultResponse, TopicsResponseItem } from \"@c-rex/interfaces\";\n\ntype getListProps = {\n queries?: string,\n page?: number,\n filters?: string[],\n fields?: string[],\n languages?: string[],\n wildcard?: WildCardType,\n operator?: OperatorType,\n like?: boolean,\n pageSize?: number\n}\n\n\n/**\n * Service for interacting with information units in the API.\n * Provides methods to retrieve and search information units.\n */\nexport class TopicsService extends BaseService {\n constructor() {\n super(\"Topics/\");\n }\n\n /**\n * Retrieves a list of topics based on specified criteria.\n * \n * @param options - Options for filtering and paginating the topics list\n * @param options.queries - Optional search query string\n * @param options.page - Optional page number for pagination (defaults to 1)\n * @param options.fields - Optional array of fields to include in the response\n * @param options.filters - Optional array of filter strings to apply\n * @param options.languages - Optional array of language codes to filter by\n * @returns A promise that resolves to the information units response\n * @throws Error if the API request fails\n */\n public async getList({\n queries = \"\",\n page = 1,\n fields = [],\n filters = [],\n languages = [],\n wildcard = WILD_CARD_OPTIONS.BOTH,\n operator = OPERATOR_OPTIONS.AND,\n pageSize = 12\n }: getListProps): Promise<DefaultResponse<TopicsResponseItem, null>> {\n const remainFields = createParams(fields, \"Fields\");\n const remainFilters = createParams(filters, \"Filter\");\n\n const params = [\n { key: \"pageSize\", value: pageSize.toString() },\n { key: \"PageNumber\", value: page.toString() },\n { key: \"Sort\", value: \"-created;-score\" },\n { key: \"Operator\", value: operator },\n { key: \"wildcard\", value: wildcard.toLowerCase() },\n ...remainFields,\n ...remainFilters,\n ];\n\n if (languages.length > 0) {\n const languageParam = `VALUES ?lang { ${languages.map(lang => `\"${lang}\"`).join(\" \")} } ?s iirds:language ?lang .`\n params.push({ key: \"sparqlWhere\", value: languageParam });\n }\n if (queries.length > 0) {\n params.push(\n { key: \"Query\", value: queries },\n );\n }\n\n return await this.request({\n params: params,\n transformer: transformTopics\n });\n }\n}\n"],"mappings":"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","names":["Transport","import_winston_transport","Transport","Graylog2Transport","winston","axios","item","import_next_cookies","import_headers","import_next_cookies","import_headers","import_logger","item","import_next_cookies","import_next_cookies","import_headers","import_logger","item"]}
package/dist/index.mjs CHANGED
@@ -13,6 +13,7 @@ var LOG_LEVELS = {
13
13
  var API = {
14
14
  MAX_RETRY: 3,
15
15
  API_TIMEOUT: 1e4,
16
+ RETRY_DELAY: 500,
16
17
  API_HEADERS: {
17
18
  "content-Type": "application/json"
18
19
  }
@@ -35,7 +36,7 @@ var RESULT_TYPES = {
35
36
  PACKAGE,
36
37
  FRAGMENT
37
38
  };
38
- var DEFAULT_COOKIE_LIMIT = 7 * 24 * 60 * 60 * 1e3;
39
+ var DEFAULT_COOKIE_LIMIT = 30 * 24 * 60 * 60 * 1e3;
39
40
  var CREX_TOKEN_HEADER_KEY = "crex-token";
40
41
  var WILD_CARD_OPTIONS = {
41
42
  BOTH: "BOTH",
@@ -98,21 +99,22 @@ var GraylogTransport = class extends Transport2 {
98
99
  * @param configs - The application configuration containing logging settings
99
100
  */
100
101
  constructor(configs) {
102
+ if (!configs.logs.graylog.hostname || configs.logs.graylog.port === void 0) {
103
+ throw new Error("Graylog hostname and port must be defined");
104
+ }
101
105
  super({
102
106
  level: configs.logs.graylog.minimumLevel,
103
107
  silent: configs.logs.graylog.silent
104
108
  });
105
109
  this.configs = configs;
106
110
  this.graylogTransport = new Graylog2Transport({
107
- name: "crex.net.documentation",
108
- //name: "crex.net.blog",
109
- silent: false,
111
+ name: configs.logs.graylog.app,
112
+ silent: configs.logs.graylog.silent,
110
113
  handleExceptions: false,
111
114
  graylog: {
112
115
  servers: [
113
116
  { host: "localhost", port: 12201 },
114
- { host: "https://log.c-rex.net", port: 12202 }
115
- //TODO: check the URL => https://log.c-rex.net:12202/gelf" GELF??
117
+ { host: configs.logs.graylog.hostname, port: configs.logs.graylog.port }
116
118
  ]
117
119
  }
118
120
  });
@@ -219,19 +221,24 @@ var CrexApi = class {
219
221
  }
220
222
  }
221
223
  async getToken() {
222
- try {
223
- const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/token`, {
224
- method: "POST",
225
- credentials: "include"
226
- });
227
- const { token } = await response.json();
228
- return token;
229
- } catch (error) {
230
- this.logger.log({
231
- level: "error",
232
- message: `utils.getToken error: ${error}`
233
- });
234
- throw error;
224
+ for (let retry = 0; retry < API.MAX_RETRY; retry++) {
225
+ try {
226
+ const response = await fetch(`${this.customerConfig.publicNextApiUrl}/api/token`, {
227
+ method: "POST",
228
+ credentials: "include"
229
+ });
230
+ const { token } = await response.json();
231
+ return token;
232
+ } catch (error) {
233
+ this.logger.log({
234
+ level: "error",
235
+ message: `utils.getToken ${retry + 1}\xBA error when request token. Error: ${error}`
236
+ });
237
+ await new Promise((resolve) => setTimeout(resolve, API.RETRY_DELAY));
238
+ if (retry === API.MAX_RETRY) {
239
+ throw error;
240
+ }
241
+ }
235
242
  }
236
243
  }
237
244
  async manageToken() {
@@ -249,7 +256,7 @@ var CrexApi = class {
249
256
  } catch (error) {
250
257
  this.logger.log({
251
258
  level: "error",
252
- message: `utils.manageToken error: ${error}`
259
+ message: `CrexAPI.manageToken error: ${error}`
253
260
  });
254
261
  throw error;
255
262
  }
@@ -311,14 +318,6 @@ var CrexApi = class {
311
318
  };
312
319
 
313
320
  // ../utils/src/utils.ts
314
- var _generateShaKey = (input) => {
315
- let hash = 0;
316
- for (let i = 0; i < input.length; i++) {
317
- hash = (hash << 5) - hash + input.charCodeAt(i);
318
- hash |= 0;
319
- }
320
- return Math.abs(hash).toString(16);
321
- };
322
321
  var getCountryCodeByLang = (lang) => {
323
322
  const mappedKeys = Object.keys(FLAGS_BY_LANG);
324
323
  if (!mappedKeys.includes(lang)) {
@@ -339,35 +338,6 @@ var formatDateToLocale = (date, locale) => {
339
338
  }).format(dateAux);
340
339
  };
341
340
 
342
- // ../utils/src/call.ts
343
- var call = async (method, params) => {
344
- const shaKey = _generateShaKey(JSON.stringify({ method, params }));
345
- const cache = localStorage.getItem(shaKey);
346
- if (cache !== null) {
347
- const { data, expireDate } = JSON.parse(cache);
348
- if (new Date(expireDate) > /* @__PURE__ */ new Date()) {
349
- return JSON.parse(data);
350
- } else {
351
- localStorage.removeItem(shaKey);
352
- }
353
- }
354
- const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/rpc`, {
355
- method: "POST",
356
- headers: { "Content-Type": "application/json" },
357
- body: JSON.stringify({ method, params }),
358
- credentials: "include"
359
- });
360
- const json = await res.json();
361
- if (!res.ok) throw new Error(json.error || "Unknown error");
362
- const today = /* @__PURE__ */ new Date();
363
- const result = {
364
- data: JSON.stringify(json.data),
365
- expireDate: new Date(today.getTime() + 1e3 * 60 * 60)
366
- };
367
- localStorage.setItem(shaKey, JSON.stringify(result));
368
- return json.data;
369
- };
370
-
371
341
  // ../utils/src/classMerge.ts
372
342
  import { clsx } from "clsx";
373
343
  import { twMerge } from "tailwind-merge";
@@ -378,9 +348,7 @@ var createParams = (fieldsList, key = "Fields") => fieldsList.map((item) => ({
378
348
  value: item
379
349
  }));
380
350
  var generateQueryParams = (params) => {
381
- const queryParams = params.map(
382
- (param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`
383
- ).join("&");
351
+ const queryParams = params.map((param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`).join("&");
384
352
  return queryParams;
385
353
  };
386
354
 
@@ -441,25 +409,17 @@ var BaseService = class {
441
409
  headers = {},
442
410
  transformer = (response) => response
443
411
  }) {
444
- try {
445
- let url = `${this.endpoint}${path}`;
446
- const queryParams = generateQueryParams(params);
447
- if (queryParams.length > 0) {
448
- url += `?${queryParams}`;
449
- }
450
- const response = await this.api.execute({
451
- url,
452
- method,
453
- headers
454
- });
455
- return await transformer(response);
456
- } catch (error) {
457
- call("CrexLogger.log", {
458
- level: "error",
459
- message: `BaseService.request error when request ${path}. Error: ${error}`
460
- });
461
- throw error;
412
+ let url = `${this.endpoint}${path}`;
413
+ const queryParams = generateQueryParams(params);
414
+ if (queryParams.length > 0) {
415
+ url += `?${queryParams}`;
462
416
  }
417
+ const response = await this.api.execute({
418
+ url,
419
+ method,
420
+ headers
421
+ });
422
+ return await transformer(response);
463
423
  }
464
424
  };
465
425
 
@@ -725,8 +685,8 @@ var InformationUnitsService = class extends BaseService {
725
685
  { key: "wildcard", value: wildcard.toLowerCase() },
726
686
  { key: "PageNumber", value: page.toString() },
727
687
  { key: "Operator", value: operator },
728
- ...remainTags,
729
688
  { key: "Like", value: like.toString() },
689
+ ...remainTags,
730
690
  ...remainFields,
731
691
  ...remainFilters,
732
692
  ...restrictions
@@ -931,21 +891,17 @@ var TopicsService = class extends BaseService {
931
891
  }) {
932
892
  const remainFields = createParams(fields, "Fields");
933
893
  const remainFilters = createParams(filters, "Filter");
934
- const languageParam = `VALUES ?lang { ${languages.map((lang) => `"${lang}"`).join(" ")} } ?s iirds:language ?lang .`;
935
894
  const params = [
936
895
  { key: "pageSize", value: pageSize.toString() },
937
896
  { key: "PageNumber", value: page.toString() },
938
897
  { key: "Sort", value: "-created;-score" },
898
+ { key: "Operator", value: operator },
899
+ { key: "wildcard", value: wildcard.toLowerCase() },
939
900
  ...remainFields,
940
901
  ...remainFilters
941
902
  ];
942
- if (wildcard.length > 0) {
943
- params.push({ key: "Operator", value: operator });
944
- }
945
- if (wildcard.length > 0) {
946
- params.push({ key: "wildcard", value: wildcard.toLowerCase() });
947
- }
948
903
  if (languages.length > 0) {
904
+ const languageParam = `VALUES ?lang { ${languages.map((lang) => `"${lang}"`).join(" ")} } ?s iirds:language ?lang .`;
949
905
  params.push({ key: "sparqlWhere", value: languageParam });
950
906
  }
951
907
  if (queries.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../core/src/requests.ts","../../constants/src/index.ts","../../core/src/logger.ts","../../core/src/transports/matomo.ts","../../core/src/transports/graylog.ts","../../utils/src/utils.ts","../../utils/src/call.ts","../../utils/src/classMerge.ts","../../utils/src/params.ts","../../utils/src/renditions.ts","../src/baseService.ts","../src/renditions.ts","../src/directoryNodes.ts","../src/transforms/documentTypes.ts","../src/documentTypes.ts","../src/transforms/information.ts","../src/informationUnits.ts","../src/language.ts","../src/transforms/topics.ts","../src/topics.ts"],"sourcesContent":["import axios, { AxiosResponse, Method, AxiosInstance } from \"axios\";\nimport { API, CREX_TOKEN_HEADER_KEY, SDK_CONFIG_KEY } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\nimport { cookies } from \"next/headers\";\nimport { CrexLogger } from \"./logger\";\n\n/**\n * Interface for API response with generic data type.\n */\ninterface APIGenericResponse<T> extends AxiosResponse {\n data: T;\n statusCode: number;\n}\n\n/**\n * Interface for API call parameters.\n */\ninterface CallParams {\n url: string;\n method: Method;\n body?: any;\n headers?: any;\n params?: any;\n}\n\n/**\n * API client class for the CREX application.\n * Handles API requests with caching, authentication, and retry logic.\n */\nexport class CrexApi {\n private customerConfig!: ConfigInterface;\n private apiClient!: AxiosInstance;\n private logger!: CrexLogger;\n\n /**\n * Initializes the API client if it hasn't been initialized yet.\n * Loads customer configuration, creates the axios instance, and initializes the logger.\n * \n * @private\n */\n private async initAPI() {\n this.logger = new CrexLogger();\n\n if (!this.customerConfig) {\n const aux = cookies().get(SDK_CONFIG_KEY);\n if (aux != undefined) {\n this.customerConfig = JSON.parse(aux.value);\n } else {\n this.logger.log({\n level: \"error\",\n message: `utils.initAPI error: Config cookie not available`\n });\n\n throw new Error(\"Config cookie not available\");\n }\n }\n\n if (!this.apiClient) {\n this.apiClient = axios.create({\n baseURL: this.customerConfig.baseUrl,\n })\n }\n }\n\n private async getToken() {\n try {\n const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/token`, {\n method: 'POST',\n credentials: 'include',\n });\n\n const { token } = await response.json();\n\n return token;\n } catch (error) {\n this.logger.log({\n level: \"error\",\n message: `utils.getToken error: ${error}`\n });\n\n throw error\n }\n }\n\n private async manageToken() {\n try {\n let token = \"\";\n const hasToken = cookies().get(CREX_TOKEN_HEADER_KEY);\n\n if (hasToken == undefined || hasToken.value === null) {\n const tokenResult = await this.getToken();\n\n if (tokenResult === null) throw new Error(\"Token is undefined\");\n\n token = tokenResult;\n } else {\n token = hasToken.value;\n }\n\n return token;\n } catch (error) {\n this.logger.log({\n level: \"error\",\n message: `utils.manageToken error: ${error}`\n });\n\n throw error\n }\n }\n\n /**\n * Executes an API request with caching, authentication, and retry logic.\n * \n * @param options - Request options\n * @param options.url - The URL to request\n * @param options.method - The HTTP method to use\n * @param options.params - Optional query parameters\n * @param options.body - Optional request body\n * @param options.headers - Optional request headers\n * @returns The response data\n * @throws Error if the request fails after maximum retries\n */\n async execute<T>({\n url,\n method,\n params,\n body,\n headers = {},\n }: CallParams): Promise<T> {\n await this.initAPI();\n\n let response: APIGenericResponse<T> | undefined = undefined;\n\n if (this.customerConfig.OIDC.client.enabled) {\n const token = await this.manageToken();\n\n headers = {\n ...headers,\n Authorization: `Bearer ${token}`,\n };\n\n this.apiClient.defaults.headers.common['Authorization'] = `Bearer ${token}`;\n }\n\n for (let retry = 0; retry < API.MAX_RETRY; retry++) {\n try {\n response = await this.apiClient.request({\n url,\n method,\n data: body,\n params,\n headers,\n });\n\n break;\n } catch (error) {\n this.logger.log({\n level: \"error\",\n message: `API.execute ${retry + 1}º error when request ${url}. Error: ${error}`\n });\n\n if (retry === API.MAX_RETRY - 1) {\n throw error;\n }\n }\n }\n\n if (response) {\n return response.data;\n }\n\n throw new Error(\"API.execute error: Failed to retrieve a valid response\");\n }\n}","export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n\nexport const DEVICE_OPTIONS = {\n MOBILE: \"mobile\",\n TABLET: \"tablet\",\n DESKTOP: \"desktop\",\n}\nexport const BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};","import winston from \"winston\";\nimport { MatomoTransport } from \"./transports/matomo\";\nimport { GraylogTransport } from \"./transports/graylog\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { LOG_LEVELS } from \"@c-rex/constants\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\n\n/**\n * Logger class for the CREX application.\n * Provides logging functionality with multiple transports (Console, Matomo, Graylog).\n */\nexport class CrexLogger {\n private customerConfig!: ConfigInterface;\n public logger!: winston.Logger;\n\n /**\n * Initializes the logger instance if it hasn't been initialized yet.\n * Loads customer configuration and creates the logger with appropriate transports.\n * \n * @private\n */\n private async initLogger() {\n try {\n if (!this.customerConfig) {\n this.customerConfig = await getConfigs();\n }\n if (!this.logger) {\n this.logger = this.createLogger();\n }\n } catch (error) {\n console.error(\"Error initializing logger:\", error);\n }\n }\n\n /**\n * Logs a message with the specified level and optional category.\n * \n * @param options - Logging options\n * @param options.level - The log level (error, warn, info, etc.)\n * @param options.message - The message to log\n * @param options.category - Optional category for the log message\n */\n public async log({ level, message, category }: {\n level: LogLevelType,\n message: string,\n category?: LogCategoriesType\n }) {\n await this.initLogger();\n this.logger.log(level, message, category);\n }\n\n /**\n * Creates a new Winston logger instance with configured transports.\n * \n * @private\n * @returns A configured Winston logger instance\n */\n private createLogger() {\n return winston.createLogger({\n levels: LOG_LEVELS,\n transports: [\n new winston.transports.Console({\n level: this.customerConfig.logs.console.minimumLevel,\n silent: this.customerConfig.logs.console.silent,\n }),\n new MatomoTransport(this.customerConfig),\n new GraylogTransport(this.customerConfig),\n ],\n });\n }\n}","import Transport from \"winston-transport\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Matomo analytics.\n * Extends the base Winston transport with Matomo-specific functionality.\n */\nexport class MatomoTransport extends Transport {\n public matomoTransport: any;\n private configs: ConfigInterface;\n\n /**\n * Creates a new instance of MatomoTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n super({\n level: configs.logs.matomo.minimumLevel,\n silent: configs.logs.matomo.silent,\n });\n\n this.matomoTransport = new Transport();\n this.configs = configs;\n }\n\n /**\n * Logs a message to Matomo if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const matomoCategory = this.configs.logs.matomo.categoriesLevel\n\n if (matomoCategory.includes(info.category) || matomoCategory.includes(ALL)) {\n this.matomoTransport.log(info, callback);\n }\n }\n}\n","import Transport from \"winston-transport\";\nimport Graylog2Transport from \"winston-graylog2\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Graylog.\n * Extends the base Winston transport with Graylog-specific functionality.\n */\nexport class GraylogTransport extends Transport {\n public graylogTransport: any;\n private configs: ConfigInterface\n\n /**\n * Creates a new instance of GraylogTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n super({\n level: configs.logs.graylog.minimumLevel,\n silent: configs.logs.graylog.silent,\n });\n\n this.configs = configs;\n this.graylogTransport = new Graylog2Transport({\n name: \"crex.net.documentation\",\n //name: \"crex.net.blog\",\n silent: false,\n handleExceptions: false,\n graylog: {\n servers: [\n { host: \"localhost\", port: 12201 },\n { host: \"https://log.c-rex.net\", port: 12202 }\n\n //TODO: check the URL => https://log.c-rex.net:12202/gelf\" GELF??\n ],\n },\n });\n }\n\n /**\n * Logs a message to Graylog if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const graylogCategory = this.configs.logs.graylog.categoriesLevel\n\n if (graylogCategory.includes(info.category) || graylogCategory.includes(ALL)) {\n this.graylogTransport.log(info, callback);\n }\n }\n}\n","import { FLAGS_BY_LANG } from \"@c-rex/constants\";\nimport { AvailableVersionsInterface, informationUnitsResponseItem } from \"@c-rex/interfaces\";\n\nexport const _generateShaKey = (input: string): string => {\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n hash = (hash << 5) - hash + input.charCodeAt(i);\n hash |= 0;\n }\n return Math.abs(hash).toString(16);\n}\n\n/**\n * Retrieves the country code associated with a given language code.\n * @param lang - The language code to look up (e.g., \"en-US\")\n * @returns The corresponding country code, or the original language code if not found\n */\nexport const getCountryCodeByLang = (lang: string): string => {\n const mappedKeys = Object.keys(FLAGS_BY_LANG);\n\n if (!mappedKeys.includes(lang)) {\n return lang\n }\n\n type LangKey = keyof typeof FLAGS_BY_LANG;\n const country = FLAGS_BY_LANG[lang as LangKey]\n\n return country\n}\n\nexport const getFromCookieString = (cookieString: string, key: string): string => {\n const cookies = cookieString.split(';')\n\n for (const cookie of cookies) {\n const [cookieKey, cookieValue] = cookie.trim().split('=')\n\n if (cookieKey === key) {\n return cookieValue as string;\n }\n }\n\n return ''\n}\n\nexport const formatDateToLocale = (date: string, locale: string): string => {\n if (typeof date !== 'string' || !date) {\n return date;\n }\n\n const dateAux = new Date(date);\n return new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: 'long',\n year: 'numeric'\n }).format(dateAux);\n}\n\nexport const createAvailableVersionList = (\n versions: informationUnitsResponseItem[],\n articleLang: string,\n type: string\n): AvailableVersionsInterface[] => {\n\n const availableVersions = versions.map(item => {\n return {\n shortId: item.shortId,\n active: item.language === articleLang,\n lang: item.language,\n country: item.language.split(\"-\")[1],\n link: `/${type}/${item.shortId}`,\n }\n }).sort((a, b) => {\n if (a.lang < b.lang) return -1;\n if (a.lang > b.lang) return 1;\n return 0;\n }) as AvailableVersionsInterface[];\n\n return availableVersions;\n}","import { _generateShaKey } from \"./utils\"\n\n/**\n * Makes an asynchronous RPC API call to the server.\n * @param method - The RPC method name to call\n * @param params - Optional parameters to pass to the method\n * @returns A Promise resolving to the response data of type T\n */\nexport const call = async<T = unknown>(method: string, params?: any): Promise<T> => {\n type result = {\n data: string,\n expireDate: Date,\n }\n\n const shaKey = _generateShaKey(JSON.stringify({ method, params }))\n const cache = localStorage.getItem(shaKey)\n\n if (cache !== null) {\n const { data, expireDate } = JSON.parse(cache) as result\n\n if (new Date(expireDate) > new Date()) {\n return JSON.parse(data) as T\n } else {\n localStorage.removeItem(shaKey)\n }\n }\n\n const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/rpc`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ method, params }),\n credentials: 'include',\n });\n\n const json = await res.json();\n\n if (!res.ok) throw new Error(json.error || 'Unknown error');\n\n const today = new Date()\n const result: result = {\n data: JSON.stringify(json.data),\n expireDate: new Date(today.getTime() + 1000 * 60 * 60),\n }\n\n localStorage.setItem(shaKey, JSON.stringify(result))\n\n return json.data;\n}","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges multiple class values into a single string using clsx and tailwind-merge.\n * Useful for conditionally applying Tailwind CSS classes.\n * @param inputs - Any number of class values (strings, objects, arrays, etc.)\n * @returns A merged string of class names optimized for Tailwind CSS\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { QueryParams } from '@c-rex/types';\n\n/**\n * Creates an array of parameter objects from a list of field values.\n * @param fieldsList - Array of field values to transform into parameter objects\n * @param key - The key to use for each parameter object (defaults to \"Fields\")\n * @returns An array of objects with key-value pairs\n */\nexport const createParams = (fieldsList: string[], key: string = \"Fields\") =>\n fieldsList.map((item) => ({\n key: key,\n value: item,\n }));\n\n/**\n * Generates a URL query string from an array of parameter objects.\n * @param params - Array of QueryParams objects containing key-value pairs\n * @returns A URL-encoded query string\n */\nexport const generateQueryParams = (params: QueryParams[]): string => {\n const queryParams = params\n .map(\n (param) =>\n `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`,\n )\n .join(\"&\");\n return queryParams;\n};\n","import { informationUnitsRenditions } from \"@c-rex/interfaces\";\nimport { DocumentsType } from \"@c-rex/types\";\n\n\nexport const getFileRenditions = ({ renditions }: { renditions: informationUnitsRenditions[] }): DocumentsType => {\n if (renditions == undefined || renditions.length == 0) {\n return {};\n }\n\n const filteredRenditions = renditions.filter(\n (item) => item.format != \"application/xhtml+xml\" && item.format != \"application/json\" && item.format != \"application/llm+xml\"\n );\n\n if (filteredRenditions.length == 0 || filteredRenditions[0] == undefined) {\n return {};\n }\n\n const result: {\n [key: string]: {\n view: string;\n download: string;\n }\n } = {}\n\n filteredRenditions.forEach((item) => {\n const key = item.format\n\n if (result[key] == undefined) {\n result[key] = {\n view: \"\",\n download: \"\"\n }\n }\n\n result[key].download = item.links.filter((link) => link.rel == \"download\")[0]?.href\n result[key].view = item.links.filter((link) => link.rel == \"view\")[0]?.href\n })\n\n return result\n}","import { CrexApi } from \"@c-rex/core\";\nimport { QueryParams } from \"@c-rex/types\";\nimport { call, generateQueryParams } from \"@c-rex/utils\";\nimport { Method } from \"axios\";\n\n/**\n * Base service class that provides common functionality for API interactions.\n * All specific service classes extend this base class.\n */\nexport class BaseService {\n protected api: CrexApi;\n private endpoint: string;\n\n /**\n * Creates a new instance of BaseService.\n * \n * @param endpoint - The API endpoint URL for this service\n */\n constructor(endpoint: string) {\n this.api = new CrexApi();\n this.endpoint = endpoint;\n }\n\n /**\n * Makes an API request to the specified endpoint.\n * \n * @param options - Request configuration options\n * @param options.path - Optional path to append to the endpoint\n * @param options.params - Optional query parameters to include in the request\n * @param options.method - HTTP method to use (defaults to 'get')\n * @param options.transformer - Optional function to transform the response data\n * @returns The response data, optionally transformed\n * @throws Error if the API request fails\n */\n protected async request<T>({\n path = \"\",\n method = \"get\",\n params = [],\n headers = {},\n transformer = (response: any) => response,\n }: {\n path?: string,\n method?: Method,\n params?: QueryParams[],\n headers?: any,\n transformer?: (data: any) => T,\n }): Promise<T> {\n try {\n let url = `${this.endpoint}${path}`;\n\n const queryParams = generateQueryParams(params);\n if (queryParams.length > 0) {\n url += `?${queryParams}`;\n }\n\n const response = await this.api.execute({\n url,\n method,\n headers,\n })\n\n return await transformer(response);\n\n } catch (error) {\n call(\"CrexLogger.log\", {\n level: \"error\",\n message: `BaseService.request error when request ${path}. Error: ${error}`\n });\n\n throw error;\n }\n }\n}\n\n","import { BaseService } from \"./baseService\";\nimport { informationUnitsRenditions } from \"@c-rex/interfaces\";\n\n/**\n * Service for interacting with renditions in the API.\n * Provides methods to retrieve and process different types of renditions.\n */\nexport class RenditionsService extends BaseService {\n constructor() {\n super(\"Renditions/\");\n }\n\n /**\n * Retrieves the HTML rendition from a list of renditions.\n * Filters for renditions with format 'application/xhtml+xml' and rel 'view'.\n * \n * @param renditions - Array of rendition objects to process\n * @returns A promise that resolves to the HTML content as a string, or empty string if no suitable rendition is found\n * @throws Error if the API request fails\n */\n public async getHTMLRendition({ renditions }: { renditions: informationUnitsRenditions[] }): Promise<string> {\n const filteredRenditions = renditions.filter(\n (item) => item.format == \"application/xhtml+xml\",\n );\n\n if (filteredRenditions.length == 0 || filteredRenditions[0] == undefined) return \"\";\n const item = filteredRenditions[0];\n const filteredLinks = item.links.filter((item) => item.rel == \"view\");\n\n if (filteredLinks.length == 0 || filteredLinks[0] == undefined) return \"\";\n const url = filteredLinks[0].href;\n const response = await this.api.execute({\n url,\n method: \"get\",\n headers: {\n Accept: \"application/xhtml+xml\",\n },\n })\n\n return response as string;\n }\n}","import { BaseService } from \"./baseService\";\nimport { createParams } from \"@c-rex/utils\";\nimport { DirectoryNodes, DirectoryNodesResponse } from \"@c-rex/interfaces\";\n\n/**\n * Service for interacting with directory nodes in the API.\n * Provides methods to retrieve directory node information.\n */\nexport class DirectoryNodesService extends BaseService {\n constructor() {\n super(\"DirectoryNodes/\");\n }\n\n /**\n * Retrieves a specific directory node by its ID.\n * \n * @param id - The unique identifier of the directory node\n * @returns A promise that resolves to the directory node data\n * @throws Error if the API request fails\n */\n public async getItem(id: string): Promise<DirectoryNodes> {\n return await this.request({\n path: id,\n });\n }\n\n /**\n * Retrieves a list of directory nodes based on specified filters.\n * \n * @param options - Options for filtering the directory nodes list\n * @param options.filters - Optional array of filter strings to apply\n * @returns A promise that resolves to the directory nodes response\n * @throws Error if the API request fails\n */\n public async getList({\n filters = [],\n }: {\n filters?: string[],\n }): Promise<DirectoryNodesResponse> {\n\n const remainFilters = createParams(filters, \"Filter\");\n\n return await this.request({\n params: {\n ...remainFilters,\n },\n });\n }\n}\n","import { CONTENT_LANG_KEY } from \"@c-rex/constants\";\nimport { DefaultRequest } from \"@c-rex/interfaces\";\nimport { DocumentTypesItem } from \"@c-rex/interfaces\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\nimport { cookies } from \"next/headers\";\n\nexport const transformDocumentTypes = (data: DefaultRequest<DocumentTypesItem>) => {\n const labels: { shortId: string, label: string }[] = [];\n const config = getConfigs();\n const contentLanguage = cookies().get(CONTENT_LANG_KEY)?.value || config.languageSwitcher.default;\n const language = contentLanguage.split(\"-\")[0];\n\n data.items.forEach((documentItem) => {\n const label = documentItem.labels.find((item) => item.language.toLowerCase() === language.toLowerCase());\n\n labels.push({\n shortId: documentItem.shortId,\n label: label ? label.value : \"\"\n })\n });\n\n return labels;\n};\n","import { transformDocumentTypes } from \"./transforms/documentTypes\";\nimport { BaseService } from \"./baseService\";\n\n/**\n * Service for interacting with document types in the API.\n * Provides methods to retrieve document type information.\n */\nexport class DocumentTypesService extends BaseService {\n constructor() {\n super(\"DocumentTypes/\");\n }\n\n /**\n * Retrieves document type labels for the specified fields.\n * \n * @returns A promise that resolves to an array of label strings\n * @throws Error if the API request fails\n */\n public async getLabels(): Promise<{ shortId: string, label: string }[]> {\n return await this.request({\n params: [{\n key: \"sparqlWhere\",\n value: \"?iu iirds:is-applicable-for-document-type ?s . ?iu iirds:has-topic-type <https://www.c-rex.net/iirds/td#Blogpost>\"\n }],\n transformer: transformDocumentTypes,\n });\n }\n}\n","import { CONTENT_LANG_KEY, EN_LANG, RESULT_TYPES } from \"@c-rex/constants\";\nimport {\n DefaultRequest,\n informationUnitsResponse,\n informationUnitsItems,\n} from \"@c-rex/interfaces\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\nimport { cookies } from 'next/headers';\nimport { getFileRenditions } from \"@c-rex/utils\";\nimport { CrexLogger } from '@c-rex/core/logger';\nimport { AutocompleteSuggestion } from \"@c-rex/interfaces\";\n\nexport const transformInformationUnits = async (data: DefaultRequest<informationUnitsItems>): Promise<informationUnitsResponse> => {\n const logger = new CrexLogger()\n const config = await getConfigs();\n const filteredTags: any = {}\n\n const items = data.items.map((item) => {\n const type = item.class.labels.filter((item) => item.language === EN_LANG)[0].value.toUpperCase();\n const files = getFileRenditions({ renditions: item?.renditions });\n\n let link = `/topics/${item.shortId}`;\n\n if (config.results.articlePageLayout == \"BLOG\") {\n link = `/blog/${item.shortId}`\n } else if (type == RESULT_TYPES.DOCUMENT) {\n link = `/documents/${item.shortId}`;\n }\n\n let title = \"NO TITLE\"\n let language = \"NO LANGUAGE\"\n\n try {\n if (item.titles) {\n title = item.titles[0].value\n language = item.titles[0].language\n } else {\n title = item.labels[0].value\n language = item.labels[0].language\n }\n } catch {\n logger.log({\n level: \"error\",\n message: `No label or title on item ${item.shortId}`\n })\n }\n\n return {\n language: language,\n title: title,\n type: type,\n localeType: \"\",\n shortId: item.shortId,\n disabled: config.results.disabledResults.includes(type as any),\n link: link,\n files\n }\n });\n\n if (data.tags) {\n const contentLang = (cookies().get(CONTENT_LANG_KEY)?.value || EN_LANG).toLowerCase()\n const splittedContentLang = contentLang.split(\"-\")[0];\n\n for (const [key, value] of Object.entries(data.tags)) {\n\n if (!value || !value.items || value.items.length === 0) {\n continue;\n }\n if (!config.search.tags.includes(key)) {\n continue;\n }\n\n const aux = value.items.map(item => {\n if (item?.shortId === undefined) return null\n if (Number(item.hits) === 0) return null\n if (item?.labels === undefined || item?.labels.length === 0) {\n logger.log({\n level: \"warning\",\n message: `No labels on item with id ${item.shortId} from category ${key}`\n })\n return null;\n }\n\n let label = \"\"\n\n for (const labelItem of item.labels) {\n if (labelItem.language === undefined) {\n logger.log({\n level: \"info\",\n message: `No language on label ${labelItem.value} from category ${key}`\n })\n label = labelItem.value\n break;\n }\n\n if (labelItem.language.toLowerCase() === contentLang || labelItem.language.toLowerCase() === splittedContentLang) {\n label = labelItem.value\n break;\n }\n\n label = labelItem.value\n\n //TODO: fallback in english\n }\n\n return {\n hits: item.hits,\n total: item.total,\n label: label,\n active: false,\n shortId: item.shortId,\n }\n }).filter((item) => item !== null)\n\n if (aux.length === 0) {\n continue;\n }\n\n filteredTags[key] = aux;\n }\n }\n\n return {\n tags: filteredTags,\n items: items,\n pageInfo: data.pageInfo,\n };\n};\n\nexport const transformSuggestions = (data: AutocompleteSuggestion, query: string) => {\n const suggestions: string[] = []\n const comparableList: string[] = []\n\n data.suggestions.forEach((item) => {\n suggestions.push(item.value);\n comparableList.push(item.value.toLowerCase())\n })\n\n if (!comparableList.includes(query.toLowerCase())) {\n return [query, ...suggestions];\n }\n\n return suggestions\n}","import {\n AutocompleteSuggestion,\n informationUnitsResponse,\n informationUnitsItems,\n} from \"@c-rex/interfaces\";\nimport { transformInformationUnits, transformSuggestions } from \"./transforms/information\";\nimport { createParams } from \"@c-rex/utils\";\nimport { BaseService } from \"./baseService\";\nimport { WildCardType } from \"@c-rex/types\";\nimport { OPERATOR_OPTIONS, WILD_CARD_OPTIONS } from \"@c-rex/constants\";\n\n/**\n * Service for interacting with information units in the API.\n * Provides methods to retrieve and search information units.\n */\nexport class InformationUnitsService extends BaseService {\n constructor() {\n super(\"InformationUnits/\");\n }\n\n /**\n * Retrieves a list of information units based on specified criteria.\n * \n * @param options - Options for filtering and paginating the information units list\n * @param options.queries - Optional search query string\n * @param options.page - Optional page number for pagination (defaults to 1)\n * @param options.fields - Optional array of fields to include in the response\n * @param options.filters - Optional array of filter strings to apply\n * @param options.languages - Optional array of language codes to filter by\n * @returns A promise that resolves to the information units response\n * @throws Error if the API request fails\n */\n public async getList({\n queries = \"\",\n page = 1,\n fields = [],\n filters = [],\n tags = [],\n restrict = [],\n languages = [],\n wildcard = WILD_CARD_OPTIONS.BOTH,\n operator = OPERATOR_OPTIONS.AND,\n like = false,\n }: {\n queries?: string,\n page?: number,\n filters?: string[],\n restrict?: string[],\n fields?: string[],\n tags?: string[],\n languages?: string[],\n wildcard?: WildCardType,\n operator?: string,\n like?: boolean,\n }): Promise<informationUnitsResponse> {\n const remainFields = createParams(fields, \"Fields\");\n const remainFilters = createParams(filters, \"Filter\");\n const restrictions = createParams(restrict, \"Restrict\");\n const remainTags = createParams(tags, \"Tags\");\n const languageParam = `VALUES ?lang { ${languages.map(lang => `\"${lang}\"`).join(\" \")} } ?s iirds:language ?lang .`\n\n const params = [\n { key: \"pageSize\", value: \"12\" },\n { key: \"wildcard\", value: wildcard.toLowerCase() },\n { key: \"PageNumber\", value: page.toString() },\n { key: \"Operator\", value: operator },\n ...remainTags,\n { key: \"Like\", value: like.toString() },\n ...remainFields,\n ...remainFilters,\n ...restrictions\n ];\n if (languages.length > 0) {\n params.push({ key: \"sparqlWhere\", value: languageParam });\n }\n if (queries.length > 0) {\n params.push(\n { key: \"Query\", value: queries },\n );\n }\n\n return await this.request({\n params: params,\n transformer: transformInformationUnits\n });\n }\n\n /**\n * Retrieves a specific information unit by its ID.\n * Includes renditions, directory nodes, version information, titles, languages, and labels.\n * \n * @param options - Options for retrieving the information unit\n * @param options.id - The unique identifier of the information unit\n * @returns A promise that resolves to the information unit data\n * @throws Error if the API request fails\n */\n public async getItem({ id, shouldGetAllFields = false }: { id: string, shouldGetAllFields?: boolean }): Promise<informationUnitsItems> {\n const params = []\n\n if (!shouldGetAllFields) {\n params.push(\n { key: \"Fields\", value: \"renditions\" },\n { key: \"Fields\", value: \"directoryNodes\" },\n { key: \"Fields\", value: \"versionOf\" },\n { key: \"Fields\", value: \"titles\" },\n { key: \"Fields\", value: \"languages\" },\n { key: \"Fields\", value: \"labels\" },\n { key: \"Fields\", value: \"packages\" },\n { key: \"Fields\", value: \"created\" },\n { key: \"Fields\", value: \"revision\" },\n );\n }\n\n return await this.request({\n path: id,\n params,\n });\n }\n\n /**\n * Retrieves autocomplete suggestions based on a query prefix.\n * \n * @param options - Options for retrieving suggestions\n * @param options.query - The query prefix to get suggestions for\n * @param options.language - The language of the suggestions\n * @returns A promise that resolves to an array of suggestion strings\n * @throws Error if the API request fails\n */\n public async getSuggestions(\n { query, language }: { query: string, language: string }\n ): Promise<string[]> {\n\n return await this.request({\n path: 'Suggestions',\n params: [\n { key: \"prefix\", value: query },\n { key: \"lang\", value: language },\n ],\n transformer: (data: AutocompleteSuggestion) => transformSuggestions(data, query)\n });\n }\n}\n","import { LanguageAndCountries } from \"@c-rex/interfaces\";\nimport { BaseService } from \"./baseService\";\nimport { getCountryCodeByLang } from \"@c-rex/utils\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\n\n/**\n * Service for interacting with language-related functionality in the API.\n * Provides methods to retrieve language and country information.\n */\nexport class LanguageService extends BaseService {\n constructor() {\n const configs = getConfigs()\n super(configs.languageSwitcher.endpoint);\n }\n\n /**\n * Retrieves a list of available languages and their associated countries.\n * Transforms the API response to include language code, country code, and original value.\n * \n * @returns A promise that resolves to an array of language and country objects\n * @throws Error if the API request fails\n */\n public async getLanguagesAndCountries(): Promise<LanguageAndCountries[]> {\n return await this.request({\n transformer: (data: { value: string; score: number }[]) => {\n const countryCodeList = data.map((item) => {\n /*\n api -> en, en-US\n default -> en-US. Then use EN-US \n\n api -> en\n default -> en-US. Then use EN\n */\n //should be abble to handle this items: en-US, en, pt, pt-PT, pt-BR \n\n const splittedValue = item.value.split(\"-\")\n const lang = splittedValue[0]\n let country = splittedValue[0]\n\n if (splittedValue.length > 1) {\n country = splittedValue[1]\n } else {\n country = getCountryCodeByLang(lang)\n }\n\n return {\n country: country,\n lang: lang,\n value: item.value,\n }\n })\n\n return countryCodeList.sort((a, b) => {\n return a.value.localeCompare(b.value)\n })\n },\n });\n }\n}\n","import { EN_LANG, RESULT_TYPES, UI_LANG_KEY } from \"@c-rex/constants\";\nimport { DefaultRequest, TopicsRequestItem, DefaultResponse, TopicsResponseItem } from \"@c-rex/interfaces\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\nimport { cookies } from 'next/headers';\nimport { CrexLogger } from '@c-rex/core/logger';\nimport { formatDateToLocale } from \"@c-rex/utils\";\n\nexport const transformTopics = async (data: DefaultRequest<TopicsRequestItem>): Promise<DefaultResponse<TopicsResponseItem, null>> => {\n const logger = new CrexLogger()\n const config = getConfigs();\n const uiLang = (cookies().get(UI_LANG_KEY)?.value || config.languageSwitcher.default).toLowerCase()\n\n const items = data.items.map(item => {\n const type = item.class.labels.filter((item) => item.language === EN_LANG)[0].value.toUpperCase();\n\n let link = `/topics/${item.shortId}`;\n\n if (config.results.articlePageLayout == \"BLOG\") {\n link = `/blog/${item.shortId}`\n } else if (type == RESULT_TYPES.DOCUMENT) {\n link = `/documents/${item.shortId}`;\n }\n\n let title = \"NO TITLE\"\n let language = \"NO LANGUAGE\"\n\n try {\n if (item.titles) {\n title = item.titles[0].value\n language = item.titles[0].language\n } else {\n title = item.labels[0].value\n language = item.labels[0].language\n }\n } catch {\n logger.log({\n level: \"error\",\n message: `No label or title on item ${item.shortId}`\n })\n }\n\n let renditionUrl = \"\"\n const renditions = item.renditions.filter(item => item.format == \"application/xhtml+xml\");\n if (renditions.length > 0 || renditions[0] !== undefined) {\n const filteredLinks = renditions[0].links.filter((renditionItem) => renditionItem.rel == \"view\");\n if (filteredLinks.length > 0 || filteredLinks[0] !== undefined) {\n renditionUrl = filteredLinks[0].href;\n };\n };\n\n let categoryType = type\n if (item.applicableForTypes && item.applicableForTypes.length > 0) {\n const splittedContentLang = uiLang.split(\"-\")[0];\n categoryType = item.applicableForTypes[0].labels.find(item => item.language === splittedContentLang)?.value || categoryType;\n }\n\n return {\n language: language,\n title: title,\n type: categoryType,\n localeType: \"\",\n shortId: item.shortId,\n created: formatDateToLocale(item.created, uiLang),\n disabled: config.results.disabledResults.includes(type as any),\n link: link,\n renditionUrl: renditionUrl,\n image: null,\n description: null,\n }\n })\n\n return {\n tags: null,\n items: items,\n pageInfo: data.pageInfo,\n };\n};\n","import { transformTopics } from \"./transforms/topics\";\nimport { createParams } from \"@c-rex/utils\";\nimport { BaseService } from \"./baseService\";\nimport { WildCardType } from \"@c-rex/types\";\nimport { OPERATOR_OPTIONS, WILD_CARD_OPTIONS } from \"@c-rex/constants\";\nimport { DefaultResponse, TopicsResponseItem } from \"@c-rex/interfaces\";\n\ntype getListProps = {\n queries?: string,\n page?: number,\n filters?: string[],\n fields?: string[],\n languages?: string[],\n wildcard?: WildCardType,\n operator?: string,\n like?: boolean,\n pageSize?: number\n}\n\n\n/**\n * Service for interacting with information units in the API.\n * Provides methods to retrieve and search information units.\n */\nexport class TopicsService extends BaseService {\n constructor() {\n super(\"Topics/\");\n }\n\n /**\n * Retrieves a list of topics based on specified criteria.\n * \n * @param options - Options for filtering and paginating the topics list\n * @param options.queries - Optional search query string\n * @param options.page - Optional page number for pagination (defaults to 1)\n * @param options.fields - Optional array of fields to include in the response\n * @param options.filters - Optional array of filter strings to apply\n * @param options.languages - Optional array of language codes to filter by\n * @returns A promise that resolves to the information units response\n * @throws Error if the API request fails\n */\n public async getList({\n queries = \"\",\n page = 1,\n fields = [],\n filters = [],\n languages = [],\n wildcard = WILD_CARD_OPTIONS.BOTH,\n operator = OPERATOR_OPTIONS.AND,\n pageSize = 12\n }: getListProps): Promise<DefaultResponse<TopicsResponseItem, null>> {\n const remainFields = createParams(fields, \"Fields\");\n const remainFilters = createParams(filters, \"Filter\");\n const languageParam = `VALUES ?lang { ${languages.map(lang => `\"${lang}\"`).join(\" \")} } ?s iirds:language ?lang .`\n\n const params = [\n { key: \"pageSize\", value: pageSize.toString() },\n { key: \"PageNumber\", value: page.toString() },\n { key: \"Sort\", value: \"-created;-score\" },\n ...remainFields,\n ...remainFilters,\n ];\n\n if (wildcard.length > 0) {\n params.push({ key: \"Operator\", value: operator });\n }\n if (wildcard.length > 0) {\n params.push({ key: \"wildcard\", value: wildcard.toLowerCase() });\n }\n if (languages.length > 0) {\n params.push({ key: \"sparqlWhere\", value: languageParam });\n }\n if (queries.length > 0) {\n params.push(\n { key: \"Query\", value: queries },\n );\n }\n\n return await this.request({\n params: params,\n transformer: transformTopics\n });\n }\n}\n"],"mappings":"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","names":["Transport","Transport","item","getConfigs","cookies","getConfigs","cookies","CrexLogger","getConfigs","item","cookies","getConfigs","getConfigs","cookies","CrexLogger","CrexLogger","getConfigs","cookies","item"]}
1
+ {"version":3,"sources":["../../core/src/requests.ts","../../constants/src/index.ts","../../core/src/logger.ts","../../core/src/transports/matomo.ts","../../core/src/transports/graylog.ts","../../utils/src/utils.ts","../../utils/src/classMerge.ts","../../utils/src/params.ts","../../utils/src/renditions.ts","../src/baseService.ts","../src/renditions.ts","../src/directoryNodes.ts","../src/transforms/documentTypes.ts","../src/documentTypes.ts","../src/transforms/information.ts","../src/informationUnits.ts","../src/language.ts","../src/transforms/topics.ts","../src/topics.ts"],"sourcesContent":["import axios, { AxiosResponse, Method, AxiosInstance } from \"axios\";\nimport { API, CREX_TOKEN_HEADER_KEY, SDK_CONFIG_KEY } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\nimport { cookies } from \"next/headers\";\nimport { CrexLogger } from \"./logger\";\n\n/**\n * Interface for API response with generic data type.\n */\ninterface APIGenericResponse<T> extends AxiosResponse {\n data: T;\n statusCode: number;\n}\n\n/**\n * Interface for API call parameters.\n */\ninterface CallParams {\n url: string;\n method: Method;\n body?: any;\n headers?: any;\n params?: any;\n}\n\n/**\n * API client class for the CREX application.\n * Handles API requests with caching, authentication, and retry logic.\n */\nexport class CrexApi {\n private customerConfig!: ConfigInterface;\n private apiClient!: AxiosInstance;\n private logger!: CrexLogger;\n\n /**\n * Initializes the API client if it hasn't been initialized yet.\n * Loads customer configuration, creates the axios instance, and initializes the logger.\n * \n * @private\n */\n private async initAPI() {\n this.logger = new CrexLogger();\n\n if (!this.customerConfig) {\n const aux = cookies().get(SDK_CONFIG_KEY);\n if (aux != undefined) {\n this.customerConfig = JSON.parse(aux.value);\n } else {\n this.logger.log({\n level: \"error\",\n message: `utils.initAPI error: Config cookie not available`\n });\n\n throw new Error(\"Config cookie not available\");\n }\n }\n\n if (!this.apiClient) {\n this.apiClient = axios.create({\n baseURL: this.customerConfig.baseUrl,\n })\n }\n }\n\n private async getToken() {\n for (let retry = 0; retry < API.MAX_RETRY; retry++) {\n try {\n const response = await fetch(`${this.customerConfig.publicNextApiUrl}/api/token`, {\n method: 'POST',\n credentials: 'include',\n });\n\n const { token } = await response.json();\n\n return token;\n } catch (error) {\n this.logger.log({\n level: \"error\",\n message: `utils.getToken ${retry + 1}º error when request token. Error: ${error}`\n });\n\n await new Promise(resolve => setTimeout(resolve, API.RETRY_DELAY));\n\n if (retry === API.MAX_RETRY) {\n throw error;\n }\n }\n }\n }\n\n private async manageToken() {\n try {\n let token = \"\";\n const hasToken = cookies().get(CREX_TOKEN_HEADER_KEY);\n\n if (hasToken == undefined || hasToken.value === null) {\n const tokenResult = await this.getToken();\n\n if (tokenResult === null) throw new Error(\"Token is undefined\");\n\n token = tokenResult;\n } else {\n token = hasToken.value;\n }\n\n return token;\n } catch (error) {\n this.logger.log({\n level: \"error\",\n message: `CrexAPI.manageToken error: ${error}`\n });\n\n throw error\n }\n }\n\n /**\n * Executes an API request with caching, authentication, and retry logic.\n * \n * @param options - Request options\n * @param options.url - The URL to request\n * @param options.method - The HTTP method to use\n * @param options.params - Optional query parameters\n * @param options.body - Optional request body\n * @param options.headers - Optional request headers\n * @returns The response data\n * @throws Error if the request fails after maximum retries\n */\n async execute<T>({\n url,\n method,\n params,\n body,\n headers = {},\n }: CallParams): Promise<T> {\n await this.initAPI();\n\n let response: APIGenericResponse<T> | undefined = undefined;\n\n if (this.customerConfig.OIDC.client.enabled) {\n const token = await this.manageToken();\n\n headers = {\n ...headers,\n Authorization: `Bearer ${token}`,\n };\n\n this.apiClient.defaults.headers.common['Authorization'] = `Bearer ${token}`;\n }\n\n for (let retry = 0; retry < API.MAX_RETRY; retry++) {\n try {\n response = await this.apiClient.request({\n url,\n method,\n data: body,\n params,\n headers,\n });\n\n break;\n } catch (error) {\n this.logger.log({\n level: \"error\",\n message: `API.execute ${retry + 1}º error when request ${url}. Error: ${error}`\n });\n\n if (retry === API.MAX_RETRY - 1) {\n throw error;\n }\n }\n }\n\n if (response) {\n return response.data;\n }\n\n throw new Error(\"API.execute error: Failed to retrieve a valid response\");\n }\n}","export const ALL = \"*\"\n\nexport const LOG_CATEGORIES = [\n \"NoLicense\",\n \"Scenario\",\n \"Favorites\",\n \"Subscription\",\n \"Share\",\n \"Document\",\n \"Search\",\n \"History\",\n \"Notification\",\n \"UserProfile\",\n] as const;\n\nexport const LOG_LEVELS = {\n critical: 2,\n error: 3,\n warning: 4,\n info: 6,\n debug: 7,\n} as const;\n\nexport const RESULT_VIEW_STYLES = [\n \"cards\",\n \"table\",\n] as const;\n\nexport const API = {\n MAX_RETRY: 3,\n API_TIMEOUT: 10000,\n RETRY_DELAY: 500,\n API_HEADERS: {\n \"content-Type\": \"application/json\",\n },\n};\n\nexport const SDK_CONFIG_KEY = \"crex-sdk-config\";\n\nexport const CONTENT_LANG_KEY = \"CONTENT_LANG_KEY\";\n\nexport const AVAILABLE_CONTENT_LANG_KEY = \"AVAILABLE_CONTENT_LANG_KEY\";\n\nexport const UI_LANG_KEY = \"UI_LANG_KEY\";\n\nexport const FLAGS_BY_LANG = {\n \"en\": \"US\",\n \"de\": \"DE\",\n};\n\nexport const DEFAULT_LANG = \"en-US\";\n\nexport const EN_LANG = \"en\";\n\nexport const UI_LANG_OPTIONS = [\"en-us\", \"de-de\"];\n\nexport const TOPICS_TYPE_AND_LINK = \"topics\";\nexport const BLOG_TYPE_AND_LINK = \"blog\";\nexport const DOCUMENTS_TYPE_AND_LINK = \"documents\";\n\nexport const TOPIC = \"TOPIC\";\nexport const DOCUMENT = \"DOCUMENT\";\nexport const PACKAGE = \"PACKAGE\";\nexport const FRAGMENT = \"FRAGMENT\";\n\nexport const RESULT_TYPES = {\n TOPIC: TOPIC,\n DOCUMENT: DOCUMENT,\n PACKAGE: PACKAGE,\n FRAGMENT: FRAGMENT\n} as const;\n\nexport const FILES_EXTENSIONS = {\n PDF: \"application/pdf\",\n HTML: \"text/html\",\n} as const;\n\nexport const DEFAULT_COOKIE_LIMIT = 30 * 24 * 60 * 60 * 1000; // 30 days in milliseconds\n\nexport const ICONS_BY_FILE_EXTENSION = {\n \"application/pdf\": \"FaFilePdf\",\n} as const;\n\nexport const DEFAULT_ICON = \"file\";\n\nexport const CREX_TOKEN_HEADER_KEY = \"crex-token\";\n\nexport const WILD_CARD_OPTIONS = {\n BOTH: \"BOTH\",\n END: \"END\",\n START: \"START\",\n NONE: \"NONE\",\n} as const;\n\nexport const OPERATOR_OPTIONS = {\n AND: \"AND\",\n OR: \"OR\",\n} as const;\n\nexport const ARTICLE_PAGE_LAYOUT = {\n BLOG: \"BLOG\",\n DOCUMENT: \"DOCUMENT\",\n} as const;\n\nexport const DEVICE_OPTIONS = {\n MOBILE: \"mobile\",\n TABLET: \"tablet\",\n DESKTOP: \"desktop\",\n}\nexport const BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n};","import winston from \"winston\";\nimport { MatomoTransport } from \"./transports/matomo\";\nimport { GraylogTransport } from \"./transports/graylog\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { LOG_LEVELS } from \"@c-rex/constants\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\n\n/**\n * Logger class for the CREX application.\n * Provides logging functionality with multiple transports (Console, Matomo, Graylog).\n */\nexport class CrexLogger {\n private customerConfig!: ConfigInterface;\n public logger!: winston.Logger;\n\n /**\n * Initializes the logger instance if it hasn't been initialized yet.\n * Loads customer configuration and creates the logger with appropriate transports.\n * \n * @private\n */\n private async initLogger() {\n try {\n if (!this.customerConfig) {\n this.customerConfig = await getConfigs();\n }\n if (!this.logger) {\n this.logger = this.createLogger();\n }\n } catch (error) {\n console.error(\"Error initializing logger:\", error);\n }\n }\n\n /**\n * Logs a message with the specified level and optional category.\n * \n * @param options - Logging options\n * @param options.level - The log level (error, warn, info, etc.)\n * @param options.message - The message to log\n * @param options.category - Optional category for the log message\n */\n public async log({ level, message, category }: {\n level: LogLevelType,\n message: string,\n category?: LogCategoriesType\n }) {\n await this.initLogger();\n this.logger.log(level, message, category);\n }\n\n /**\n * Creates a new Winston logger instance with configured transports.\n * \n * @private\n * @returns A configured Winston logger instance\n */\n private createLogger() {\n return winston.createLogger({\n levels: LOG_LEVELS,\n transports: [\n new winston.transports.Console({\n level: this.customerConfig.logs.console.minimumLevel,\n silent: this.customerConfig.logs.console.silent,\n }),\n new MatomoTransport(this.customerConfig),\n new GraylogTransport(this.customerConfig),\n ],\n });\n }\n}","import Transport from \"winston-transport\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Matomo analytics.\n * Extends the base Winston transport with Matomo-specific functionality.\n */\nexport class MatomoTransport extends Transport {\n public matomoTransport: any;\n private configs: ConfigInterface;\n\n /**\n * Creates a new instance of MatomoTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n super({\n level: configs.logs.matomo.minimumLevel,\n silent: configs.logs.matomo.silent,\n });\n\n this.matomoTransport = new Transport();\n this.configs = configs;\n }\n\n /**\n * Logs a message to Matomo if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const matomoCategory = this.configs.logs.matomo.categoriesLevel\n\n if (matomoCategory.includes(info.category) || matomoCategory.includes(ALL)) {\n this.matomoTransport.log(info, callback);\n }\n }\n}\n","import Transport from \"winston-transport\";\nimport Graylog2Transport from \"winston-graylog2\";\nimport { LogCategoriesType, LogLevelType } from \"@c-rex/types\";\nimport { ALL } from \"@c-rex/constants\";\nimport { ConfigInterface } from \"@c-rex/interfaces\";\n\n/**\n * Winston transport for sending logs to Graylog.\n * Extends the base Winston transport with Graylog-specific functionality.\n */\nexport class GraylogTransport extends Transport {\n public graylogTransport: any;\n private configs: ConfigInterface\n\n /**\n * Creates a new instance of GraylogTransport.\n * \n * @param configs - The application configuration containing logging settings\n */\n constructor(configs: ConfigInterface) {\n if (!configs.logs.graylog.hostname || configs.logs.graylog.port === undefined) {\n throw new Error(\"Graylog hostname and port must be defined\");\n }\n\n super({\n level: configs.logs.graylog.minimumLevel,\n silent: configs.logs.graylog.silent,\n });\n\n this.configs = configs;\n this.graylogTransport = new Graylog2Transport({\n name: configs.logs.graylog.app,\n silent: configs.logs.graylog.silent,\n handleExceptions: false,\n graylog: {\n servers: [\n { host: \"localhost\", port: 12201 },\n { host: configs.logs.graylog.hostname, port: configs.logs.graylog.port }\n ],\n },\n });\n }\n\n /**\n * Logs a message to Graylog if the message category is included in the configured categories.\n * \n * @param info - The log information including level, message, and category\n * @param callback - Callback function to execute after logging\n */\n log(\n info: { level: LogLevelType, message: string, category: LogCategoriesType },\n callback: () => void,\n ): void {\n const graylogCategory = this.configs.logs.graylog.categoriesLevel\n\n if (graylogCategory.includes(info.category) || graylogCategory.includes(ALL)) {\n this.graylogTransport.log(info, callback);\n }\n }\n}\n","import { FLAGS_BY_LANG } from \"@c-rex/constants\";\nimport { AvailableVersionsInterface, informationUnitsResponseItem } from \"@c-rex/interfaces\";\n\nexport const _generateShaKey = (input: string): string => {\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n hash = (hash << 5) - hash + input.charCodeAt(i);\n hash |= 0;\n }\n return Math.abs(hash).toString(16);\n}\n\n/**\n * Retrieves the country code associated with a given language code.\n * @param lang - The language code to look up (e.g., \"en-US\")\n * @returns The corresponding country code, or the original language code if not found\n */\nexport const getCountryCodeByLang = (lang: string): string => {\n const mappedKeys = Object.keys(FLAGS_BY_LANG);\n\n if (!mappedKeys.includes(lang)) {\n return lang\n }\n\n type LangKey = keyof typeof FLAGS_BY_LANG;\n const country = FLAGS_BY_LANG[lang as LangKey]\n\n return country\n}\n\nexport const formatDateToLocale = (date: string, locale: string): string => {\n if (typeof date !== 'string' || !date) {\n return date;\n }\n\n const dateAux = new Date(date);\n return new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: 'long',\n year: 'numeric'\n }).format(dateAux);\n}\n\nexport const createAvailableVersionList = (\n versions: informationUnitsResponseItem[],\n articleLang: string,\n type: string\n): AvailableVersionsInterface[] => {\n\n const availableVersions = versions.map(item => {\n return {\n shortId: item.shortId,\n active: item.language === articleLang,\n lang: item.language,\n country: item.language.split(\"-\")[1],\n link: `/${type}/${item.shortId}`,\n }\n }).sort((a, b) => {\n if (a.lang < b.lang) return -1;\n if (a.lang > b.lang) return 1;\n return 0;\n }) as AvailableVersionsInterface[];\n\n return availableVersions;\n}","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges multiple class values into a single string using clsx and tailwind-merge.\n * Useful for conditionally applying Tailwind CSS classes.\n * @param inputs - Any number of class values (strings, objects, arrays, etc.)\n * @returns A merged string of class names optimized for Tailwind CSS\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { QueryParams } from '@c-rex/types';\n\n/**\n * Creates an array of parameter objects from a list of field values.\n * @param fieldsList - Array of field values to transform into parameter objects\n * @param key - The key to use for each parameter object (defaults to \"Fields\")\n * @returns An array of objects with key-value pairs\n */\nexport const createParams = (fieldsList: string[], key: string = \"Fields\") =>\n fieldsList.map((item) => ({\n key: key,\n value: item,\n }));\n\n/**\n * Generates a URL query string from an array of parameter objects.\n * @param params - Array of QueryParams objects containing key-value pairs\n * @returns A URL-encoded query string\n */\nexport const generateQueryParams = (params: QueryParams[]): string => {\n const queryParams = params\n .map((param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`)\n .join(\"&\");\n return queryParams;\n};\n","import { informationUnitsRenditions } from \"@c-rex/interfaces\";\nimport { DocumentsType } from \"@c-rex/types\";\n\n\nexport const getFileRenditions = ({ renditions }: { renditions: informationUnitsRenditions[] }): DocumentsType => {\n if (renditions == undefined || renditions.length == 0) {\n return {};\n }\n\n const filteredRenditions = renditions.filter(\n (item) => item.format != \"application/xhtml+xml\" && item.format != \"application/json\" && item.format != \"application/llm+xml\"\n );\n\n if (filteredRenditions.length == 0 || filteredRenditions[0] == undefined) {\n return {};\n }\n\n const result: {\n [key: string]: {\n view: string;\n download: string;\n }\n } = {}\n\n filteredRenditions.forEach((item) => {\n const key = item.format\n\n if (result[key] == undefined) {\n result[key] = {\n view: \"\",\n download: \"\"\n }\n }\n\n result[key].download = item.links.filter((link) => link.rel == \"download\")[0]?.href\n result[key].view = item.links.filter((link) => link.rel == \"view\")[0]?.href\n })\n\n return result\n}","import { CrexApi } from \"@c-rex/core\";\nimport { QueryParams } from \"@c-rex/types\";\nimport { generateQueryParams } from \"@c-rex/utils\";\nimport { Method } from \"axios\";\n\n/**\n * Base service class that provides common functionality for API interactions.\n * All specific service classes extend this base class.\n */\nexport class BaseService {\n protected api: CrexApi;\n private endpoint: string;\n\n /**\n * Creates a new instance of BaseService.\n * \n * @param endpoint - The API endpoint URL for this service\n */\n constructor(endpoint: string) {\n this.api = new CrexApi();\n this.endpoint = endpoint;\n }\n\n /**\n * Makes an API request to the specified endpoint.\n * \n * @param options - Request configuration options\n * @param options.path - Optional path to append to the endpoint\n * @param options.params - Optional query parameters to include in the request\n * @param options.method - HTTP method to use (defaults to 'get')\n * @param options.transformer - Optional function to transform the response data\n * @returns The response data, optionally transformed\n * @throws Error if the API request fails\n */\n protected async request<T>({\n path = \"\",\n method = \"get\",\n params = [],\n headers = {},\n transformer = (response: any) => response,\n }: {\n path?: string,\n method?: Method,\n params?: QueryParams[],\n headers?: any,\n transformer?: (data: any) => T,\n }): Promise<T> {\n\n let url = `${this.endpoint}${path}`;\n\n const queryParams = generateQueryParams(params);\n if (queryParams.length > 0) {\n url += `?${queryParams}`;\n }\n\n const response = await this.api.execute({\n url,\n method,\n headers,\n })\n\n return await transformer(response);\n }\n}\n\n","import { BaseService } from \"./baseService\";\nimport { informationUnitsRenditions } from \"@c-rex/interfaces\";\n\n/**\n * Service for interacting with renditions in the API.\n * Provides methods to retrieve and process different types of renditions.\n */\nexport class RenditionsService extends BaseService {\n constructor() {\n super(\"Renditions/\");\n }\n\n /**\n * Retrieves the HTML rendition from a list of renditions.\n * Filters for renditions with format 'application/xhtml+xml' and rel 'view'.\n * \n * @param renditions - Array of rendition objects to process\n * @returns A promise that resolves to the HTML content as a string, or empty string if no suitable rendition is found\n * @throws Error if the API request fails\n */\n public async getHTMLRendition({ renditions }: { renditions: informationUnitsRenditions[] }): Promise<string> {\n const filteredRenditions = renditions.filter(\n (item) => item.format == \"application/xhtml+xml\",\n );\n\n if (filteredRenditions.length == 0 || filteredRenditions[0] == undefined) return \"\";\n const item = filteredRenditions[0];\n const filteredLinks = item.links.filter((item) => item.rel == \"view\");\n\n if (filteredLinks.length == 0 || filteredLinks[0] == undefined) return \"\";\n const url = filteredLinks[0].href;\n const response = await this.api.execute({\n url,\n method: \"get\",\n headers: {\n Accept: \"application/xhtml+xml\",\n },\n })\n\n return response as string;\n }\n}","import { BaseService } from \"./baseService\";\nimport { createParams } from \"@c-rex/utils\";\nimport { DirectoryNodes, DirectoryNodesResponse } from \"@c-rex/interfaces\";\n\n/**\n * Service for interacting with directory nodes in the API.\n * Provides methods to retrieve directory node information.\n */\nexport class DirectoryNodesService extends BaseService {\n constructor() {\n super(\"DirectoryNodes/\");\n }\n\n /**\n * Retrieves a specific directory node by its ID.\n * \n * @param id - The unique identifier of the directory node\n * @returns A promise that resolves to the directory node data\n * @throws Error if the API request fails\n */\n public async getItem(id: string): Promise<DirectoryNodes> {\n return await this.request({\n path: id,\n });\n }\n\n /**\n * Retrieves a list of directory nodes based on specified filters.\n * \n * @param options - Options for filtering the directory nodes list\n * @param options.filters - Optional array of filter strings to apply\n * @returns A promise that resolves to the directory nodes response\n * @throws Error if the API request fails\n */\n public async getList({\n filters = [],\n }: {\n filters?: string[],\n }): Promise<DirectoryNodesResponse> {\n\n const remainFilters = createParams(filters, \"Filter\");\n\n return await this.request({\n params: {\n ...remainFilters,\n },\n });\n }\n}\n","import { CONTENT_LANG_KEY } from \"@c-rex/constants\";\nimport { DefaultRequest } from \"@c-rex/interfaces\";\nimport { DocumentTypesItem } from \"@c-rex/interfaces\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\nimport { cookies } from \"next/headers\";\n\nexport const transformDocumentTypes = (data: DefaultRequest<DocumentTypesItem>) => {\n const labels: { shortId: string, label: string }[] = [];\n const config = getConfigs();\n const contentLanguage = cookies().get(CONTENT_LANG_KEY)?.value || config.languageSwitcher.default;\n const language = contentLanguage.split(\"-\")[0];\n\n data.items.forEach((documentItem) => {\n const label = documentItem.labels.find((item) => item.language.toLowerCase() === language.toLowerCase());\n\n labels.push({\n shortId: documentItem.shortId,\n label: label ? label.value : \"\"\n })\n });\n\n return labels;\n};\n","import { transformDocumentTypes } from \"./transforms/documentTypes\";\nimport { BaseService } from \"./baseService\";\n\n/**\n * Service for interacting with document types in the API.\n * Provides methods to retrieve document type information.\n */\nexport class DocumentTypesService extends BaseService {\n constructor() {\n super(\"DocumentTypes/\");\n }\n\n /**\n * Retrieves document type labels for the specified fields.\n * \n * @returns A promise that resolves to an array of label strings\n * @throws Error if the API request fails\n */\n public async getLabels(): Promise<{ shortId: string, label: string }[]> {\n return await this.request({\n params: [{\n key: \"sparqlWhere\",\n value: \"?iu iirds:is-applicable-for-document-type ?s . ?iu iirds:has-topic-type <https://www.c-rex.net/iirds/td#Blogpost>\"\n }],\n transformer: transformDocumentTypes,\n });\n }\n}\n","import { CONTENT_LANG_KEY, EN_LANG, RESULT_TYPES } from \"@c-rex/constants\";\nimport {\n DefaultRequest,\n informationUnitsResponse,\n informationUnitsItems,\n} from \"@c-rex/interfaces\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\nimport { cookies } from 'next/headers';\nimport { getFileRenditions } from \"@c-rex/utils\";\nimport { CrexLogger } from '@c-rex/core/logger';\nimport { AutocompleteSuggestion } from \"@c-rex/interfaces\";\n\nexport const transformInformationUnits = async (data: DefaultRequest<informationUnitsItems>): Promise<informationUnitsResponse> => {\n const logger = new CrexLogger()\n const config = await getConfigs();\n const filteredTags: any = {}\n\n const items = data.items.map((item) => {\n const type = item.class.labels.filter((item) => item.language === EN_LANG)[0].value.toUpperCase();\n const files = getFileRenditions({ renditions: item?.renditions });\n\n let link = `/topics/${item.shortId}`;\n\n if (config.results.articlePageLayout == \"BLOG\") {\n link = `/blog/${item.shortId}`\n } else if (type == RESULT_TYPES.DOCUMENT) {\n link = `/documents/${item.shortId}`;\n }\n\n let title = \"NO TITLE\"\n let language = \"NO LANGUAGE\"\n\n try {\n if (item.titles) {\n title = item.titles[0].value\n language = item.titles[0].language\n } else {\n title = item.labels[0].value\n language = item.labels[0].language\n }\n } catch {\n logger.log({\n level: \"error\",\n message: `No label or title on item ${item.shortId}`\n })\n }\n\n return {\n language: language,\n title: title,\n type: type,\n localeType: \"\",\n shortId: item.shortId,\n disabled: config.results.disabledResults.includes(type as any),\n link: link,\n files\n }\n });\n\n if (data.tags) {\n const contentLang = (cookies().get(CONTENT_LANG_KEY)?.value || EN_LANG).toLowerCase()\n const splittedContentLang = contentLang.split(\"-\")[0];\n\n for (const [key, value] of Object.entries(data.tags)) {\n\n if (!value || !value.items || value.items.length === 0) {\n continue;\n }\n if (!config.search.tags.includes(key)) {\n continue;\n }\n\n const aux = value.items.map(item => {\n if (item?.shortId === undefined) return null\n if (Number(item.hits) === 0) return null\n if (item?.labels === undefined || item?.labels.length === 0) {\n logger.log({\n level: \"warning\",\n message: `No labels on item with id ${item.shortId} from category ${key}`\n })\n return null;\n }\n\n let label = \"\"\n\n for (const labelItem of item.labels) {\n if (labelItem.language === undefined) {\n logger.log({\n level: \"info\",\n message: `No language on label ${labelItem.value} from category ${key}`\n })\n label = labelItem.value\n break;\n }\n\n if (labelItem.language.toLowerCase() === contentLang || labelItem.language.toLowerCase() === splittedContentLang) {\n label = labelItem.value\n break;\n }\n\n label = labelItem.value\n\n //TODO: fallback in english\n }\n\n return {\n hits: item.hits,\n total: item.total,\n label: label,\n active: false,\n shortId: item.shortId,\n }\n }).filter((item) => item !== null)\n\n if (aux.length === 0) {\n continue;\n }\n\n filteredTags[key] = aux;\n }\n }\n\n return {\n tags: filteredTags,\n items: items,\n pageInfo: data.pageInfo,\n };\n};\n\nexport const transformSuggestions = (data: AutocompleteSuggestion, query: string) => {\n const suggestions: string[] = []\n const comparableList: string[] = []\n\n data.suggestions.forEach((item) => {\n suggestions.push(item.value);\n comparableList.push(item.value.toLowerCase())\n })\n\n if (!comparableList.includes(query.toLowerCase())) {\n return [query, ...suggestions];\n }\n\n return suggestions\n}","import {\n AutocompleteSuggestion,\n informationUnitsResponse,\n informationUnitsItems,\n} from \"@c-rex/interfaces\";\nimport { transformInformationUnits, transformSuggestions } from \"./transforms/information\";\nimport { createParams } from \"@c-rex/utils\";\nimport { BaseService } from \"./baseService\";\nimport { OperatorType, WildCardType } from \"@c-rex/types\";\nimport { OPERATOR_OPTIONS, WILD_CARD_OPTIONS } from \"@c-rex/constants\";\n\n/**\n * Service for interacting with information units in the API.\n * Provides methods to retrieve and search information units.\n */\nexport class InformationUnitsService extends BaseService {\n constructor() {\n super(\"InformationUnits/\");\n }\n\n /**\n * Retrieves a list of information units based on specified criteria.\n * \n * @param options - Options for filtering and paginating the information units list\n * @param options.queries - Optional search query string\n * @param options.page - Optional page number for pagination (defaults to 1)\n * @param options.fields - Optional array of fields to include in the response\n * @param options.filters - Optional array of filter strings to apply\n * @param options.languages - Optional array of language codes to filter by\n * @returns A promise that resolves to the information units response\n * @throws Error if the API request fails\n */\n public async getList({\n queries = \"\",\n page = 1,\n fields = [],\n filters = [],\n tags = [],\n restrict = [],\n languages = [],\n wildcard = WILD_CARD_OPTIONS.BOTH,\n operator = OPERATOR_OPTIONS.AND,\n like = false,\n }: {\n queries?: string,\n page?: number,\n filters?: string[],\n restrict?: string[],\n fields?: string[],\n tags?: string[],\n languages?: string[],\n wildcard?: WildCardType,\n operator?: OperatorType,\n like?: boolean,\n }): Promise<informationUnitsResponse> {\n const remainFields = createParams(fields, \"Fields\");\n const remainFilters = createParams(filters, \"Filter\");\n const restrictions = createParams(restrict, \"Restrict\");\n const remainTags = createParams(tags, \"Tags\");\n const languageParam = `VALUES ?lang { ${languages.map(lang => `\"${lang}\"`).join(\" \")} } ?s iirds:language ?lang .`\n\n const params = [\n { key: \"pageSize\", value: \"12\" },\n { key: \"wildcard\", value: wildcard.toLowerCase() },\n { key: \"PageNumber\", value: page.toString() },\n { key: \"Operator\", value: operator },\n { key: \"Like\", value: like.toString() },\n ...remainTags,\n ...remainFields,\n ...remainFilters,\n ...restrictions\n ];\n if (languages.length > 0) {\n params.push({ key: \"sparqlWhere\", value: languageParam });\n }\n if (queries.length > 0) {\n params.push(\n { key: \"Query\", value: queries },\n );\n }\n\n return await this.request({\n params: params,\n transformer: transformInformationUnits\n });\n }\n\n /**\n * Retrieves a specific information unit by its ID.\n * Includes renditions, directory nodes, version information, titles, languages, and labels.\n * \n * @param options - Options for retrieving the information unit\n * @param options.id - The unique identifier of the information unit\n * @returns A promise that resolves to the information unit data\n * @throws Error if the API request fails\n */\n public async getItem({ id, shouldGetAllFields = false }: { id: string, shouldGetAllFields?: boolean }): Promise<informationUnitsItems> {\n const params = []\n\n if (!shouldGetAllFields) {\n params.push(\n { key: \"Fields\", value: \"renditions\" },\n { key: \"Fields\", value: \"directoryNodes\" },\n { key: \"Fields\", value: \"versionOf\" },\n { key: \"Fields\", value: \"titles\" },\n { key: \"Fields\", value: \"languages\" },\n { key: \"Fields\", value: \"labels\" },\n { key: \"Fields\", value: \"packages\" },\n { key: \"Fields\", value: \"created\" },\n { key: \"Fields\", value: \"revision\" },\n );\n }\n\n return await this.request({\n path: id,\n params,\n });\n }\n\n /**\n * Retrieves autocomplete suggestions based on a query prefix.\n * \n * @param options - Options for retrieving suggestions\n * @param options.query - The query prefix to get suggestions for\n * @param options.language - The language of the suggestions\n * @returns A promise that resolves to an array of suggestion strings\n * @throws Error if the API request fails\n */\n public async getSuggestions(\n { query, language }: { query: string, language: string }\n ): Promise<string[]> {\n\n return await this.request({\n path: 'Suggestions',\n params: [\n { key: \"prefix\", value: query },\n { key: \"lang\", value: language },\n ],\n transformer: (data: AutocompleteSuggestion) => transformSuggestions(data, query)\n });\n }\n}\n","import { LanguageAndCountries } from \"@c-rex/interfaces\";\nimport { BaseService } from \"./baseService\";\nimport { getCountryCodeByLang } from \"@c-rex/utils\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\n\n/**\n * Service for interacting with language-related functionality in the API.\n * Provides methods to retrieve language and country information.\n */\nexport class LanguageService extends BaseService {\n constructor() {\n const configs = getConfigs()\n super(configs.languageSwitcher.endpoint);\n }\n\n /**\n * Retrieves a list of available languages and their associated countries.\n * Transforms the API response to include language code, country code, and original value.\n * \n * @returns A promise that resolves to an array of language and country objects\n * @throws Error if the API request fails\n */\n public async getLanguagesAndCountries(): Promise<LanguageAndCountries[]> {\n return await this.request({\n transformer: (data: { value: string; score: number }[]) => {\n const countryCodeList = data.map((item) => {\n /*\n api -> en, en-US\n default -> en-US. Then use EN-US \n\n api -> en\n default -> en-US. Then use EN\n */\n //should be abble to handle this items: en-US, en, pt, pt-PT, pt-BR \n\n const splittedValue = item.value.split(\"-\")\n const lang = splittedValue[0]\n let country = splittedValue[0]\n\n if (splittedValue.length > 1) {\n country = splittedValue[1]\n } else {\n country = getCountryCodeByLang(lang)\n }\n\n return {\n country: country,\n lang: lang,\n value: item.value,\n }\n })\n\n return countryCodeList.sort((a, b) => {\n return a.value.localeCompare(b.value)\n })\n },\n });\n }\n}\n","import { EN_LANG, RESULT_TYPES, UI_LANG_KEY } from \"@c-rex/constants\";\nimport { DefaultRequest, TopicsRequestItem, DefaultResponse, TopicsResponseItem } from \"@c-rex/interfaces\";\nimport { getConfigs } from \"@c-rex/utils/next-cookies\";\nimport { cookies } from 'next/headers';\nimport { CrexLogger } from '@c-rex/core/logger';\nimport { formatDateToLocale } from \"@c-rex/utils\";\n\nexport const transformTopics = async (data: DefaultRequest<TopicsRequestItem>): Promise<DefaultResponse<TopicsResponseItem, null>> => {\n const logger = new CrexLogger()\n const config = getConfigs();\n const uiLang = (cookies().get(UI_LANG_KEY)?.value || config.languageSwitcher.default).toLowerCase()\n\n const items = data.items.map(item => {\n const type = item.class.labels.filter((item) => item.language === EN_LANG)[0].value.toUpperCase();\n\n let link = `/topics/${item.shortId}`;\n\n if (config.results.articlePageLayout == \"BLOG\") {\n link = `/blog/${item.shortId}`\n } else if (type == RESULT_TYPES.DOCUMENT) {\n link = `/documents/${item.shortId}`;\n }\n\n let title = \"NO TITLE\"\n let language = \"NO LANGUAGE\"\n\n try {\n if (item.titles) {\n title = item.titles[0].value\n language = item.titles[0].language\n } else {\n title = item.labels[0].value\n language = item.labels[0].language\n }\n } catch {\n logger.log({\n level: \"error\",\n message: `No label or title on item ${item.shortId}`\n })\n }\n\n let renditionUrl = \"\"\n const renditions = item.renditions.filter(item => item.format == \"application/xhtml+xml\");\n if (renditions.length > 0 || renditions[0] !== undefined) {\n const filteredLinks = renditions[0].links.filter((renditionItem) => renditionItem.rel == \"view\");\n if (filteredLinks.length > 0 || filteredLinks[0] !== undefined) {\n renditionUrl = filteredLinks[0].href;\n };\n };\n\n let categoryType = type\n if (item.applicableForTypes && item.applicableForTypes.length > 0) {\n const splittedContentLang = uiLang.split(\"-\")[0];\n categoryType = item.applicableForTypes[0].labels.find(item => item.language === splittedContentLang)?.value || categoryType;\n }\n\n return {\n language: language,\n title: title,\n type: categoryType,\n localeType: \"\",\n shortId: item.shortId,\n created: formatDateToLocale(item.created, uiLang),\n disabled: config.results.disabledResults.includes(type as any),\n link: link,\n renditionUrl: renditionUrl,\n image: null,\n description: null,\n }\n })\n\n return {\n tags: null,\n items: items,\n pageInfo: data.pageInfo,\n };\n};\n","import { transformTopics } from \"./transforms/topics\";\nimport { createParams } from \"@c-rex/utils\";\nimport { BaseService } from \"./baseService\";\nimport { OperatorType, WildCardType } from \"@c-rex/types\";\nimport { OPERATOR_OPTIONS, WILD_CARD_OPTIONS } from \"@c-rex/constants\";\nimport { DefaultResponse, TopicsResponseItem } from \"@c-rex/interfaces\";\n\ntype getListProps = {\n queries?: string,\n page?: number,\n filters?: string[],\n fields?: string[],\n languages?: string[],\n wildcard?: WildCardType,\n operator?: OperatorType,\n like?: boolean,\n pageSize?: number\n}\n\n\n/**\n * Service for interacting with information units in the API.\n * Provides methods to retrieve and search information units.\n */\nexport class TopicsService extends BaseService {\n constructor() {\n super(\"Topics/\");\n }\n\n /**\n * Retrieves a list of topics based on specified criteria.\n * \n * @param options - Options for filtering and paginating the topics list\n * @param options.queries - Optional search query string\n * @param options.page - Optional page number for pagination (defaults to 1)\n * @param options.fields - Optional array of fields to include in the response\n * @param options.filters - Optional array of filter strings to apply\n * @param options.languages - Optional array of language codes to filter by\n * @returns A promise that resolves to the information units response\n * @throws Error if the API request fails\n */\n public async getList({\n queries = \"\",\n page = 1,\n fields = [],\n filters = [],\n languages = [],\n wildcard = WILD_CARD_OPTIONS.BOTH,\n operator = OPERATOR_OPTIONS.AND,\n pageSize = 12\n }: getListProps): Promise<DefaultResponse<TopicsResponseItem, null>> {\n const remainFields = createParams(fields, \"Fields\");\n const remainFilters = createParams(filters, \"Filter\");\n\n const params = [\n { key: \"pageSize\", value: pageSize.toString() },\n { key: \"PageNumber\", value: page.toString() },\n { key: \"Sort\", value: \"-created;-score\" },\n { key: \"Operator\", value: operator },\n { key: \"wildcard\", value: wildcard.toLowerCase() },\n ...remainFields,\n ...remainFilters,\n ];\n\n if (languages.length > 0) {\n const languageParam = `VALUES ?lang { ${languages.map(lang => `\"${lang}\"`).join(\" \")} } ?s iirds:language ?lang .`\n params.push({ key: \"sparqlWhere\", value: languageParam });\n }\n if (queries.length > 0) {\n params.push(\n { key: \"Query\", value: queries },\n );\n }\n\n return await this.request({\n params: params,\n transformer: transformTopics\n });\n }\n}\n"],"mappings":"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","names":["Transport","Transport","item","getConfigs","cookies","getConfigs","cookies","CrexLogger","getConfigs","item","cookies","getConfigs","getConfigs","cookies","CrexLogger","CrexLogger","getConfigs","cookies","item"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c-rex/services",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "module": "./dist/index.mjs",