@common-stack/server-stack 7.1.1-alpha.9 → 7.2.1-alpha.10

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.
Files changed (113) hide show
  1. package/lib/MainStackServer.cjs +121 -144
  2. package/lib/MainStackServer.cjs.map +1 -1
  3. package/lib/MainStackServer.d.ts +10 -5
  4. package/lib/MainStackServer.mjs +121 -144
  5. package/lib/MainStackServer.mjs.map +1 -1
  6. package/lib/StackServer.cjs +23 -66
  7. package/lib/StackServer.cjs.map +1 -1
  8. package/lib/StackServer.d.ts +4 -5
  9. package/lib/StackServer.mjs +23 -66
  10. package/lib/StackServer.mjs.map +1 -1
  11. package/lib/api/schema-builder.cjs +13 -12
  12. package/lib/api/schema-builder.cjs.map +1 -1
  13. package/lib/api/schema-builder.mjs +13 -12
  14. package/lib/api/schema-builder.mjs.map +1 -1
  15. package/lib/api/sub-graph-schema-builder.cjs +13 -15
  16. package/lib/api/sub-graph-schema-builder.cjs.map +1 -1
  17. package/lib/api/sub-graph-schema-builder.mjs +14 -16
  18. package/lib/api/sub-graph-schema-builder.mjs.map +1 -1
  19. package/lib/config/env-config.cjs +6 -0
  20. package/lib/config/env-config.cjs.map +1 -1
  21. package/lib/config/env-config.d.ts +6 -0
  22. package/lib/config/env-config.mjs +6 -0
  23. package/lib/config/env-config.mjs.map +1 -1
  24. package/lib/examples/tenant-feature-example.d.ts +13 -0
  25. package/lib/examples/tenant-feature-integration.d.ts +14 -0
  26. package/lib/features/multi-module-example.d.ts +17 -0
  27. package/lib/index.cjs +1 -1
  28. package/lib/index.d.ts +1 -0
  29. package/lib/index.mjs +1 -1
  30. package/lib/infrastructure/container-module.cjs +27 -0
  31. package/lib/infrastructure/container-module.cjs.map +1 -0
  32. package/lib/infrastructure/container-module.d.ts +3 -0
  33. package/lib/infrastructure/container-module.mjs +27 -0
  34. package/lib/infrastructure/container-module.mjs.map +1 -0
  35. package/lib/infrastructure/example-workflows.d.ts +16 -0
  36. package/lib/infrastructure/index.d.ts +5 -0
  37. package/lib/infrastructure/infrastructure-factory.cjs +172 -0
  38. package/lib/infrastructure/infrastructure-factory.cjs.map +1 -0
  39. package/lib/infrastructure/infrastructure-factory.d.ts +36 -0
  40. package/lib/infrastructure/infrastructure-factory.mjs +172 -0
  41. package/lib/infrastructure/infrastructure-factory.mjs.map +1 -0
  42. package/lib/infrastructure/inngest-factory.cjs +26 -0
  43. package/lib/infrastructure/inngest-factory.cjs.map +1 -0
  44. package/lib/infrastructure/inngest-factory.d.ts +8 -0
  45. package/lib/infrastructure/inngest-factory.mjs +26 -0
  46. package/lib/infrastructure/inngest-factory.mjs.map +1 -0
  47. package/lib/infrastructure/types.d.ts +28 -0
  48. package/lib/infrastructure/usage-examples.d.ts +9 -0
  49. package/lib/infrastructure/workflow-orchestrator.cjs +59 -0
  50. package/lib/infrastructure/workflow-orchestrator.cjs.map +1 -0
  51. package/lib/infrastructure/workflow-orchestrator.d.ts +10 -0
  52. package/lib/infrastructure/workflow-orchestrator.mjs +59 -0
  53. package/lib/infrastructure/workflow-orchestrator.mjs.map +1 -0
  54. package/lib/inngest/client-id-generator.d.ts +29 -0
  55. package/lib/inngest/handler-factory.d.ts +18 -0
  56. package/lib/inngest/multi-module-functions.d.ts +133 -0
  57. package/lib/inngest/setup.cjs +38 -0
  58. package/lib/inngest/setup.cjs.map +1 -0
  59. package/lib/inngest/setup.d.ts +10 -0
  60. package/lib/inngest/setup.mjs +38 -0
  61. package/lib/inngest/setup.mjs.map +1 -0
  62. package/lib/interfaces/graphql-request-context.d.ts +5 -0
  63. package/lib/middleware/index.d.ts +5 -0
  64. package/lib/middleware/redis-client.cjs +18 -0
  65. package/lib/middleware/redis-client.cjs.map +1 -0
  66. package/lib/middleware/redis-client.d.ts +16 -0
  67. package/lib/middleware/redis-client.mjs +18 -0
  68. package/lib/middleware/redis-client.mjs.map +1 -0
  69. package/lib/plugins/responseCachePlugin.cjs +1 -2
  70. package/lib/plugins/responseCachePlugin.cjs.map +1 -1
  71. package/lib/plugins/responseCachePlugin.mjs +1 -2
  72. package/lib/plugins/responseCachePlugin.mjs.map +1 -1
  73. package/lib/servers/ExpressApp.cjs +8 -3
  74. package/lib/servers/ExpressApp.cjs.map +1 -1
  75. package/lib/servers/ExpressApp.d.ts +1 -1
  76. package/lib/servers/ExpressApp.mjs +8 -3
  77. package/lib/servers/ExpressApp.mjs.map +1 -1
  78. package/lib/servers/GraphqlServer.cjs +7 -2
  79. package/lib/servers/GraphqlServer.cjs.map +1 -1
  80. package/lib/servers/GraphqlServer.d.ts +8 -6
  81. package/lib/servers/GraphqlServer.mjs +7 -2
  82. package/lib/servers/GraphqlServer.mjs.map +1 -1
  83. package/lib/servers/mongodb-migration-update.d.ts +1 -1
  84. package/lib/utils/index.d.ts +1 -0
  85. package/lib/utils/safe-model-factory.d.ts +18 -0
  86. package/package.json +10 -9
  87. package/lib/api/resolver.cjs +0 -12
  88. package/lib/api/resolver.cjs.map +0 -1
  89. package/lib/api/resolver.mjs +0 -12
  90. package/lib/api/resolver.mjs.map +0 -1
  91. package/lib/api/root-schema.graphqls.cjs +0 -2
  92. package/lib/api/root-schema.graphqls.cjs.map +0 -1
  93. package/lib/api/root-schema.graphqls.mjs +0 -2
  94. package/lib/api/root-schema.graphqls.mjs.map +0 -1
  95. package/lib/api/scalar.cjs +0 -16
  96. package/lib/api/scalar.cjs.map +0 -1
  97. package/lib/api/scalar.mjs +0 -16
  98. package/lib/api/scalar.mjs.map +0 -1
  99. package/lib/graphql/directives/index.cjs +0 -10
  100. package/lib/graphql/directives/index.cjs.map +0 -1
  101. package/lib/graphql/directives/index.d.ts +0 -7
  102. package/lib/graphql/directives/index.mjs +0 -10
  103. package/lib/graphql/directives/index.mjs.map +0 -1
  104. package/lib/graphql/index.d.ts +0 -2
  105. package/lib/graphql/schema/directives.graphql.cjs +0 -1
  106. package/lib/graphql/schema/directives.graphql.cjs.map +0 -1
  107. package/lib/graphql/schema/directives.graphql.mjs +0 -1
  108. package/lib/graphql/schema/directives.graphql.mjs.map +0 -1
  109. package/lib/graphql/schema/index.cjs +0 -1
  110. package/lib/graphql/schema/index.cjs.map +0 -1
  111. package/lib/graphql/schema/index.d.ts +0 -1
  112. package/lib/graphql/schema/index.mjs +0 -1
  113. package/lib/graphql/schema/index.mjs.map +0 -1
@@ -0,0 +1,10 @@
1
+ import { InfrastructureConfig, WorkflowStep, ConnectorConfig } from './types';
2
+ export declare class WorkflowOrchestrator {
3
+ private config;
4
+ private steps;
5
+ constructor(config: InfrastructureConfig);
6
+ addStep(step: WorkflowStep): void;
7
+ executeWorkflow(context: any): Promise<void>;
8
+ getEnabledSteps(): WorkflowStep[];
9
+ }
10
+ export declare const CONNECTOR_CONFIGS: Record<string, ConnectorConfig>;
@@ -0,0 +1,59 @@
1
+ class WorkflowOrchestrator {
2
+ config;
3
+ steps;
4
+ constructor(config) {
5
+ this.config = config;
6
+ this.steps = [...config.workflows].sort((a, b) => a.order - b.order);
7
+ }
8
+ addStep(step) {
9
+ this.steps.push(step);
10
+ this.steps.sort((a, b) => a.order - b.order);
11
+ }
12
+ async executeWorkflow(context) {
13
+ for (const step of this.steps) {
14
+ if (step.enabled) {
15
+ try {
16
+ await step.execute(context);
17
+ context.logger?.debug(`Workflow step '${step.name}' completed successfully`);
18
+ }
19
+ catch (error) {
20
+ context.logger?.error(`Workflow step '${step.name}' failed:`, error);
21
+ throw error;
22
+ }
23
+ }
24
+ else {
25
+ context.logger?.debug(`Workflow step '${step.name}' skipped (disabled)`);
26
+ }
27
+ }
28
+ }
29
+ getEnabledSteps() {
30
+ return this.steps.filter((step) => step.enabled);
31
+ }
32
+ }
33
+ // Predefined connector configurations
34
+ const CONNECTOR_CONFIGS = {
35
+ FULL: {
36
+ redis: true,
37
+ mongo: true,
38
+ pubsub: true,
39
+ inngest: true,
40
+ },
41
+ BASIC: {
42
+ redis: false,
43
+ mongo: true,
44
+ pubsub: true,
45
+ inngest: false,
46
+ },
47
+ MICROSERVICE: {
48
+ redis: true,
49
+ mongo: true,
50
+ pubsub: true,
51
+ inngest: true,
52
+ },
53
+ DEVELOPMENT: {
54
+ redis: true,
55
+ mongo: true,
56
+ pubsub: true,
57
+ inngest: true,
58
+ },
59
+ };export{CONNECTOR_CONFIGS,WorkflowOrchestrator};//# sourceMappingURL=workflow-orchestrator.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-orchestrator.mjs","sources":["../../src/infrastructure/workflow-orchestrator.ts"],"sourcesContent":[null],"names":[],"mappings":"MAEa,oBAAoB,CAAA;AACrB,IAAA,MAAM,CAAuB;AAC7B,IAAA,KAAK,CAAiB;AAE9B,IAAA,WAAA,CAAY,MAA4B,EAAA;AACpC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;KACxE;AAEM,IAAA,OAAO,CAAC,IAAkB,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;KAChD;IAEM,MAAM,eAAe,CAAC,OAAY,EAAA;AACrC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI;AACA,oBAAA,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC5B,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAkB,eAAA,EAAA,IAAI,CAAC,IAAI,CAA0B,wBAAA,CAAA,CAAC,CAAC;iBAChF;gBAAC,OAAO,KAAK,EAAE;AACZ,oBAAA,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA,eAAA,EAAkB,IAAI,CAAC,IAAI,CAAA,SAAA,CAAW,EAAE,KAAK,CAAC,CAAC;AACrE,oBAAA,MAAM,KAAK,CAAC;iBACf;aACJ;iBAAM;gBACH,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAkB,eAAA,EAAA,IAAI,CAAC,IAAI,CAAsB,oBAAA,CAAA,CAAC,CAAC;aAC5E;SACJ;KACJ;IAEM,eAAe,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;KACpD;AACJ,CAAA;AAED;AACa,MAAA,iBAAiB,GAAoC;AAC9D,IAAA,IAAI,EAAE;AACF,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,OAAO,EAAE,IAAI;AAChB,KAAA;AACD,IAAA,KAAK,EAAE;AACH,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,OAAO,EAAE,KAAK;AACjB,KAAA;AACD,IAAA,YAAY,EAAE;AACV,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,OAAO,EAAE,IAAI;AAChB,KAAA;AACD,IAAA,WAAW,EAAE;AACT,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,OAAO,EAAE,IAAI;AAChB,KAAA;"}
@@ -0,0 +1,29 @@
1
+ export interface InngestClientIdConfig {
2
+ APP_NAME: string;
3
+ NODE_ENV: string;
4
+ INNGEST_CLIENT_ID?: string;
5
+ }
6
+ /**
7
+ * Generates a unique Inngest client ID for multi-developer environments
8
+ * Combines app name, environment, username, and hostname for uniqueness
9
+ */
10
+ export declare function generateInngestClientId(config: InngestClientIdConfig, logger?: any): string;
11
+ /**
12
+ * Examples of generated IDs:
13
+ *
14
+ * Production:
15
+ * - APP_NAME=OrderAPI, NODE_ENV=production → "orderapi"
16
+ *
17
+ * Staging:
18
+ * - APP_NAME=OrderAPI, NODE_ENV=staging → "orderapi-staging"
19
+ *
20
+ * Development:
21
+ * - APP_NAME=OrderAPI, NODE_ENV=development, USER=john, HOSTNAME=macbook-pro
22
+ * → "orderapi-development-john-macbookp"
23
+ *
24
+ * - APP_NAME=OrderAPI, NODE_ENV=development, USER=mary, HOSTNAME=mary-laptop
25
+ * → "orderapi-development-mary-marylap"
26
+ *
27
+ * Explicit Override:
28
+ * - INNGEST_CLIENT_ID=custom-client-id → "custom-client-id"
29
+ */
@@ -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":"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"}
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":"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"}
1
+ {"version":3,"file":"responseCachePlugin.mjs","sources":["../../src/plugins/responseCachePlugin.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,10 +1,15 @@
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
+ }
9
+ app.use(services.contextServicesMiddleware(options.createContext, options.serviceContext));
4
10
  for (const applyBeforeware of modules.beforewares) {
5
11
  applyBeforeware(app);
6
12
  }
7
- app.use(services.contextServicesMiddleware(options.createContext, options.serviceContext));
8
13
  // Don't rate limit heroku
9
14
  app.enable('trust proxy');
10
15
  app.use(sentry.sentryMiddleware);
@@ -1 +1 @@
1
- {"version":3,"file":"ExpressApp.cjs","sources":["../../src/servers/ExpressApp.ts"],"sourcesContent":[null],"names":["contextServicesMiddleware","sentryMiddleware","corsMiddleware","bodyParser","errorMiddleware","sentryErrorHandlerMiddleware"],"mappings":"kmBAAA;AAUM,SAAU,UAAU,CAAC,OAAgB,EAAE,OAAuB,EAAE,WAAW,EAAE,IAAK,EAAA;AACpF,IAAA,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AAEtB,IAAA,KAAK,MAAM,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE;QAC/C,eAAe,CAAC,GAAG,CAAC,CAAC;KACxB;AACD,IAAA,GAAG,CAAC,GAAG,CAACA,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
+ {"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,GAAG,CAAC,GAAG,CAACE,kCAAyB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;AAClF,IAAA,KAAK,MAAM,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE;QAC/C,eAAe,CAAC,GAAG,CAAC,CAAC;KACxB;;AAGD,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,10 +1,15 @@
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
+ }
9
+ app.use(contextServicesMiddleware(options.createContext, options.serviceContext));
4
10
  for (const applyBeforeware of modules.beforewares) {
5
11
  applyBeforeware(app);
6
12
  }
7
- app.use(contextServicesMiddleware(options.createContext, options.serviceContext));
8
13
  // Don't rate limit heroku
9
14
  app.enable('trust proxy');
10
15
  app.use(sentryMiddleware);
@@ -1 +1 @@
1
- {"version":3,"file":"ExpressApp.mjs","sources":["../../src/servers/ExpressApp.ts"],"sourcesContent":[null],"names":[],"mappings":"sUAAA;AAUM,SAAU,UAAU,CAAC,OAAgB,EAAE,OAAuB,EAAE,WAAW,EAAE,IAAK,EAAA;AACpF,IAAA,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AAEtB,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"}
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,GAAG,CAAC,GAAG,CAAC,yBAAyB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;AAClF,IAAA,KAAK,MAAM,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE;QAC/C,eAAe,CAAC,GAAG,CAAC,CAAC;KACxB;;AAGD,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.create();
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) {