security: upgrade @nestjs/graphql 12→13 + @ptc-org/nestjs-query 4→9 (+ @nestjs/config 4) (#21402)

## What

Upgrades the NestJS GraphQL stack to clear the High **`ws`** alert
(GHSA-3h5v-q93c-6h6q) and modernize off two heavily-patched majors.
`@nestjs/graphql@13` pulls `ws@8.20.1` (was 8.16.0).

This had to be a **coordinated** upgrade: `@ptc-org/nestjs-query@4.2.0`
doesn't support `@nestjs/graphql@13`, so all three move together.

| Package | From → To |
|---|---|
| `@nestjs/config` | 3.3.0 → ^4.0.4 |
| `@nestjs/graphql` | 12.1.1 → ^13.4.2 |
| `@ptc-org/nestjs-query-{core,graphql,typeorm}` | 4.x → ^9.4.0 |

## The tricky bits

- **Re-ported the custom `@nestjs/graphql` patch onto v13.** v13 rewrote
the schema builder and added its *own* native multi-schema support
(`includeModules`, native `clear()`). Twenty's patch
(`resolverSchemaScope` + `computeReachableTypes` — the
core/metadata/admin split) is re-merged into v13's new
`generate(options, includeModules, reachableTypes)` flow, with a
link-preserving `storage.clear()` so cross-schema `resolveType` closures
keep working.
- **Re-ported the `@ptc-org` patch onto 9.4.0**: removes the
`@shareable` federation directive from built-in connection/response
types, **and** adds a `.js` extension to its extensionless deep import
of `@nestjs/graphql` internals — which v13's new `"exports"` map
otherwise rejects at runtime (this was the boot blocker).
- **`AppTokenService`**: nestjs-query 9 requires custom services to
inject their repo and `super(repo)` it (added an `@InjectRepository`
constructor).
- **`gridPosition` input fields**: dropped the `deprecationReason` (a
*required* input field can't be `@deprecated` under the upgraded
graphql) — fields keep their original nullability, so the **schema is
unchanged**.
- **Service specs**: nestjs-query 9's `TypeOrmQueryService` reads the
repo's driver/metadata at construction, so the mocked repos now include
`manager`/`metadata`.

## Verification

- `nx typecheck twenty-server`: **0 errors**; lint clean
- Server boots; **all 3 GraphQL schemas** (`/graphql`, `/metadata`,
`/admin-panel`) generate and respond `200`
- `graphql:generate` for all 3 schemas is **byte-identical** to before
the upgrade (the reachable-types re-port is faithful)
- **108 service unit tests pass** (incl. all 6 `TypeOrmQueryService`
services)
- `ws@8.16.0` gone (now 8.17.1 + 8.18.0); `yarn install --immutable`
clean

## Note on lodash
`lodash@4.17.21` still remains via `zapier-platform-core` (runtime) and
`@stoplight/spectral`, so the lodash alert is **reduced but not fully
cleared** by this PR — it needs those separate sources addressed (or a
resolution).
This commit is contained in:
Charles Bochet
2026-06-10 15:55:15 +02:00
committed by GitHub
parent f1c7aecadb
commit 7258722754
12 changed files with 288 additions and 371 deletions
@@ -1,8 +1,8 @@
diff --git a/dist/interfaces/gql-module-options.interface.d.ts b/dist/interfaces/gql-module-options.interface.d.ts
index 72bab49dcc2b411408c75adf64c3f250cdeaa195..068dc04966e3f7ac7c7093f9ed8f29f24337cebc 100644
index 8029a048f728026d1e9a01fcc7f02dc96e829638..cfb8e008a8433df0b532186c19d8adb1896e448e 100644
--- a/dist/interfaces/gql-module-options.interface.d.ts
+++ b/dist/interfaces/gql-module-options.interface.d.ts
@@ -97,6 +97,10 @@ export interface GqlModuleOptions<TDriver extends GraphQLDriver = any> {
@@ -104,6 +104,10 @@ export interface GqlModuleOptions<TDriver extends GraphQLDriver = any> {
* Extra static metadata to be loaded into the specification
*/
metadata?: () => Promise<Record<string, any>>;
@@ -10,11 +10,11 @@ index 72bab49dcc2b411408c75adf64c3f250cdeaa195..068dc04966e3f7ac7c7093f9ed8f29f2
+ * When set, only resolvers decorated with a matching scope will be included in this schema.
+ */
+ resolverSchemaScope?: 'core' | 'metadata' | 'admin';
}
export interface GqlOptionsFactory<T extends Record<string, any> = GqlModuleOptions> {
createGqlOptions(): Promise<Omit<T, 'driver'>> | Omit<T, 'driver'>;
/**
* If `true`, enables development mode helpers and logs messages of all severity levels
* If `false`, only warn- and error-level messages are logged.
diff --git a/dist/schema-builder/graphql-schema.factory.js b/dist/schema-builder/graphql-schema.factory.js
index f349a6e8ea629f8784143b2596e9e95b3255d348..790b062233936dcb336bc615887870d5e7a24de8 100644
index 01ad7865af785d02e00bb63f2b2ccffc7757ab7c..3f7ffa3111fb1c04ba2b247e21e270e54f598fae 100644
--- a/dist/schema-builder/graphql-schema.factory.js
+++ b/dist/schema-builder/graphql-schema.factory.js
@@ -16,6 +16,7 @@ const subscription_type_factory_1 = require("./factories/subscription-type.facto
@@ -25,7 +25,7 @@ index f349a6e8ea629f8784143b2596e9e95b3255d348..790b062233936dcb336bc615887870d5
let GraphQLSchemaFactory = GraphQLSchemaFactory_1 = class GraphQLSchemaFactory {
constructor(queryTypeFactory, mutationTypeFactory, subscriptionTypeFactory, orphanedTypesFactory, typeDefinitionsGenerator) {
this.queryTypeFactory = queryTypeFactory;
@@ -32,9 +33,14 @@ let GraphQLSchemaFactory = GraphQLSchemaFactory_1 = class GraphQLSchemaFactory {
@@ -32,11 +33,16 @@ let GraphQLSchemaFactory = GraphQLSchemaFactory_1 = class GraphQLSchemaFactory {
else {
options = scalarsOrOptions;
}
@@ -33,15 +33,17 @@ index f349a6e8ea629f8784143b2596e9e95b3255d348..790b062233936dcb336bc615887870d5
+ this.orphanedTypesFactory.orphanedReferenceRegistry.clear();
lazy_metadata_storage_1.LazyMetadataStorage.load(resolvers);
type_metadata_storage_1.TypeMetadataStorage.compile(options.orphanedTypes);
- this.typeDefinitionsGenerator.generate(options);
// includeModules is passed internally from GraphQLSchemaBuilder
const internalOptions = options;
- this.typeDefinitionsGenerator.generate(options, internalOptions.includeModules);
+ const reachableTypes = Array.isArray(resolvers)
+ ? this.computeReachableTypes(resolvers, options.orphanedTypes)
+ : undefined;
+ this.typeDefinitionsGenerator.generate(options, reachableTypes);
+ this.typeDefinitionsGenerator.generate(options, internalOptions.includeModules, reachableTypes);
const schema = new graphql_1.GraphQLSchema({
mutation: this.mutationTypeFactory.create(resolvers, options),
query: this.queryTypeFactory.create(resolvers, options),
@@ -68,6 +74,116 @@ let GraphQLSchemaFactory = GraphQLSchemaFactory_1 = class GraphQLSchemaFactory {
@@ -70,6 +76,114 @@ let GraphQLSchemaFactory = GraphQLSchemaFactory_1 = class GraphQLSchemaFactory {
.forEach((classRef) => this.addScalarTypeByClassRef(classRef, scalarsMap));
options.scalarsMap = scalarsMap;
}
@@ -130,7 +132,6 @@ index f349a6e8ea629f8784143b2596e9e95b3255d348..790b062233936dcb336bc615887870d5
+ // Pass 1: follow field references from resolver return types and arguments
+ visitAllPendingTypes();
+ // Pass 2: include types that implement a reachable interface
+ // (interfaces don't have back-pointers to their implementors)
+ for (const objectTypeMetadata of type_metadata_storage_1.TypeMetadataStorage.getObjectTypesMetadata()) {
+ if ((0, get_interfaces_array_util_1.getInterfacesArray)(objectTypeMetadata.interfaces)
+ .some((interfaceType) => reachableTypes.has(interfaceType))) {
@@ -139,7 +140,6 @@ index f349a6e8ea629f8784143b2596e9e95b3255d348..790b062233936dcb336bc615887870d5
+ }
+ visitAllPendingTypes();
+ // Pass 3: include entire unions when any member is reachable
+ // (union membership is stored on the union, not on the member types)
+ for (const unionMetadata of type_metadata_storage_1.TypeMetadataStorage.getUnionsMetadata()) {
+ if (reachableTypes.has(unionMetadata.id)) {
+ continue;
@@ -173,88 +173,43 @@ index f63bf917164e05b6a363d40e871303863800c4f3..101c67ee876a8c9758a3ed35fdb8b656
exports.OrphanedReferenceRegistry = OrphanedReferenceRegistry;
exports.OrphanedReferenceRegistry = OrphanedReferenceRegistry = tslib_1.__decorate([
diff --git a/dist/schema-builder/storages/type-definitions.storage.js b/dist/schema-builder/storages/type-definitions.storage.js
index a19dee7a15b355a83124479f7e5e6cb91795070d..d28bdc8f03b4e77db93396ff28fb47d8176f0c21 100644
index 069d16e10a5d680aab0ae9b9e25fb684e314dd37..9163c5f092a2648cc3c973308640c16a759f294a 100644
--- a/dist/schema-builder/storages/type-definitions.storage.js
+++ b/dist/schema-builder/storages/type-definitions.storage.js
@@ -81,6 +81,15 @@ let TypeDefinitionsStorage = class TypeDefinitionsStorage {
}
return;
}
+ clear() {
@@ -103,13 +103,9 @@ let TypeDefinitionsStorage = class TypeDefinitionsStorage {
* Used when generating multiple schemas with different module configurations.
*/
clear() {
- this.interfaceTypeDefinitions.clear();
- this.enumTypeDefinitions.clear();
- this.unionTypeDefinitions.clear();
- this.objectTypeDefinitions.clear();
- this.inputTypeDefinitions.clear();
- this.inputTypeDefinitionsLinks = undefined;
- this.outputTypeDefinitionsLinks = undefined;
+ // Only invalidate the lazy link caches, NOT the type Maps.
+ // The Maps accumulate types from all schema builds. This is
+ // needed because resolveType closures from earlier schemas
+ // look up types in objectTypeDefinitions at query time.
+ // The add* methods use Map.set() so duplicates are overwritten.
+ this.inputTypeDefinitionsLinks = null;
+ this.outputTypeDefinitionsLinks = null;
+ }
}
};
exports.TypeDefinitionsStorage = TypeDefinitionsStorage;
exports.TypeDefinitionsStorage = TypeDefinitionsStorage = tslib_1.__decorate([
diff --git a/dist/schema-builder/type-definitions.generator.js b/dist/schema-builder/type-definitions.generator.js
index d5423f1603ea2dbe32f70778cb715de648960cf3..47c80de38dc9045b1ee043dd6f74bb22a66d3b4a 100644
index 7fb2438d75794a0bb258fbfd99325f0646499723..db768e86d7bfb2b4427d0d5f50dca368031281ae 100644
--- a/dist/schema-builder/type-definitions.generator.js
+++ b/dist/schema-builder/type-definitions.generator.js
@@ -19,25 +19,37 @@ let TypeDefinitionsGenerator = class TypeDefinitionsGenerator {
@@ -19,10 +19,31 @@ let TypeDefinitionsGenerator = class TypeDefinitionsGenerator {
this.interfaceDefinitionFactory = interfaceDefinitionFactory;
this.unionDefinitionFactory = unionDefinitionFactory;
}
- generate(options) {
- this.generateUnionDefs();
+ generate(options, reachableTypes) {
+ this.generateUnionDefs(reachableTypes);
this.generateEnumDefs();
- this.generateInterfaceDefs(options);
- this.generateObjectTypeDefs(options);
- this.generateInputTypeDefs(options);
+ this.generateInterfaceDefs(options, reachableTypes);
+ this.generateObjectTypeDefs(options, reachableTypes);
+ this.generateInputTypeDefs(options, reachableTypes);
}
- generateInputTypeDefs(options) {
- const metadata = type_metadata_storage_1.TypeMetadataStorage.getInputTypesMetadata();
+ clearTypeDefinitionStorage() {
+ this.typeDefinitionsStorage.clear();
+ }
+ generateInputTypeDefs(options, reachableTypes) {
+ let metadata = type_metadata_storage_1.TypeMetadataStorage.getInputTypesMetadata();
- generate(options, includeModules) {
+ generate(options, includeModules, reachableTypes) {
// Clear previous type definitions to support multiple schema generation
this.typeDefinitionsStorage.clear();
- if (includeModules?.length) {
+ if (reachableTypes) {
+ metadata = metadata.filter((inputMetadata) => reachableTypes.has(inputMetadata.target));
+ }
const inputTypeDefs = metadata.map((metadata) => this.inputTypeDefinitionFactory.create(metadata, options));
this.typeDefinitionsStorage.addInputTypes(inputTypeDefs);
}
- generateObjectTypeDefs(options) {
- const metadata = type_metadata_storage_1.TypeMetadataStorage.getObjectTypesMetadata();
+ generateObjectTypeDefs(options, reachableTypes) {
+ let metadata = type_metadata_storage_1.TypeMetadataStorage.getObjectTypesMetadata();
+ if (reachableTypes) {
+ metadata = metadata.filter((objectMetadata) => reachableTypes.has(objectMetadata.target));
+ }
const objectTypeDefs = metadata.map((metadata) => this.objectTypeDefinitionFactory.create(metadata, options));
this.typeDefinitionsStorage.addObjectTypes(objectTypeDefs);
}
- generateInterfaceDefs(options) {
- const metadata = type_metadata_storage_1.TypeMetadataStorage.getInterfacesMetadata();
+ generateInterfaceDefs(options, reachableTypes) {
+ let metadata = type_metadata_storage_1.TypeMetadataStorage.getInterfacesMetadata();
+ if (reachableTypes) {
+ metadata = metadata.filter((interfaceMetadata) => reachableTypes.has(interfaceMetadata.target));
+ }
const interfaceDefs = metadata.map((metadata) => this.interfaceDefinitionFactory.create(metadata, options));
this.typeDefinitionsStorage.addInterfaces(interfaceDefs);
}
@@ -46,8 +58,22 @@ let TypeDefinitionsGenerator = class TypeDefinitionsGenerator {
const enumDefs = metadata.map((metadata) => this.enumDefinitionFactory.create(metadata));
this.typeDefinitionsStorage.addEnums(enumDefs);
}
- generateUnionDefs() {
- const metadata = type_metadata_storage_1.TypeMetadataStorage.getUnionsMetadata();
+ generateUnionDefs(reachableTypes) {
+ let metadata = type_metadata_storage_1.TypeMetadataStorage.getUnionsMetadata();
+ if (reachableTypes) {
+ metadata = metadata.filter((unionMetadata) => {
+ // Twenty: scope the schema to types reachable from the scoped resolvers
+ const TMS = type_metadata_storage_1.TypeMetadataStorage;
+ const unionMetadata = TMS.getUnionsMetadata().filter((unionMetadata) => {
+ if (reachableTypes.has(unionMetadata.id)) {
+ return true;
+ }
@@ -266,30 +221,45 @@ index d5423f1603ea2dbe32f70778cb715de648960cf3..47c80de38dc9045b1ee043dd6f74bb22
+ return true;
+ }
+ });
+ this.generateUnionDefs(unionMetadata);
+ this.generateEnumDefs();
+ this.generateInterfaceDefs(options, TMS.getInterfacesMetadata().filter((m) => reachableTypes.has(m.target)));
+ this.generateObjectTypeDefs(options, TMS.getObjectTypesMetadata().filter((m) => reachableTypes.has(m.target)));
+ this.generateInputTypeDefs(options, TMS.getInputTypesMetadata().filter((m) => reachableTypes.has(m.target)));
+ }
const unionDefs = metadata.map((metadata) => this.unionDefinitionFactory.create(metadata));
this.typeDefinitionsStorage.addUnions(unionDefs);
+ else if (includeModules?.length) {
// Filter metadata by modules
this.generateUnionDefs(type_metadata_storage_1.TypeMetadataStorage.getUnionsMetadataByModules(includeModules));
this.generateEnumDefs(type_metadata_storage_1.TypeMetadataStorage.getEnumsMetadataByModules(includeModules));
@@ -39,6 +60,9 @@ let TypeDefinitionsGenerator = class TypeDefinitionsGenerator {
this.generateInputTypeDefs(options);
}
}
+ clearTypeDefinitionStorage() {
+ this.typeDefinitionsStorage.clear();
+ }
generateInputTypeDefs(options, metadata) {
const inputTypeMetadata = metadata ?? type_metadata_storage_1.TypeMetadataStorage.getInputTypesMetadata();
const inputTypeDefs = inputTypeMetadata.map((item) => this.inputTypeDefinitionFactory.create(item, options));
diff --git a/dist/services/resolvers-explorer.service.js b/dist/services/resolvers-explorer.service.js
index 1cc43269cd0c4fbe446789b38970118f0c1856c7..3eeb77fcd3c78a134896faa3424209abc47b971a 100644
index f07850b78739e2ea14a297e1b44650de39a2de66..b881ca6ca231eb2031b92270125a832f34393b3a 100644
--- a/dist/services/resolvers-explorer.service.js
+++ b/dist/services/resolvers-explorer.service.js
@@ -21,6 +21,7 @@ const graphql_constants_1 = require("../graphql.constants");
const decorate_field_resolver_util_1 = require("../utils/decorate-field-resolver.util");
const extract_metadata_util_1 = require("../utils/extract-metadata.util");
const base_explorer_service_1 = require("./base-explorer.service");
@@ -26,6 +26,7 @@ const ROOT_RESOLVER_TYPES = new Set([
resolver_enum_1.Resolver.QUERY,
resolver_enum_1.Resolver.SUBSCRIPTION,
]);
+const RESOLVER_SCHEMA_SCOPE_KEY = 'RESOLVER_SCHEMA_SCOPE';
let ResolversExplorerService = ResolversExplorerService_1 = class ResolversExplorerService extends base_explorer_service_1.BaseExplorerService {
constructor(modulesContainer, metadataScanner, externalContextCreator, gqlOptions, moduleRef, serializedGraph) {
super();
@@ -45,6 +46,15 @@ let ResolversExplorerService = ResolversExplorerService_1 = class ResolversExplo
@@ -52,6 +53,14 @@ let ResolversExplorerService = ResolversExplorerService_1 = class ResolversExplo
if (!instance) {
return undefined;
}
+ const resolverSchemaScope = this.gqlOptions.resolverSchemaScope;
+ if (resolverSchemaScope && wrapper.metatype) {
+ // Default to 'metadata' for unscoped resolvers (e.g. nestjs-query auto-generated CRUD)
+ // TODO: remove this fallback once nestjs-query is deprecated
+ const resolverScope = Reflect.getMetadata(RESOLVER_SCHEMA_SCOPE_KEY, wrapper.metatype) || 'metadata';
+ if (resolverScope !== resolverSchemaScope) {
+ return undefined;
@@ -298,7 +268,7 @@ index 1cc43269cd0c4fbe446789b38970118f0c1856c7..3eeb77fcd3c78a134896faa3424209ab
const prototype = Object.getPrototypeOf(instance);
const predicate = (resolverType, isReferenceResolver, isPropertyResolver) => (0, shared_utils_1.isUndefined)(resolverType) ||
(!isReferenceResolver &&
@@ -147,6 +157,15 @@ let ResolversExplorerService = ResolversExplorerService_1 = class ResolversExplo
@@ -160,6 +169,14 @@ let ResolversExplorerService = ResolversExplorerService_1 = class ResolversExplo
getAllCtors() {
const modules = this.getModules(this.modulesContainer, this.gqlOptions.include || []);
const resolvers = this.flatMap(modules, this.mapToCtor).filter(Boolean);
@@ -306,7 +276,6 @@ index 1cc43269cd0c4fbe446789b38970118f0c1856c7..3eeb77fcd3c78a134896faa3424209ab
+ if (resolverSchemaScope) {
+ return resolvers.filter((resolverConstructor) => {
+ // Default to 'metadata' for unscoped resolvers (e.g. nestjs-query auto-generated CRUD)
+ // TODO: remove this fallback once nestjs-query is deprecated
+ const resolverScope = Reflect.getMetadata(RESOLVER_SCHEMA_SCOPE_KEY, resolverConstructor) || 'metadata';
+ return resolverScope === resolverSchemaScope;
+ });
@@ -1,5 +1,18 @@
diff --git a/src/common/external.utils.js b/src/common/external.utils.js
index 1b4ee1bae8436551447e3b03c9f749f172962539..d00a94b0ce38c13cb09423c1dc72c9101b02cba1 100644
--- a/src/common/external.utils.js
+++ b/src/common/external.utils.js
@@ -5,7 +5,7 @@ exports.getGraphqlObjectMetadata = getGraphqlObjectMetadata;
exports.getGraphqlObjectName = getGraphqlObjectName;
exports.getGraphqlEnumMetadata = getGraphqlEnumMetadata;
const graphql_1 = require("@nestjs/graphql");
-const lazy_metadata_storage_1 = require("@nestjs/graphql/dist/schema-builder/storages/lazy-metadata.storage");
+const lazy_metadata_storage_1 = require("@nestjs/graphql/dist/schema-builder/storages/lazy-metadata.storage.js");
const type_errors_1 = require("../types/type.errors");
/**
* @internal
diff --git a/src/types/connection/cursor/page-info.type.js b/src/types/connection/cursor/page-info.type.js
index 00d836d..8eef442 100644
index 00d836d0b67fba6daae736e4e99d5af2903d1258..c73dd1304611b61f938b75c01f18dbb1edd9ecb4 100644
--- a/src/types/connection/cursor/page-info.type.js
+++ b/src/types/connection/cursor/page-info.type.js
@@ -39,7 +39,6 @@ const getOrCreatePageInfoType = () => {
@@ -11,7 +24,7 @@ index 00d836d..8eef442 100644
tslib_1.__metadata("design:paramtypes", [Boolean, Boolean, String, String])
], PageInfoTypeImpl);
diff --git a/src/types/connection/offset/offset-connection.type.js b/src/types/connection/offset/offset-connection.type.js
index b47564f..d33f391 100644
index e89e5ab573572325aaad024827193e7d06f4e5ba..2878acae20c1367622530c4ea96a76062a84cada 100644
--- a/src/types/connection/offset/offset-connection.type.js
+++ b/src/types/connection/offset/offset-connection.type.js
@@ -64,7 +64,6 @@ function getOrCreateOffsetConnectionType(TItemClass, opts) {
@@ -23,7 +36,7 @@ index b47564f..d33f391 100644
tslib_1.__metadata("design:paramtypes", [Object, Array, Function])
], AbstractConnection);
diff --git a/src/types/connection/offset/offset-page-info.type.js b/src/types/connection/offset/offset-page-info.type.js
index 4803306..d459b16 100644
index 480330653efc3def8423adbc95d1009d02aa9778..ea55bcf2e45a05a2ba32d0f4185a15abac59d478 100644
--- a/src/types/connection/offset/offset-page-info.type.js
+++ b/src/types/connection/offset/offset-page-info.type.js
@@ -25,7 +25,6 @@ const getOrCreateOffsetPageInfoType = () => {
@@ -35,7 +48,7 @@ index 4803306..d459b16 100644
tslib_1.__metadata("design:paramtypes", [Boolean, Boolean])
], PageInfoTypeImpl);
diff --git a/src/types/delete-many-reponse.type.js b/src/types/delete-many-reponse.type.js
index 4de72de..b42f05f 100644
index 4de72de3822d9c23c6637bbec0f0be081cc82675..1663e6f62991153f89db08ab966cdef8e01b262f 100644
--- a/src/types/delete-many-reponse.type.js
+++ b/src/types/delete-many-reponse.type.js
@@ -16,7 +16,6 @@ const DeleteManyResponseType = () => {
@@ -47,7 +60,7 @@ index 4de72de..b42f05f 100644
], DeleteManyResponseTypeImpl);
deleteManyResponseType = DeleteManyResponseTypeImpl;
diff --git a/src/types/update-many-response.type.js b/src/types/update-many-response.type.js
index c525d14..74be84f 100644
index c525d1419e27d3714e7a75b4852e605b83bd4b39..a067b5f60922b7e92e985487c7128efe31162b24 100644
--- a/src/types/update-many-response.type.js
+++ b/src/types/update-many-response.type.js
@@ -16,7 +16,6 @@ const UpdateManyResponseType = () => {
+5 -5
View File
@@ -50,10 +50,10 @@
"@nestjs/axios": "3.1.2",
"@nestjs/cache-manager": "^2.3.0",
"@nestjs/common": "11.1.24",
"@nestjs/config": "3.3.0",
"@nestjs/config": "^4.0.4",
"@nestjs/core": "^11.1.24",
"@nestjs/event-emitter": "2.1.0",
"@nestjs/graphql": "patch:@nestjs/graphql@12.1.1#./patches/@nestjs+graphql+12.1.1.patch",
"@nestjs/graphql": "patch:@nestjs/graphql@npm%3A13.4.2#~/.yarn/patches/@nestjs-graphql-npm-13.4.2-a41c900c19.patch",
"@nestjs/jwt": "11.0.1",
"@nestjs/passport": "11.0.5",
"@nestjs/platform-express": "11.1.24",
@@ -67,9 +67,9 @@
"@opentelemetry/exporter-metrics-otlp-http": "^0.200.0",
"@opentelemetry/exporter-prometheus": "^0.217.0",
"@opentelemetry/sdk-metrics": "^2.0.0",
"@ptc-org/nestjs-query-core": "4.4.0",
"@ptc-org/nestjs-query-graphql": "patch:@ptc-org/nestjs-query-graphql@4.2.0#./patches/@ptc-org+nestjs-query-graphql+4.2.0.patch",
"@ptc-org/nestjs-query-typeorm": "4.2.1-alpha.2",
"@ptc-org/nestjs-query-core": "^9.4.0",
"@ptc-org/nestjs-query-graphql": "patch:@ptc-org/nestjs-query-graphql@npm%3A9.4.0#~/.yarn/patches/@ptc-org-nestjs-query-graphql-npm-9.4.0-8e6f7894e1.patch",
"@ptc-org/nestjs-query-typeorm": "^9.4.0",
"@react-email/render": "^1.2.3",
"@sentry/nestjs": "^10.51.0",
"@sentry/node": "^10.51.0",
@@ -13,7 +13,12 @@ describe('AppTokenService', () => {
AppTokenService,
{
provide: getRepositoryToken(AppTokenEntity),
useValue: {},
useValue: {
manager: {
connection: { driver: { options: { type: 'postgres' } } },
},
metadata: { columns: [] },
},
},
],
}).compile();
@@ -1,5 +1,15 @@
import { InjectRepository } from '@nestjs/typeorm';
import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm';
import { Repository } from 'typeorm';
import { type AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity';
import { AppTokenEntity } from 'src/engine/core-modules/app-token/app-token.entity';
export class AppTokenService extends TypeOrmQueryService<AppTokenEntity> {}
export class AppTokenService extends TypeOrmQueryService<AppTokenEntity> {
constructor(
@InjectRepository(AppTokenEntity)
private readonly appTokenRepository: Repository<AppTokenEntity>,
) {
super(appTokenRepository);
}
}
@@ -52,6 +52,10 @@ describe('UserWorkspaceService', () => {
exists: jest.fn(),
findOne: jest.fn(),
findOneOrFail: jest.fn(),
manager: {
connection: { driver: { options: { type: 'postgres' } } },
},
metadata: { columns: [] },
},
},
{
@@ -52,6 +52,10 @@ describe('UserService', () => {
save: jest.fn(),
softDelete: jest.fn(),
update: jest.fn(),
manager: {
connection: { driver: { options: { type: 'postgres' } } },
},
metadata: { columns: [] },
},
},
{
@@ -57,6 +57,10 @@ describe('WorkspaceService', () => {
findOne: jest.fn(),
softDelete: jest.fn(),
delete: jest.fn(),
manager: {
connection: { driver: { options: { type: 'postgres' } } },
},
metadata: { columns: [] },
},
},
{
@@ -41,8 +41,6 @@ export class CreatePageLayoutWidgetInput {
@Field(() => GridPositionInput, {
nullable: false,
deprecationReason:
'Use `position` instead. Will be removed in a future release.',
})
@ValidateNested()
@Type(() => GridPositionInput)
@@ -48,10 +48,7 @@ export class UpdatePageLayoutWidgetWithIdInput {
@IsOptional()
objectMetadataId: string | null;
@Field(() => GridPositionInput, {
deprecationReason:
'Use `position` instead. Will be removed in a future release.',
})
@Field(() => GridPositionInput, {})
@ValidateNested()
@Type(() => GridPositionInput)
@IsNotEmpty()
@@ -44,8 +44,6 @@ export class UpdatePageLayoutWidgetInput {
@Field(() => GridPositionInput, {
nullable: true,
deprecationReason:
'Use `position` instead. Will be removed in a future release.',
})
@ValidateNested()
@Type(() => GridPositionInput)
+174 -259
View File
@@ -8430,15 +8430,15 @@ __metadata:
languageName: node
linkType: hard
"@graphql-tools/merge@npm:9.0.1":
version: 9.0.1
resolution: "@graphql-tools/merge@npm:9.0.1"
"@graphql-tools/merge@npm:9.1.9, @graphql-tools/merge@npm:^9.0.0, @graphql-tools/merge@npm:^9.1.9":
version: 9.1.9
resolution: "@graphql-tools/merge@npm:9.1.9"
dependencies:
"@graphql-tools/utils": "npm:^10.0.10"
"@graphql-tools/utils": "npm:^11.1.0"
tslib: "npm:^2.4.0"
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
checksum: 10c0/cbfcb2c10490a11417991e8b61b8df2eba73a2c576e57cbf2d928902030d4391122536b9442bf042609ec24376b79b8bc6d9117e137dd8db2255ed90613acbc7
checksum: 10c0/de16a915b09d1d3a3e0105d0b6cbdfd75feaa5ef7cbf4eec489c817d390b6aacd169b8e68e6efcefe82c92c4e88d36723b5e24a7035494100ead7efcef446359
languageName: node
linkType: hard
@@ -8454,19 +8454,7 @@ __metadata:
languageName: node
linkType: hard
"@graphql-tools/merge@npm:^9.0.0, @graphql-tools/merge@npm:^9.1.9":
version: 9.1.9
resolution: "@graphql-tools/merge@npm:9.1.9"
dependencies:
"@graphql-tools/utils": "npm:^11.1.0"
tslib: "npm:^2.4.0"
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
checksum: 10c0/de16a915b09d1d3a3e0105d0b6cbdfd75feaa5ef7cbf4eec489c817d390b6aacd169b8e68e6efcefe82c92c4e88d36723b5e24a7035494100ead7efcef446359
languageName: node
linkType: hard
"@graphql-tools/merge@npm:^9.0.1, @graphql-tools/merge@npm:^9.0.3":
"@graphql-tools/merge@npm:^9.0.3":
version: 9.0.4
resolution: "@graphql-tools/merge@npm:9.0.4"
dependencies:
@@ -8542,17 +8530,16 @@ __metadata:
languageName: node
linkType: hard
"@graphql-tools/schema@npm:10.0.2":
version: 10.0.2
resolution: "@graphql-tools/schema@npm:10.0.2"
"@graphql-tools/schema@npm:10.0.33, @graphql-tools/schema@npm:^10.0.25, @graphql-tools/schema@npm:^10.0.29, @graphql-tools/schema@npm:^10.0.33":
version: 10.0.33
resolution: "@graphql-tools/schema@npm:10.0.33"
dependencies:
"@graphql-tools/merge": "npm:^9.0.1"
"@graphql-tools/utils": "npm:^10.0.10"
"@graphql-tools/merge": "npm:^9.1.9"
"@graphql-tools/utils": "npm:^11.1.0"
tslib: "npm:^2.4.0"
value-or-promise: "npm:^1.0.12"
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
checksum: 10c0/3d71117c8d8ed491aa5b988bcdfcc1a7ca8cea8638b37083af2665a0dbb95e1255961a8a43658538ad33b83d621812886a4626ad7a5333d7d9e6c62304b52cb2
checksum: 10c0/6c32d175b4832d063017d86cfe392502bd69dddb58d9ec47939818a103a6c23201402bbd13756f4bfd5ad14677e8b54af46adce4a4e63aa5d7fe8853351d3dce
languageName: node
linkType: hard
@@ -8570,19 +8557,6 @@ __metadata:
languageName: node
linkType: hard
"@graphql-tools/schema@npm:^10.0.25, @graphql-tools/schema@npm:^10.0.29, @graphql-tools/schema@npm:^10.0.33":
version: 10.0.33
resolution: "@graphql-tools/schema@npm:10.0.33"
dependencies:
"@graphql-tools/merge": "npm:^9.1.9"
"@graphql-tools/utils": "npm:^11.1.0"
tslib: "npm:^2.4.0"
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
checksum: 10c0/6c32d175b4832d063017d86cfe392502bd69dddb58d9ec47939818a103a6c23201402bbd13756f4bfd5ad14677e8b54af46adce4a4e63aa5d7fe8853351d3dce
languageName: node
linkType: hard
"@graphql-tools/schema@npm:^8.0.0":
version: 8.5.1
resolution: "@graphql-tools/schema@npm:8.5.1"
@@ -8655,17 +8629,17 @@ __metadata:
languageName: node
linkType: hard
"@graphql-tools/utils@npm:10.0.13":
version: 10.0.13
resolution: "@graphql-tools/utils@npm:10.0.13"
"@graphql-tools/utils@npm:11.1.0, @graphql-tools/utils@npm:^11.0.0, @graphql-tools/utils@npm:^11.1.0":
version: 11.1.0
resolution: "@graphql-tools/utils@npm:11.1.0"
dependencies:
"@graphql-typed-document-node/core": "npm:^3.1.1"
cross-inspect: "npm:1.0.0"
dset: "npm:^3.1.2"
"@whatwg-node/promise-helpers": "npm:^1.0.0"
cross-inspect: "npm:1.0.1"
tslib: "npm:^2.4.0"
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
checksum: 10c0/6505c494716bb7aa36eba3d731f5a3e28c0bbd2efc818f1fdc7367a408ced8878bfff40f4dafbcef70d912219df81484e32e28130366e8355c126fcbc8ac9dd5
checksum: 10c0/4858ee4a1df0f858c65a5459d991bedcfde488054484c8707c97e2ce9db9a8f74aaaa0d7c20f38ff872507db9a73fc1182d4d1860dd72099509552538dfd477a
languageName: node
linkType: hard
@@ -8692,7 +8666,7 @@ __metadata:
languageName: node
linkType: hard
"@graphql-tools/utils@npm:^10.0.0, @graphql-tools/utils@npm:^10.0.10, @graphql-tools/utils@npm:^10.0.13, @graphql-tools/utils@npm:^10.2.1, @graphql-tools/utils@npm:^10.3.4":
"@graphql-tools/utils@npm:^10.0.0, @graphql-tools/utils@npm:^10.0.13, @graphql-tools/utils@npm:^10.2.1, @graphql-tools/utils@npm:^10.3.4":
version: 10.3.4
resolution: "@graphql-tools/utils@npm:10.3.4"
dependencies:
@@ -8720,20 +8694,6 @@ __metadata:
languageName: node
linkType: hard
"@graphql-tools/utils@npm:^11.0.0, @graphql-tools/utils@npm:^11.1.0":
version: 11.1.0
resolution: "@graphql-tools/utils@npm:11.1.0"
dependencies:
"@graphql-typed-document-node/core": "npm:^3.1.1"
"@whatwg-node/promise-helpers": "npm:^1.0.0"
cross-inspect: "npm:1.0.1"
tslib: "npm:^2.4.0"
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
checksum: 10c0/4858ee4a1df0f858c65a5459d991bedcfde488054484c8707c97e2ce9db9a8f74aaaa0d7c20f38ff872507db9a73fc1182d4d1860dd72099509552538dfd477a
languageName: node
linkType: hard
"@graphql-tools/wrap@npm:^10.0.16":
version: 10.1.4
resolution: "@graphql-tools/wrap@npm:10.1.4"
@@ -13047,17 +13007,17 @@ __metadata:
languageName: node
linkType: hard
"@nestjs/config@npm:3.3.0":
version: 3.3.0
resolution: "@nestjs/config@npm:3.3.0"
"@nestjs/config@npm:^4.0.4":
version: 4.0.4
resolution: "@nestjs/config@npm:4.0.4"
dependencies:
dotenv: "npm:16.4.5"
dotenv-expand: "npm:10.0.0"
lodash: "npm:4.17.21"
dotenv: "npm:17.4.1"
dotenv-expand: "npm:12.0.3"
lodash: "npm:4.18.1"
peerDependencies:
"@nestjs/common": ^8.0.0 || ^9.0.0 || ^10.0.0
"@nestjs/common": ^10.0.0 || ^11.0.0
rxjs: ^7.1.0
checksum: 10c0/9eb1634b1a0cf4a6892e1b4449344df296d25e886fcc534853b3e3d7cf462eddb8c6cb7dd1339e29b1a6f7451d08a27a98fcbeecc95d906035bbdb81dbc623f9
checksum: 10c0/d1cd320a591864a2216fc702cb8fc5abd756de64d7a220494e4176ad5b0d4f0cbb6fe6f614c643efbd9fe59864989cb6644c49a037c60b257204af28535c7964
languageName: node
linkType: hard
@@ -13101,33 +13061,32 @@ __metadata:
languageName: node
linkType: hard
"@nestjs/graphql@npm:12.1.1":
version: 12.1.1
resolution: "@nestjs/graphql@npm:12.1.1"
"@nestjs/graphql@npm:13.4.2":
version: 13.4.2
resolution: "@nestjs/graphql@npm:13.4.2"
dependencies:
"@graphql-tools/merge": "npm:9.0.1"
"@graphql-tools/schema": "npm:10.0.2"
"@graphql-tools/utils": "npm:10.0.13"
"@nestjs/mapped-types": "npm:2.0.5"
chokidar: "npm:3.6.0"
fast-glob: "npm:3.3.2"
"@graphql-tools/merge": "npm:9.1.9"
"@graphql-tools/schema": "npm:10.0.33"
"@graphql-tools/utils": "npm:11.1.0"
"@nestjs/mapped-types": "npm:2.1.1"
chokidar: "npm:4.0.3"
fast-glob: "npm:3.3.3"
graphql-tag: "npm:2.12.6"
graphql-ws: "npm:5.14.3"
lodash: "npm:4.17.21"
graphql-ws: "npm:6.0.8"
lodash: "npm:4.18.1"
normalize-path: "npm:3.0.0"
subscriptions-transport-ws: "npm:0.11.0"
tslib: "npm:2.6.2"
uuid: "npm:9.0.1"
ws: "npm:8.16.0"
tslib: "npm:2.8.1"
ws: "npm:8.20.1"
peerDependencies:
"@apollo/subgraph": ^2.0.0
"@nestjs/common": ^9.3.8 || ^10.0.0
"@nestjs/core": ^9.3.8 || ^10.0.0
"@apollo/subgraph": ^2.9.3
"@nestjs/common": ^11.0.1
"@nestjs/core": ^11.0.1
class-transformer: "*"
class-validator: "*"
graphql: ^16.6.0
graphql: ^16.11.0
reflect-metadata: ^0.1.13 || ^0.2.0
ts-morph: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0
ts-morph: ^20.0.0 || ^21.0.0 || ^24.0.0 || ^25.0.0 || ^26.0.0 || ^27.0.0 || ^28.0.0
peerDependenciesMeta:
"@apollo/subgraph":
optional: true
@@ -13137,37 +13096,36 @@ __metadata:
optional: true
ts-morph:
optional: true
checksum: 10c0/b2c371d443007b583b75cbffd86714fc87551e2f6c56a89b70f95eae2ee3fc9a5ae0673b44d1c9d59f42b38e6f54fe20f92396a8be02c5bf87d8e83d5da764a6
checksum: 10c0/6ce949af29d3cf214f4c22ee7076a638f91fb12a0d915ed2bfd3a1ce07a0612c2cdb8fbaed58095dea95bd7a9b657b58a855af36bd953e3cc4399608b336d2c9
languageName: node
linkType: hard
"@nestjs/graphql@patch:@nestjs/graphql@12.1.1#./patches/@nestjs+graphql+12.1.1.patch::locator=twenty-server%40workspace%3Apackages%2Ftwenty-server":
version: 12.1.1
resolution: "@nestjs/graphql@patch:@nestjs/graphql@npm%3A12.1.1#./patches/@nestjs+graphql+12.1.1.patch::version=12.1.1&hash=eaf96d&locator=twenty-server%40workspace%3Apackages%2Ftwenty-server"
"@nestjs/graphql@patch:@nestjs/graphql@npm%3A13.4.2#~/.yarn/patches/@nestjs-graphql-npm-13.4.2-a41c900c19.patch":
version: 13.4.2
resolution: "@nestjs/graphql@patch:@nestjs/graphql@npm%3A13.4.2#~/.yarn/patches/@nestjs-graphql-npm-13.4.2-a41c900c19.patch::version=13.4.2&hash=a5d90c"
dependencies:
"@graphql-tools/merge": "npm:9.0.1"
"@graphql-tools/schema": "npm:10.0.2"
"@graphql-tools/utils": "npm:10.0.13"
"@nestjs/mapped-types": "npm:2.0.5"
chokidar: "npm:3.6.0"
fast-glob: "npm:3.3.2"
"@graphql-tools/merge": "npm:9.1.9"
"@graphql-tools/schema": "npm:10.0.33"
"@graphql-tools/utils": "npm:11.1.0"
"@nestjs/mapped-types": "npm:2.1.1"
chokidar: "npm:4.0.3"
fast-glob: "npm:3.3.3"
graphql-tag: "npm:2.12.6"
graphql-ws: "npm:5.14.3"
lodash: "npm:4.17.21"
graphql-ws: "npm:6.0.8"
lodash: "npm:4.18.1"
normalize-path: "npm:3.0.0"
subscriptions-transport-ws: "npm:0.11.0"
tslib: "npm:2.6.2"
uuid: "npm:9.0.1"
ws: "npm:8.16.0"
tslib: "npm:2.8.1"
ws: "npm:8.20.1"
peerDependencies:
"@apollo/subgraph": ^2.0.0
"@nestjs/common": ^9.3.8 || ^10.0.0
"@nestjs/core": ^9.3.8 || ^10.0.0
"@apollo/subgraph": ^2.9.3
"@nestjs/common": ^11.0.1
"@nestjs/core": ^11.0.1
class-transformer: "*"
class-validator: "*"
graphql: ^16.6.0
graphql: ^16.11.0
reflect-metadata: ^0.1.13 || ^0.2.0
ts-morph: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0
ts-morph: ^20.0.0 || ^21.0.0 || ^24.0.0 || ^25.0.0 || ^26.0.0 || ^27.0.0 || ^28.0.0
peerDependenciesMeta:
"@apollo/subgraph":
optional: true
@@ -13177,7 +13135,7 @@ __metadata:
optional: true
ts-morph:
optional: true
checksum: 10c0/0d13646d982c3d18de9a5d4989edf2e8d1ef15974d41795f8b220819a8b27c4d4cb9c71bd73524978fe12457e1e955b86f47efa3a4621a571b139d1918702125
checksum: 10c0/1387d51abcd14505bd603ce75f189022b8da6ad31b8ec0d01c089f2e2544989f9b07aba123b1b5f974cfdae4067157f9eb191900952409140ba96c1bde332c59
languageName: node
linkType: hard
@@ -13193,20 +13151,20 @@ __metadata:
languageName: node
linkType: hard
"@nestjs/mapped-types@npm:2.0.5":
version: 2.0.5
resolution: "@nestjs/mapped-types@npm:2.0.5"
"@nestjs/mapped-types@npm:2.1.1":
version: 2.1.1
resolution: "@nestjs/mapped-types@npm:2.1.1"
peerDependencies:
"@nestjs/common": ^8.0.0 || ^9.0.0 || ^10.0.0
"@nestjs/common": ^10.0.0 || ^11.0.0
class-transformer: ^0.4.0 || ^0.5.0
class-validator: ^0.13.0 || ^0.14.0
class-validator: ^0.13.0 || ^0.14.0 || ^0.15.0
reflect-metadata: ^0.1.12 || ^0.2.0
peerDependenciesMeta:
class-transformer:
optional: true
class-validator:
optional: true
checksum: 10c0/f92743cb4c0fe3b1eecdf0c7c6a40f0e7478574a9e1a25ebdbd29db29a7319c2ae608c08d07f7b9525bea01a5e20dbd73222100204d3a13500db4f56676446a1
checksum: 10c0/985e7232921a7f79338b0247778994afcb1d7e74b14506bddc6996b39ff511f3847b4013b9bbcba66a0b9f370e747e7521e6b22a61dd630cfdead667b5b3c056
languageName: node
linkType: hard
@@ -16399,108 +16357,90 @@ __metadata:
languageName: node
linkType: hard
"@ptc-org/nestjs-query-core@npm:4.2.0":
version: 4.2.0
resolution: "@ptc-org/nestjs-query-core@npm:4.2.0"
"@ptc-org/nestjs-query-core@npm:9.4.0, @ptc-org/nestjs-query-core@npm:^9.4.0":
version: 9.4.0
resolution: "@ptc-org/nestjs-query-core@npm:9.4.0"
dependencies:
lodash.merge: "npm:^4.6.2"
reflect-metadata: "npm:^0.1.13"
tslib: "npm:^2.6.2"
reflect-metadata: "npm:^0.2.2"
tslib: "npm:^2.8.1"
peerDependencies:
"@nestjs/common": ^9.0.0 || ^10.0.0
"@nestjs/common": ^9.0.0 || ^10.0.0 || ^11.0.0
class-transformer: ^0.5
checksum: 10c0/9c7f683f22b4e27f47fce70b7624d5e65f03da78f6408ab4e4983787345816d7ff5ec6013bf721bb7b0565b8939beb3ca70871897e736dff3b93eb8008360aa2
checksum: 10c0/0d6b2275cf572a9ac6e13ae4080c3a8c23049dced2dfc80a38413ef39b85fa7fac409ce5b1036707c6bc6841045089f6a8cdabf3c89253e331aef9e7664b9f19
languageName: node
linkType: hard
"@ptc-org/nestjs-query-core@npm:4.4.0":
version: 4.4.0
resolution: "@ptc-org/nestjs-query-core@npm:4.4.0"
"@ptc-org/nestjs-query-graphql@npm:9.4.0":
version: 9.4.0
resolution: "@ptc-org/nestjs-query-graphql@npm:9.4.0"
dependencies:
lodash.merge: "npm:^4.6.2"
reflect-metadata: "npm:^0.2.1"
tslib: "npm:^2.6.2"
peerDependencies:
"@nestjs/common": ^9.0.0 || ^10.0.0
class-transformer: ^0.5
checksum: 10c0/d734151a3573eda72552664b5fb684d1d9d6fbf207d2b4e5b48a5a140bbc3f699c6fa29e76a2c31a74be3ec2ed4f54bcfcf95ecf414a7ccc0258c83e3b4a6b3b
languageName: node
linkType: hard
"@ptc-org/nestjs-query-graphql@npm:4.2.0":
version: 4.2.0
resolution: "@ptc-org/nestjs-query-graphql@npm:4.2.0"
dependencies:
"@ptc-org/nestjs-query-core": "npm:4.2.0"
dataloader: "npm:^2.2.2"
"@ptc-org/nestjs-query-core": "npm:9.4.0"
dataloader: "npm:^2.2.3"
graphql-fields: "npm:^2.0.3"
lodash.merge: "npm:4.6.2"
lodash.omit: "npm:^4.5.0"
lower-case-first: "npm:^2.0.2"
pluralize: "npm:^8.0.0"
reflect-metadata: "npm:0.1.13"
tslib: "npm:^2.6.2"
upper-case-first: "npm:^2.0.2"
reflect-metadata: "npm:0.2.2"
tslib: "npm:^2.8.1"
peerDependencies:
"@apollo/gateway": ^0.44.1 || ^0.46.0 || ^0.48.0 || ^0.49.0 || ^0.50.0 || ^2.0.0
"@nestjs/common": ^9.0.0 || ^10.0.0
"@nestjs/core": ^9.0.0 || ^10.0.0
"@nestjs/graphql": ^11.0.0 || ^12.0.0
"@nestjs/common": ^9.0.0 || ^10.0.0 || ^11.0.0
"@nestjs/core": ^9.0.0 || ^10.0.0 || ^11.0.0
"@nestjs/graphql": ^11.0.0 || ^12.0.0 || ^13.0.0
class-transformer: ^0.5
class-validator: ^0.14.0
graphql: ^16.0.0
graphql-subscriptions: ^2.0.0
ts-morph: ^19.0.0
checksum: 10c0/8a5c5da602e68ff4875f19a19baa2b15bdefc9c5b467d3a55898fbbe411744762fcd42cf078e2ebc5cd53f1a12e67c7fbd698b3696ce1bb85e41dc9d0da72441
graphql-subscriptions: ^3.0.0
ts-morph: ^19.0.0 || ^20.0.0 || ^21.0.0 || ^24.0.0 || ^25.0.0
checksum: 10c0/651d0be3ff77fd922ea29a621ca4c96e98df1ea15e05742cbe1fe10a157d46c019d728a38418662aa83414e1e6c78a3d2c9f6f25eec61f79075884dc4d1c1935
languageName: node
linkType: hard
"@ptc-org/nestjs-query-graphql@patch:@ptc-org/nestjs-query-graphql@4.2.0#./patches/@ptc-org+nestjs-query-graphql+4.2.0.patch::locator=twenty-server%40workspace%3Apackages%2Ftwenty-server":
version: 4.2.0
resolution: "@ptc-org/nestjs-query-graphql@patch:@ptc-org/nestjs-query-graphql@npm%3A4.2.0#./patches/@ptc-org+nestjs-query-graphql+4.2.0.patch::version=4.2.0&hash=2d5c00&locator=twenty-server%40workspace%3Apackages%2Ftwenty-server"
"@ptc-org/nestjs-query-graphql@patch:@ptc-org/nestjs-query-graphql@npm%3A9.4.0#~/.yarn/patches/@ptc-org-nestjs-query-graphql-npm-9.4.0-8e6f7894e1.patch":
version: 9.4.0
resolution: "@ptc-org/nestjs-query-graphql@patch:@ptc-org/nestjs-query-graphql@npm%3A9.4.0#~/.yarn/patches/@ptc-org-nestjs-query-graphql-npm-9.4.0-8e6f7894e1.patch::version=9.4.0&hash=ac8761"
dependencies:
"@ptc-org/nestjs-query-core": "npm:4.2.0"
dataloader: "npm:^2.2.2"
"@ptc-org/nestjs-query-core": "npm:9.4.0"
dataloader: "npm:^2.2.3"
graphql-fields: "npm:^2.0.3"
lodash.merge: "npm:4.6.2"
lodash.omit: "npm:^4.5.0"
lower-case-first: "npm:^2.0.2"
pluralize: "npm:^8.0.0"
reflect-metadata: "npm:0.1.13"
tslib: "npm:^2.6.2"
upper-case-first: "npm:^2.0.2"
reflect-metadata: "npm:0.2.2"
tslib: "npm:^2.8.1"
peerDependencies:
"@apollo/gateway": ^0.44.1 || ^0.46.0 || ^0.48.0 || ^0.49.0 || ^0.50.0 || ^2.0.0
"@nestjs/common": ^9.0.0 || ^10.0.0
"@nestjs/core": ^9.0.0 || ^10.0.0
"@nestjs/graphql": ^11.0.0 || ^12.0.0
"@nestjs/common": ^9.0.0 || ^10.0.0 || ^11.0.0
"@nestjs/core": ^9.0.0 || ^10.0.0 || ^11.0.0
"@nestjs/graphql": ^11.0.0 || ^12.0.0 || ^13.0.0
class-transformer: ^0.5
class-validator: ^0.14.0
graphql: ^16.0.0
graphql-subscriptions: ^2.0.0
ts-morph: ^19.0.0
checksum: 10c0/e22941524df13a20a67176aac42d27f6ac7860c72a4189eca91846d493f3da63b7d3ea71f2979bfb38de5e159fc6ac70d898fce20ef443e235f3b9202073441a
graphql-subscriptions: ^3.0.0
ts-morph: ^19.0.0 || ^20.0.0 || ^21.0.0 || ^24.0.0 || ^25.0.0
checksum: 10c0/338194d3290c63edf14979fcc28293fbe6574a4698e1c0421c33e450b1ae4667ea18950ecd4c95db0f1f245c8c03ca422a40fd54895497f529080324ed1517d3
languageName: node
linkType: hard
"@ptc-org/nestjs-query-typeorm@npm:4.2.1-alpha.2":
version: 4.2.1-alpha.2
resolution: "@ptc-org/nestjs-query-typeorm@npm:4.2.1-alpha.2"
"@ptc-org/nestjs-query-typeorm@npm:^9.4.0":
version: 9.4.0
resolution: "@ptc-org/nestjs-query-typeorm@npm:9.4.0"
dependencies:
"@ptc-org/nestjs-query-core": "npm:9.4.0"
camel-case: "npm:^4.1.2"
lodash.filter: "npm:^4.6.0"
lodash.merge: "npm:^4.6.2"
lodash.omit: "npm:^4.5.0"
tslib: "npm:^2.6.2"
uuid: "npm:^9.0.0"
reflect-metadata: "npm:0.2.2"
tslib: "npm:^2.8.1"
uuid: "npm:^10.0.0"
peerDependencies:
"@nestjs/common": ^9.0.0 || ^10.0.0
"@nestjs/typeorm": ^9.0.0 || ^10.0.0
"@ptc-org/nestjs-query-core": 4.2.0
"@nestjs/common": ^9.0.0 || ^10.0.0 || ^11.0.0
"@nestjs/typeorm": ^9.0.0 || ^10.0.0 || ^11.0.0
class-transformer: ^0.5
reflect-metadata: 0.1.13
typeorm: ^0.3.15
checksum: 10c0/470eb55b0ff0c05a469e3749d3576ef3a9d5cfbcd8d7fcf0eca384bde46fd614e3401882342ffed72ac14cd92a11c35a4ea86e89dd26dd867b2948fd5f005565
checksum: 10c0/8732a44b1fd311be5e58dd14b99005ee27106f8ad3408e17d68b411a36b4910c40d07f9c429c9322af95bd625810c106b2473a494c096817ade38a338c8956f5
languageName: node
linkType: hard
@@ -31099,15 +31039,6 @@ __metadata:
languageName: node
linkType: hard
"cross-inspect@npm:1.0.0":
version: 1.0.0
resolution: "cross-inspect@npm:1.0.0"
dependencies:
tslib: "npm:^2.4.0"
checksum: 10c0/53530865c357c69a5a0543e2f2c61d3d46c9c316a19169372f5094cfb0a7c7e674f2daf2d5253a6731dfd9a8538aa4a4e13c6b4613b6f72b48bb0c41d2015ff4
languageName: node
linkType: hard
"cross-inspect@npm:1.0.1":
version: 1.0.1
resolution: "cross-inspect@npm:1.0.1"
@@ -31707,7 +31638,7 @@ __metadata:
languageName: node
linkType: hard
"dataloader@npm:2.2.2, dataloader@npm:^2.2.2":
"dataloader@npm:2.2.2":
version: 2.2.2
resolution: "dataloader@npm:2.2.2"
checksum: 10c0/125ec69f821478cf7c6b4360095db6cab939fe57876a0d2060c428091a8deee7152345189923b71a6afa694aaec463779f34b585317164016fd6f54f52cd94ba
@@ -32548,13 +32479,6 @@ __metadata:
languageName: node
linkType: hard
"dotenv-expand@npm:10.0.0, dotenv-expand@npm:^10.0.0":
version: 10.0.0
resolution: "dotenv-expand@npm:10.0.0"
checksum: 10c0/298f5018e29cfdcb0b5f463ba8e8627749103fbcf6cf81c561119115754ed582deee37b49dfc7253028aaba875ab7aea5fa90e5dac88e511d009ab0e6677924e
languageName: node
linkType: hard
"dotenv-expand@npm:12.0.3":
version: 12.0.3
resolution: "dotenv-expand@npm:12.0.3"
@@ -32564,6 +32488,13 @@ __metadata:
languageName: node
linkType: hard
"dotenv-expand@npm:^10.0.0":
version: 10.0.0
resolution: "dotenv-expand@npm:10.0.0"
checksum: 10c0/298f5018e29cfdcb0b5f463ba8e8627749103fbcf6cf81c561119115754ed582deee37b49dfc7253028aaba875ab7aea5fa90e5dac88e511d009ab0e6677924e
languageName: node
linkType: hard
"dotenv@npm:12.0.4 ":
version: 12.0.4
resolution: "dotenv@npm:12.0.4"
@@ -32592,6 +32523,13 @@ __metadata:
languageName: node
linkType: hard
"dotenv@npm:17.4.1":
version: 17.4.1
resolution: "dotenv@npm:17.4.1"
checksum: 10c0/eb6ae592ee1e8f6b7f62e0f0c2827c4f27bbe9e00abe9d7910e06456e63dccd42f011de94da9450a63c07ccc52c318f527c1b56ad8e2c81a1a16314b53d4fd99
languageName: node
linkType: hard
"dotenv@npm:^16.0.0, dotenv@npm:^16.0.3, dotenv@npm:^16.3.0, dotenv@npm:^16.4.5, dotenv@npm:^16.5.0":
version: 16.6.1
resolution: "dotenv@npm:16.6.1"
@@ -34668,20 +34606,7 @@ __metadata:
languageName: node
linkType: hard
"fast-glob@npm:3.3.2, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2":
version: 3.3.2
resolution: "fast-glob@npm:3.3.2"
dependencies:
"@nodelib/fs.stat": "npm:^2.0.2"
"@nodelib/fs.walk": "npm:^1.2.3"
glob-parent: "npm:^5.1.2"
merge2: "npm:^1.3.0"
micromatch: "npm:^4.0.4"
checksum: 10c0/42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845
languageName: node
linkType: hard
"fast-glob@npm:^3.2.7, fast-glob@npm:^3.3.3":
"fast-glob@npm:3.3.3, fast-glob@npm:^3.2.7, fast-glob@npm:^3.3.3":
version: 3.3.3
resolution: "fast-glob@npm:3.3.3"
dependencies:
@@ -34694,6 +34619,19 @@ __metadata:
languageName: node
linkType: hard
"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2":
version: 3.3.2
resolution: "fast-glob@npm:3.3.2"
dependencies:
"@nodelib/fs.stat": "npm:^2.0.2"
"@nodelib/fs.walk": "npm:^1.2.3"
glob-parent: "npm:^5.1.2"
merge2: "npm:^1.3.0"
micromatch: "npm:^4.0.4"
checksum: 10c0/42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845
languageName: node
linkType: hard
"fast-json-patch@npm:^3.0.0-1":
version: 3.1.1
resolution: "fast-json-patch@npm:3.1.1"
@@ -36677,16 +36615,7 @@ __metadata:
languageName: node
linkType: hard
"graphql-ws@npm:5.14.3":
version: 5.14.3
resolution: "graphql-ws@npm:5.14.3"
peerDependencies:
graphql: ">=0.11 <=16"
checksum: 10c0/0715feb7b6bf760e2460c31848983bd3bd5958c95d8120c2acc7416f24137585dab2eb731d6bb6f8de992afbc2ad0cf258a00c6a08aa21479fb3e9bd1d3e120a
languageName: node
linkType: hard
"graphql-ws@npm:^6.0.6":
"graphql-ws@npm:6.0.8, graphql-ws@npm:^6.0.6":
version: 6.0.8
resolution: "graphql-ws@npm:6.0.8"
peerDependencies:
@@ -49418,27 +49347,13 @@ __metadata:
languageName: node
linkType: hard
"reflect-metadata@npm:0.1.13":
version: 0.1.13
resolution: "reflect-metadata@npm:0.1.13"
checksum: 10c0/728bff0b376b05639fd11ed80c648b61f7fe653c5b506d7ca118e58b6752b9b00810fe0c86227ecf02bd88da6251ab3eb19fd403aaf2e9ff5ef36a2fda643026
languageName: node
linkType: hard
"reflect-metadata@npm:0.2.2, reflect-metadata@npm:^0.2.1":
"reflect-metadata@npm:0.2.2, reflect-metadata@npm:^0.2.1, reflect-metadata@npm:^0.2.2":
version: 0.2.2
resolution: "reflect-metadata@npm:0.2.2"
checksum: 10c0/1cd93a15ea291e420204955544637c264c216e7aac527470e393d54b4bb075f10a17e60d8168ec96600c7e0b9fcc0cb0bb6e91c3fbf5b0d8c9056f04e6ac1ec2
languageName: node
linkType: hard
"reflect-metadata@npm:^0.1.13":
version: 0.1.14
resolution: "reflect-metadata@npm:0.1.14"
checksum: 10c0/3a6190c7f6cb224f26a012d11f9e329360c01c1945e2cbefea23976a8bacf9db6b794aeb5bf18adcb673c448a234fbc06fc41853c00a6c206b30f0777ecf019e
languageName: node
linkType: hard
"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9":
version: 1.0.10
resolution: "reflect.getprototypeof@npm:1.0.10"
@@ -54984,10 +54899,10 @@ __metadata:
"@nestjs/cache-manager": "npm:^2.3.0"
"@nestjs/cli": "npm:^11.0.16"
"@nestjs/common": "npm:11.1.24"
"@nestjs/config": "npm:3.3.0"
"@nestjs/config": "npm:^4.0.4"
"@nestjs/core": "npm:^11.1.24"
"@nestjs/event-emitter": "npm:2.1.0"
"@nestjs/graphql": "patch:@nestjs/graphql@12.1.1#./patches/@nestjs+graphql+12.1.1.patch"
"@nestjs/graphql": "patch:@nestjs/graphql@npm%3A13.4.2#~/.yarn/patches/@nestjs-graphql-npm-13.4.2-a41c900c19.patch"
"@nestjs/jwt": "npm:11.0.1"
"@nestjs/passport": "npm:11.0.5"
"@nestjs/platform-express": "npm:11.1.24"
@@ -55003,9 +54918,9 @@ __metadata:
"@opentelemetry/exporter-metrics-otlp-http": "npm:^0.200.0"
"@opentelemetry/exporter-prometheus": "npm:^0.217.0"
"@opentelemetry/sdk-metrics": "npm:^2.0.0"
"@ptc-org/nestjs-query-core": "npm:4.4.0"
"@ptc-org/nestjs-query-graphql": "patch:@ptc-org/nestjs-query-graphql@4.2.0#./patches/@ptc-org+nestjs-query-graphql+4.2.0.patch"
"@ptc-org/nestjs-query-typeorm": "npm:4.2.1-alpha.2"
"@ptc-org/nestjs-query-core": "npm:^9.4.0"
"@ptc-org/nestjs-query-graphql": "patch:@ptc-org/nestjs-query-graphql@npm%3A9.4.0#~/.yarn/patches/@ptc-org-nestjs-query-graphql-npm-9.4.0-8e6f7894e1.patch"
"@ptc-org/nestjs-query-typeorm": "npm:^9.4.0"
"@react-email/render": "npm:^1.2.3"
"@sentry/nestjs": "npm:^10.51.0"
"@sentry/node": "npm:^10.51.0"
@@ -56700,15 +56615,6 @@ __metadata:
languageName: node
linkType: hard
"uuid@npm:9.0.1, uuid@npm:^9.0.0":
version: 9.0.1
resolution: "uuid@npm:9.0.1"
bin:
uuid: dist/bin/uuid
checksum: 10c0/1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b
languageName: node
linkType: hard
"uuid@npm:^10.0.0":
version: 10.0.0
resolution: "uuid@npm:10.0.0"
@@ -56745,6 +56651,15 @@ __metadata:
languageName: node
linkType: hard
"uuid@npm:^9.0.0":
version: 9.0.1
resolution: "uuid@npm:9.0.1"
bin:
uuid: dist/bin/uuid
checksum: 10c0/1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b
languageName: node
linkType: hard
"v8-compile-cache-lib@npm:^3.0.1":
version: 3.0.1
resolution: "v8-compile-cache-lib@npm:3.0.1"
@@ -58118,21 +58033,6 @@ __metadata:
languageName: node
linkType: hard
"ws@npm:8.16.0":
version: 8.16.0
resolution: "ws@npm:8.16.0"
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ">=5.0.2"
peerDependenciesMeta:
bufferutil:
optional: true
utf-8-validate:
optional: true
checksum: 10c0/a7783bb421c648b1e622b423409cb2a58ac5839521d2f689e84bc9dc41d59379c692dd405b15a997ea1d4c0c2e5314ad707332d0c558f15232d2bc07c0b4618a
languageName: node
linkType: hard
"ws@npm:8.18.0":
version: 8.18.0
resolution: "ws@npm:8.18.0"
@@ -58148,6 +58048,21 @@ __metadata:
languageName: node
linkType: hard
"ws@npm:8.20.1":
version: 8.20.1
resolution: "ws@npm:8.20.1"
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ">=5.0.2"
peerDependenciesMeta:
bufferutil:
optional: true
utf-8-validate:
optional: true
checksum: 10c0/ce162433218399cdedeb76fd33363d4d86a7d910058d4e3c679dce08cea65d6da6b39f11baa4d7808d024cf46ed88f6a05c17611621aaad8fc5e62edacc30c5d
languageName: node
linkType: hard
"ws@npm:8.21.0, ws@npm:^8.13.0, ws@npm:^8.17.1, ws@npm:^8.18.0, ws@npm:^8.18.3, ws@npm:^8.19.0, ws@npm:^8.20.0, ws@npm:^8.21.0":
version: 8.21.0
resolution: "ws@npm:8.21.0"