@fiado/api-invoker 4.39.0 → 4.41.0
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/bin/platformRbac/resolver/ApiInvokerPermissionResolver.js +13 -2
- package/bin/uniteller-connector/api/UnitellerConnectorApi.d.ts +3 -1
- package/bin/uniteller-connector/api/UnitellerConnectorApi.js +8 -0
- package/bin/uniteller-connector/api/interfaces/IUnitellerConnectorApi.d.ts +5 -1
- package/package.json +2 -2
- package/src/platformRbac/resolver/ApiInvokerPermissionResolver.ts +13 -2
- package/src/uniteller-connector/api/UnitellerConnectorApi.ts +12 -0
- package/src/uniteller-connector/api/interfaces/IUnitellerConnectorApi.ts +6 -0
|
@@ -48,8 +48,19 @@ let ApiInvokerPermissionResolver = class ApiInvokerPermissionResolver {
|
|
|
48
48
|
// en el adapter, enforceRbac mapea solo PermissionDeniedError a 403; este error se re-lanza -> 5xx.
|
|
49
49
|
// Es fail-closed (no concede), NO un 403, y es deliberado: un fallo de red NO debe verse como
|
|
50
50
|
// "usuario sin permisos". NUNCA devolver { assignments: [] } en un catch.
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
//
|
|
52
|
+
// SHAPE (TD-AI-003): @fiado/http-client (.post) devuelve `response.data` = el BODY HTTP crudo del
|
|
53
|
+
// ApiResponse de rbac, o sea `{ code, data, msg }` — NO un ApiGatewayResponse `{ statusCode, body }`
|
|
54
|
+
// (el tipo de retorno del publisher es histórico y no refleja el runtime). El ResolvedPermissions
|
|
55
|
+
// viene en `.data`. Leer `.body` daba undefined → crash en enforceRbac. Ver docs/TECH_DEBT.md.
|
|
56
|
+
const resp = (await this._api.resolvePermissions(input));
|
|
57
|
+
const resolved = resp?.data;
|
|
58
|
+
// Fail-closed (DEC-RBAC-071): si rbac no devolvió un payload válido (403 de PRIVATE/VPC, ruta
|
|
59
|
+
// inexistente, shape inesperado), NO devolver undefined (rompería enforceRbac con TypeError) →
|
|
60
|
+
// propagar para que el adapter deny. tenantId siempre es string en un ResolvedPermissions ('' = deny).
|
|
61
|
+
if (!resolved || typeof resolved.tenantId !== "string") {
|
|
62
|
+
throw new Error("ApiInvokerPermissionResolver: respuesta de rbac sin ResolvedPermissions válido (resolvePermissions)");
|
|
63
|
+
}
|
|
53
64
|
if (cacheable)
|
|
54
65
|
this._cache.set(key, resolved);
|
|
55
66
|
return resolved;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { IHttpRequest } from "@fiado/http-client";
|
|
2
2
|
import { ApiGatewayResponse } from "@fiado/gateway-adapter";
|
|
3
3
|
import { ConnectorCatalogItem } from "@fiado/type-kit/bin/benefitCenter/index.js";
|
|
4
|
-
import { RemittanceAddBeneficiaryRequest, RemittanceBackofficeDashboardSummary, RemittanceBackofficeStats, RemittanceBackofficeStatsPeriod, RemittanceBackofficeTransaction, RemittanceBackofficeTxListResponse, RemittanceBackofficeUserDetail, RemittanceBackofficeUserListResponse, RemittanceBeneficiary, RemittanceCancelRequest, RemittanceCancelResponse, RemittanceHomeResponse, RemittanceListBeneficiariesResponse, RemittanceOnboardRequest, RemittanceOnboardResponse, RemittancePayRequest, RemittancePayResponse, RemittancePayerAdditionalFieldDto, RemittancePayerBranchDto, RemittancePayerDto, RemittanceQuoteRequest, RemittanceQuoteResponse, RemittanceSecurityQuestionsResponse, RemittanceSendPreviewRequest, RemittanceSendPreviewResponse, RemittanceSmsRequest, RemittanceStateDto, RemittanceTransactionDetail, RemittanceTransactionReceipt, RemittanceTransactionsListRequest, RemittanceTransactionsListResponse, RemittanceUpdateBeneficiaryRequest } from "@fiado/type-kit/bin/remittance/index.js";
|
|
4
|
+
import { RemittanceAddBeneficiaryRequest, RemittanceBackofficeDashboardSummary, RemittanceBackofficeStats, RemittanceBackofficeStatsPeriod, RemittanceBackofficeTransaction, RemittanceBackofficeTxListResponse, RemittanceBackofficeUserDetail, RemittanceBackofficeUserListResponse, RemittanceBeneficiary, RemittanceCancelRequest, RemittanceCancelResponse, RemittanceHomeResponse, RemittanceListBeneficiariesResponse, RemittanceOnboardRequest, RemittanceOnboardResponse, RemittancePayRequest, RemittancePayResponse, RemittancePayerAdditionalFieldDto, RemittancePayerBranchDto, RemittancePayerDto, RemittanceQuoteRequest, RemittanceQuoteResponse, RemittanceSecurityQuestionsResponse, RemittanceSendPreviewRequest, RemittanceSendPreviewResponse, RemittanceSmsRequest, RemittanceStateDto, RemittanceTransactionDetail, RemittanceTransactionReceipt, RemittanceTransactionsListRequest, RemittanceTransactionsListResponse, RemittanceUpdateBeneficiaryRequest, RemittanceUserLimits, RemittanceUserLimitsBatchResponse } from "@fiado/type-kit/bin/remittance/index.js";
|
|
5
5
|
import { IUnitellerConnectorApi } from "./interfaces/IUnitellerConnectorApi.js";
|
|
6
6
|
export default class UnitellerConnectorApi implements IUnitellerConnectorApi {
|
|
7
7
|
private httpRequest;
|
|
@@ -65,4 +65,6 @@ export default class UnitellerConnectorApi implements IUnitellerConnectorApi {
|
|
|
65
65
|
}): Promise<ApiGatewayResponse<RemittanceBackofficeTxListResponse>>;
|
|
66
66
|
backofficeTransactionDetail(txNumber: string): Promise<ApiGatewayResponse<RemittanceBackofficeTransaction>>;
|
|
67
67
|
backofficeStats(period: RemittanceBackofficeStatsPeriod): Promise<ApiGatewayResponse<RemittanceBackofficeStats>>;
|
|
68
|
+
backofficeUserLimits(directoryId: string): Promise<ApiGatewayResponse<RemittanceUserLimits>>;
|
|
69
|
+
backofficeUserLimitsBatch(directoryIds: string[]): Promise<ApiGatewayResponse<RemittanceUserLimitsBatchResponse>>;
|
|
68
70
|
}
|
|
@@ -141,6 +141,14 @@ let UnitellerConnectorApi = class UnitellerConnectorApi {
|
|
|
141
141
|
const url = `${this.baseUrl}/backoffice/stats`;
|
|
142
142
|
return await this.httpRequest.get(url, { period });
|
|
143
143
|
}
|
|
144
|
+
async backofficeUserLimits(directoryId) {
|
|
145
|
+
const url = `${this.baseUrl}/backoffice/users/${encodeURIComponent(directoryId)}/limits`;
|
|
146
|
+
return await this.httpRequest.get(url);
|
|
147
|
+
}
|
|
148
|
+
async backofficeUserLimitsBatch(directoryIds) {
|
|
149
|
+
const url = `${this.baseUrl}/backoffice/users/limits`;
|
|
150
|
+
return await this.httpRequest.get(url, { directoryIds: directoryIds.join(",") });
|
|
151
|
+
}
|
|
144
152
|
};
|
|
145
153
|
UnitellerConnectorApi = __decorate([
|
|
146
154
|
injectable(),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ApiGatewayResponse } from "@fiado/gateway-adapter";
|
|
2
2
|
import { ConnectorCatalogItem } from "@fiado/type-kit/bin/benefitCenter/index.js";
|
|
3
|
-
import { RemittanceAddBeneficiaryRequest, RemittanceBackofficeDashboardSummary, RemittanceBackofficeStats, RemittanceBackofficeStatsPeriod, RemittanceBackofficeTransaction, RemittanceBackofficeTxListResponse, RemittanceBackofficeUserDetail, RemittanceBackofficeUserListResponse, RemittanceBeneficiary, RemittanceCancelRequest, RemittanceCancelResponse, RemittanceHomeResponse, RemittanceListBeneficiariesResponse, RemittanceOnboardRequest, RemittanceOnboardResponse, RemittancePayRequest, RemittancePayResponse, RemittancePayerAdditionalFieldDto, RemittancePayerBranchDto, RemittancePayerDto, RemittanceQuoteRequest, RemittanceQuoteResponse, RemittanceSecurityQuestionsResponse, RemittanceSendPreviewRequest, RemittanceSendPreviewResponse, RemittanceSmsRequest, RemittanceStateDto, RemittanceTransactionDetail, RemittanceTransactionReceipt, RemittanceTransactionsListRequest, RemittanceTransactionsListResponse, RemittanceUpdateBeneficiaryRequest } from "@fiado/type-kit/bin/remittance/index.js";
|
|
3
|
+
import { RemittanceAddBeneficiaryRequest, RemittanceBackofficeDashboardSummary, RemittanceBackofficeStats, RemittanceBackofficeStatsPeriod, RemittanceBackofficeTransaction, RemittanceBackofficeTxListResponse, RemittanceBackofficeUserDetail, RemittanceBackofficeUserListResponse, RemittanceBeneficiary, RemittanceCancelRequest, RemittanceCancelResponse, RemittanceHomeResponse, RemittanceListBeneficiariesResponse, RemittanceOnboardRequest, RemittanceOnboardResponse, RemittancePayRequest, RemittancePayResponse, RemittancePayerAdditionalFieldDto, RemittancePayerBranchDto, RemittancePayerDto, RemittanceQuoteRequest, RemittanceQuoteResponse, RemittanceSecurityQuestionsResponse, RemittanceSendPreviewRequest, RemittanceSendPreviewResponse, RemittanceSmsRequest, RemittanceStateDto, RemittanceTransactionDetail, RemittanceTransactionReceipt, RemittanceTransactionsListRequest, RemittanceTransactionsListResponse, RemittanceUpdateBeneficiaryRequest, RemittanceUserLimits, RemittanceUserLimitsBatchResponse } from "@fiado/type-kit/bin/remittance/index.js";
|
|
4
4
|
export interface IUnitellerConnectorApi {
|
|
5
5
|
/** Estado del módulo remesas para un directoryId. */
|
|
6
6
|
getHome(directoryId: string): Promise<ApiGatewayResponse<RemittanceHomeResponse>>;
|
|
@@ -108,4 +108,8 @@ export interface IUnitellerConnectorApi {
|
|
|
108
108
|
}): Promise<ApiGatewayResponse<RemittanceBackofficeTxListResponse>>;
|
|
109
109
|
backofficeTransactionDetail(txNumber: string): Promise<ApiGatewayResponse<RemittanceBackofficeTransaction>>;
|
|
110
110
|
backofficeStats(period: RemittanceBackofficeStatsPeriod): Promise<ApiGatewayResponse<RemittanceBackofficeStats>>;
|
|
111
|
+
/** Límites por usuario (Operación · read-only): ventanas (límite del provider + usage) + nivel + discrepancia. */
|
|
112
|
+
backofficeUserLimits(directoryId: string): Promise<ApiGatewayResponse<RemittanceUserLimits>>;
|
|
113
|
+
/** Batch de límites para la tabla de Límites (CSV de directoryIds). */
|
|
114
|
+
backofficeUserLimitsBatch(directoryIds: string[]): Promise<ApiGatewayResponse<RemittanceUserLimitsBatchResponse>>;
|
|
111
115
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fiado/api-invoker",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.41.0",
|
|
4
4
|
"description": "Sirve como un puente entre diferentes funciones lambda, facilitando la comunicación entre ellas a través de invocaciones http",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "bin/index.js",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"@fiado/gateway-adapter": "^3.9.0",
|
|
35
35
|
"@fiado/http-client": "^2.0.1",
|
|
36
36
|
"@fiado/logger": "^1.1.3",
|
|
37
|
-
"@fiado/type-kit": "^3.
|
|
37
|
+
"@fiado/type-kit": "^3.133.0",
|
|
38
38
|
"dotenv": "^16.4.7"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
@@ -40,8 +40,19 @@ export class ApiInvokerPermissionResolver {
|
|
|
40
40
|
// en el adapter, enforceRbac mapea solo PermissionDeniedError a 403; este error se re-lanza -> 5xx.
|
|
41
41
|
// Es fail-closed (no concede), NO un 403, y es deliberado: un fallo de red NO debe verse como
|
|
42
42
|
// "usuario sin permisos". NUNCA devolver { assignments: [] } en un catch.
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
//
|
|
44
|
+
// SHAPE (TD-AI-003): @fiado/http-client (.post) devuelve `response.data` = el BODY HTTP crudo del
|
|
45
|
+
// ApiResponse de rbac, o sea `{ code, data, msg }` — NO un ApiGatewayResponse `{ statusCode, body }`
|
|
46
|
+
// (el tipo de retorno del publisher es histórico y no refleja el runtime). El ResolvedPermissions
|
|
47
|
+
// viene en `.data`. Leer `.body` daba undefined → crash en enforceRbac. Ver docs/TECH_DEBT.md.
|
|
48
|
+
const resp = (await this._api.resolvePermissions(input)) as unknown as { data?: ResolvedPermissions };
|
|
49
|
+
const resolved = resp?.data;
|
|
50
|
+
// Fail-closed (DEC-RBAC-071): si rbac no devolvió un payload válido (403 de PRIVATE/VPC, ruta
|
|
51
|
+
// inexistente, shape inesperado), NO devolver undefined (rompería enforceRbac con TypeError) →
|
|
52
|
+
// propagar para que el adapter deny. tenantId siempre es string en un ResolvedPermissions ('' = deny).
|
|
53
|
+
if (!resolved || typeof resolved.tenantId !== "string") {
|
|
54
|
+
throw new Error("ApiInvokerPermissionResolver: respuesta de rbac sin ResolvedPermissions válido (resolvePermissions)");
|
|
55
|
+
}
|
|
45
56
|
if (cacheable) this._cache.set(key, resolved);
|
|
46
57
|
return resolved;
|
|
47
58
|
}
|
|
@@ -35,6 +35,8 @@ import {
|
|
|
35
35
|
RemittanceTransactionsListRequest,
|
|
36
36
|
RemittanceTransactionsListResponse,
|
|
37
37
|
RemittanceUpdateBeneficiaryRequest,
|
|
38
|
+
RemittanceUserLimits,
|
|
39
|
+
RemittanceUserLimitsBatchResponse,
|
|
38
40
|
} from "@fiado/type-kit/bin/remittance/index.js";
|
|
39
41
|
import { IUnitellerConnectorApi } from "./interfaces/IUnitellerConnectorApi.js";
|
|
40
42
|
|
|
@@ -199,6 +201,16 @@ export default class UnitellerConnectorApi implements IUnitellerConnectorApi {
|
|
|
199
201
|
const url = `${this.baseUrl}/backoffice/stats`;
|
|
200
202
|
return await this.httpRequest.get(url, { period });
|
|
201
203
|
}
|
|
204
|
+
|
|
205
|
+
async backofficeUserLimits(directoryId: string): Promise<ApiGatewayResponse<RemittanceUserLimits>> {
|
|
206
|
+
const url = `${this.baseUrl}/backoffice/users/${encodeURIComponent(directoryId)}/limits`;
|
|
207
|
+
return await this.httpRequest.get(url);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
async backofficeUserLimitsBatch(directoryIds: string[]): Promise<ApiGatewayResponse<RemittanceUserLimitsBatchResponse>> {
|
|
211
|
+
const url = `${this.baseUrl}/backoffice/users/limits`;
|
|
212
|
+
return await this.httpRequest.get(url, { directoryIds: directoryIds.join(",") });
|
|
213
|
+
}
|
|
202
214
|
}
|
|
203
215
|
|
|
204
216
|
/** Quita las keys undefined para no mandar query params vacíos. */
|
|
@@ -33,6 +33,8 @@ import {
|
|
|
33
33
|
RemittanceTransactionsListRequest,
|
|
34
34
|
RemittanceTransactionsListResponse,
|
|
35
35
|
RemittanceUpdateBeneficiaryRequest,
|
|
36
|
+
RemittanceUserLimits,
|
|
37
|
+
RemittanceUserLimitsBatchResponse,
|
|
36
38
|
} from "@fiado/type-kit/bin/remittance/index.js";
|
|
37
39
|
|
|
38
40
|
export interface IUnitellerConnectorApi {
|
|
@@ -157,4 +159,8 @@ export interface IUnitellerConnectorApi {
|
|
|
157
159
|
backofficeListTransactions(filters?: { txNumber?: string; directoryId?: string; status?: string; countryISO?: string; from?: string; to?: string; pageSize?: number; index?: string }): Promise<ApiGatewayResponse<RemittanceBackofficeTxListResponse>>;
|
|
158
160
|
backofficeTransactionDetail(txNumber: string): Promise<ApiGatewayResponse<RemittanceBackofficeTransaction>>;
|
|
159
161
|
backofficeStats(period: RemittanceBackofficeStatsPeriod): Promise<ApiGatewayResponse<RemittanceBackofficeStats>>;
|
|
162
|
+
/** Límites por usuario (Operación · read-only): ventanas (límite del provider + usage) + nivel + discrepancia. */
|
|
163
|
+
backofficeUserLimits(directoryId: string): Promise<ApiGatewayResponse<RemittanceUserLimits>>;
|
|
164
|
+
/** Batch de límites para la tabla de Límites (CSV de directoryIds). */
|
|
165
|
+
backofficeUserLimitsBatch(directoryIds: string[]): Promise<ApiGatewayResponse<RemittanceUserLimitsBatchResponse>>;
|
|
160
166
|
}
|