emilsoftware-utilities 2.0.0-dev.24 → 2.0.0-dev.25
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/README.MD +185 -182
- package/dist/ContractGenerator.js.map +1 -1
- package/dist/DailyFileTransport.js.map +1 -1
- package/dist/DatabaseUpdater.js +24 -24
- package/dist/DatabaseUpdater.js.map +1 -1
- package/dist/EmilsoftwareModule.js.map +1 -1
- package/dist/ExecutionTimeLogger.js.map +1 -1
- package/dist/Orm.js.map +1 -1
- package/dist/RoutesLoggerMiddleware.js.map +1 -1
- package/dist/Utilities.js.map +1 -1
- package/dist/accessi-module/AccessiModule.js.map +1 -1
- package/dist/accessi-module/Console/console.js.map +1 -1
- package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
- package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
- package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
- package/dist/accessi-module/Controllers/UserController.js.map +1 -1
- package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
- package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
- package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
- package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
- package/dist/accessi-module/Dtos/Permission.js.map +1 -1
- package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/Role.js.map +1 -1
- package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
- package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
- package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
- package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
- package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
- package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
- package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
- package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
- package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
- package/dist/accessi-module/Dtos/index.js.map +1 -1
- package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
- package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
- package/dist/accessi-module/Services/EmailService/EmailService.js +11 -11
- package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
- package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
- package/dist/accessi-module/Services/PermissionService/PermissionService.js +118 -118
- package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
- package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js +4 -4
- package/dist/accessi-module/Services/ServiceTokenService/ServiceTokenService.js.map +1 -1
- package/dist/accessi-module/Services/UserService/UserService.js +72 -72
- package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
- package/dist/accessi-module/Views/reset-password.html +213 -213
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.d.ts +1 -0
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +56 -42
- package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
- package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
- package/dist/accessi-module/index.js.map +1 -1
- package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
- package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
- package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
- package/dist/accessi-module/security/accessControl.js.map +1 -1
- package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
- package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
- package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
- package/dist/allegati-module/AllegatiModule.js.map +1 -1
- package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
- package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
- package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
- package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
- package/dist/allegati-module/Dtos/index.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
- package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +49 -49
- package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
- package/dist/allegati-module/index.js.map +1 -1
- package/dist/autobind.js.map +1 -1
- package/dist/emilsoftware-utilities-2.0.0-dev.25.tgz +0 -0
- package/dist/firebird-compat.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/initEmilsoftwareModule.js.map +1 -1
- package/dist/swagger/SwaggerConfig.js.map +1 -1
- package/package.json +103 -103
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.d.ts +0 -12
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.js +0 -9
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuIcona.js.map +0 -1
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.d.ts +0 -12
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.js +0 -9
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuNote.js.map +0 -1
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.d.ts +0 -12
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.js +0 -9
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuPagina.js.map +0 -1
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.d.ts +0 -12
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.js +0 -9
- package/dist/accessi-module/Console/generated/model/abilitazioneMenuTipo.js.map +0 -1
- package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.d.ts +0 -13
- package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.js +0 -9
- package/dist/accessi-module/Console/generated/model/publicRegisterRequestCellulare.js.map +0 -1
- package/dist/accessi-module/Console/generated/model/registerRequestCellulare.d.ts +0 -13
- package/dist/accessi-module/Console/generated/model/registerRequestCellulare.js +0 -9
- package/dist/accessi-module/Console/generated/model/registerRequestCellulare.js.map +0 -1
- package/dist/accessi-module/Console/generated/model/userDtoAvatar.d.ts +0 -13
- package/dist/accessi-module/Console/generated/model/userDtoAvatar.js +0 -9
- package/dist/accessi-module/Console/generated/model/userDtoAvatar.js.map +0 -1
- package/dist/accessi-module/Console/generated/model/userDtoCellulare.d.ts +0 -13
- package/dist/accessi-module/Console/generated/model/userDtoCellulare.js +0 -9
- package/dist/accessi-module/Console/generated/model/userDtoCellulare.js.map +0 -1
- package/dist/accessi-module/Console/openApiClient.d.ts +0 -34
- package/dist/accessi-module/Console/openApiClient.js +0 -111
- package/dist/accessi-module/Console/openApiClient.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"userDtoCellulare.js","sourceRoot":"","sources":["../../../../../src/accessi-module/Console/generated/model/userDtoCellulare.ts"],"names":[],"mappings":";AAAA;;;;;GAKG","sourcesContent":["/**\n * Generated by orval v6.31.0 🍺\n * Do not edit manually.\n * Accessi API\n * OpenAPI spec version: 1.0\n */\n\n/**\n * Numero di cellulare.\n * @nullable\n */\nexport type UserDtoCellulare = { [key: string]: unknown } | null;\n"]}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Client leggero della console amministrativa.
|
|
3
|
-
*
|
|
4
|
-
* Non contiene endpoint duplicati: al primo utilizzo legge la specifica OpenAPI
|
|
5
|
-
* esposta dalla stessa istanza Accessi e risolve ogni chiamata dal relativo
|
|
6
|
-
* operationId. Quando le API cambiano, Swagger resta quindi l'unica fonte di
|
|
7
|
-
* verita per metodo HTTP, URL e parametri.
|
|
8
|
-
*/
|
|
9
|
-
export type AccessiConsoleOperation = 'login' | 'getUserByToken' | 'getUsers' | 'createManagedUser' | 'updateUtente' | 'deleteUser' | 'getRoles' | 'createRole' | 'updateRole' | 'assignRolesToUser' | 'assignPermissionsToUser' | 'getMenus' | 'getGroupsWithMenus' | 'getUserRolesAndGrants' | 'setMenuEnabled' | 'setGroupEnabled' | 'getTipiFiltro' | 'getFiltriUtente' | 'saveFiltriUtente' | 'getFederatedIdentities' | 'linkFederatedIdentity' | 'createFederatedUser' | 'updateFederatedIdentity' | 'disableFederatedIdentity' | 'setPasswordLoginPolicy';
|
|
10
|
-
export type AccessiConsoleRequest = {
|
|
11
|
-
path?: Record<string, string | number>;
|
|
12
|
-
query?: Record<string, string | number | boolean | undefined>;
|
|
13
|
-
body?: unknown;
|
|
14
|
-
};
|
|
15
|
-
/** Gestisce le chiamate HTTP della console secondo la specifica Swagger attiva. */
|
|
16
|
-
export declare class AccessiOpenApiClient {
|
|
17
|
-
private readonly apiBasePath;
|
|
18
|
-
private readonly swaggerPath;
|
|
19
|
-
private readonly getToken;
|
|
20
|
-
private readonly operations;
|
|
21
|
-
private documentPromise?;
|
|
22
|
-
constructor(apiBasePath: string, swaggerPath: string, getToken: () => string | null);
|
|
23
|
-
/** Carica la specifica una sola volta e indicizza le operationId disponibili. */
|
|
24
|
-
initialize(): Promise<void>;
|
|
25
|
-
/** Esegue un'operazione Swagger e restituisce direttamente il campo Result storico. */
|
|
26
|
-
request<T = unknown>(operationId: AccessiConsoleOperation, request?: AccessiConsoleRequest): Promise<T>;
|
|
27
|
-
private loadDocument;
|
|
28
|
-
/**
|
|
29
|
-
* Ponte di compatibilita per le viste preesistenti della console.
|
|
30
|
-
* La rotta passata non e usata per costruire la richiesta: viene soltanto
|
|
31
|
-
* confrontata con Swagger per individuare la operationId e i path parameter.
|
|
32
|
-
*/
|
|
33
|
-
requestByLegacyUrl<T = unknown>(url: string, method?: string, body?: unknown): Promise<T>;
|
|
34
|
-
}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.AccessiOpenApiClient = void 0;
|
|
13
|
-
/** Gestisce le chiamate HTTP della console secondo la specifica Swagger attiva. */
|
|
14
|
-
class AccessiOpenApiClient {
|
|
15
|
-
constructor(apiBasePath = '/api/accessi', swaggerPath = '/api/accessi/swagger.json', getToken) {
|
|
16
|
-
this.apiBasePath = apiBasePath;
|
|
17
|
-
this.swaggerPath = swaggerPath;
|
|
18
|
-
this.getToken = getToken;
|
|
19
|
-
this.operations = new Map();
|
|
20
|
-
}
|
|
21
|
-
/** Carica la specifica una sola volta e indicizza le operationId disponibili. */
|
|
22
|
-
initialize() {
|
|
23
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
-
if (!this.documentPromise)
|
|
25
|
-
this.documentPromise = this.loadDocument();
|
|
26
|
-
return this.documentPromise;
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
/** Esegue un'operazione Swagger e restituisce direttamente il campo Result storico. */
|
|
30
|
-
request(operationId_1) {
|
|
31
|
-
return __awaiter(this, arguments, void 0, function* (operationId, request = {}) {
|
|
32
|
-
var _a, _b;
|
|
33
|
-
yield this.initialize();
|
|
34
|
-
const operation = this.operations.get(operationId);
|
|
35
|
-
if (!operation)
|
|
36
|
-
throw new Error(`L'operazione Swagger ${operationId} non e disponibile in questa istanza di Accessi.`);
|
|
37
|
-
const path = operation.path.replace(/\{([^}]+)\}/g, (_, name) => {
|
|
38
|
-
var _a;
|
|
39
|
-
const value = (_a = request.path) === null || _a === void 0 ? void 0 : _a[name];
|
|
40
|
-
if (value === undefined || value === null)
|
|
41
|
-
throw new Error(`Manca il parametro di percorso ${name} per ${operationId}.`);
|
|
42
|
-
return encodeURIComponent(String(value));
|
|
43
|
-
});
|
|
44
|
-
const query = new URLSearchParams();
|
|
45
|
-
for (const [name, value] of Object.entries((_a = request.query) !== null && _a !== void 0 ? _a : {})) {
|
|
46
|
-
if (value !== undefined && value !== null)
|
|
47
|
-
query.set(name, String(value));
|
|
48
|
-
}
|
|
49
|
-
const response = yield fetch(`${this.apiBasePath}${path}${query.size ? `?${query}` : ''}`, {
|
|
50
|
-
method: operation.method,
|
|
51
|
-
headers: Object.assign(Object.assign({}, (this.getToken() ? { Authorization: `Bearer ${this.getToken()}` } : {})), (request.body === undefined ? {} : { 'Content-Type': 'application/json' })),
|
|
52
|
-
body: request.body === undefined ? undefined : JSON.stringify(request.body),
|
|
53
|
-
});
|
|
54
|
-
const payload = yield response.json().catch(() => ({}));
|
|
55
|
-
if (!response.ok)
|
|
56
|
-
throw new Error(payload.message || payload.error || `Errore HTTP ${response.status}`);
|
|
57
|
-
return ((_b = payload.Result) !== null && _b !== void 0 ? _b : payload);
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
loadDocument() {
|
|
61
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
-
var _a;
|
|
63
|
-
const response = yield fetch(this.swaggerPath, { headers: { Accept: 'application/json' } });
|
|
64
|
-
if (!response.ok)
|
|
65
|
-
throw new Error('Impossibile caricare la specifica Swagger di Accessi.');
|
|
66
|
-
const document = (yield response.json());
|
|
67
|
-
for (const [path, pathItem] of Object.entries((_a = document.paths) !== null && _a !== void 0 ? _a : {})) {
|
|
68
|
-
for (const [method, definition] of Object.entries(pathItem)) {
|
|
69
|
-
if (definition === null || definition === void 0 ? void 0 : definition.operationId) {
|
|
70
|
-
this.operations.set(definition.operationId, {
|
|
71
|
-
operationId: definition.operationId,
|
|
72
|
-
method: method.toUpperCase(),
|
|
73
|
-
path,
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Ponte di compatibilita per le viste preesistenti della console.
|
|
82
|
-
* La rotta passata non e usata per costruire la richiesta: viene soltanto
|
|
83
|
-
* confrontata con Swagger per individuare la operationId e i path parameter.
|
|
84
|
-
*/
|
|
85
|
-
requestByLegacyUrl(url_1) {
|
|
86
|
-
return __awaiter(this, arguments, void 0, function* (url, method = 'GET', body) {
|
|
87
|
-
yield this.initialize();
|
|
88
|
-
const parsed = new URL(url, window.location.origin);
|
|
89
|
-
const relativePath = parsed.pathname.replace(this.apiBasePath, '');
|
|
90
|
-
const operation = [...this.operations.values()].find((candidate) => {
|
|
91
|
-
const expression = `^${candidate.path.replace(/\{[^}]+\}/g, '[^/]+')}$`;
|
|
92
|
-
return candidate.method === method.toUpperCase() && new RegExp(expression).test(relativePath);
|
|
93
|
-
});
|
|
94
|
-
if (!operation)
|
|
95
|
-
throw new Error(`Nessuna operation Swagger corrisponde a ${method} ${relativePath}.`);
|
|
96
|
-
const path = {};
|
|
97
|
-
const names = [...operation.path.matchAll(/\{([^}]+)\}/g)].map((match) => match[1]);
|
|
98
|
-
const values = relativePath.split('/').filter(Boolean);
|
|
99
|
-
const templates = operation.path.split('/').filter(Boolean);
|
|
100
|
-
templates.forEach((part, index) => {
|
|
101
|
-
const name = names.find((item) => part === `{${item}}`);
|
|
102
|
-
if (name)
|
|
103
|
-
path[name] = values[index];
|
|
104
|
-
});
|
|
105
|
-
const query = Object.fromEntries(parsed.searchParams.entries());
|
|
106
|
-
return this.request(operation.operationId, { path, query, body });
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
exports.AccessiOpenApiClient = AccessiOpenApiClient;
|
|
111
|
-
//# sourceMappingURL=openApiClient.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openApiClient.js","sourceRoot":"","sources":["../../../src/accessi-module/Console/openApiClient.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Client leggero della console amministrativa.\n *\n * Non contiene endpoint duplicati: al primo utilizzo legge la specifica OpenAPI\n * esposta dalla stessa istanza Accessi e risolve ogni chiamata dal relativo\n * operationId. Quando le API cambiano, Swagger resta quindi l'unica fonte di\n * verita per metodo HTTP, URL e parametri.\n */\nexport type AccessiConsoleOperation =\n | 'login'\n | 'getUserByToken'\n | 'getUsers'\n | 'createManagedUser'\n | 'updateUtente'\n | 'deleteUser'\n | 'getRoles'\n | 'createRole'\n | 'updateRole'\n | 'assignRolesToUser'\n | 'assignPermissionsToUser'\n | 'getMenus'\n | 'getGroupsWithMenus'\n | 'getUserRolesAndGrants'\n | 'setMenuEnabled'\n | 'setGroupEnabled'\n | 'getTipiFiltro'\n | 'getFiltriUtente'\n | 'saveFiltriUtente'\n | 'getFederatedIdentities'\n | 'linkFederatedIdentity'\n | 'createFederatedUser'\n | 'updateFederatedIdentity'\n | 'disableFederatedIdentity'\n | 'setPasswordLoginPolicy';\n\nexport type AccessiConsoleRequest = {\n path?: Record<string, string | number>;\n query?: Record<string, string | number | boolean | undefined>;\n body?: unknown;\n};\n\ntype OpenApiOperation = { operationId: AccessiConsoleOperation; method: string; path: string };\ntype OpenApiDocument = { paths?: Record<string, Record<string, { operationId?: string }>> };\n\n/** Gestisce le chiamate HTTP della console secondo la specifica Swagger attiva. */\nexport class AccessiOpenApiClient {\n private readonly operations = new Map<string, OpenApiOperation>();\n private documentPromise?: Promise<void>;\n\n constructor(\n private readonly apiBasePath = '/api/accessi',\n private readonly swaggerPath = '/api/accessi/swagger.json',\n private readonly getToken: () => string | null,\n ) {}\n\n /** Carica la specifica una sola volta e indicizza le operationId disponibili. */\n async initialize(): Promise<void> {\n if (!this.documentPromise) this.documentPromise = this.loadDocument();\n return this.documentPromise;\n }\n\n /** Esegue un'operazione Swagger e restituisce direttamente il campo Result storico. */\n async request<T = unknown>(operationId: AccessiConsoleOperation, request: AccessiConsoleRequest = {}): Promise<T> {\n await this.initialize();\n const operation = this.operations.get(operationId);\n if (!operation) throw new Error(`L'operazione Swagger ${operationId} non e disponibile in questa istanza di Accessi.`);\n\n const path = operation.path.replace(/\\{([^}]+)\\}/g, (_, name: string) => {\n const value = request.path?.[name];\n if (value === undefined || value === null) throw new Error(`Manca il parametro di percorso ${name} per ${operationId}.`);\n return encodeURIComponent(String(value));\n });\n const query = new URLSearchParams();\n for (const [name, value] of Object.entries(request.query ?? {})) {\n if (value !== undefined && value !== null) query.set(name, String(value));\n }\n\n const response = await fetch(`${this.apiBasePath}${path}${query.size ? `?${query}` : ''}`, {\n method: operation.method,\n headers: {\n ...(this.getToken() ? { Authorization: `Bearer ${this.getToken()}` } : {}),\n ...(request.body === undefined ? {} : { 'Content-Type': 'application/json' }),\n },\n body: request.body === undefined ? undefined : JSON.stringify(request.body),\n });\n const payload = await response.json().catch(() => ({}));\n if (!response.ok) throw new Error(payload.message || payload.error || `Errore HTTP ${response.status}`);\n return (payload.Result ?? payload) as T;\n }\n\n private async loadDocument(): Promise<void> {\n const response = await fetch(this.swaggerPath, { headers: { Accept: 'application/json' } });\n if (!response.ok) throw new Error('Impossibile caricare la specifica Swagger di Accessi.');\n const document = (await response.json()) as OpenApiDocument;\n for (const [path, pathItem] of Object.entries(document.paths ?? {})) {\n for (const [method, definition] of Object.entries(pathItem)) {\n if (definition?.operationId) {\n this.operations.set(definition.operationId, {\n operationId: definition.operationId as AccessiConsoleOperation,\n method: method.toUpperCase(),\n path,\n });\n }\n }\n }\n }\n\n /**\n * Ponte di compatibilita per le viste preesistenti della console.\n * La rotta passata non e usata per costruire la richiesta: viene soltanto\n * confrontata con Swagger per individuare la operationId e i path parameter.\n */\n async requestByLegacyUrl<T = unknown>(url: string, method = 'GET', body?: unknown): Promise<T> {\n await this.initialize();\n const parsed = new URL(url, window.location.origin);\n const relativePath = parsed.pathname.replace(this.apiBasePath, '');\n const operation = [...this.operations.values()].find((candidate) => {\n const expression = `^${candidate.path.replace(/\\{[^}]+\\}/g, '[^/]+')}$`;\n return candidate.method === method.toUpperCase() && new RegExp(expression).test(relativePath);\n });\n if (!operation) throw new Error(`Nessuna operation Swagger corrisponde a ${method} ${relativePath}.`);\n\n const path: Record<string, string> = {};\n const names = [...operation.path.matchAll(/\\{([^}]+)\\}/g)].map((match) => match[1]);\n const values = relativePath.split('/').filter(Boolean);\n const templates = operation.path.split('/').filter(Boolean);\n templates.forEach((part, index) => {\n const name = names.find((item) => part === `{${item}}`);\n if (name) path[name] = values[index];\n });\n const query = Object.fromEntries(parsed.searchParams.entries());\n return this.request<T>(operation.operationId, { path, query, body });\n }\n}\n"]}
|