@solidxai/core 0.1.13-beta.13 → 0.1.13-beta.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/CHANGELOG.md +573 -0
- package/README.md +19 -0
- package/dist/constants/media-file-types.d.ts +1 -0
- package/dist/constants/media-file-types.d.ts.map +1 -1
- package/dist/constants/media-file-types.js +2 -1
- package/dist/constants/media-file-types.js.map +1 -1
- package/dist/controllers/field-metadata.controller.d.ts +2 -2
- package/dist/dtos/create-field-metadata.dto.d.ts +2 -6
- package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-field-metadata.dto.js +4 -10
- package/dist/dtos/create-field-metadata.dto.js.map +1 -1
- package/dist/dtos/create-model-sequence.dto.d.ts +1 -1
- package/dist/dtos/create-model-sequence.dto.d.ts.map +1 -1
- package/dist/dtos/create-model-sequence.dto.js +1 -1
- package/dist/dtos/create-model-sequence.dto.js.map +1 -1
- package/dist/helpers/bootstrap.helper.d.ts +2 -1
- package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
- package/dist/helpers/bootstrap.helper.js +2 -2
- package/dist/helpers/bootstrap.helper.js.map +1 -1
- package/dist/helpers/security.helper.d.ts +5 -1
- package/dist/helpers/security.helper.d.ts.map +1 -1
- package/dist/helpers/security.helper.js +15 -4
- package/dist/helpers/security.helper.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +7 -3
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/services/field-metadata.service.d.ts +2 -2
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js +2 -1
- package/dist/services/field-metadata.service.js.map +1 -1
- package/package.json +1 -1
- package/src/constants/media-file-types.ts +2 -0
- package/src/dtos/create-field-metadata.dto.ts +4 -9
- package/src/dtos/create-model-sequence.dto.ts +1 -1
- package/src/helpers/bootstrap.helper.ts +17 -3
- package/src/helpers/security.helper.ts +35 -8
- package/src/seeders/module-metadata-seeder.service.ts +11 -3
- package/src/services/field-metadata.service.ts +3 -2
|
@@ -1,15 +1,39 @@
|
|
|
1
1
|
import { HelmetOptions } from "helmet";
|
|
2
2
|
import { Environment } from "src/decorators/disallow-in-production.decorator";
|
|
3
3
|
|
|
4
|
+
export interface SolidSecurityOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Origins that may embed this application in an iframe.
|
|
7
|
+
* Defaults to the local HTTP/HTTPS loopback origins on any port.
|
|
8
|
+
*/
|
|
9
|
+
frameAncestors?: string[];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const DEFAULT_FRAME_ANCESTORS = [
|
|
13
|
+
"'self'",
|
|
14
|
+
"http://localhost:*",
|
|
15
|
+
"https://localhost:*",
|
|
16
|
+
"http://127.0.0.1:*",
|
|
17
|
+
"https://127.0.0.1:*",
|
|
18
|
+
"http://[::1]:*",
|
|
19
|
+
"https://[::1]:*",
|
|
20
|
+
];
|
|
21
|
+
|
|
4
22
|
/**
|
|
5
23
|
* Default security headers for SolidX apps.
|
|
6
24
|
* - HSTS only in prod over HTTPS
|
|
7
|
-
* - CSP with frame-ancestors
|
|
8
|
-
* - X-Frame-Options
|
|
25
|
+
* - CSP with configurable frame-ancestors
|
|
26
|
+
* - X-Frame-Options disabled when cross-origin frame ancestors are allowed
|
|
9
27
|
* - No X-XSS-Protection (deprecated)
|
|
10
28
|
*/
|
|
11
|
-
export function buildDefaultSecurityHeaderOptions(
|
|
29
|
+
export function buildDefaultSecurityHeaderOptions(
|
|
30
|
+
options: SolidSecurityOptions = {},
|
|
31
|
+
): Readonly<HelmetOptions> {
|
|
12
32
|
const isProd = process.env.ENV === Environment.Production;
|
|
33
|
+
const frameAncestors = options.frameAncestors ?? DEFAULT_FRAME_ANCESTORS;
|
|
34
|
+
const allowsCrossOriginFrames = frameAncestors.some(
|
|
35
|
+
(source) => source !== "'self'" && source !== "'none'",
|
|
36
|
+
);
|
|
13
37
|
|
|
14
38
|
return {
|
|
15
39
|
// Modern CSP. Add more directives as your app needs (script-src, connect-src, etc.)
|
|
@@ -23,7 +47,7 @@ export function buildDefaultSecurityHeaderOptions(): Readonly<HelmetOptions> {
|
|
|
23
47
|
// "form-action": ["'self'"],
|
|
24
48
|
|
|
25
49
|
// clickjacking defense (modern)
|
|
26
|
-
"frame-ancestors":
|
|
50
|
+
"frame-ancestors": frameAncestors,
|
|
27
51
|
"style-src": ["'self'"],
|
|
28
52
|
// add/adjust as needed for your app:
|
|
29
53
|
// "script-src": ["'self'"], // add hashes/nonces/CSPRO if needed
|
|
@@ -34,9 +58,12 @@ export function buildDefaultSecurityHeaderOptions(): Readonly<HelmetOptions> {
|
|
|
34
58
|
},
|
|
35
59
|
},
|
|
36
60
|
|
|
37
|
-
|
|
38
|
-
//
|
|
39
|
-
|
|
61
|
+
// Legacy clickjacking defense for configurations that do not allow
|
|
62
|
+
// cross-origin parents (kept for older UAs).
|
|
63
|
+
// X-Frame-Options cannot express an allowlist. It must be omitted when
|
|
64
|
+
// CSP allows a parent on another origin, otherwise older browsers may
|
|
65
|
+
// still block the iframe despite the CSP configuration.
|
|
66
|
+
frameguard: allowsCrossOriginFrames ? false : { action: "deny" },
|
|
40
67
|
|
|
41
68
|
// Referrer/cross-origin policies
|
|
42
69
|
referrerPolicy: { policy: "strict-origin-when-cross-origin" },
|
|
@@ -115,4 +142,4 @@ export function setDefaultCacheControl() {
|
|
|
115
142
|
// res.setHeader("Permissions-Policy", buildPermissionsPolicyHeader());
|
|
116
143
|
// next();
|
|
117
144
|
// });
|
|
118
|
-
// app.use(setDefaultCacheControl());
|
|
145
|
+
// app.use(setDefaultCacheControl());
|
|
@@ -1049,17 +1049,25 @@ export class ModuleMetadataSeederService {
|
|
|
1049
1049
|
|
|
1050
1050
|
private async seedModelSequences(overallMetadata: any): Promise<{ pruned: number; upserted: number }> {
|
|
1051
1051
|
const modelSequences = this.getSeedArray<CreateModelSequenceDto>(overallMetadata?.modelSequences);
|
|
1052
|
-
|
|
1052
|
+
|
|
1053
|
+
// Getting rid of currentValue even if it is present in the seed data.
|
|
1054
|
+
// This is because we don't want to overwrite the currentValue in the database with the seed data.
|
|
1055
|
+
// The currentValue should be managed by the application and not by the seed data.
|
|
1056
|
+
const cleanModelSequences = modelSequences.map((sequence) => {
|
|
1057
|
+
const { currentValue, ...cleanModelSequence }: CreateModelSequenceDto = sequence;
|
|
1058
|
+
return cleanModelSequence;
|
|
1059
|
+
});
|
|
1060
|
+
const pruned = this.enablePruning ? await this.timeOperation('prune-model-sequences', () => this.pruneModelSequences(cleanModelSequences, overallMetadata?.moduleMetadata?.name), {
|
|
1053
1061
|
moduleName: overallMetadata?.moduleMetadata?.name,
|
|
1054
1062
|
component: 'model-sequences',
|
|
1055
1063
|
serviceCall: 'pruneModelSequences',
|
|
1056
1064
|
}) : 0;
|
|
1057
|
-
await this.timeOperation('handle-model-sequences', () => this.handleSeedModelSequences(
|
|
1065
|
+
await this.timeOperation('handle-model-sequences', () => this.handleSeedModelSequences(cleanModelSequences), {
|
|
1058
1066
|
moduleName: overallMetadata?.moduleMetadata?.name,
|
|
1059
1067
|
component: 'model-sequences',
|
|
1060
1068
|
serviceCall: 'handleSeedModelSequences',
|
|
1061
1069
|
});
|
|
1062
|
-
return { pruned, upserted:
|
|
1070
|
+
return { pruned, upserted: cleanModelSequences.length };
|
|
1063
1071
|
}
|
|
1064
1072
|
|
|
1065
1073
|
// OK
|
|
@@ -7,12 +7,13 @@ import { ComputedFieldMetadata, SolidRegistry } from 'src/helpers/solid-registry
|
|
|
7
7
|
import { FieldMetadataRepository } from 'src/repository/field-metadata.repository';
|
|
8
8
|
import { DataSource, Repository, SelectQueryBuilder } from 'typeorm';
|
|
9
9
|
import { BasicFilterDto } from '../dtos/basic-filters.dto';
|
|
10
|
-
import { CascadeType, ComputedFieldValueType, CreateFieldMetadataDto, DecryptWhenType, EncryptionType,
|
|
10
|
+
import { CascadeType, ComputedFieldValueType, CreateFieldMetadataDto, DecryptWhenType, EncryptionType, MSSQLType, PSQLType, RelationType, SelectionValueType, SolidFieldType } from '../dtos/create-field-metadata.dto';
|
|
11
11
|
import { SelectionDynamicQueryDto } from '../dtos/selection-dynamic-query.dto';
|
|
12
12
|
import { UpdateFieldMetaDataDto } from '../dtos/update-field-metadata.dto';
|
|
13
13
|
import { FieldMetadata } from '../entities/field-metadata.entity';
|
|
14
14
|
import { ModelMetadata } from '../entities/model-metadata.entity';
|
|
15
15
|
import { ISelectionProviderValues, MediaStorageProvider } from '../interfaces';
|
|
16
|
+
import { MEDIA_CATEGORIES } from '../constants/media-file-types';
|
|
16
17
|
import { CrudHelperService } from './crud-helper.service';
|
|
17
18
|
import { ERROR_MESSAGES } from 'src/constants/error-messages';
|
|
18
19
|
import qs from 'qs';
|
|
@@ -414,7 +415,7 @@ export class FieldMetadataService implements OnApplicationBootstrap {
|
|
|
414
415
|
encryptionTypes: enumToResponseArray(EncryptionType),
|
|
415
416
|
ormType: ormFieldTypeForSolid,
|
|
416
417
|
decryptWhenTypes: enumToResponseArray(DecryptWhenType),
|
|
417
|
-
mediaTypes:
|
|
418
|
+
mediaTypes: MEDIA_CATEGORIES.map((value) => ({ label: value, value })),
|
|
418
419
|
relationTypes: enumToResponseArray(RelationType),
|
|
419
420
|
selectionDynamicProviders: sps,
|
|
420
421
|
computedProviders: cps,
|