@carlonicora/nestjs-neo4jsonapi 6.0.0 → 6.1.1
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/core/cors/interfaces/trusted-origins.resolver.interface.d.ts +16 -0
- package/dist/core/cors/interfaces/trusted-origins.resolver.interface.d.ts.map +1 -0
- package/dist/core/cors/interfaces/trusted-origins.resolver.interface.js +13 -0
- package/dist/core/cors/interfaces/trusted-origins.resolver.interface.js.map +1 -0
- package/dist/core/cors/services/cors.service.d.ts +4 -1
- package/dist/core/cors/services/cors.service.d.ts.map +1 -1
- package/dist/core/cors/services/cors.service.js +36 -6
- package/dist/core/cors/services/cors.service.js.map +1 -1
- package/dist/foundations/s3/controllers/s3.controller.d.ts +9 -1
- package/dist/foundations/s3/controllers/s3.controller.d.ts.map +1 -1
- package/dist/foundations/s3/controllers/s3.controller.js +31 -6
- package/dist/foundations/s3/controllers/s3.controller.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Injection token for an application-provided source of extra trusted origins.
|
|
3
|
+
*
|
|
4
|
+
* The package consults it, when bound, on top of the static CORS configuration:
|
|
5
|
+
* `CorsService` asks `isTrusted()` for an origin the configured lists reject, and
|
|
6
|
+
* `S3Controller` adds `listOrigins()` to the `frame-ancestors` of a downloaded object.
|
|
7
|
+
* When nothing is bound, behaviour is unchanged.
|
|
8
|
+
*/
|
|
9
|
+
export declare const TRUSTED_ORIGINS_RESOLVER = "TRUSTED_ORIGINS_RESOLVER";
|
|
10
|
+
export interface TrustedOriginsResolver {
|
|
11
|
+
/** True when `origin` (scheme://host[:port]) is trusted by the application. */
|
|
12
|
+
isTrusted(origin: string): Promise<boolean>;
|
|
13
|
+
/** Every origin the application currently trusts, as scheme://host[:port]. */
|
|
14
|
+
listOrigins(): Promise<string[]>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=trusted-origins.resolver.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trusted-origins.resolver.interface.d.ts","sourceRoot":"","sources":["../../../../src/core/cors/interfaces/trusted-origins.resolver.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACrC,+EAA+E;IAC/E,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,8EAA8E;IAC9E,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAClC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TRUSTED_ORIGINS_RESOLVER = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Injection token for an application-provided source of extra trusted origins.
|
|
6
|
+
*
|
|
7
|
+
* The package consults it, when bound, on top of the static CORS configuration:
|
|
8
|
+
* `CorsService` asks `isTrusted()` for an origin the configured lists reject, and
|
|
9
|
+
* `S3Controller` adds `listOrigins()` to the `frame-ancestors` of a downloaded object.
|
|
10
|
+
* When nothing is bound, behaviour is unchanged.
|
|
11
|
+
*/
|
|
12
|
+
exports.TRUSTED_ORIGINS_RESOLVER = "TRUSTED_ORIGINS_RESOLVER";
|
|
13
|
+
//# sourceMappingURL=trusted-origins.resolver.interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trusted-origins.resolver.interface.js","sourceRoot":"","sources":["../../../../src/core/cors/interfaces/trusted-origins.resolver.interface.ts"],"names":[],"mappings":";;;AAAA;;;;;;;GAOG;AACU,QAAA,wBAAwB,GAAG,0BAA0B,CAAC"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { CorsOptions } from "@nestjs/common/interfaces/external/cors-options.interface";
|
|
2
2
|
import { ConfigService } from "@nestjs/config";
|
|
3
3
|
import { BaseConfigInterface } from "../../../config/interfaces";
|
|
4
|
+
import { TrustedOriginsResolver } from "../interfaces/trusted-origins.resolver.interface";
|
|
4
5
|
export declare class CorsService {
|
|
5
6
|
private readonly configService;
|
|
6
|
-
|
|
7
|
+
private readonly resolver?;
|
|
8
|
+
constructor(configService: ConfigService<BaseConfigInterface>, resolver?: TrustedOriginsResolver);
|
|
7
9
|
private get corsConfig();
|
|
8
10
|
getCorsConfiguration(): CorsOptions;
|
|
9
11
|
private getOriginValidator;
|
|
12
|
+
private isOriginTrustedByResolver;
|
|
10
13
|
private isOriginAllowed;
|
|
11
14
|
validateConfiguration(): void;
|
|
12
15
|
private isValidOrigin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cors.service.d.ts","sourceRoot":"","sources":["../../../../src/core/cors/services/cors.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2DAA2D,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAuB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"cors.service.d.ts","sourceRoot":"","sources":["../../../../src/core/cors/services/cors.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2DAA2D,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAuB,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAA4B,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAEpH,qBACa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAGgB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAHvD,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAGH,QAAQ,CAAC,EAAE,sBAAsB;IAGlG,OAAO,KAAK,UAAU,GAErB;IAED,oBAAoB,IAAI,WAAW;IAYnC,OAAO,CAAC,kBAAkB;YA4CZ,yBAAyB;IAWvC,OAAO,CAAC,eAAe;IAqBvB,qBAAqB,IAAI,IAAI;IAwB7B,OAAO,CAAC,aAAa;IASrB,UAAU,IAAI,MAAM,EAAE;IAItB,iBAAiB,IAAI,MAAM,EAAE;IAI7B,oBAAoB,IAAI,OAAO;CAGhC"}
|
|
@@ -8,13 +8,18 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
15
|
exports.CorsService = void 0;
|
|
13
16
|
const common_1 = require("@nestjs/common");
|
|
14
17
|
const config_1 = require("@nestjs/config");
|
|
18
|
+
const trusted_origins_resolver_interface_1 = require("../interfaces/trusted-origins.resolver.interface");
|
|
15
19
|
let CorsService = class CorsService {
|
|
16
|
-
constructor(configService) {
|
|
20
|
+
constructor(configService, resolver) {
|
|
17
21
|
this.configService = configService;
|
|
22
|
+
this.resolver = resolver;
|
|
18
23
|
}
|
|
19
24
|
get corsConfig() {
|
|
20
25
|
return this.configService.get("cors");
|
|
@@ -44,13 +49,36 @@ let CorsService = class CorsService {
|
|
|
44
49
|
if (!origin) {
|
|
45
50
|
return callback(null, true);
|
|
46
51
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
52
|
+
if (this.isOriginAllowed(origin)) {
|
|
53
|
+
return callback(null, true);
|
|
54
|
+
}
|
|
55
|
+
if (!this.resolver) {
|
|
56
|
+
if (logViolations) {
|
|
57
|
+
console.error(`CORS: Rejected request from origin: ${origin}`);
|
|
58
|
+
}
|
|
59
|
+
return callback(null, false);
|
|
50
60
|
}
|
|
51
|
-
|
|
61
|
+
// The resolver is asynchronous, but this function must NOT return a promise:
|
|
62
|
+
// @fastify/cors treats a returned promise as a second answer and would call back twice.
|
|
63
|
+
void this.isOriginTrustedByResolver(origin, logViolations).then((isAllowed) => {
|
|
64
|
+
if (!isAllowed && logViolations) {
|
|
65
|
+
console.error(`CORS: Rejected request from origin: ${origin}`);
|
|
66
|
+
}
|
|
67
|
+
callback(null, isAllowed);
|
|
68
|
+
});
|
|
52
69
|
};
|
|
53
70
|
}
|
|
71
|
+
async isOriginTrustedByResolver(origin, logViolations) {
|
|
72
|
+
try {
|
|
73
|
+
return (await this.resolver.isTrusted(origin)) === true;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
if (logViolations) {
|
|
77
|
+
console.error(`CORS: Trusted-origins resolver failed for origin: ${origin}`, error);
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
54
82
|
isOriginAllowed(origin) {
|
|
55
83
|
const { origins, originPatterns } = this.corsConfig;
|
|
56
84
|
if (origins.includes(origin)) {
|
|
@@ -110,6 +138,8 @@ let CorsService = class CorsService {
|
|
|
110
138
|
exports.CorsService = CorsService;
|
|
111
139
|
exports.CorsService = CorsService = __decorate([
|
|
112
140
|
(0, common_1.Injectable)(),
|
|
113
|
-
|
|
141
|
+
__param(1, (0, common_1.Optional)()),
|
|
142
|
+
__param(1, (0, common_1.Inject)(trusted_origins_resolver_interface_1.TRUSTED_ORIGINS_RESOLVER)),
|
|
143
|
+
__metadata("design:paramtypes", [config_1.ConfigService, Object])
|
|
114
144
|
], CorsService);
|
|
115
145
|
//# sourceMappingURL=cors.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cors.service.js","sourceRoot":"","sources":["../../../../src/core/cors/services/cors.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cors.service.js","sourceRoot":"","sources":["../../../../src/core/cors/services/cors.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { FastifyReply, FastifyRequest } from "fastify";
|
|
|
3
3
|
import { ClsService } from "nestjs-cls";
|
|
4
4
|
import { S3KeyAccessPolicy } from "../../../common/interfaces/s3.key-access.policy.interface";
|
|
5
5
|
import { BaseConfigInterface } from "../../../config/interfaces/base.config.interface";
|
|
6
|
+
import { TrustedOriginsResolver } from "../../../core/cors/interfaces/trusted-origins.resolver.interface";
|
|
6
7
|
import { S3CipherService } from "../../s3/services/s3-cipher.service";
|
|
7
8
|
import { S3Service } from "../../s3/services/s3.service";
|
|
8
9
|
export declare class S3Controller {
|
|
@@ -11,7 +12,8 @@ export declare class S3Controller {
|
|
|
11
12
|
private readonly cipher;
|
|
12
13
|
private readonly configService;
|
|
13
14
|
private readonly keyPolicy?;
|
|
14
|
-
|
|
15
|
+
private readonly trustedOrigins?;
|
|
16
|
+
constructor(service: S3Service, clsService: ClsService, cipher: S3CipherService, configService: ConfigService<BaseConfigInterface>, keyPolicy?: S3KeyAccessPolicy, trustedOrigins?: TrustedOriginsResolver);
|
|
15
17
|
getPresignedUrl(key: string, contentType: string, isPublic: boolean): Promise<import("../../..").JsonApiSingleDocument>;
|
|
16
18
|
getSignedUrl(key: string, isPublic: boolean, filename?: string): Promise<import("../../..").JsonApiSingleDocument>;
|
|
17
19
|
deleteFile(key: string): Promise<void>;
|
|
@@ -36,6 +38,12 @@ export declare class S3Controller {
|
|
|
36
38
|
* (the how-to seed rewrites `howtos/<slug>/<file>`), so a replaced file shows at most an hour late.
|
|
37
39
|
*/
|
|
38
40
|
private _cacheControl;
|
|
41
|
+
/**
|
|
42
|
+
* The space-separated `frame-ancestors` source list: the app origin, then every origin the bound
|
|
43
|
+
* TRUSTED_ORIGINS_RESOLVER lists, deduplicated. Undefined when the list is empty. A failing
|
|
44
|
+
* resolver falls back to the app origin alone.
|
|
45
|
+
*/
|
|
46
|
+
private _frameAncestors;
|
|
39
47
|
private _appOrigin;
|
|
40
48
|
private _verifyToken;
|
|
41
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3.controller.d.ts","sourceRoot":"","sources":["../../../../src/foundations/s3/controllers/s3.controller.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC,OAAO,EAGL,iBAAiB,EAElB,MAAM,2DAA2D,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;
|
|
1
|
+
{"version":3,"file":"s3.controller.d.ts","sourceRoot":"","sources":["../../../../src/foundations/s3/controllers/s3.controller.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC,OAAO,EAGL,iBAAiB,EAElB,MAAM,2DAA2D,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAEL,sBAAsB,EACvB,MAAM,kEAAkE,CAAC;AAS1E,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAKzD,qBACa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAG9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAK3B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAXf,OAAO,EAAE,SAAS,EAClB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,eAAe,EACvB,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAGjD,SAAS,CAAC,EAAE,iBAAiB,EAK7B,cAAc,CAAC,EAAE,sBAAsB;IAKpD,eAAe,CACL,GAAG,EAAE,MAAM,EACH,WAAW,EAAE,MAAM,EACtB,QAAQ,EAAE,OAAO;IAahC,YAAY,CACF,GAAG,EAAE,MAAM,EACN,QAAQ,EAAE,OAAO,EACjB,QAAQ,CAAC,EAAE,MAAM;IAchC,UAAU,CAAe,GAAG,EAAE,MAAM;IAM1C;;;OAGG;YACW,eAAe;IAsB7B;;;OAGG;IAEG,SAAS,CACN,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,YAAY,EACV,KAAK,EAAE,MAAM,GAC5B,OAAO,CAAC,IAAI,CAAC;IAwChB;;OAEG;IAEG,SAAS,CAAQ,KAAK,EAAE,YAAY,EAAkB,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCzF;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAMrB;;;;OAIG;YACW,eAAe;IAiB7B,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,YAAY;CAwBrB"}
|
|
@@ -19,6 +19,7 @@ const nestjs_cls_1 = require("nestjs-cls");
|
|
|
19
19
|
const stream_1 = require("stream");
|
|
20
20
|
const jwt_auth_guard_1 = require("../../../common/guards/jwt.auth.guard");
|
|
21
21
|
const s3_key_access_policy_interface_1 = require("../../../common/interfaces/s3.key-access.policy.interface");
|
|
22
|
+
const trusted_origins_resolver_interface_1 = require("../../../core/cors/interfaces/trusted-origins.resolver.interface");
|
|
22
23
|
const s3_cipher_core_1 = require("../../s3/cipher/s3-cipher.core");
|
|
23
24
|
const s3_meta_1 = require("../../s3/entities/s3.meta");
|
|
24
25
|
const s3_cipher_service_1 = require("../../s3/services/s3-cipher.service");
|
|
@@ -26,12 +27,13 @@ const s3_service_1 = require("../../s3/services/s3.service");
|
|
|
26
27
|
/** How long the browser keeps a file reached through a permanent (non-expiring) link. */
|
|
27
28
|
const PERMANENT_LINK_CACHE_SECONDS = 3600;
|
|
28
29
|
let S3Controller = class S3Controller {
|
|
29
|
-
constructor(service, clsService, cipher, configService, keyPolicy) {
|
|
30
|
+
constructor(service, clsService, cipher, configService, keyPolicy, trustedOrigins) {
|
|
30
31
|
this.service = service;
|
|
31
32
|
this.clsService = clsService;
|
|
32
33
|
this.cipher = cipher;
|
|
33
34
|
this.configService = configService;
|
|
34
35
|
this.keyPolicy = keyPolicy;
|
|
36
|
+
this.trustedOrigins = trustedOrigins;
|
|
35
37
|
}
|
|
36
38
|
async getPresignedUrl(key, contentType, isPublic) {
|
|
37
39
|
await this.assertKeyAccess({ key, action: "upload", isPublic });
|
|
@@ -142,10 +144,10 @@ let S3Controller = class S3Controller {
|
|
|
142
144
|
reply.header("Cache-Control", this._cacheControl(payload));
|
|
143
145
|
reply.header("Accept-Ranges", "none");
|
|
144
146
|
// The web app embeds downloaded PDFs in an iframe, but a host that registers helmet (the corpus)
|
|
145
|
-
// denies framing by default. Let the app origin,
|
|
146
|
-
const
|
|
147
|
-
if (
|
|
148
|
-
reply.header("Content-Security-Policy", `frame-ancestors ${
|
|
147
|
+
// denies framing by default. Let the app origin, plus any origin the application trusts, frame it.
|
|
148
|
+
const frameAncestors = await this._frameAncestors();
|
|
149
|
+
if (frameAncestors) {
|
|
150
|
+
reply.header("Content-Security-Policy", `frame-ancestors ${frameAncestors}`);
|
|
149
151
|
reply.removeHeader("X-Frame-Options");
|
|
150
152
|
}
|
|
151
153
|
reply.send(object.stream);
|
|
@@ -162,6 +164,27 @@ let S3Controller = class S3Controller {
|
|
|
162
164
|
const remaining = Math.max(0, payload.e - Math.floor(Date.now() / 1000));
|
|
163
165
|
return `private, max-age=${remaining}`;
|
|
164
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* The space-separated `frame-ancestors` source list: the app origin, then every origin the bound
|
|
169
|
+
* TRUSTED_ORIGINS_RESOLVER lists, deduplicated. Undefined when the list is empty. A failing
|
|
170
|
+
* resolver falls back to the app origin alone.
|
|
171
|
+
*/
|
|
172
|
+
async _frameAncestors() {
|
|
173
|
+
const origins = [];
|
|
174
|
+
const appOrigin = this._appOrigin();
|
|
175
|
+
if (appOrigin)
|
|
176
|
+
origins.push(appOrigin);
|
|
177
|
+
if (this.trustedOrigins) {
|
|
178
|
+
try {
|
|
179
|
+
origins.push(...(await this.trustedOrigins.listOrigins()));
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
console.error("S3: Trusted-origins resolver failed; framing limited to the app origin", error);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const unique = [...new Set(origins.filter((origin) => typeof origin === "string" && origin.length > 0))];
|
|
186
|
+
return unique.length > 0 ? unique.join(" ") : undefined;
|
|
187
|
+
}
|
|
165
188
|
_appOrigin() {
|
|
166
189
|
const url = this.configService.get("app")?.url;
|
|
167
190
|
if (!url)
|
|
@@ -251,9 +274,11 @@ exports.S3Controller = S3Controller = __decorate([
|
|
|
251
274
|
(0, common_1.Controller)(s3_meta_1.s3Meta.endpoint),
|
|
252
275
|
__param(4, (0, common_1.Optional)()),
|
|
253
276
|
__param(4, (0, common_1.Inject)(s3_key_access_policy_interface_1.S3_KEY_ACCESS_POLICY)),
|
|
277
|
+
__param(5, (0, common_1.Optional)()),
|
|
278
|
+
__param(5, (0, common_1.Inject)(trusted_origins_resolver_interface_1.TRUSTED_ORIGINS_RESOLVER)),
|
|
254
279
|
__metadata("design:paramtypes", [s3_service_1.S3Service,
|
|
255
280
|
nestjs_cls_1.ClsService,
|
|
256
281
|
s3_cipher_service_1.S3CipherService,
|
|
257
|
-
config_1.ConfigService, Object])
|
|
282
|
+
config_1.ConfigService, Object, Object])
|
|
258
283
|
], S3Controller);
|
|
259
284
|
//# sourceMappingURL=s3.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3.controller.js","sourceRoot":"","sources":["../../../../src/foundations/s3/controllers/s3.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAmBwB;AACxB,2CAA+C;AAE/C,2CAAwC;AACxC,mCAA6C;AAE7C,0EAAqE;AACrE,8GAKmE;
|
|
1
|
+
{"version":3,"file":"s3.controller.js","sourceRoot":"","sources":["../../../../src/foundations/s3/controllers/s3.controller.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,4 +14,6 @@ export * from "./mcp";
|
|
|
14
14
|
export * from "./bootstrap";
|
|
15
15
|
export * from "./openapi";
|
|
16
16
|
export { RedisLockService } from "./core/redis/services/redis.lock.service";
|
|
17
|
+
export { TRUSTED_ORIGINS_RESOLVER } from "./core/cors/interfaces/trusted-origins.resolver.interface";
|
|
18
|
+
export type { TrustedOriginsResolver } from "./core/cors/interfaces/trusted-origins.resolver.interface";
|
|
17
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,UAAU,CAAC;AAGzB,cAAc,UAAU,CAAC;AAGzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,eAAe,CAAC;AAG9B,cAAc,UAAU,CAAC;AAGzB,cAAc,OAAO,CAAC;AAGtB,cAAc,aAAa,CAAC;AAG5B,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,UAAU,CAAC;AAGzB,cAAc,UAAU,CAAC;AAGzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,eAAe,CAAC;AAG9B,cAAc,UAAU,CAAC;AAGzB,cAAc,OAAO,CAAC;AAGtB,cAAc,aAAa,CAAC;AAG5B,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAG5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,2DAA2D,CAAC;AACrG,YAAY,EAAE,sBAAsB,EAAE,MAAM,2DAA2D,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -19,7 +19,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
19
19
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.RedisLockService = void 0;
|
|
22
|
+
exports.TRUSTED_ORIGINS_RESOLVER = exports.RedisLockService = void 0;
|
|
23
23
|
// Common exports
|
|
24
24
|
__exportStar(require("./common"), exports);
|
|
25
25
|
// Config exports
|
|
@@ -41,4 +41,7 @@ __exportStar(require("./openapi"), exports);
|
|
|
41
41
|
// RedisLockService is not re-exported by core/redis/index.ts, so export explicitly here.
|
|
42
42
|
var redis_lock_service_1 = require("./core/redis/services/redis.lock.service");
|
|
43
43
|
Object.defineProperty(exports, "RedisLockService", { enumerable: true, get: function () { return redis_lock_service_1.RedisLockService; } });
|
|
44
|
+
// Trusted-origins hook (CORS + S3 frame-ancestors); the app binds TRUSTED_ORIGINS_RESOLVER.
|
|
45
|
+
var trusted_origins_resolver_interface_1 = require("./core/cors/interfaces/trusted-origins.resolver.interface");
|
|
46
|
+
Object.defineProperty(exports, "TRUSTED_ORIGINS_RESOLVER", { enumerable: true, get: function () { return trusted_origins_resolver_interface_1.TRUSTED_ORIGINS_RESOLVER; } });
|
|
44
47
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,iBAAiB;AACjB,2CAAyB;AAEzB,iBAAiB;AACjB,2CAAyB;AAEzB,sBAAsB;AACtB,yCAAuB;AACvB,6CAA2B;AAC3B,kDAAgC;AAEhC,4BAA4B;AAC5B,gDAA8B;AAE9B,uBAAuB;AACvB,2CAAyB;AAEzB,8CAA8C;AAC9C,wCAAsB;AAEtB,sBAAsB;AACtB,8CAA4B;AAE5B,yBAAyB;AACzB,4CAA0B;AAE1B,yFAAyF;AACzF,+EAA4E;AAAnE,sHAAA,gBAAgB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,iBAAiB;AACjB,2CAAyB;AAEzB,iBAAiB;AACjB,2CAAyB;AAEzB,sBAAsB;AACtB,yCAAuB;AACvB,6CAA2B;AAC3B,kDAAgC;AAEhC,4BAA4B;AAC5B,gDAA8B;AAE9B,uBAAuB;AACvB,2CAAyB;AAEzB,8CAA8C;AAC9C,wCAAsB;AAEtB,sBAAsB;AACtB,8CAA4B;AAE5B,yBAAyB;AACzB,4CAA0B;AAE1B,yFAAyF;AACzF,+EAA4E;AAAnE,sHAAA,gBAAgB,OAAA;AAEzB,4FAA4F;AAC5F,gHAAqG;AAA5F,8IAAA,wBAAwB,OAAA"}
|
package/package.json
CHANGED