@6thbridge/utils 1.9.0 → 1.9.2

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.
@@ -0,0 +1,500 @@
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
+ const common_1 = require("./common");
13
+ const context_entity_1 = require("../types/context.entity");
14
+ const custom_exception_1 = require("../types/custom.exception");
15
+ const client_entity_1 = require("../types/client.entity");
16
+ const logger_1 = require("../logger");
17
+ const mockPost = jest.fn();
18
+ const mockResolveAxiosError = jest.fn();
19
+ jest.mock('../utils', () => ({
20
+ HttpUtil: {
21
+ getAxiosInstance: () => ({ post: (...args) => mockPost(...args) }),
22
+ resolveAxiosError: (...args) => mockResolveAxiosError(...args),
23
+ },
24
+ }));
25
+ jest.mock('../types', () => (Object.assign(Object.assign({}, jest.requireActual('../types/context.entity')), jest.requireActual('../types/custom.exception'))));
26
+ jest.mock('../logger', () => ({
27
+ logger: { out: jest.fn(), debug: jest.fn(), exception: jest.fn() },
28
+ }));
29
+ jest.mock('../logger/logger', () => ({
30
+ Logger: class {
31
+ constructor() {
32
+ this.setProps = jest.fn();
33
+ this.out = jest.fn();
34
+ }
35
+ },
36
+ }));
37
+ const partner = {
38
+ partnerId: 'partner-1',
39
+ name: 'Example Partner',
40
+ provider: 'example',
41
+ status: 'active',
42
+ };
43
+ const clientAuth = {
44
+ domain: 'example.com',
45
+ country: 'NG',
46
+ currency: 'NGN',
47
+ locale: 'en',
48
+ authenticationType: 'jwt',
49
+ requestClientId: 'request-client',
50
+ contextClientId: 'context-client',
51
+ requestClient: {
52
+ clientId: 'request-client',
53
+ name: 'Requester',
54
+ email: 'requester@example.com',
55
+ logo: '',
56
+ status: client_entity_1.ClientStatusOption.active,
57
+ parentClientId: '',
58
+ },
59
+ contextClient: {
60
+ clientId: 'context-client',
61
+ name: 'Context client',
62
+ email: 'client@example.com',
63
+ logo: '',
64
+ status: client_entity_1.ClientStatusOption.active,
65
+ parentClientId: 'request-client',
66
+ },
67
+ requestUserId: 'request-user',
68
+ contextUserId: 'context-user',
69
+ requestUser: {
70
+ userId: 'request-user',
71
+ clientId: 'request-client',
72
+ name: 'Requester',
73
+ email: 'requester@example.com',
74
+ firstName: 'Request',
75
+ lastName: 'User',
76
+ roleId: 'main',
77
+ },
78
+ contextUser: {
79
+ userId: 'context-user',
80
+ clientId: 'context-client',
81
+ name: 'Context user',
82
+ email: 'user@example.com',
83
+ firstName: 'Context',
84
+ lastName: 'User',
85
+ roleId: 'staff',
86
+ },
87
+ permissions: 'payments.read,payments.write',
88
+ };
89
+ const permissions = [
90
+ { resource: 'payments', action: 'read' },
91
+ { resource: 'payments', action: 'write' },
92
+ ];
93
+ const forbidden = { statusCode: 403, errorCode: 'Forbidden', error: expect.any(String) };
94
+ const request = (overrides = {}) => (Object.assign({ headers: {}, body: {}, query: {}, params: {}, cookies: {}, path: '/v1/payments', originalUrl: '/v1/payments', method: 'GET', ip: '127.0.0.1' }, overrides));
95
+ function gatewayRequest(auth = {}, overrides = {}) {
96
+ return request(Object.assign(Object.assign({}, overrides), { headers: Object.assign({ 'x-request-source': 'api-gateway', 'x-authentication-data': JSON.stringify(Object.assign(Object.assign({}, clientAuth), auth)) }, overrides.headers) }));
97
+ }
98
+ beforeEach(() => {
99
+ jest.resetAllMocks();
100
+ mockResolveAxiosError.mockReturnValue({ message: 'HTTP request failed' });
101
+ });
102
+ afterEach(() => jest.restoreAllMocks());
103
+ describe('emptyMiddleware', () => {
104
+ it('passes control to next and returns its result', () => {
105
+ const next = jest.fn().mockReturnValue('next-result');
106
+ expect((0, common_1.emptyMiddleware)(request(), {}, next)).toBe('next-result');
107
+ expect(next).toHaveBeenCalledTimes(1);
108
+ });
109
+ });
110
+ describe('unless', () => {
111
+ it('returns the empty middleware when no middleware is supplied', () => {
112
+ expect((0, common_1.unless)('auth', ['/public'], undefined)).toBe(common_1.emptyMiddleware);
113
+ });
114
+ it('returns the empty middleware when no exclusion paths are supplied', () => {
115
+ const middleware = jest.fn();
116
+ const next = jest.fn();
117
+ (0, common_1.unless)('auth', [], middleware)(request(), {}, next);
118
+ expect(middleware).not.toHaveBeenCalled();
119
+ expect(next).toHaveBeenCalledTimes(1);
120
+ });
121
+ it.each(['/public', '/public/', '/users/123', '/files/a/b'])('skips matching path %s', (path) => {
122
+ const middleware = jest.fn();
123
+ const next = jest.fn().mockReturnValue('skipped');
124
+ const wrapped = (0, common_1.unless)('auth', ['/public', '/users/:id', '/files/*segments'], middleware);
125
+ expect(wrapped(request({ path }), {}, next)).toBe('skipped');
126
+ expect(middleware).not.toHaveBeenCalled();
127
+ expect(next).toHaveBeenCalledTimes(1);
128
+ });
129
+ it.each(['/publication', '/users', '/users/123/orders'])('runs middleware on nonmatching path %s', (path) => {
130
+ const middleware = jest.fn().mockReturnValue('authenticated');
131
+ const req = request({ path });
132
+ const res = {};
133
+ const next = jest.fn();
134
+ expect((0, common_1.unless)('auth', ['/public', '/users/:id'], middleware)(req, res, next)).toBe('authenticated');
135
+ expect(middleware).toHaveBeenCalledWith(req, res, next);
136
+ expect(next).not.toHaveBeenCalled();
137
+ });
138
+ it('rejects invalid exclusion patterns when the wrapper is created', () => {
139
+ expect(() => (0, common_1.unless)('auth', ['/files/*'], jest.fn())).toThrow();
140
+ });
141
+ });
142
+ describe('CommonMiddleware.getPartnerRequestContext', () => {
143
+ it('uses validated partner data without another lookup, even when a key is present', () => __awaiter(void 0, void 0, void 0, function* () {
144
+ const req = request({
145
+ headers: {
146
+ 'x-partner-data': JSON.stringify(partner),
147
+ 'x-partner-api-key': 'unused-key',
148
+ 'x-request-source': 'api-gateway',
149
+ 'x-request-id': 'request-1',
150
+ },
151
+ });
152
+ const result = yield common_1.CommonMiddleware.getPartnerRequestContext(req);
153
+ expect(result.error).toBeUndefined();
154
+ expect(result.data).toBeInstanceOf(context_entity_1.PartnerContextEntity);
155
+ expect(result.data).toMatchObject({
156
+ partner,
157
+ authenticationType: 'partner',
158
+ requestId: 'request-1',
159
+ request: req,
160
+ });
161
+ expect(mockPost).not.toHaveBeenCalled();
162
+ }));
163
+ it('validates a direct API key and builds the partner context', () => __awaiter(void 0, void 0, void 0, function* () {
164
+ var _a;
165
+ mockPost.mockResolvedValue({ data: { data: partner } });
166
+ const result = yield common_1.CommonMiddleware.getPartnerRequestContext(request({
167
+ headers: { 'x-partner-api-key': 'partner-key' },
168
+ }));
169
+ expect(result.data).toBeInstanceOf(context_entity_1.PartnerContextEntity);
170
+ expect((_a = result.data) === null || _a === void 0 ? void 0 : _a.partner).toEqual(partner);
171
+ expect(mockPost).toHaveBeenCalledTimes(1);
172
+ expect(mockPost).toHaveBeenCalledWith('/internal/v1/partners/validate-api-key', {
173
+ apiKey: 'partner-key',
174
+ });
175
+ }));
176
+ it.each([undefined, '', ' ', ['one', 'two']])('rejects a missing or invalid API key: %j', (apiKey) => __awaiter(void 0, void 0, void 0, function* () {
177
+ const result = yield common_1.CommonMiddleware.getPartnerRequestContext(request({
178
+ headers: { 'x-partner-api-key': apiKey },
179
+ }));
180
+ expect(result).toEqual(forbidden);
181
+ expect(mockPost).not.toHaveBeenCalled();
182
+ }));
183
+ it.each([
184
+ '{invalid',
185
+ '',
186
+ 'null',
187
+ '{}',
188
+ JSON.stringify(Object.assign(Object.assign({}, partner), { partnerId: ' ' })),
189
+ ['one', 'two'],
190
+ ])('rejects malformed partner data without falling back to a key: %j', (data) => __awaiter(void 0, void 0, void 0, function* () {
191
+ const result = yield common_1.CommonMiddleware.getPartnerRequestContext(request({
192
+ headers: { 'x-partner-data': data, 'x-partner-api-key': 'unused-key' },
193
+ }));
194
+ expect(result).toEqual(forbidden);
195
+ expect(mockPost).not.toHaveBeenCalled();
196
+ }));
197
+ it.each([undefined, {}, { data: {} }, { data: { data: Object.assign(Object.assign({}, partner), { provider: '' }) } }])('rejects malformed validation responses: %j', (response) => __awaiter(void 0, void 0, void 0, function* () {
198
+ mockPost.mockResolvedValue(response);
199
+ const result = yield common_1.CommonMiddleware.getPartnerRequestContext(request({
200
+ headers: { 'x-partner-api-key': 'partner-key' },
201
+ }));
202
+ expect(result).toEqual(forbidden);
203
+ }));
204
+ it('returns a generic forbidden response when validation fails', () => __awaiter(void 0, void 0, void 0, function* () {
205
+ mockPost.mockRejectedValue(new Error('validation failed with partner-key'));
206
+ const result = yield common_1.CommonMiddleware.getPartnerRequestContext(request({
207
+ headers: { 'x-partner-api-key': 'partner-key' },
208
+ }));
209
+ expect(result).toEqual(forbidden);
210
+ expect(JSON.stringify(result)).not.toContain('partner-key');
211
+ }));
212
+ });
213
+ describe('CommonMiddleware.processAuthorizationCheck', () => {
214
+ beforeEach(() => mockPost.mockResolvedValue({ data: { data: clientAuth } }));
215
+ it('extracts the full authorization payload with header and body precedence', () => __awaiter(void 0, void 0, void 0, function* () {
216
+ const result = yield common_1.CommonMiddleware.processAuthorizationCheck(request({
217
+ headers: {
218
+ origin: 'https://origin.example.com/path',
219
+ referer: 'https://referer.example.com/path',
220
+ 'client-id': 'header-client',
221
+ 'request-client-id': 'other-client',
222
+ secret: 'preferred-secret',
223
+ 'client-secret': 'other-secret',
224
+ 'context-client-id': 'header-context',
225
+ authorization: 'Bearer header-token',
226
+ 'x-country-code': 'NG',
227
+ 'x-currency-code': 'NGN',
228
+ },
229
+ cookies: { 'request-client-id': 'cookie-client', 'auth-token': 'cookie-token' },
230
+ body: { clientId: 'body-context', token: 'body-token' },
231
+ }));
232
+ expect(result).toEqual({ data: clientAuth });
233
+ expect(mockPost).toHaveBeenCalledWith('/v1/auths/validate-user-access', {
234
+ domain: 'origin.example.com',
235
+ secret: 'preferred-secret',
236
+ requestClientId: 'header-client',
237
+ contextClientId: 'body-context',
238
+ country: 'NG',
239
+ currency: 'NGN',
240
+ token: 'header-token',
241
+ });
242
+ }));
243
+ it('uses query.clientId ahead of body, context header, and request client', () => __awaiter(void 0, void 0, void 0, function* () {
244
+ yield common_1.CommonMiddleware.processAuthorizationCheck(request({
245
+ headers: { 'client-id': 'request-client', 'context-client-id': 'header-context' },
246
+ body: { clientId: 'body-context' },
247
+ query: { clientId: 'query-context' },
248
+ }));
249
+ expect(mockPost).toHaveBeenCalledWith('/v1/auths/validate-user-access', expect.objectContaining({
250
+ requestClientId: 'request-client',
251
+ contextClientId: 'query-context',
252
+ }));
253
+ }));
254
+ it('uses referer, request-client-id, client-secret, context header, and body token fallbacks', () => __awaiter(void 0, void 0, void 0, function* () {
255
+ yield common_1.CommonMiddleware.processAuthorizationCheck(request({
256
+ headers: {
257
+ referer: 'https://referer.example.com/path',
258
+ 'request-client-id': 'request-client',
259
+ 'client-secret': 'client-secret',
260
+ 'context-client-id': 'header-context',
261
+ },
262
+ body: { token: 'Bearer body-token' },
263
+ }));
264
+ expect(mockPost).toHaveBeenCalledWith('/v1/auths/validate-user-access', expect.objectContaining({
265
+ domain: 'referer.example.com',
266
+ requestClientId: 'request-client',
267
+ contextClientId: 'header-context',
268
+ secret: 'client-secret',
269
+ token: 'body-token',
270
+ }));
271
+ }));
272
+ it('uses cookie client and token values when corresponding headers and body values are absent', () => __awaiter(void 0, void 0, void 0, function* () {
273
+ yield common_1.CommonMiddleware.processAuthorizationCheck(request({
274
+ cookies: { 'request-client-id': 'cookie-client', 'auth-token': 'cookie-token' },
275
+ }));
276
+ expect(mockPost).toHaveBeenCalledWith('/v1/auths/validate-user-access', expect.objectContaining({
277
+ requestClientId: 'cookie-client',
278
+ contextClientId: 'cookie-client',
279
+ token: 'cookie-token',
280
+ }));
281
+ }));
282
+ it('allows domain-based validation without a client ID or cookies', () => __awaiter(void 0, void 0, void 0, function* () {
283
+ yield common_1.CommonMiddleware.processAuthorizationCheck(request({
284
+ headers: { origin: 'https://origin.example.com' },
285
+ cookies: undefined,
286
+ }));
287
+ expect(mockPost).toHaveBeenCalledWith('/v1/auths/validate-user-access', expect.objectContaining({
288
+ domain: 'origin.example.com',
289
+ requestClientId: undefined,
290
+ token: '',
291
+ }));
292
+ }));
293
+ it.each([undefined, 'undefined'])('keeps the empty token when the supplied token is %j', (token) => __awaiter(void 0, void 0, void 0, function* () {
294
+ yield common_1.CommonMiddleware.processAuthorizationCheck(request({
295
+ headers: { 'client-id': 'request-client', authorization: token },
296
+ }));
297
+ expect(mockPost).toHaveBeenCalledWith('/v1/auths/validate-user-access', expect.objectContaining({ token: '' }));
298
+ }));
299
+ it('rejects missing domain and client identity before calling user-service', () => __awaiter(void 0, void 0, void 0, function* () {
300
+ yield expect(common_1.CommonMiddleware.processAuthorizationCheck(request())).rejects.toMatchObject({
301
+ statusCode: 403,
302
+ errorCode: 'Forbidden',
303
+ message: expect.any(String),
304
+ });
305
+ expect(mockPost).not.toHaveBeenCalled();
306
+ }));
307
+ it('translates user-service errors to a forbidden CustomException', () => __awaiter(void 0, void 0, void 0, function* () {
308
+ const error = new Error('connection failed');
309
+ mockPost.mockRejectedValue(error);
310
+ const result = common_1.CommonMiddleware.processAuthorizationCheck(request({ headers: { 'client-id': 'client-1' } }));
311
+ yield expect(result).rejects.toBeInstanceOf(custom_exception_1.CustomException);
312
+ yield expect(result).rejects.toMatchObject({
313
+ statusCode: 403,
314
+ errorCode: 'Forbidden',
315
+ message: expect.any(String),
316
+ });
317
+ expect(mockResolveAxiosError).toHaveBeenCalledWith(error);
318
+ expect(logger_1.logger.exception).toHaveBeenCalledWith(error, expect.objectContaining({
319
+ axiosError: { message: 'HTTP request failed' },
320
+ }));
321
+ }));
322
+ });
323
+ describe('CommonMiddleware.getRequestContext', () => {
324
+ it('selects partner authentication from route configuration and skips client permissions', () => __awaiter(void 0, void 0, void 0, function* () {
325
+ const result = yield common_1.CommonMiddleware.getRequestContext(request({
326
+ headers: { 'x-partner-data': JSON.stringify(partner) },
327
+ }), ['partner'], permissions);
328
+ expect(result.data).toBeInstanceOf(context_entity_1.PartnerContextEntity);
329
+ expect(result.data).toMatchObject({ authenticationType: 'partner', partner });
330
+ expect(mockPost).not.toHaveBeenCalled();
331
+ }));
332
+ it('requires partner identity even when the request claims an internal source', () => __awaiter(void 0, void 0, void 0, function* () {
333
+ const result = yield common_1.CommonMiddleware.getRequestContext(request({ headers: { source: 'internal' } }), ['partner']);
334
+ expect(result).toEqual(forbidden);
335
+ expect(mockPost).not.toHaveBeenCalled();
336
+ }));
337
+ it.each(['source', 'x-request-source'])('builds an internal context from %s without external validation', (sourceHeader) => __awaiter(void 0, void 0, void 0, function* () {
338
+ const result = yield common_1.CommonMiddleware.getRequestContext(request({
339
+ headers: {
340
+ [sourceHeader]: 'internal',
341
+ 'request-client-id': 'internal-client',
342
+ 'authentication-type': 'internal',
343
+ 'x-request-id': 'internal-request',
344
+ },
345
+ }), ['jwt'], permissions);
346
+ expect(result.data).toBeInstanceOf(context_entity_1.ContextEntity);
347
+ expect(result.data).toMatchObject({
348
+ requestId: 'internal-request',
349
+ requestClientId: 'internal-client',
350
+ });
351
+ expect(mockPost).not.toHaveBeenCalled();
352
+ }));
353
+ it('gives x-request-source precedence over source', () => __awaiter(void 0, void 0, void 0, function* () {
354
+ var _a, _b;
355
+ const result = yield common_1.CommonMiddleware.getRequestContext(gatewayRequest({}, { headers: { source: 'internal' } }), ['jwt']);
356
+ expect((_a = result.data) === null || _a === void 0 ? void 0 : _a.authenticationType).toBe('jwt');
357
+ expect((_b = result.data) === null || _b === void 0 ? void 0 : _b.requestClientId).toBe('request-client');
358
+ expect(mockPost).not.toHaveBeenCalled();
359
+ }));
360
+ it('builds a gateway context from authentication data, retaining header overrides', () => __awaiter(void 0, void 0, void 0, function* () {
361
+ const req = gatewayRequest({}, {
362
+ headers: {
363
+ 'x-request-id': 'request-1',
364
+ 'x-country-code': 'CM',
365
+ 'x-currency-code': 'XAF',
366
+ 'x-locale-id': 'fr',
367
+ },
368
+ });
369
+ const result = yield common_1.CommonMiddleware.getRequestContext(req, ['jwt']);
370
+ expect(result.data).toMatchObject({
371
+ authenticationType: 'jwt',
372
+ requestClientId: 'request-client',
373
+ contextClientId: 'context-client',
374
+ requestUserId: 'request-user',
375
+ contextUserId: 'context-user',
376
+ requestClient: clientAuth.requestClient,
377
+ contextClient: clientAuth.contextClient,
378
+ requestUser: clientAuth.requestUser,
379
+ contextUser: clientAuth.contextUser,
380
+ permissions: ['payments.read', 'payments.write'],
381
+ requestId: 'request-1',
382
+ countryCode: 'CM',
383
+ currencyCode: 'XAF',
384
+ locale: 'fr',
385
+ request: req,
386
+ });
387
+ expect(mockPost).not.toHaveBeenCalled();
388
+ }));
389
+ it('validates direct requests and builds their context from the response', () => __awaiter(void 0, void 0, void 0, function* () {
390
+ mockPost.mockResolvedValue({ data: { data: clientAuth } });
391
+ const result = yield common_1.CommonMiddleware.getRequestContext(request({
392
+ headers: { 'client-id': 'request-client', authorization: 'Bearer token' },
393
+ }), ['jwt']);
394
+ expect(result.data).toMatchObject({
395
+ authenticationType: 'jwt',
396
+ requestClientId: 'request-client',
397
+ });
398
+ expect(mockPost).toHaveBeenCalledTimes(1);
399
+ expect(mockPost).toHaveBeenCalledWith('/v1/auths/validate-user-access', expect.objectContaining({ token: 'token' }));
400
+ }));
401
+ it('uses the client flow when partner headers appear on a JWT route', () => __awaiter(void 0, void 0, void 0, function* () {
402
+ var _a;
403
+ const result = yield common_1.CommonMiddleware.getRequestContext(gatewayRequest({}, {
404
+ headers: { 'x-partner-data': JSON.stringify(partner) },
405
+ }), ['jwt']);
406
+ expect((_a = result.data) === null || _a === void 0 ? void 0 : _a.authenticationType).toBe('jwt');
407
+ expect(result.data).not.toBeInstanceOf(context_entity_1.PartnerContextEntity);
408
+ expect(mockPost).not.toHaveBeenCalled();
409
+ }));
410
+ it.each([undefined, []])('does not restrict authentication types when configured with %j', (types) => __awaiter(void 0, void 0, void 0, function* () {
411
+ var _a;
412
+ const result = yield common_1.CommonMiddleware.getRequestContext(gatewayRequest(), types, permissions);
413
+ expect((_a = result.data) === null || _a === void 0 ? void 0 : _a.authenticationType).toBe('jwt');
414
+ expect(mockPost).not.toHaveBeenCalled();
415
+ }));
416
+ it.each(['client-id', 'client-secret'])('skips JWT permission validation for %s', (authenticationType) => __awaiter(void 0, void 0, void 0, function* () {
417
+ var _a;
418
+ const result = yield common_1.CommonMiddleware.getRequestContext(gatewayRequest({
419
+ authenticationType,
420
+ }), [authenticationType], permissions);
421
+ expect((_a = result.data) === null || _a === void 0 ? void 0 : _a.authenticationType).toBe(authenticationType);
422
+ expect(mockPost).not.toHaveBeenCalled();
423
+ }));
424
+ it.each([undefined, 'client-id'])('rejects missing or unsupported authentication type: %j', (authenticationType) => __awaiter(void 0, void 0, void 0, function* () {
425
+ const result = yield common_1.CommonMiddleware.getRequestContext(gatewayRequest({ authenticationType }), ['jwt']);
426
+ expect(result).toEqual(forbidden);
427
+ expect(mockPost).not.toHaveBeenCalled();
428
+ }));
429
+ it.each([undefined, []])('skips the permission lookup when JWT permissions are %j', (resourcePermissions) => __awaiter(void 0, void 0, void 0, function* () {
430
+ var _a;
431
+ const result = yield common_1.CommonMiddleware.getRequestContext(gatewayRequest(), ['jwt'], resourcePermissions);
432
+ expect((_a = result.data) === null || _a === void 0 ? void 0 : _a.authenticationType).toBe('jwt');
433
+ expect(mockPost).not.toHaveBeenCalled();
434
+ }));
435
+ it.each([false, true])('checks JWT resource permissions with enforceOwn=%s', (enforceOwn) => __awaiter(void 0, void 0, void 0, function* () {
436
+ var _a, _b, _c;
437
+ mockPost.mockResolvedValue({ data: { data: { enforceOwn } } });
438
+ const result = yield common_1.CommonMiddleware.getRequestContext(gatewayRequest({}, {
439
+ body: { userId: 'body-user' },
440
+ }), ['jwt'], permissions);
441
+ expect((_a = result.data) === null || _a === void 0 ? void 0 : _a.authenticationType).toBe('jwt');
442
+ expect(mockPost).toHaveBeenCalledWith('/v1/auths/validate-user-permission', {
443
+ ip: '127.0.0.1',
444
+ requestClientId: 'request-client',
445
+ contextClientId: 'request-client',
446
+ authenticationType: 'jwt',
447
+ supportedAuthenticationType: ['jwt'],
448
+ permission: permissions[0],
449
+ resourcePermissions: permissions,
450
+ requestUser: clientAuth.requestUser,
451
+ contextUser: clientAuth.contextUser,
452
+ permissions: clientAuth.permissions,
453
+ contextUserId: 'context-user',
454
+ requestUserId: 'request-user',
455
+ });
456
+ if (enforceOwn) {
457
+ expect((_b = result.data) === null || _b === void 0 ? void 0 : _b.logger.setProps).toHaveBeenCalledWith({ userId: 'body-user' });
458
+ }
459
+ else {
460
+ expect((_c = result.data) === null || _c === void 0 ? void 0 : _c.logger.setProps).not.toHaveBeenCalled();
461
+ }
462
+ }));
463
+ it.each([undefined, '{invalid', 'null', '{}'])('rejects malformed gateway authentication data: %j', (data) => __awaiter(void 0, void 0, void 0, function* () {
464
+ const result = yield common_1.CommonMiddleware.getRequestContext(request({
465
+ headers: {
466
+ 'x-request-source': 'api-gateway',
467
+ 'x-authentication-data': data,
468
+ },
469
+ }), ['jwt']);
470
+ expect(result).toEqual(forbidden);
471
+ expect(mockPost).not.toHaveBeenCalled();
472
+ expect(logger_1.logger.exception).toHaveBeenCalled();
473
+ }));
474
+ it('rejects empty validation responses from direct authentication', () => __awaiter(void 0, void 0, void 0, function* () {
475
+ mockPost.mockResolvedValue({ data: { data: undefined } });
476
+ const result = yield common_1.CommonMiddleware.getRequestContext(request({ headers: { 'client-id': 'client-1' } }), ['jwt']);
477
+ expect(result).toEqual(forbidden);
478
+ }));
479
+ it('propagates an authorization failure returned by the validation helper', () => __awaiter(void 0, void 0, void 0, function* () {
480
+ jest.spyOn(common_1.CommonMiddleware, 'processAuthorizationCheck').mockResolvedValue({
481
+ error: 'Access denied',
482
+ statusCode: 403,
483
+ errorCode: 'Forbidden',
484
+ });
485
+ expect(yield common_1.CommonMiddleware.getRequestContext(request(), ['jwt'])).toEqual(forbidden);
486
+ expect(mockPost).not.toHaveBeenCalled();
487
+ }));
488
+ it('returns a forbidden result when direct authentication throws', () => __awaiter(void 0, void 0, void 0, function* () {
489
+ mockPost.mockRejectedValue(new Error('connection failed'));
490
+ const result = yield common_1.CommonMiddleware.getRequestContext(request({ headers: { 'client-id': 'client-1' } }), ['jwt']);
491
+ expect(result).toEqual(forbidden);
492
+ }));
493
+ it('preserves the error message returned by permission validation', () => __awaiter(void 0, void 0, void 0, function* () {
494
+ mockPost.mockRejectedValue({ response: { data: { error: 'Permission denied' } } });
495
+ const result = yield common_1.CommonMiddleware.getRequestContext(gatewayRequest(), ['jwt'], permissions);
496
+ expect(result).toEqual({ error: 'Permission denied', statusCode: 403, errorCode: 'Forbidden' });
497
+ expect(logger_1.logger.exception).toHaveBeenCalled();
498
+ }));
499
+ });
500
+ //# sourceMappingURL=common.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.test.js","sourceRoot":"","sources":["../../src/middlewares/common.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAqC;AAG5B,0BAAO;AAFhB,qCAAkC;AAEhB,uFAFT,eAAM,OAES"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAqC;AAE5B,0BAAO;AADhB,qCAAkC;AAChB,uFADT,eAAM,OACS"}