@c-rex/api 0.1.14
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 +39 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.js +553 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +522 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +53 -0
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Retrieves a cookie value by key from the request
|
|
5
|
+
* @param {NextRequest} req - The Next.js request object
|
|
6
|
+
* @returns {Promise<NextResponse>} JSON response containing the cookie key-value pair or error
|
|
7
|
+
*/
|
|
8
|
+
declare const getCookieFromServer: (req: NextRequest) => Promise<NextResponse>;
|
|
9
|
+
/**
|
|
10
|
+
* Sets a cookie with the specified key, value and options
|
|
11
|
+
* @param {NextRequest} req - The Next.js request object
|
|
12
|
+
* @returns {Promise<NextResponse>} JSON response indicating success or error
|
|
13
|
+
* @throws {Error} If key or value are missing in the request body
|
|
14
|
+
*/
|
|
15
|
+
declare const saveCookie: (req: NextRequest) => Promise<NextResponse>;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Retrieves an access token using client credentials flow from the configured OIDC provider
|
|
19
|
+
*
|
|
20
|
+
* @returns NextResponse with success status or error message
|
|
21
|
+
* @throws Error if token retrieval fails
|
|
22
|
+
*/
|
|
23
|
+
declare const getTokenMethod: () => Promise<NextResponse>;
|
|
24
|
+
declare const discoverIssuerMethod: () => Promise<NextResponse>;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Handles POST requests for RPC (Remote Procedure Call) functionality.
|
|
28
|
+
* Allows calling methods on registered services with parameters.
|
|
29
|
+
*
|
|
30
|
+
* @param req - The Next.js request object containing the RPC payload
|
|
31
|
+
* @returns A JSON response with the result of the method call, or an error if the service or method is not found
|
|
32
|
+
*/
|
|
33
|
+
declare const POST: (req: NextRequest) => Promise<NextResponse<{
|
|
34
|
+
error: string;
|
|
35
|
+
}> | NextResponse<{
|
|
36
|
+
data: any;
|
|
37
|
+
}>>;
|
|
38
|
+
|
|
39
|
+
export { POST, discoverIssuerMethod, getCookieFromServer, getTokenMethod, saveCookie };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Retrieves a cookie value by key from the request
|
|
5
|
+
* @param {NextRequest} req - The Next.js request object
|
|
6
|
+
* @returns {Promise<NextResponse>} JSON response containing the cookie key-value pair or error
|
|
7
|
+
*/
|
|
8
|
+
declare const getCookieFromServer: (req: NextRequest) => Promise<NextResponse>;
|
|
9
|
+
/**
|
|
10
|
+
* Sets a cookie with the specified key, value and options
|
|
11
|
+
* @param {NextRequest} req - The Next.js request object
|
|
12
|
+
* @returns {Promise<NextResponse>} JSON response indicating success or error
|
|
13
|
+
* @throws {Error} If key or value are missing in the request body
|
|
14
|
+
*/
|
|
15
|
+
declare const saveCookie: (req: NextRequest) => Promise<NextResponse>;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Retrieves an access token using client credentials flow from the configured OIDC provider
|
|
19
|
+
*
|
|
20
|
+
* @returns NextResponse with success status or error message
|
|
21
|
+
* @throws Error if token retrieval fails
|
|
22
|
+
*/
|
|
23
|
+
declare const getTokenMethod: () => Promise<NextResponse>;
|
|
24
|
+
declare const discoverIssuerMethod: () => Promise<NextResponse>;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Handles POST requests for RPC (Remote Procedure Call) functionality.
|
|
28
|
+
* Allows calling methods on registered services with parameters.
|
|
29
|
+
*
|
|
30
|
+
* @param req - The Next.js request object containing the RPC payload
|
|
31
|
+
* @returns A JSON response with the result of the method call, or an error if the service or method is not found
|
|
32
|
+
*/
|
|
33
|
+
declare const POST: (req: NextRequest) => Promise<NextResponse<{
|
|
34
|
+
error: string;
|
|
35
|
+
}> | NextResponse<{
|
|
36
|
+
data: any;
|
|
37
|
+
}>>;
|
|
38
|
+
|
|
39
|
+
export { POST, discoverIssuerMethod, getCookieFromServer, getTokenMethod, saveCookie };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
POST: () => POST,
|
|
24
|
+
discoverIssuerMethod: () => discoverIssuerMethod,
|
|
25
|
+
getCookieFromServer: () => getCookieFromServer,
|
|
26
|
+
getTokenMethod: () => getTokenMethod,
|
|
27
|
+
saveCookie: () => saveCookie
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(index_exports);
|
|
30
|
+
|
|
31
|
+
// src/cookies.ts
|
|
32
|
+
var import_server = require("next/server");
|
|
33
|
+
var import_headers = require("next/headers");
|
|
34
|
+
|
|
35
|
+
// ../constants/src/index.ts
|
|
36
|
+
var CONTENT_LANG_KEY = "CONTENT_LANG_KEY";
|
|
37
|
+
var FLAGS_BY_LANG = {
|
|
38
|
+
"en": "US",
|
|
39
|
+
"de": "DE"
|
|
40
|
+
};
|
|
41
|
+
var EN_LANG = "en";
|
|
42
|
+
var TOPIC = "TOPIC";
|
|
43
|
+
var DOCUMENT = "DOCUMENT";
|
|
44
|
+
var PACKAGE = "PACKAGE";
|
|
45
|
+
var FRAGMENT = "FRAGMENT";
|
|
46
|
+
var RESULT_TYPES = {
|
|
47
|
+
TOPIC,
|
|
48
|
+
DOCUMENT,
|
|
49
|
+
PACKAGE,
|
|
50
|
+
FRAGMENT
|
|
51
|
+
};
|
|
52
|
+
var DEFAULT_COOKIE_LIMIT = 30 * 24 * 60 * 60 * 1e3;
|
|
53
|
+
var CREX_TOKEN_HEADER_KEY = "crex-token";
|
|
54
|
+
var WILD_CARD_OPTIONS = {
|
|
55
|
+
BOTH: "BOTH",
|
|
56
|
+
END: "END",
|
|
57
|
+
START: "START",
|
|
58
|
+
NONE: "NONE"
|
|
59
|
+
};
|
|
60
|
+
var OPERATOR_OPTIONS = {
|
|
61
|
+
AND: "AND",
|
|
62
|
+
OR: "OR"
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// src/cookies.ts
|
|
66
|
+
var getCookieFromServer = async (req) => {
|
|
67
|
+
const key = req.nextUrl.searchParams.get("key");
|
|
68
|
+
if (!key) return import_server.NextResponse.json({ error: "Missing key" }, { status: 400 });
|
|
69
|
+
const value = (0, import_headers.cookies)().get(key);
|
|
70
|
+
const response = import_server.NextResponse.json({ key, value: value?.value || null });
|
|
71
|
+
return response;
|
|
72
|
+
};
|
|
73
|
+
var saveCookie = async (req) => {
|
|
74
|
+
const { key, value, maxAge: maxAgeAux } = await req.json();
|
|
75
|
+
let maxAge = maxAgeAux;
|
|
76
|
+
if (!key || value === void 0) {
|
|
77
|
+
return import_server.NextResponse.json({ error: "Missing key or value" }, { status: 400 });
|
|
78
|
+
}
|
|
79
|
+
if (maxAge === void 0) {
|
|
80
|
+
maxAge = DEFAULT_COOKIE_LIMIT;
|
|
81
|
+
}
|
|
82
|
+
const response = import_server.NextResponse.json({ success: true });
|
|
83
|
+
response.cookies.set({
|
|
84
|
+
name: key,
|
|
85
|
+
value,
|
|
86
|
+
secure: process.env.NODE_ENV === "production",
|
|
87
|
+
sameSite: "lax",
|
|
88
|
+
path: "/",
|
|
89
|
+
maxAge
|
|
90
|
+
});
|
|
91
|
+
return response;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// src/OIDC.ts
|
|
95
|
+
var import_server2 = require("next/server");
|
|
96
|
+
var import_OIDC = require("@c-rex/core/OIDC");
|
|
97
|
+
var import_sdk = require("@c-rex/core/sdk");
|
|
98
|
+
var getTokenMethod = async () => {
|
|
99
|
+
try {
|
|
100
|
+
const { token, expiresAt, error } = await (0, import_OIDC.getToken)();
|
|
101
|
+
if (error) {
|
|
102
|
+
return import_server2.NextResponse.json({ error }, { status: 500 });
|
|
103
|
+
}
|
|
104
|
+
const response = import_server2.NextResponse.json({ token });
|
|
105
|
+
response.cookies.set({
|
|
106
|
+
name: CREX_TOKEN_HEADER_KEY,
|
|
107
|
+
value: token,
|
|
108
|
+
httpOnly: true,
|
|
109
|
+
secure: process.env.NODE_ENV === "production",
|
|
110
|
+
sameSite: "lax",
|
|
111
|
+
path: "/",
|
|
112
|
+
expires: expiresAt ? new Date(expiresAt * 1e3) : void 0
|
|
113
|
+
});
|
|
114
|
+
return response;
|
|
115
|
+
} catch (error) {
|
|
116
|
+
return import_server2.NextResponse.json({ error: String(error) }, { status: 500 });
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
var discoverIssuerMethod = async () => {
|
|
120
|
+
try {
|
|
121
|
+
const metadata = await (0, import_OIDC.getIssuerMetadata)();
|
|
122
|
+
const sdk = new import_sdk.CrexSDK();
|
|
123
|
+
const config = sdk.getServerConfig();
|
|
124
|
+
sdk.updateConfigProp("OIDC", {
|
|
125
|
+
...config.OIDC,
|
|
126
|
+
issuerMetadata: metadata
|
|
127
|
+
});
|
|
128
|
+
const response = import_server2.NextResponse.json({ issuerMetadata: metadata });
|
|
129
|
+
return response;
|
|
130
|
+
} catch (error) {
|
|
131
|
+
return import_server2.NextResponse.json({ error: String(error) }, { status: 500 });
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// src/rpc.ts
|
|
136
|
+
var import_logger3 = require("@c-rex/core/logger");
|
|
137
|
+
|
|
138
|
+
// ../services/src/baseService.ts
|
|
139
|
+
var import_requests = require("@c-rex/core/requests");
|
|
140
|
+
|
|
141
|
+
// ../utils/src/utils.ts
|
|
142
|
+
var getCountryCodeByLang = (lang) => {
|
|
143
|
+
const mappedKeys = Object.keys(FLAGS_BY_LANG);
|
|
144
|
+
if (!mappedKeys.includes(lang)) {
|
|
145
|
+
return lang;
|
|
146
|
+
}
|
|
147
|
+
const country = FLAGS_BY_LANG[lang];
|
|
148
|
+
return country;
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
// ../utils/src/classMerge.ts
|
|
152
|
+
var import_clsx = require("clsx");
|
|
153
|
+
var import_tailwind_merge = require("tailwind-merge");
|
|
154
|
+
|
|
155
|
+
// ../utils/src/params.ts
|
|
156
|
+
var createParams = (fieldsList, key = "Fields") => {
|
|
157
|
+
if (!fieldsList || fieldsList.length === 0) {
|
|
158
|
+
return [];
|
|
159
|
+
}
|
|
160
|
+
return fieldsList.map((item) => ({
|
|
161
|
+
key,
|
|
162
|
+
value: item
|
|
163
|
+
}));
|
|
164
|
+
};
|
|
165
|
+
var generateQueryParams = (params) => {
|
|
166
|
+
const queryParams = params.map((param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`).join("&");
|
|
167
|
+
return queryParams;
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
// ../utils/src/renditions.ts
|
|
171
|
+
var getFileRenditions = ({ renditions }) => {
|
|
172
|
+
if (renditions == void 0 || renditions.length == 0) {
|
|
173
|
+
return {};
|
|
174
|
+
}
|
|
175
|
+
const filteredRenditions = renditions.filter(
|
|
176
|
+
(item) => item.format != "application/xhtml+xml" && item.format != "application/json" && item.format != "application/llm+xml"
|
|
177
|
+
);
|
|
178
|
+
if (filteredRenditions.length == 0 || filteredRenditions[0] == void 0) {
|
|
179
|
+
return {};
|
|
180
|
+
}
|
|
181
|
+
const result = {};
|
|
182
|
+
filteredRenditions.forEach((item) => {
|
|
183
|
+
const key = item.format;
|
|
184
|
+
if (result[key] == void 0) {
|
|
185
|
+
result[key] = {
|
|
186
|
+
view: "",
|
|
187
|
+
download: ""
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
result[key].download = item.links.filter((link) => link.rel == "download")[0]?.href;
|
|
191
|
+
result[key].view = item.links.filter((link) => link.rel == "view")[0]?.href;
|
|
192
|
+
});
|
|
193
|
+
return result;
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
// ../services/src/baseService.ts
|
|
197
|
+
var BaseService = class {
|
|
198
|
+
api;
|
|
199
|
+
endpoint;
|
|
200
|
+
/**
|
|
201
|
+
* Creates a new instance of BaseService.
|
|
202
|
+
*
|
|
203
|
+
* @param endpoint - The API endpoint URL for this service
|
|
204
|
+
*/
|
|
205
|
+
constructor(endpoint) {
|
|
206
|
+
this.api = new import_requests.CrexApi();
|
|
207
|
+
this.endpoint = endpoint;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Makes an API request to the specified endpoint.
|
|
211
|
+
*
|
|
212
|
+
* @param options - Request configuration options
|
|
213
|
+
* @param options.path - Optional path to append to the endpoint
|
|
214
|
+
* @param options.params - Optional query parameters to include in the request
|
|
215
|
+
* @param options.method - HTTP method to use (defaults to 'get')
|
|
216
|
+
* @param options.transformer - Optional function to transform the response data
|
|
217
|
+
* @returns The response data, optionally transformed
|
|
218
|
+
* @throws Error if the API request fails
|
|
219
|
+
*/
|
|
220
|
+
async request({
|
|
221
|
+
path = "",
|
|
222
|
+
method = "get",
|
|
223
|
+
params = [],
|
|
224
|
+
headers = {},
|
|
225
|
+
transformer = (response) => response
|
|
226
|
+
}) {
|
|
227
|
+
let url = `${this.endpoint}${path}`;
|
|
228
|
+
const queryParams = generateQueryParams(params);
|
|
229
|
+
if (queryParams.length > 0) {
|
|
230
|
+
url += `?${queryParams}`;
|
|
231
|
+
}
|
|
232
|
+
const response = await this.api.execute({
|
|
233
|
+
url,
|
|
234
|
+
method,
|
|
235
|
+
headers
|
|
236
|
+
});
|
|
237
|
+
return await transformer(response);
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
// ../services/src/transforms/documentTypes.ts
|
|
242
|
+
var import_sdk2 = require("@c-rex/core/sdk");
|
|
243
|
+
var import_headers2 = require("next/headers");
|
|
244
|
+
|
|
245
|
+
// ../services/src/transforms/information.ts
|
|
246
|
+
var import_headers3 = require("next/headers");
|
|
247
|
+
var import_logger = require("@c-rex/core/logger");
|
|
248
|
+
var import_sdk3 = require("@c-rex/core/sdk");
|
|
249
|
+
var transformInformationUnits = async (data) => {
|
|
250
|
+
const logger = new import_logger.CrexLogger();
|
|
251
|
+
const sdk = new import_sdk3.CrexSDK();
|
|
252
|
+
const frontEndConfig = sdk.getClientConfig();
|
|
253
|
+
const backEndConfig = sdk.getServerConfig();
|
|
254
|
+
const filteredTags = {};
|
|
255
|
+
const items = data.items.map((item) => {
|
|
256
|
+
const type = item.class.labels.filter((item2) => item2.language === EN_LANG)[0].value.toUpperCase();
|
|
257
|
+
const files = getFileRenditions({ renditions: item?.renditions });
|
|
258
|
+
let link = `/topics/${item.shortId}`;
|
|
259
|
+
if (frontEndConfig.results.articlePageLayout == "BLOG") {
|
|
260
|
+
link = `/blog/${item.shortId}`;
|
|
261
|
+
} else if (type == RESULT_TYPES.DOCUMENT) {
|
|
262
|
+
link = `/documents/${item.shortId}`;
|
|
263
|
+
}
|
|
264
|
+
let title = "NO TITLE";
|
|
265
|
+
if (item.titles) {
|
|
266
|
+
title = item.titles[0].value;
|
|
267
|
+
} else if (item.labels) {
|
|
268
|
+
title = item.labels[0].value;
|
|
269
|
+
}
|
|
270
|
+
let language = "NO LANGUAGE";
|
|
271
|
+
if (item.languages.length > 0) {
|
|
272
|
+
language = item.languages[0];
|
|
273
|
+
}
|
|
274
|
+
let versionOf = [];
|
|
275
|
+
if (item?.versionOf && item.versionOf?.labels) {
|
|
276
|
+
versionOf = item.versionOf.labels.map((item2) => item2.language).filter((value) => value !== void 0);
|
|
277
|
+
}
|
|
278
|
+
return {
|
|
279
|
+
language,
|
|
280
|
+
title,
|
|
281
|
+
type,
|
|
282
|
+
localeType: "",
|
|
283
|
+
revision: item.revision,
|
|
284
|
+
shortId: item.shortId,
|
|
285
|
+
multipleVersions: versionOf,
|
|
286
|
+
disabled: frontEndConfig.results.disabledResults.includes(type),
|
|
287
|
+
link,
|
|
288
|
+
files
|
|
289
|
+
};
|
|
290
|
+
});
|
|
291
|
+
if (data.tags) {
|
|
292
|
+
const contentLang = ((0, import_headers3.cookies)().get(CONTENT_LANG_KEY)?.value || EN_LANG).toLowerCase();
|
|
293
|
+
const splittedContentLang = contentLang.split("-")[0];
|
|
294
|
+
for (const [key, value] of Object.entries(data.tags)) {
|
|
295
|
+
if (!value || !value.items || value.items.length === 0) {
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
if (!backEndConfig.search.tags.includes(key)) {
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
const aux = value.items.map((item) => {
|
|
302
|
+
if (item?.shortId === void 0) return null;
|
|
303
|
+
if (Number(item.hits) === 0) return null;
|
|
304
|
+
if (item?.labels === void 0 || item?.labels.length === 0) {
|
|
305
|
+
logger.log({
|
|
306
|
+
level: "warning",
|
|
307
|
+
message: `No labels on item with id ${item.shortId} from category ${key}`
|
|
308
|
+
});
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
let label = "";
|
|
312
|
+
for (const labelItem of item.labels) {
|
|
313
|
+
if (labelItem.language === void 0) {
|
|
314
|
+
logger.log({
|
|
315
|
+
level: "info",
|
|
316
|
+
message: `No language on label ${labelItem.value} from category ${key}`
|
|
317
|
+
});
|
|
318
|
+
label = labelItem.value;
|
|
319
|
+
break;
|
|
320
|
+
}
|
|
321
|
+
if (labelItem.language.toLowerCase() === contentLang || labelItem.language.toLowerCase() === splittedContentLang) {
|
|
322
|
+
label = labelItem.value;
|
|
323
|
+
break;
|
|
324
|
+
}
|
|
325
|
+
label = labelItem.value;
|
|
326
|
+
}
|
|
327
|
+
return {
|
|
328
|
+
hits: item.hits,
|
|
329
|
+
total: item.total,
|
|
330
|
+
label,
|
|
331
|
+
active: false,
|
|
332
|
+
shortId: item.shortId
|
|
333
|
+
};
|
|
334
|
+
}).filter((item) => item !== null);
|
|
335
|
+
if (aux.length === 0) {
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
filteredTags[key] = aux;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return {
|
|
342
|
+
tags: filteredTags,
|
|
343
|
+
items,
|
|
344
|
+
pageInfo: data.pageInfo
|
|
345
|
+
};
|
|
346
|
+
};
|
|
347
|
+
var transformSuggestions = (data, query) => {
|
|
348
|
+
const suggestions = [];
|
|
349
|
+
const comparableList = [];
|
|
350
|
+
data.suggestions.forEach((item) => {
|
|
351
|
+
suggestions.push(item.value);
|
|
352
|
+
comparableList.push(item.value.toLowerCase());
|
|
353
|
+
});
|
|
354
|
+
if (!comparableList.includes(query.toLowerCase())) {
|
|
355
|
+
return [query, ...suggestions];
|
|
356
|
+
}
|
|
357
|
+
return suggestions;
|
|
358
|
+
};
|
|
359
|
+
|
|
360
|
+
// ../services/src/informationUnits.ts
|
|
361
|
+
var InformationUnitsService = class extends BaseService {
|
|
362
|
+
constructor() {
|
|
363
|
+
super("InformationUnits/");
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Retrieves a list of information units based on specified criteria.
|
|
367
|
+
*
|
|
368
|
+
* @param options - Options for filtering and paginating the information units list
|
|
369
|
+
* @param options.queries - Optional search query string
|
|
370
|
+
* @param options.page - Optional page number for pagination (defaults to 1)
|
|
371
|
+
* @param options.fields - Optional array of fields to include in the response
|
|
372
|
+
* @param options.filters - Optional array of filter strings to apply
|
|
373
|
+
* @param options.languages - Optional array of language codes to filter by
|
|
374
|
+
* @returns A promise that resolves to the information units response
|
|
375
|
+
* @throws Error if the API request fails
|
|
376
|
+
*/
|
|
377
|
+
async getList({
|
|
378
|
+
queries = "",
|
|
379
|
+
page = 1,
|
|
380
|
+
fields = [],
|
|
381
|
+
filters = [],
|
|
382
|
+
tags = [],
|
|
383
|
+
restrict = [],
|
|
384
|
+
languages = [],
|
|
385
|
+
wildcard = WILD_CARD_OPTIONS.BOTH,
|
|
386
|
+
operator = OPERATOR_OPTIONS.AND,
|
|
387
|
+
like = false
|
|
388
|
+
}) {
|
|
389
|
+
const remainFields = createParams(fields, "Fields");
|
|
390
|
+
const remainFilters = createParams(filters, "Filter");
|
|
391
|
+
const restrictions = createParams(restrict, "Restrict");
|
|
392
|
+
const remainTags = createParams(tags, "Tags");
|
|
393
|
+
const params = [
|
|
394
|
+
{ key: "pageSize", value: "12" },
|
|
395
|
+
{ key: "wildcard", value: wildcard.toLowerCase() },
|
|
396
|
+
{ key: "PageNumber", value: page.toString() },
|
|
397
|
+
{ key: "Operator", value: operator },
|
|
398
|
+
{ key: "Like", value: like.toString() },
|
|
399
|
+
...remainTags,
|
|
400
|
+
...remainFields,
|
|
401
|
+
...remainFilters,
|
|
402
|
+
...restrictions
|
|
403
|
+
];
|
|
404
|
+
if (languages.length > 0) {
|
|
405
|
+
const languageParam = `VALUES ?lang { ${languages.map((lang) => `"${lang}"`).join(" ")} } ?s iirds:language ?lang .`;
|
|
406
|
+
params.push({ key: "sparqlWhere", value: languageParam });
|
|
407
|
+
}
|
|
408
|
+
if (queries.length > 0) {
|
|
409
|
+
params.push(
|
|
410
|
+
{ key: "Query", value: queries }
|
|
411
|
+
);
|
|
412
|
+
}
|
|
413
|
+
return await this.request({
|
|
414
|
+
params,
|
|
415
|
+
transformer: transformInformationUnits
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Retrieves a specific information unit by its ID.
|
|
420
|
+
* Includes renditions, directory nodes, version information, titles, languages, and labels.
|
|
421
|
+
*
|
|
422
|
+
* @param options - Options for retrieving the information unit
|
|
423
|
+
* @param options.id - The unique identifier of the information unit
|
|
424
|
+
* @returns A promise that resolves to the information unit data
|
|
425
|
+
* @throws Error if the API request fails
|
|
426
|
+
*/
|
|
427
|
+
async getItem({ id, shouldGetAllFields = false }) {
|
|
428
|
+
const params = [];
|
|
429
|
+
if (!shouldGetAllFields) {
|
|
430
|
+
params.push(
|
|
431
|
+
{ key: "Fields", value: "renditions" },
|
|
432
|
+
{ key: "Fields", value: "directoryNodes" },
|
|
433
|
+
{ key: "Fields", value: "versionOf" },
|
|
434
|
+
{ key: "Fields", value: "titles" },
|
|
435
|
+
{ key: "Fields", value: "languages" },
|
|
436
|
+
{ key: "Fields", value: "labels" },
|
|
437
|
+
{ key: "Fields", value: "packages" },
|
|
438
|
+
{ key: "Fields", value: "created" },
|
|
439
|
+
{ key: "Fields", value: "revision" }
|
|
440
|
+
);
|
|
441
|
+
}
|
|
442
|
+
return await this.request({
|
|
443
|
+
path: id,
|
|
444
|
+
params
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Retrieves autocomplete suggestions based on a query prefix.
|
|
449
|
+
*
|
|
450
|
+
* @param options - Options for retrieving suggestions
|
|
451
|
+
* @param options.query - The query prefix to get suggestions for
|
|
452
|
+
* @param options.language - The language of the suggestions
|
|
453
|
+
* @returns A promise that resolves to an array of suggestion strings
|
|
454
|
+
* @throws Error if the API request fails
|
|
455
|
+
*/
|
|
456
|
+
async getSuggestions({ query, language }) {
|
|
457
|
+
return await this.request({
|
|
458
|
+
path: "Suggestions",
|
|
459
|
+
params: [
|
|
460
|
+
{ key: "prefix", value: query },
|
|
461
|
+
{ key: "lang", value: language }
|
|
462
|
+
],
|
|
463
|
+
transformer: (data) => transformSuggestions(data, query)
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
};
|
|
467
|
+
|
|
468
|
+
// ../services/src/language.ts
|
|
469
|
+
var import_sdk4 = require("@c-rex/core/sdk");
|
|
470
|
+
var LanguageService = class extends BaseService {
|
|
471
|
+
constructor() {
|
|
472
|
+
const sdk = new import_sdk4.CrexSDK();
|
|
473
|
+
const configs = sdk.getClientConfig();
|
|
474
|
+
super(configs.languageSwitcher.endpoint);
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Retrieves a list of available languages and their associated countries.
|
|
478
|
+
* Transforms the API response to include language code, country code, and original value.
|
|
479
|
+
*
|
|
480
|
+
* @returns A promise that resolves to an array of language and country objects
|
|
481
|
+
* @throws Error if the API request fails
|
|
482
|
+
*/
|
|
483
|
+
async getLanguagesAndCountries() {
|
|
484
|
+
return await this.request({
|
|
485
|
+
transformer: (data) => {
|
|
486
|
+
const countryCodeList = data.map((item) => {
|
|
487
|
+
const splittedValue = item.value.split("-");
|
|
488
|
+
const lang = splittedValue[0];
|
|
489
|
+
let country = splittedValue[0];
|
|
490
|
+
if (splittedValue.length > 1) {
|
|
491
|
+
country = splittedValue[1];
|
|
492
|
+
} else {
|
|
493
|
+
country = getCountryCodeByLang(lang);
|
|
494
|
+
}
|
|
495
|
+
return {
|
|
496
|
+
country,
|
|
497
|
+
lang,
|
|
498
|
+
value: item.value
|
|
499
|
+
};
|
|
500
|
+
});
|
|
501
|
+
return countryCodeList.sort((a, b) => {
|
|
502
|
+
return a.value.localeCompare(b.value);
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
};
|
|
508
|
+
|
|
509
|
+
// ../services/src/transforms/topics.ts
|
|
510
|
+
var import_headers4 = require("next/headers");
|
|
511
|
+
var import_logger2 = require("@c-rex/core/logger");
|
|
512
|
+
var import_sdk5 = require("@c-rex/core/sdk");
|
|
513
|
+
|
|
514
|
+
// src/rpc.ts
|
|
515
|
+
var import_server3 = require("next/server");
|
|
516
|
+
var serviceRegistry = {
|
|
517
|
+
InformationUnitsService,
|
|
518
|
+
CrexLogger: import_logger3.CrexLogger,
|
|
519
|
+
LanguageService
|
|
520
|
+
};
|
|
521
|
+
var POST = async (req) => {
|
|
522
|
+
try {
|
|
523
|
+
const { method, params } = await req.json();
|
|
524
|
+
const [serviceName, methodName] = method.split(".");
|
|
525
|
+
const ServiceClass = serviceRegistry[serviceName];
|
|
526
|
+
if (!ServiceClass) {
|
|
527
|
+
return import_server3.NextResponse.json({ error: `Service '${serviceName}' not found` }, { status: 404 });
|
|
528
|
+
}
|
|
529
|
+
const serviceInstance = new ServiceClass();
|
|
530
|
+
const handler = serviceInstance[methodName];
|
|
531
|
+
if (typeof handler !== "function") {
|
|
532
|
+
return import_server3.NextResponse.json({ error: `Method '${methodName}' not found on '${serviceName}'` }, { status: 404 });
|
|
533
|
+
}
|
|
534
|
+
const result = await handler.call(serviceInstance, params);
|
|
535
|
+
return import_server3.NextResponse.json({ data: result });
|
|
536
|
+
} catch (error) {
|
|
537
|
+
const logger = new import_logger3.CrexLogger();
|
|
538
|
+
logger.log({
|
|
539
|
+
level: "error",
|
|
540
|
+
message: `RPC.POST error: ${error}`
|
|
541
|
+
});
|
|
542
|
+
return import_server3.NextResponse.json({ error: String(error) }, { status: 500 });
|
|
543
|
+
}
|
|
544
|
+
};
|
|
545
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
546
|
+
0 && (module.exports = {
|
|
547
|
+
POST,
|
|
548
|
+
discoverIssuerMethod,
|
|
549
|
+
getCookieFromServer,
|
|
550
|
+
getTokenMethod,
|
|
551
|
+
saveCookie
|
|
552
|
+
});
|
|
553
|
+
//# sourceMappingURL=index.js.map
|