@common-stack/server-stack 7.1.1-alpha.9 → 7.2.1-alpha.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.
- package/lib/MainStackServer.cjs +101 -142
- package/lib/MainStackServer.cjs.map +1 -1
- package/lib/MainStackServer.d.ts +10 -5
- package/lib/MainStackServer.mjs +101 -142
- package/lib/MainStackServer.mjs.map +1 -1
- package/lib/StackServer.cjs +23 -66
- package/lib/StackServer.cjs.map +1 -1
- package/lib/StackServer.d.ts +4 -5
- package/lib/StackServer.mjs +23 -66
- package/lib/StackServer.mjs.map +1 -1
- package/lib/api/schema-builder.cjs +13 -12
- package/lib/api/schema-builder.cjs.map +1 -1
- package/lib/api/schema-builder.mjs +13 -12
- package/lib/api/schema-builder.mjs.map +1 -1
- package/lib/api/sub-graph-schema-builder.cjs +13 -15
- package/lib/api/sub-graph-schema-builder.cjs.map +1 -1
- package/lib/api/sub-graph-schema-builder.mjs +14 -16
- package/lib/api/sub-graph-schema-builder.mjs.map +1 -1
- package/lib/config/env-config.cjs +6 -0
- package/lib/config/env-config.cjs.map +1 -1
- package/lib/config/env-config.d.ts +6 -0
- package/lib/config/env-config.mjs +6 -0
- package/lib/config/env-config.mjs.map +1 -1
- package/lib/examples/tenant-feature-example.d.ts +13 -0
- package/lib/examples/tenant-feature-integration.d.ts +14 -0
- package/lib/features/multi-module-example.d.ts +17 -0
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.mjs +1 -1
- package/lib/infrastructure/container-module.cjs +27 -0
- package/lib/infrastructure/container-module.cjs.map +1 -0
- package/lib/infrastructure/container-module.d.ts +3 -0
- package/lib/infrastructure/container-module.mjs +27 -0
- package/lib/infrastructure/container-module.mjs.map +1 -0
- package/lib/infrastructure/example-workflows.d.ts +16 -0
- package/lib/infrastructure/index.d.ts +5 -0
- package/lib/infrastructure/infrastructure-factory.cjs +127 -0
- package/lib/infrastructure/infrastructure-factory.cjs.map +1 -0
- package/lib/infrastructure/infrastructure-factory.d.ts +33 -0
- package/lib/infrastructure/infrastructure-factory.mjs +127 -0
- package/lib/infrastructure/infrastructure-factory.mjs.map +1 -0
- package/lib/infrastructure/inngest-factory.cjs +26 -0
- package/lib/infrastructure/inngest-factory.cjs.map +1 -0
- package/lib/infrastructure/inngest-factory.d.ts +8 -0
- package/lib/infrastructure/inngest-factory.mjs +26 -0
- package/lib/infrastructure/inngest-factory.mjs.map +1 -0
- package/lib/infrastructure/types.d.ts +28 -0
- package/lib/infrastructure/usage-examples.d.ts +9 -0
- package/lib/infrastructure/workflow-orchestrator.cjs +59 -0
- package/lib/infrastructure/workflow-orchestrator.cjs.map +1 -0
- package/lib/infrastructure/workflow-orchestrator.d.ts +10 -0
- package/lib/infrastructure/workflow-orchestrator.mjs +59 -0
- package/lib/infrastructure/workflow-orchestrator.mjs.map +1 -0
- package/lib/inngest/client-id-generator.d.ts +29 -0
- package/lib/inngest/handler-factory.d.ts +18 -0
- package/lib/inngest/multi-module-functions.d.ts +133 -0
- package/lib/inngest/setup.cjs +38 -0
- package/lib/inngest/setup.cjs.map +1 -0
- package/lib/inngest/setup.d.ts +10 -0
- package/lib/inngest/setup.mjs +38 -0
- package/lib/inngest/setup.mjs.map +1 -0
- package/lib/interfaces/graphql-request-context.d.ts +5 -0
- package/lib/middleware/index.d.ts +5 -0
- package/lib/middleware/redis-client.cjs +18 -0
- package/lib/middleware/redis-client.cjs.map +1 -0
- package/lib/middleware/redis-client.d.ts +16 -0
- package/lib/middleware/redis-client.mjs +18 -0
- package/lib/middleware/redis-client.mjs.map +1 -0
- package/lib/plugins/responseCachePlugin.cjs +1 -2
- package/lib/plugins/responseCachePlugin.cjs.map +1 -1
- package/lib/plugins/responseCachePlugin.mjs +1 -2
- package/lib/plugins/responseCachePlugin.mjs.map +1 -1
- package/lib/servers/ExpressApp.cjs +7 -2
- package/lib/servers/ExpressApp.cjs.map +1 -1
- package/lib/servers/ExpressApp.d.ts +1 -1
- package/lib/servers/ExpressApp.mjs +7 -2
- package/lib/servers/ExpressApp.mjs.map +1 -1
- package/lib/servers/GraphqlServer.cjs +7 -2
- package/lib/servers/GraphqlServer.cjs.map +1 -1
- package/lib/servers/GraphqlServer.d.ts +8 -6
- package/lib/servers/GraphqlServer.mjs +7 -2
- package/lib/servers/GraphqlServer.mjs.map +1 -1
- package/lib/servers/mongodb-migration-update.d.ts +1 -1
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/safe-model-factory.d.ts +18 -0
- package/package.json +10 -9
- package/lib/api/resolver.cjs +0 -12
- package/lib/api/resolver.cjs.map +0 -1
- package/lib/api/resolver.mjs +0 -12
- package/lib/api/resolver.mjs.map +0 -1
- package/lib/api/root-schema.graphqls.cjs +0 -2
- package/lib/api/root-schema.graphqls.cjs.map +0 -1
- package/lib/api/root-schema.graphqls.mjs +0 -2
- package/lib/api/root-schema.graphqls.mjs.map +0 -1
- package/lib/api/scalar.cjs +0 -16
- package/lib/api/scalar.cjs.map +0 -1
- package/lib/api/scalar.mjs +0 -16
- package/lib/api/scalar.mjs.map +0 -1
- package/lib/graphql/directives/index.cjs +0 -10
- package/lib/graphql/directives/index.cjs.map +0 -1
- package/lib/graphql/directives/index.d.ts +0 -7
- package/lib/graphql/directives/index.mjs +0 -10
- package/lib/graphql/directives/index.mjs.map +0 -1
- package/lib/graphql/index.d.ts +0 -2
- package/lib/graphql/schema/directives.graphql.cjs +0 -1
- package/lib/graphql/schema/directives.graphql.cjs.map +0 -1
- package/lib/graphql/schema/directives.graphql.mjs +0 -1
- package/lib/graphql/schema/directives.graphql.mjs.map +0 -1
- package/lib/graphql/schema/index.cjs +0 -1
- package/lib/graphql/schema/index.cjs.map +0 -1
- package/lib/graphql/schema/index.d.ts +0 -1
- package/lib/graphql/schema/index.mjs +0 -1
- package/lib/graphql/schema/index.mjs.map +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Container } from 'inversify';
|
|
2
|
+
import { Feature } from '@common-stack/server-core';
|
|
3
|
+
export type InngestFunctionFactory = (params: {
|
|
4
|
+
container: Container;
|
|
5
|
+
inngest: any;
|
|
6
|
+
settings?: any;
|
|
7
|
+
}) => Record<string, any>;
|
|
8
|
+
/**
|
|
9
|
+
* Creates an Inngest handler that combines functions from multiple modules
|
|
10
|
+
* Similar to how Moleculer services are loaded
|
|
11
|
+
*/
|
|
12
|
+
export declare const createInngestHandler: (features: Feature[], container: Container, inngestClient: any, settings?: any) => any[];
|
|
13
|
+
/**
|
|
14
|
+
* Legacy factory for backward compatibility
|
|
15
|
+
* @param container - The inversify container
|
|
16
|
+
* @deprecated Use createInngestHandler with Feature system instead
|
|
17
|
+
*/
|
|
18
|
+
export declare const inngestHandlerFactory: (container: Container, inngestClient?: any) => any[];
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { Container } from 'inversify';
|
|
2
|
+
/**
|
|
3
|
+
* User management Inngest functions that depend on container services
|
|
4
|
+
*/
|
|
5
|
+
export declare const userInngestFunctions: ({ container, inngest, settings, }: {
|
|
6
|
+
container: Container;
|
|
7
|
+
inngest: any;
|
|
8
|
+
settings?: any;
|
|
9
|
+
}) => {
|
|
10
|
+
createUserFunction: {
|
|
11
|
+
id: string;
|
|
12
|
+
_type: string;
|
|
13
|
+
};
|
|
14
|
+
updateUserProfileFunction: {
|
|
15
|
+
id: string;
|
|
16
|
+
_type: string;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Email campaign Inngest functions that depend on container services
|
|
21
|
+
*/
|
|
22
|
+
export declare const emailCampaignInngestFunctions: ({ container, inngest, settings, }: {
|
|
23
|
+
container: Container;
|
|
24
|
+
inngest: any;
|
|
25
|
+
settings?: any;
|
|
26
|
+
}) => {
|
|
27
|
+
sendCampaignFunction: {
|
|
28
|
+
id: string;
|
|
29
|
+
_type: string;
|
|
30
|
+
};
|
|
31
|
+
trackEmailOpenFunction: {
|
|
32
|
+
id: string;
|
|
33
|
+
_type: string;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Analytics Inngest functions that depend on container services
|
|
38
|
+
*/
|
|
39
|
+
export declare const analyticsInngestFunctions: ({ container, inngest, settings, }: {
|
|
40
|
+
container: Container;
|
|
41
|
+
inngest: any;
|
|
42
|
+
settings?: any;
|
|
43
|
+
}) => {
|
|
44
|
+
generateReportFunction: {
|
|
45
|
+
id: string;
|
|
46
|
+
_type: string;
|
|
47
|
+
};
|
|
48
|
+
trackUserEventFunction: {
|
|
49
|
+
id: string;
|
|
50
|
+
_type: string;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* AI Page Creator functions that depend on container services
|
|
55
|
+
*/
|
|
56
|
+
export declare const aiPageCreatorInngestFunctions: ({ container, inngest, settings, }: {
|
|
57
|
+
container: Container;
|
|
58
|
+
inngest: any;
|
|
59
|
+
settings?: any;
|
|
60
|
+
}) => {
|
|
61
|
+
codeAgentFunction: {
|
|
62
|
+
id: string;
|
|
63
|
+
_type: string;
|
|
64
|
+
};
|
|
65
|
+
sendMessageFunction: {
|
|
66
|
+
id: string;
|
|
67
|
+
_type: string;
|
|
68
|
+
};
|
|
69
|
+
processPageFunction: {
|
|
70
|
+
id: string;
|
|
71
|
+
_type: string;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Export array of all function factories for easy registration
|
|
76
|
+
*/
|
|
77
|
+
export declare const allInngestFunctionFactories: ((({ container, inngest, settings, }: {
|
|
78
|
+
container: Container;
|
|
79
|
+
inngest: any;
|
|
80
|
+
settings?: any;
|
|
81
|
+
}) => {
|
|
82
|
+
createUserFunction: {
|
|
83
|
+
id: string;
|
|
84
|
+
_type: string;
|
|
85
|
+
};
|
|
86
|
+
updateUserProfileFunction: {
|
|
87
|
+
id: string;
|
|
88
|
+
_type: string;
|
|
89
|
+
};
|
|
90
|
+
}) | (({ container, inngest, settings, }: {
|
|
91
|
+
container: Container;
|
|
92
|
+
inngest: any;
|
|
93
|
+
settings?: any;
|
|
94
|
+
}) => {
|
|
95
|
+
sendCampaignFunction: {
|
|
96
|
+
id: string;
|
|
97
|
+
_type: string;
|
|
98
|
+
};
|
|
99
|
+
trackEmailOpenFunction: {
|
|
100
|
+
id: string;
|
|
101
|
+
_type: string;
|
|
102
|
+
};
|
|
103
|
+
}) | (({ container, inngest, settings, }: {
|
|
104
|
+
container: Container;
|
|
105
|
+
inngest: any;
|
|
106
|
+
settings?: any;
|
|
107
|
+
}) => {
|
|
108
|
+
generateReportFunction: {
|
|
109
|
+
id: string;
|
|
110
|
+
_type: string;
|
|
111
|
+
};
|
|
112
|
+
trackUserEventFunction: {
|
|
113
|
+
id: string;
|
|
114
|
+
_type: string;
|
|
115
|
+
};
|
|
116
|
+
}) | (({ container, inngest, settings, }: {
|
|
117
|
+
container: Container;
|
|
118
|
+
inngest: any;
|
|
119
|
+
settings?: any;
|
|
120
|
+
}) => {
|
|
121
|
+
codeAgentFunction: {
|
|
122
|
+
id: string;
|
|
123
|
+
_type: string;
|
|
124
|
+
};
|
|
125
|
+
sendMessageFunction: {
|
|
126
|
+
id: string;
|
|
127
|
+
_type: string;
|
|
128
|
+
};
|
|
129
|
+
processPageFunction: {
|
|
130
|
+
id: string;
|
|
131
|
+
_type: string;
|
|
132
|
+
};
|
|
133
|
+
}))[];
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';var express=require('inngest/express');/**
|
|
2
|
+
* Sets up Inngest functions from the Feature system and registers the handler
|
|
3
|
+
*/
|
|
4
|
+
async function setupInngestFunctions(modules, app, serviceContainer, logger) {
|
|
5
|
+
try {
|
|
6
|
+
// Get Inngest client from the container (already bound in infraModule)
|
|
7
|
+
const inngestClient = serviceContainer.get('INNGEST_CLIENT');
|
|
8
|
+
logger.info('✅ Retrieved Inngest client from service container');
|
|
9
|
+
const inngestFunctions = modules.loadInngestFunctions({
|
|
10
|
+
container: serviceContainer,
|
|
11
|
+
inngest: inngestClient,
|
|
12
|
+
settings: {},
|
|
13
|
+
});
|
|
14
|
+
const flatFunctions = inngestFunctions.reduce((acc, curr) => {
|
|
15
|
+
if (Array.isArray(curr)) {
|
|
16
|
+
return [...acc, ...curr];
|
|
17
|
+
}
|
|
18
|
+
return [...acc, curr];
|
|
19
|
+
}, []);
|
|
20
|
+
if (flatFunctions.length > 0) {
|
|
21
|
+
logger.info(`✅ Loaded ${flatFunctions.length} Inngest functions from Feature system`);
|
|
22
|
+
}
|
|
23
|
+
if (flatFunctions.length > 0) {
|
|
24
|
+
const inngestHandler = express.serve({
|
|
25
|
+
client: inngestClient,
|
|
26
|
+
functions: flatFunctions,
|
|
27
|
+
});
|
|
28
|
+
app.use('/api/inngest', inngestHandler);
|
|
29
|
+
logger.info(`✅ Inngest handler registered with ${flatFunctions.length} functions`);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
logger.info('No Inngest functions found - handler not registered');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
logger.warn('Inngest handler registration failed:', error.message);
|
|
37
|
+
}
|
|
38
|
+
}exports.setupInngestFunctions=setupInngestFunctions;//# sourceMappingURL=setup.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.cjs","sources":["../../src/inngest/setup.ts"],"sourcesContent":[null],"names":["serve"],"mappings":"oDASA;;AAEG;AACI,eAAe,qBAAqB,CACvC,OAAgB,EAChB,GAAY,EACZ,gBAA2B,EAC3B,MAAe,EAAA;AAEf,IAAA,IAAI;;QAEA,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAU,gBAAgB,CAAC,CAAC;AACtE,QAAA,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;AAEjE,QAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAClD,YAAA,SAAS,EAAE,gBAAgB;AAC3B,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,QAAQ,EAAE,EAAE;AACf,SAAA,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;AACxD,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACrB,gBAAA,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;aAC5B;AACD,YAAA,OAAO,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;SACzB,EAAE,EAAE,CAAC,CAAC;AAEP,QAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,MAAM,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,aAAa,CAAC,MAAM,CAAwC,sCAAA,CAAA,CAAC,CAAC;SACzF;AAED,QAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,MAAM,cAAc,GAAGA,aAAK,CAAC;AACzB,gBAAA,MAAM,EAAE,aAAa;AACrB,gBAAA,SAAS,EAAE,aAAa;AAC3B,aAAA,CAAC,CAAC;AACH,YAAA,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,CAAA,kCAAA,EAAqC,aAAa,CAAC,MAAM,CAAY,UAAA,CAAA,CAAC,CAAC;SACtF;aAAM;AACH,YAAA,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;SACtE;KACJ;IAAC,OAAO,KAAK,EAAE;QACZ,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;KACtE;AACL"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Express } from 'express';
|
|
2
|
+
import { Container } from 'inversify';
|
|
3
|
+
import { CdmLogger } from '@cdm-logger/core';
|
|
4
|
+
import { Feature } from '@common-stack/server-core';
|
|
5
|
+
type ILogger = CdmLogger.ILogger;
|
|
6
|
+
/**
|
|
7
|
+
* Sets up Inngest functions from the Feature system and registers the handler
|
|
8
|
+
*/
|
|
9
|
+
export declare function setupInngestFunctions(modules: Feature, app: Express, serviceContainer: Container, logger: ILogger): Promise<void>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {serve}from'inngest/express';/**
|
|
2
|
+
* Sets up Inngest functions from the Feature system and registers the handler
|
|
3
|
+
*/
|
|
4
|
+
async function setupInngestFunctions(modules, app, serviceContainer, logger) {
|
|
5
|
+
try {
|
|
6
|
+
// Get Inngest client from the container (already bound in infraModule)
|
|
7
|
+
const inngestClient = serviceContainer.get('INNGEST_CLIENT');
|
|
8
|
+
logger.info('✅ Retrieved Inngest client from service container');
|
|
9
|
+
const inngestFunctions = modules.loadInngestFunctions({
|
|
10
|
+
container: serviceContainer,
|
|
11
|
+
inngest: inngestClient,
|
|
12
|
+
settings: {},
|
|
13
|
+
});
|
|
14
|
+
const flatFunctions = inngestFunctions.reduce((acc, curr) => {
|
|
15
|
+
if (Array.isArray(curr)) {
|
|
16
|
+
return [...acc, ...curr];
|
|
17
|
+
}
|
|
18
|
+
return [...acc, curr];
|
|
19
|
+
}, []);
|
|
20
|
+
if (flatFunctions.length > 0) {
|
|
21
|
+
logger.info(`✅ Loaded ${flatFunctions.length} Inngest functions from Feature system`);
|
|
22
|
+
}
|
|
23
|
+
if (flatFunctions.length > 0) {
|
|
24
|
+
const inngestHandler = serve({
|
|
25
|
+
client: inngestClient,
|
|
26
|
+
functions: flatFunctions,
|
|
27
|
+
});
|
|
28
|
+
app.use('/api/inngest', inngestHandler);
|
|
29
|
+
logger.info(`✅ Inngest handler registered with ${flatFunctions.length} functions`);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
logger.info('No Inngest functions found - handler not registered');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
logger.warn('Inngest handler registration failed:', error.message);
|
|
37
|
+
}
|
|
38
|
+
}export{setupInngestFunctions};//# sourceMappingURL=setup.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.mjs","sources":["../../src/inngest/setup.ts"],"sourcesContent":[null],"names":[],"mappings":"oCASA;;AAEG;AACI,eAAe,qBAAqB,CACvC,OAAgB,EAChB,GAAY,EACZ,gBAA2B,EAC3B,MAAe,EAAA;AAEf,IAAA,IAAI;;QAEA,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAU,gBAAgB,CAAC,CAAC;AACtE,QAAA,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;AAEjE,QAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAClD,YAAA,SAAS,EAAE,gBAAgB;AAC3B,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,QAAQ,EAAE,EAAE;AACf,SAAA,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;AACxD,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACrB,gBAAA,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;aAC5B;AACD,YAAA,OAAO,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;SACzB,EAAE,EAAE,CAAC,CAAC;AAEP,QAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,MAAM,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,aAAa,CAAC,MAAM,CAAwC,sCAAA,CAAA,CAAC,CAAC;SACzF;AAED,QAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,MAAM,cAAc,GAAG,KAAK,CAAC;AACzB,gBAAA,MAAM,EAAE,aAAa;AACrB,gBAAA,SAAS,EAAE,aAAa;AAC3B,aAAA,CAAC,CAAC;AACH,YAAA,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,CAAA,kCAAA,EAAqC,aAAa,CAAC,MAAM,CAAY,UAAA,CAAA,CAAC,CAAC;SACtF;aAAM;AACH,YAAA,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;SACtE;KACJ;IAAC,OAAO,KAAK,EAAE;QACZ,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;KACtE;AACL"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ServiceBroker } from 'moleculer';
|
|
1
2
|
export type GraphqlRequestContext = {
|
|
2
3
|
overallCachePolicy: {
|
|
3
4
|
scope: string;
|
|
@@ -10,6 +11,10 @@ export type GraphqlRequestContext = {
|
|
|
10
11
|
currentPageUriSegments: {
|
|
11
12
|
authority: string;
|
|
12
13
|
};
|
|
14
|
+
tenant?: string;
|
|
13
15
|
};
|
|
14
16
|
queriesToInvalidate: string[];
|
|
17
|
+
tenantId?: string;
|
|
18
|
+
accountId?: string;
|
|
19
|
+
moleculerBroker?: ServiceBroker;
|
|
15
20
|
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { redisClientMiddleware } from './redis-client';
|
|
2
|
+
export { contextServicesMiddleware } from './services';
|
|
3
|
+
export { corsMiddleware } from './cors';
|
|
4
|
+
export { errorMiddleware } from './error';
|
|
5
|
+
export { sentryMiddleware, sentryErrorHandlerMiddleware } from './sentry';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';/**
|
|
2
|
+
* Redis Client Middleware
|
|
3
|
+
*
|
|
4
|
+
* This middleware attaches the Redis client to the request object,
|
|
5
|
+
* making it available for session storage and other Redis operations.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Creates middleware that attaches Redis client to request object
|
|
9
|
+
* @param redisClient - The Redis client instance
|
|
10
|
+
* @returns Express middleware function
|
|
11
|
+
*/
|
|
12
|
+
function redisClientMiddleware(redisClient) {
|
|
13
|
+
return (req, res, next) => {
|
|
14
|
+
// Attach Redis client to request object
|
|
15
|
+
req.redisClient = redisClient;
|
|
16
|
+
next();
|
|
17
|
+
};
|
|
18
|
+
}exports.redisClientMiddleware=redisClientMiddleware;//# sourceMappingURL=redis-client.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-client.cjs","sources":["../../src/middleware/redis-client.ts"],"sourcesContent":[null],"names":[],"mappings":"aAAA;;;;;AAKG;AAQH;;;;AAIG;AACG,SAAU,qBAAqB,CAAC,WAAgB,EAAA;AAClD,IAAA,OAAO,CAAC,GAAuB,EAAE,GAAa,EAAE,IAAkB,KAAI;;AAElE,QAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;AAC9B,QAAA,IAAI,EAAE,CAAC;AACX,KAAC,CAAC;AACN"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redis Client Middleware
|
|
3
|
+
*
|
|
4
|
+
* This middleware attaches the Redis client to the request object,
|
|
5
|
+
* making it available for session storage and other Redis operations.
|
|
6
|
+
*/
|
|
7
|
+
import { Request, Response, NextFunction } from 'express';
|
|
8
|
+
export interface RedisClientRequest extends Request {
|
|
9
|
+
redisClient?: any;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Creates middleware that attaches Redis client to request object
|
|
13
|
+
* @param redisClient - The Redis client instance
|
|
14
|
+
* @returns Express middleware function
|
|
15
|
+
*/
|
|
16
|
+
export declare function redisClientMiddleware(redisClient: any): (req: RedisClientRequest, res: Response, next: NextFunction) => void;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redis Client Middleware
|
|
3
|
+
*
|
|
4
|
+
* This middleware attaches the Redis client to the request object,
|
|
5
|
+
* making it available for session storage and other Redis operations.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Creates middleware that attaches Redis client to request object
|
|
9
|
+
* @param redisClient - The Redis client instance
|
|
10
|
+
* @returns Express middleware function
|
|
11
|
+
*/
|
|
12
|
+
function redisClientMiddleware(redisClient) {
|
|
13
|
+
return (req, res, next) => {
|
|
14
|
+
// Attach Redis client to request object
|
|
15
|
+
req.redisClient = redisClient;
|
|
16
|
+
next();
|
|
17
|
+
};
|
|
18
|
+
}export{redisClientMiddleware};//# sourceMappingURL=redis-client.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-client.mjs","sources":["../../src/middleware/redis-client.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;AAQH;;;;AAIG;AACG,SAAU,qBAAqB,CAAC,WAAgB,EAAA;AAClD,IAAA,OAAO,CAAC,GAAuB,EAAE,GAAa,EAAE,IAAkB,KAAI;;AAElE,QAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;AAC9B,QAAA,IAAI,EAAE,CAAC;AACX,KAAC,CAAC;AACN"}
|
|
@@ -34,7 +34,7 @@ const generateCacheKey = ({ logger, cacheKeyGenerator }) => (requestContext) =>
|
|
|
34
34
|
});
|
|
35
35
|
const { scope } = cacheControlDirective ?? {};
|
|
36
36
|
const isPrivate = scope?.toLowerCase() === 'private';
|
|
37
|
-
const tenantId = serverCore.extractTenantId(req?.currentPageUriSegments?.authority);
|
|
37
|
+
const tenantId = req.tenant ?? serverCore.extractTenantId(req?.currentPageUriSegments?.authority);
|
|
38
38
|
const cacheKey = serverCore.generateQueryCacheKey({
|
|
39
39
|
query,
|
|
40
40
|
variables,
|
|
@@ -50,7 +50,6 @@ const generateCacheKey = ({ logger, cacheKeyGenerator }) => (requestContext) =>
|
|
|
50
50
|
return cacheKey;
|
|
51
51
|
}
|
|
52
52
|
catch (e) {
|
|
53
|
-
// `this.logger` won't work here
|
|
54
53
|
console.warn('GenerateCacheKey Failed %s', e.message);
|
|
55
54
|
return cacheKey;
|
|
56
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responseCachePlugin.cjs","sources":["../../src/plugins/responseCachePlugin.ts"],"sourcesContent":[null],"names":["getDirectiveArgsFromSchema","CACHE_CONTROL_DIRECTIVE","extractTenantId","generateQueryCacheKey","isEmpty"],"mappings":"0JAcA,MAAM,WAAW,GAAI,iBAAyB,CAAC,OAAO,IAAI,iBAAiB,CAAC;AAO/D,MAAA,WAAW,GAAG,CAAC,cAA4D,KAAI;AACxF,IAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC;IAC5C,MAAM,KAAK,GAAGA,qCAA0B,CAAC;QACrC,MAAM;QACN,QAAQ;AACR,QAAA,aAAa,EAAEC,kCAAuB;AACzC,KAAA,CAAC,CAAC;AACH,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,KAAK,CAAC;IACzB,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC9B,QAAA,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;KACxB;AACD,IAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE;;;AAGnC,QAAA,cAAsB,CAAC,kBAAkB,GAAG,EAAE,CAAC;KACnD;;IAED,cAAc,CAAC,kBAAkB,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AACxD,IAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B,EAAE;AAEW,MAAA,gBAAgB,GACzB,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAA4B,KACxD,CAAC,cAA4D,KAAY;AACrE,IAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE;AAC9B,QAAA,OAAO,IAAI,CAAC;KACf;IACD,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC;IACnE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,YAAY,IAAI,EAAE,CAAC;AACzC,IAAA,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACrC,MAAM,qBAAqB,GAAGD,qCAA0B,CAAC;QACrD,MAAM;QACN,QAAQ;AACR,QAAA,aAAa,EAAEC,kCAAuB;AACzC,KAAA,CAAC,CAAC;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,qBAAqB,IAAI,EAAE,CAAC;IAC9C,MAAM,SAAS,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"responseCachePlugin.cjs","sources":["../../src/plugins/responseCachePlugin.ts"],"sourcesContent":[null],"names":["getDirectiveArgsFromSchema","CACHE_CONTROL_DIRECTIVE","extractTenantId","generateQueryCacheKey","isEmpty"],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ const generateCacheKey = ({ logger, cacheKeyGenerator }) => (requestContext) =>
|
|
|
34
34
|
});
|
|
35
35
|
const { scope } = cacheControlDirective ?? {};
|
|
36
36
|
const isPrivate = scope?.toLowerCase() === 'private';
|
|
37
|
-
const tenantId = extractTenantId(req?.currentPageUriSegments?.authority);
|
|
37
|
+
const tenantId = req.tenant ?? extractTenantId(req?.currentPageUriSegments?.authority);
|
|
38
38
|
const cacheKey = generateQueryCacheKey({
|
|
39
39
|
query,
|
|
40
40
|
variables,
|
|
@@ -50,7 +50,6 @@ const generateCacheKey = ({ logger, cacheKeyGenerator }) => (requestContext) =>
|
|
|
50
50
|
return cacheKey;
|
|
51
51
|
}
|
|
52
52
|
catch (e) {
|
|
53
|
-
// `this.logger` won't work here
|
|
54
53
|
console.warn('GenerateCacheKey Failed %s', e.message);
|
|
55
54
|
return cacheKey;
|
|
56
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responseCachePlugin.mjs","sources":["../../src/plugins/responseCachePlugin.ts"],"sourcesContent":[null],"names":[],"mappings":"qOAcA,MAAM,WAAW,GAAI,iBAAyB,CAAC,OAAO,IAAI,iBAAiB,CAAC;AAO/D,MAAA,WAAW,GAAG,CAAC,cAA4D,KAAI;AACxF,IAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC;IAC5C,MAAM,KAAK,GAAG,0BAA0B,CAAC;QACrC,MAAM;QACN,QAAQ;AACR,QAAA,aAAa,EAAE,uBAAuB;AACzC,KAAA,CAAC,CAAC;AACH,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,KAAK,CAAC;IACzB,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC9B,QAAA,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;KACxB;AACD,IAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE;;;AAGnC,QAAA,cAAsB,CAAC,kBAAkB,GAAG,EAAE,CAAC;KACnD;;IAED,cAAc,CAAC,kBAAkB,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AACxD,IAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B,EAAE;AAEW,MAAA,gBAAgB,GACzB,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAA4B,KACxD,CAAC,cAA4D,KAAY;AACrE,IAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE;AAC9B,QAAA,OAAO,IAAI,CAAC;KACf;IACD,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC;IACnE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,YAAY,IAAI,EAAE,CAAC;AACzC,IAAA,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACrC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;QACrD,MAAM;QACN,QAAQ;AACR,QAAA,aAAa,EAAE,uBAAuB;AACzC,KAAA,CAAC,CAAC;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,qBAAqB,IAAI,EAAE,CAAC;IAC9C,MAAM,SAAS,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"responseCachePlugin.mjs","sources":["../../src/plugins/responseCachePlugin.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
'use strict';var express=require('express'),bodyParser=require('body-parser'),error=require('../middleware/error.cjs'),services=require('../middleware/services.cjs'),sentry=require('../middleware/sentry.cjs'),cors=require('../middleware/cors.cjs');function _interopNamespaceDefault(e){var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var bodyParser__namespace=/*#__PURE__*/_interopNamespaceDefault(bodyParser);/* eslint-disable @typescript-eslint/no-var-requires */
|
|
2
|
-
function expressApp(modules, options, middlewares, http) {
|
|
1
|
+
'use strict';var express=require('express'),bodyParser=require('body-parser'),error=require('../middleware/error.cjs'),services=require('../middleware/services.cjs'),sentry=require('../middleware/sentry.cjs'),redisClient=require('../middleware/redis-client.cjs'),cors=require('../middleware/cors.cjs');function _interopNamespaceDefault(e){var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var bodyParser__namespace=/*#__PURE__*/_interopNamespaceDefault(bodyParser);/* eslint-disable @typescript-eslint/no-var-requires */
|
|
2
|
+
function expressApp(modules, options, middlewares, http, redisClient$1) {
|
|
3
3
|
const app = express();
|
|
4
|
+
// FIRST PRIORITY: Add Redis client middleware at the very top
|
|
5
|
+
// This ensures req.redisClient is available to ALL downstream middleware
|
|
6
|
+
if (redisClient$1) {
|
|
7
|
+
app.use(redisClient.redisClientMiddleware(redisClient$1));
|
|
8
|
+
}
|
|
4
9
|
for (const applyBeforeware of modules.beforewares) {
|
|
5
10
|
applyBeforeware(app);
|
|
6
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpressApp.cjs","sources":["../../src/servers/ExpressApp.ts"],"sourcesContent":[null],"names":["contextServicesMiddleware","sentryMiddleware","corsMiddleware","bodyParser","errorMiddleware","sentryErrorHandlerMiddleware"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ExpressApp.cjs","sources":["../../src/servers/ExpressApp.ts"],"sourcesContent":[null],"names":["redisClient","redisClientMiddleware","contextServicesMiddleware","sentryMiddleware","corsMiddleware","bodyParser","errorMiddleware","sentryErrorHandlerMiddleware"],"mappings":"wpBAAA;AAWM,SAAU,UAAU,CAAC,OAAgB,EAAE,OAAuB,EAAE,WAAW,EAAE,IAAK,EAAEA,aAAY,EAAA;AAClG,IAAA,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;;;IAItB,IAAIA,aAAW,EAAE;QACb,GAAG,CAAC,GAAG,CAACC,iCAAqB,CAACD,aAAW,CAAC,CAAC,CAAC;KAC/C;AAED,IAAA,KAAK,MAAM,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE;QAC/C,eAAe,CAAC,GAAG,CAAC,CAAC;KACxB;AACD,IAAA,GAAG,CAAC,GAAG,CAACE,kCAAyB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;;AAGlF,IAAA,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAE1B,IAAA,GAAG,CAAC,GAAG,CAACC,uBAAgB,CAAC,CAAC;AAE1B,IAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACtB,QAAA,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;KACxB;AAED,IAAA,GAAG,CAAC,GAAG,CAACC,mBAAc,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,KAAI;AACvB,QAAA,GAAG,CAAC,MAAM,CAAC,kCAAkC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,QAAA,GAAG,CAAC,MAAM,CAAC,8BAA8B,EAAE,qBAAqB,CAAC,CAAC;AAClE,QAAA,GAAG,CAAC,MAAM,CACN,8BAA8B,EAC9B,6EAA6E,CAChF,CAAC;AACF,QAAA,IAAI,EAAE,CAAC;AACX,KAAC,CAAC,CAAC;AAEH,IAAA,GAAG,CAAC,GAAG,CACHC,qBAAU,CAAC,IAAI,CAAC;AACZ,QAAA,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,KAAI;;AAErB,YAAA,GAAW,CAAC,OAAO,GAAG,GAAG,CAAC;SAC9B;AACJ,KAAA,CAAC,CACL,CAAC;IACF,GAAG,CAAC,GAAG,CAACA,qBAAU,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAEzF,IAAA,KAAK,MAAM,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE;QAC/C,eAAe,CAAC,GAAG,CAAC,CAAC;KACxB;IAED,IAAI,OAAO,EAAE;AACT,QAAA,GAAG,CAAC,GAAG,CAACC,qBAAe,CAAC,CAAC;KAC5B;AAED,IAAA,GAAG,CAAC,GAAG,CAACC,mCAA4B,CAAC,CAAC;AAEtC,IAAA,OAAO,GAAG,CAAC;AACf"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Feature } from '@common-stack/server-core';
|
|
2
2
|
import { IModuleService } from '../interfaces';
|
|
3
|
-
export declare function expressApp(modules: Feature, options: IModuleService, middlewares: any, http?: any): import("express-serve-static-core").Express;
|
|
3
|
+
export declare function expressApp(modules: Feature, options: IModuleService, middlewares: any, http?: any, redisClient?: any): import("express-serve-static-core").Express;
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import express from'express';import*as bodyParser from'body-parser';import {errorMiddleware}from'../middleware/error.mjs';import {contextServicesMiddleware}from'../middleware/services.mjs';import {sentryMiddleware,sentryErrorHandlerMiddleware}from'../middleware/sentry.mjs';import {corsMiddleware}from'../middleware/cors.mjs';/* eslint-disable @typescript-eslint/no-var-requires */
|
|
2
|
-
function expressApp(modules, options, middlewares, http) {
|
|
1
|
+
import express from'express';import*as bodyParser from'body-parser';import {errorMiddleware}from'../middleware/error.mjs';import {contextServicesMiddleware}from'../middleware/services.mjs';import {sentryMiddleware,sentryErrorHandlerMiddleware}from'../middleware/sentry.mjs';import {redisClientMiddleware}from'../middleware/redis-client.mjs';import {corsMiddleware}from'../middleware/cors.mjs';/* eslint-disable @typescript-eslint/no-var-requires */
|
|
2
|
+
function expressApp(modules, options, middlewares, http, redisClient) {
|
|
3
3
|
const app = express();
|
|
4
|
+
// FIRST PRIORITY: Add Redis client middleware at the very top
|
|
5
|
+
// This ensures req.redisClient is available to ALL downstream middleware
|
|
6
|
+
if (redisClient) {
|
|
7
|
+
app.use(redisClientMiddleware(redisClient));
|
|
8
|
+
}
|
|
4
9
|
for (const applyBeforeware of modules.beforewares) {
|
|
5
10
|
applyBeforeware(app);
|
|
6
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpressApp.mjs","sources":["../../src/servers/ExpressApp.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ExpressApp.mjs","sources":["../../src/servers/ExpressApp.ts"],"sourcesContent":[null],"names":[],"mappings":"yYAAA;AAWM,SAAU,UAAU,CAAC,OAAgB,EAAE,OAAuB,EAAE,WAAW,EAAE,IAAK,EAAE,WAAY,EAAA;AAClG,IAAA,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;;;IAItB,IAAI,WAAW,EAAE;QACb,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC;KAC/C;AAED,IAAA,KAAK,MAAM,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE;QAC/C,eAAe,CAAC,GAAG,CAAC,CAAC;KACxB;AACD,IAAA,GAAG,CAAC,GAAG,CAAC,yBAAyB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;;AAGlF,IAAA,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAE1B,IAAA,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAE1B,IAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACtB,QAAA,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;KACxB;AAED,IAAA,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,KAAI;AACvB,QAAA,GAAG,CAAC,MAAM,CAAC,kCAAkC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,QAAA,GAAG,CAAC,MAAM,CAAC,8BAA8B,EAAE,qBAAqB,CAAC,CAAC;AAClE,QAAA,GAAG,CAAC,MAAM,CACN,8BAA8B,EAC9B,6EAA6E,CAChF,CAAC;AACF,QAAA,IAAI,EAAE,CAAC;AACX,KAAC,CAAC,CAAC;AAEH,IAAA,GAAG,CAAC,GAAG,CACH,UAAU,CAAC,IAAI,CAAC;AACZ,QAAA,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,KAAI;;AAErB,YAAA,GAAW,CAAC,OAAO,GAAG,GAAG,CAAC;SAC9B;AACJ,KAAA,CAAC,CACL,CAAC;IACF,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAEzF,IAAA,KAAK,MAAM,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE;QAC/C,eAAe,CAAC,GAAG,CAAC,CAAC;KACxB;IAED,IAAI,OAAO,EAAE;AACT,QAAA,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;KAC5B;AAED,IAAA,GAAG,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAEtC,IAAA,OAAO,GAAG,CAAC;AACf"}
|
|
@@ -18,9 +18,10 @@ class GraphqlServer {
|
|
|
18
18
|
enableSubscription;
|
|
19
19
|
cacheKeyGenerator;
|
|
20
20
|
invalidateCacheKeyGenerator;
|
|
21
|
+
plugins;
|
|
21
22
|
logger;
|
|
22
23
|
graphqlWsServer;
|
|
23
|
-
constructor(app, httpServer, redisClient, moduleService, enableSubscription = true, cacheKeyGenerator, invalidateCacheKeyGenerator) {
|
|
24
|
+
constructor(app, httpServer, redisClient, moduleService, enableSubscription = true, cacheKeyGenerator, invalidateCacheKeyGenerator, plugins) {
|
|
24
25
|
this.app = app;
|
|
25
26
|
this.httpServer = httpServer;
|
|
26
27
|
this.redisClient = redisClient;
|
|
@@ -28,6 +29,7 @@ class GraphqlServer {
|
|
|
28
29
|
this.enableSubscription = enableSubscription;
|
|
29
30
|
this.cacheKeyGenerator = cacheKeyGenerator;
|
|
30
31
|
this.invalidateCacheKeyGenerator = invalidateCacheKeyGenerator;
|
|
32
|
+
this.plugins = plugins;
|
|
31
33
|
this.logger = this.moduleService.logger.child({ className: 'GraphqlServer' });
|
|
32
34
|
if (enableSubscription) {
|
|
33
35
|
const wsServer = new ws.WebSocketServer({
|
|
@@ -39,7 +41,9 @@ class GraphqlServer {
|
|
|
39
41
|
}
|
|
40
42
|
async initialize() {
|
|
41
43
|
this.logger.info('GraphqlServer initializing...');
|
|
42
|
-
this.graphqlWsServer
|
|
44
|
+
if (this.graphqlWsServer) {
|
|
45
|
+
this.graphqlWsServer.create();
|
|
46
|
+
}
|
|
43
47
|
const apolloServer = this.configureApolloServer();
|
|
44
48
|
await apolloServer.start();
|
|
45
49
|
const corsOptions = {
|
|
@@ -122,6 +126,7 @@ class GraphqlServer {
|
|
|
122
126
|
cacheControl.ApolloServerPluginCacheControl(),
|
|
123
127
|
invalidateCachePlugin.invalidateCachePlugin({ cache: this.redisClient, invalidateCacheKeyGenerator }),
|
|
124
128
|
responseCachePlugin.responseCachePlugin({ logger, cacheKeyGenerator }),
|
|
129
|
+
...(this.plugins ?? []),
|
|
125
130
|
],
|
|
126
131
|
};
|
|
127
132
|
if (this.enableSubscription) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphqlServer.cjs","sources":["../../src/servers/GraphqlServer.ts"],"sourcesContent":[null],"names":["WebSocketServer","config","GraphqlWs","expressMiddleware","KeyvAdapter","ApolloServerPluginDrainHttpServer","ApolloServerPluginCacheControl","invalidateCachePlugin","responseCachePlugin","ApolloServer"],"mappings":"
|
|
1
|
+
{"version":3,"file":"GraphqlServer.cjs","sources":["../../src/servers/GraphqlServer.ts"],"sourcesContent":[null],"names":["WebSocketServer","config","GraphqlWs","expressMiddleware","KeyvAdapter","ApolloServerPluginDrainHttpServer","ApolloServerPluginCacheControl","invalidateCachePlugin","responseCachePlugin","ApolloServer"],"mappings":"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"}
|
|
@@ -5,18 +5,20 @@ import { Express } from 'express';
|
|
|
5
5
|
import * as http from 'http';
|
|
6
6
|
import { InvalidationKeyGenerator } from '../plugins';
|
|
7
7
|
import { IModuleService } from '../interfaces';
|
|
8
|
+
import type { ApolloServerPlugin } from '@apollo/server';
|
|
8
9
|
export type KeyGenerator = (context: GraphQLRequestContext<unknown>, cacheKey?: string) => string;
|
|
9
10
|
export declare class GraphqlServer {
|
|
10
|
-
private app;
|
|
11
|
-
private httpServer;
|
|
12
|
-
private redisClient;
|
|
13
|
-
private moduleService;
|
|
14
|
-
private enableSubscription;
|
|
11
|
+
private readonly app;
|
|
12
|
+
private readonly httpServer;
|
|
13
|
+
private readonly redisClient;
|
|
14
|
+
private readonly moduleService;
|
|
15
|
+
private readonly enableSubscription;
|
|
15
16
|
private readonly cacheKeyGenerator?;
|
|
16
17
|
private readonly invalidateCacheKeyGenerator?;
|
|
18
|
+
private readonly plugins?;
|
|
17
19
|
private logger;
|
|
18
20
|
private graphqlWsServer;
|
|
19
|
-
constructor(app: Express, httpServer: http.Server, redisClient: IORedis.Redis | IORedis.Cluster, moduleService: IModuleService, enableSubscription?: boolean, cacheKeyGenerator?: KeyGenerator, invalidateCacheKeyGenerator?: InvalidationKeyGenerator);
|
|
21
|
+
constructor(app: Express, httpServer: http.Server, redisClient: IORedis.Redis | IORedis.Cluster, moduleService: IModuleService, enableSubscription?: boolean, cacheKeyGenerator?: KeyGenerator, invalidateCacheKeyGenerator?: InvalidationKeyGenerator, plugins?: ApolloServerPlugin<any>[]);
|
|
20
22
|
initialize(): Promise<void>;
|
|
21
23
|
getUserIpAddress(req: any): any;
|
|
22
24
|
private configureApolloServer;
|
|
@@ -18,9 +18,10 @@ class GraphqlServer {
|
|
|
18
18
|
enableSubscription;
|
|
19
19
|
cacheKeyGenerator;
|
|
20
20
|
invalidateCacheKeyGenerator;
|
|
21
|
+
plugins;
|
|
21
22
|
logger;
|
|
22
23
|
graphqlWsServer;
|
|
23
|
-
constructor(app, httpServer, redisClient, moduleService, enableSubscription = true, cacheKeyGenerator, invalidateCacheKeyGenerator) {
|
|
24
|
+
constructor(app, httpServer, redisClient, moduleService, enableSubscription = true, cacheKeyGenerator, invalidateCacheKeyGenerator, plugins) {
|
|
24
25
|
this.app = app;
|
|
25
26
|
this.httpServer = httpServer;
|
|
26
27
|
this.redisClient = redisClient;
|
|
@@ -28,6 +29,7 @@ class GraphqlServer {
|
|
|
28
29
|
this.enableSubscription = enableSubscription;
|
|
29
30
|
this.cacheKeyGenerator = cacheKeyGenerator;
|
|
30
31
|
this.invalidateCacheKeyGenerator = invalidateCacheKeyGenerator;
|
|
32
|
+
this.plugins = plugins;
|
|
31
33
|
this.logger = this.moduleService.logger.child({ className: 'GraphqlServer' });
|
|
32
34
|
if (enableSubscription) {
|
|
33
35
|
const wsServer = new WebSocketServer({
|
|
@@ -39,7 +41,9 @@ class GraphqlServer {
|
|
|
39
41
|
}
|
|
40
42
|
async initialize() {
|
|
41
43
|
this.logger.info('GraphqlServer initializing...');
|
|
42
|
-
this.graphqlWsServer
|
|
44
|
+
if (this.graphqlWsServer) {
|
|
45
|
+
this.graphqlWsServer.create();
|
|
46
|
+
}
|
|
43
47
|
const apolloServer = this.configureApolloServer();
|
|
44
48
|
await apolloServer.start();
|
|
45
49
|
const corsOptions = {
|
|
@@ -122,6 +126,7 @@ class GraphqlServer {
|
|
|
122
126
|
ApolloServerPluginCacheControl(),
|
|
123
127
|
invalidateCachePlugin({ cache: this.redisClient, invalidateCacheKeyGenerator }),
|
|
124
128
|
responseCachePlugin({ logger, cacheKeyGenerator }),
|
|
129
|
+
...(this.plugins ?? []),
|
|
125
130
|
],
|
|
126
131
|
};
|
|
127
132
|
if (this.enableSubscription) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphqlServer.mjs","sources":["../../src/servers/GraphqlServer.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GraphqlServer.mjs","sources":["../../src/servers/GraphqlServer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { IModuleService } from '../interfaces';
|
|
2
1
|
import { Schema, Connection as DBConnection } from 'mongoose';
|
|
2
|
+
import { IModuleService } from '../interfaces';
|
|
3
3
|
export declare const MigrationSchema: Schema<any, import("mongoose").Model<any, any, any, any, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, {
|
|
4
4
|
name: string;
|
|
5
5
|
migrated_at?: Date;
|