@common-stack/server-stack 7.1.1-alpha.6 → 7.1.1-alpha.62
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 +34 -14
- package/lib/MainStackServer.cjs.map +1 -1
- package/lib/MainStackServer.mjs +34 -14
- package/lib/MainStackServer.mjs.map +1 -1
- package/lib/StackServer.cjs +2 -1
- package/lib/StackServer.cjs.map +1 -1
- package/lib/StackServer.mjs +2 -1
- package/lib/StackServer.mjs.map +1 -1
- package/lib/api/schema-builder.cjs +1 -10
- package/lib/api/schema-builder.cjs.map +1 -1
- package/lib/api/schema-builder.mjs +1 -10
- package/lib/api/schema-builder.mjs.map +1 -1
- package/lib/api/sub-graph-schema-builder.cjs +1 -10
- package/lib/api/sub-graph-schema-builder.cjs.map +1 -1
- package/lib/api/sub-graph-schema-builder.mjs +1 -10
- 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/inngest/client-id-generator.cjs +66 -0
- package/lib/inngest/client-id-generator.cjs.map +1 -0
- package/lib/inngest/client-id-generator.d.ts +29 -0
- package/lib/inngest/client-id-generator.mjs +66 -0
- package/lib/inngest/client-id-generator.mjs.map +1 -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/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/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/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-config.mjs","sources":["../../src/config/env-config.ts"],"sourcesContent":[null],"names":[],"mappings":"gCAEA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AAE5B,MAAA,MAAM,GAAG,OAAO,CAAC,QAAQ,CAClC,OAAO,CAAC,GAAG;AACX;AACA;IACI,QAAQ,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC;IACnG,QAAQ,EAAE,GAAG,EAAE;IACf,SAAS,EAAE,GAAG,EAAE;IAChB,OAAO,EAAE,GAAG,EAAE;IACd,gBAAgB,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAC9C,WAAW,EAAE,GAAG,EAAE;IAClB,WAAW,EAAE,GAAG,EAAE;IAClB,UAAU,EAAE,GAAG,EAAE;IACjB,SAAS,EAAE,GAAG,EAAE;IAChB,QAAQ,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACrC,iBAAiB,EAAE,IAAI,CAAC;AACpB,QAAA,UAAU,EAAE,oCAAoC;AAChD,QAAA,OAAO,EAAE,oCAAoC;KAChD,CAAC;IACF,SAAS,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;IAC3C,qBAAqB,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAClD,sBAAsB,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAClD,aAAa,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IAEnD,SAAS,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACtC,IAAA,SAAS,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;IACxE,cAAc,EAAE,IAAI,CAAC;AACjB,QAAA,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;AACpB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,UAAU;SACnB,CAAC;AACF,QAAA,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC;AACvB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,UAAU;SACnB,CAAC;AACF,QAAA,OAAO,EAAE,gDAAgD;KAC5D,CAAC;
|
|
1
|
+
{"version":3,"file":"env-config.mjs","sources":["../../src/config/env-config.ts"],"sourcesContent":[null],"names":[],"mappings":"gCAEA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AAE5B,MAAA,MAAM,GAAG,OAAO,CAAC,QAAQ,CAClC,OAAO,CAAC,GAAG;AACX;AACA;IACI,QAAQ,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC;IACnG,QAAQ,EAAE,GAAG,EAAE;IACf,SAAS,EAAE,GAAG,EAAE;IAChB,OAAO,EAAE,GAAG,EAAE;IACd,gBAAgB,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAC9C,WAAW,EAAE,GAAG,EAAE;IAClB,WAAW,EAAE,GAAG,EAAE;IAClB,UAAU,EAAE,GAAG,EAAE;IACjB,SAAS,EAAE,GAAG,EAAE;IAChB,QAAQ,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACrC,iBAAiB,EAAE,IAAI,CAAC;AACpB,QAAA,UAAU,EAAE,oCAAoC;AAChD,QAAA,OAAO,EAAE,oCAAoC;KAChD,CAAC;IACF,SAAS,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;IAC3C,qBAAqB,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAClD,sBAAsB,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAClD,aAAa,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IAEnD,SAAS,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACtC,IAAA,SAAS,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;IACxE,cAAc,EAAE,IAAI,CAAC;AACjB,QAAA,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;AACpB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,UAAU;SACnB,CAAC;AACF,QAAA,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC;AACvB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,UAAU;SACnB,CAAC;AACF,QAAA,OAAO,EAAE,gDAAgD;KAC5D,CAAC;IACF,iBAAiB,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC1C,mBAAmB,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;AAC5C,IAAA,cAAc,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC1D,IAAA,mBAAmB,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAC9E,IAAA,gBAAgB,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,uBAAuB,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;AAClG,IAAA,iBAAiB,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;CAC1D"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Container } from 'inversify';
|
|
2
|
+
/**
|
|
3
|
+
* Example Inngest functions factory for tenant management
|
|
4
|
+
* This is how individual modules can register their Inngest functions
|
|
5
|
+
*/
|
|
6
|
+
export declare const tenantInngestFunctions: (container: Container) => {};
|
|
7
|
+
/**
|
|
8
|
+
* Example Feature configuration for a tenant module
|
|
9
|
+
*/
|
|
10
|
+
export declare const TenantFeature: {
|
|
11
|
+
inngestFunctions: (container: Container) => {};
|
|
12
|
+
registerExpressMiddlewareFunc: (app: any, container: any) => void;
|
|
13
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Feature } from '@common-stack/server-core';
|
|
2
|
+
/**
|
|
3
|
+
* Example of how to create a Feature that includes Inngest functions
|
|
4
|
+
*/
|
|
5
|
+
export declare const TenantFeature: Feature<any, any>;
|
|
6
|
+
/**
|
|
7
|
+
* Example of how other modules can also contribute Inngest functions
|
|
8
|
+
*/
|
|
9
|
+
export declare const NotificationFeature: Feature<any, any>;
|
|
10
|
+
export declare const AnalyticsFeature: Feature<any, any>;
|
|
11
|
+
/**
|
|
12
|
+
* Example of combining multiple features with Inngest functions
|
|
13
|
+
*/
|
|
14
|
+
export declare const createApplicationFeature: () => Feature<any, any>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Feature } from '@common-stack/server-core';
|
|
2
|
+
/**
|
|
3
|
+
* Example Feature that demonstrates using an array of Inngest function factories
|
|
4
|
+
*/
|
|
5
|
+
export declare const MultiModuleFeature: Feature<any, any>;
|
|
6
|
+
/**
|
|
7
|
+
* Example: Feature for just user management
|
|
8
|
+
*/
|
|
9
|
+
export declare const UserManagementFeature: Feature<any, any>;
|
|
10
|
+
/**
|
|
11
|
+
* Example: Feature for email campaigns
|
|
12
|
+
*/
|
|
13
|
+
export declare const EmailCampaignFeature: Feature<any, any>;
|
|
14
|
+
/**
|
|
15
|
+
* Example: Combining multiple features - each with their own Inngest functions
|
|
16
|
+
*/
|
|
17
|
+
export declare const ApplicationFeature: Feature<any, any>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
'use strict';var os=require('os');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 os__namespace=/*#__PURE__*/_interopNamespaceDefault(os);/**
|
|
2
|
+
* Generates a unique Inngest client ID for multi-developer environments
|
|
3
|
+
* Combines app name, environment, username, and hostname for uniqueness
|
|
4
|
+
*/
|
|
5
|
+
function generateInngestClientId(config, logger) {
|
|
6
|
+
let inngestId = '';
|
|
7
|
+
if (config.INNGEST_CLIENT_ID) {
|
|
8
|
+
// Use explicit client ID if provided
|
|
9
|
+
inngestId = config.INNGEST_CLIENT_ID;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
// Generate unique ID combining multiple factors
|
|
13
|
+
const appName = config.APP_NAME.toLowerCase().replace(/[^a-z0-9-]/g, '-');
|
|
14
|
+
const nodeEnv = config.NODE_ENV;
|
|
15
|
+
const username = process.env.USER || process.env.USERNAME || 'unknown';
|
|
16
|
+
const hostname = process.env.HOSTNAME || os__namespace.hostname();
|
|
17
|
+
// Create components for uniqueness
|
|
18
|
+
const components = [appName];
|
|
19
|
+
// Add environment if not production
|
|
20
|
+
if (nodeEnv !== 'production') {
|
|
21
|
+
components.push(nodeEnv);
|
|
22
|
+
}
|
|
23
|
+
// Add developer identifier for development
|
|
24
|
+
if (nodeEnv === 'development') {
|
|
25
|
+
components.push(username.toLowerCase().replace(/[^a-z0-9]/g, ''));
|
|
26
|
+
}
|
|
27
|
+
// Add hostname suffix for extra uniqueness
|
|
28
|
+
const hostSuffix = hostname
|
|
29
|
+
.toLowerCase()
|
|
30
|
+
.replace(/[^a-z0-9]/g, '')
|
|
31
|
+
.slice(0, 8);
|
|
32
|
+
if (hostSuffix) {
|
|
33
|
+
components.push(hostSuffix);
|
|
34
|
+
}
|
|
35
|
+
inngestId = components.join('-');
|
|
36
|
+
}
|
|
37
|
+
// Final cleanup and validation
|
|
38
|
+
inngestId = inngestId
|
|
39
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
40
|
+
.replace(/-+/g, '-')
|
|
41
|
+
.replace(/^-|-$/g, '')
|
|
42
|
+
.slice(0, 63); // Inngest ID max length
|
|
43
|
+
if (logger) {
|
|
44
|
+
logger.info(`Generated Inngest client ID: ${inngestId}`);
|
|
45
|
+
}
|
|
46
|
+
return inngestId;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Examples of generated IDs:
|
|
50
|
+
*
|
|
51
|
+
* Production:
|
|
52
|
+
* - APP_NAME=OrderAPI, NODE_ENV=production → "orderapi"
|
|
53
|
+
*
|
|
54
|
+
* Staging:
|
|
55
|
+
* - APP_NAME=OrderAPI, NODE_ENV=staging → "orderapi-staging"
|
|
56
|
+
*
|
|
57
|
+
* Development:
|
|
58
|
+
* - APP_NAME=OrderAPI, NODE_ENV=development, USER=john, HOSTNAME=macbook-pro
|
|
59
|
+
* → "orderapi-development-john-macbookp"
|
|
60
|
+
*
|
|
61
|
+
* - APP_NAME=OrderAPI, NODE_ENV=development, USER=mary, HOSTNAME=mary-laptop
|
|
62
|
+
* → "orderapi-development-mary-marylap"
|
|
63
|
+
*
|
|
64
|
+
* Explicit Override:
|
|
65
|
+
* - INNGEST_CLIENT_ID=custom-client-id → "custom-client-id"
|
|
66
|
+
*/exports.generateInngestClientId=generateInngestClientId;//# sourceMappingURL=client-id-generator.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-id-generator.cjs","sources":["../../src/inngest/client-id-generator.ts"],"sourcesContent":[null],"names":["os"],"mappings":"4XAQA;;;AAGG;AACa,SAAA,uBAAuB,CAAC,MAA6B,EAAE,MAAY,EAAA;IAC/E,IAAI,SAAS,GAAG,EAAE,CAAC;AAEnB,IAAA,IAAI,MAAM,CAAC,iBAAiB,EAAE;;AAE1B,QAAA,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC;KACxC;SAAM;;AAEH,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;AAC1E,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC;AAChC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC;AACvE,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAIA,aAAE,CAAC,QAAQ,EAAE,CAAC;;AAGvD,QAAA,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,CAAC;;AAG7B,QAAA,IAAI,OAAO,KAAK,YAAY,EAAE;AAC1B,YAAA,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC5B;;AAGD,QAAA,IAAI,OAAO,KAAK,aAAa,EAAE;AAC3B,YAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;SACrE;;QAGD,MAAM,UAAU,GAAG,QAAQ;AACtB,aAAA,WAAW,EAAE;AACb,aAAA,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;AACzB,aAAA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjB,IAAI,UAAU,EAAE;AACZ,YAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC/B;AAED,QAAA,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACpC;;AAGD,IAAA,SAAS,GAAG,SAAS;AAChB,SAAA,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;AAC3B,SAAA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AACnB,SAAA,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;AACrB,SAAA,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAElB,IAAI,MAAM,EAAE;AACR,QAAA,MAAM,CAAC,IAAI,CAAC,gCAAgC,SAAS,CAAA,CAAE,CAAC,CAAC;KAC5D;AAED,IAAA,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;;;;;;;;AAkBG"}
|
|
@@ -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,66 @@
|
|
|
1
|
+
import*as os from'os';/**
|
|
2
|
+
* Generates a unique Inngest client ID for multi-developer environments
|
|
3
|
+
* Combines app name, environment, username, and hostname for uniqueness
|
|
4
|
+
*/
|
|
5
|
+
function generateInngestClientId(config, logger) {
|
|
6
|
+
let inngestId = '';
|
|
7
|
+
if (config.INNGEST_CLIENT_ID) {
|
|
8
|
+
// Use explicit client ID if provided
|
|
9
|
+
inngestId = config.INNGEST_CLIENT_ID;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
// Generate unique ID combining multiple factors
|
|
13
|
+
const appName = config.APP_NAME.toLowerCase().replace(/[^a-z0-9-]/g, '-');
|
|
14
|
+
const nodeEnv = config.NODE_ENV;
|
|
15
|
+
const username = process.env.USER || process.env.USERNAME || 'unknown';
|
|
16
|
+
const hostname = process.env.HOSTNAME || os.hostname();
|
|
17
|
+
// Create components for uniqueness
|
|
18
|
+
const components = [appName];
|
|
19
|
+
// Add environment if not production
|
|
20
|
+
if (nodeEnv !== 'production') {
|
|
21
|
+
components.push(nodeEnv);
|
|
22
|
+
}
|
|
23
|
+
// Add developer identifier for development
|
|
24
|
+
if (nodeEnv === 'development') {
|
|
25
|
+
components.push(username.toLowerCase().replace(/[^a-z0-9]/g, ''));
|
|
26
|
+
}
|
|
27
|
+
// Add hostname suffix for extra uniqueness
|
|
28
|
+
const hostSuffix = hostname
|
|
29
|
+
.toLowerCase()
|
|
30
|
+
.replace(/[^a-z0-9]/g, '')
|
|
31
|
+
.slice(0, 8);
|
|
32
|
+
if (hostSuffix) {
|
|
33
|
+
components.push(hostSuffix);
|
|
34
|
+
}
|
|
35
|
+
inngestId = components.join('-');
|
|
36
|
+
}
|
|
37
|
+
// Final cleanup and validation
|
|
38
|
+
inngestId = inngestId
|
|
39
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
40
|
+
.replace(/-+/g, '-')
|
|
41
|
+
.replace(/^-|-$/g, '')
|
|
42
|
+
.slice(0, 63); // Inngest ID max length
|
|
43
|
+
if (logger) {
|
|
44
|
+
logger.info(`Generated Inngest client ID: ${inngestId}`);
|
|
45
|
+
}
|
|
46
|
+
return inngestId;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Examples of generated IDs:
|
|
50
|
+
*
|
|
51
|
+
* Production:
|
|
52
|
+
* - APP_NAME=OrderAPI, NODE_ENV=production → "orderapi"
|
|
53
|
+
*
|
|
54
|
+
* Staging:
|
|
55
|
+
* - APP_NAME=OrderAPI, NODE_ENV=staging → "orderapi-staging"
|
|
56
|
+
*
|
|
57
|
+
* Development:
|
|
58
|
+
* - APP_NAME=OrderAPI, NODE_ENV=development, USER=john, HOSTNAME=macbook-pro
|
|
59
|
+
* → "orderapi-development-john-macbookp"
|
|
60
|
+
*
|
|
61
|
+
* - APP_NAME=OrderAPI, NODE_ENV=development, USER=mary, HOSTNAME=mary-laptop
|
|
62
|
+
* → "orderapi-development-mary-marylap"
|
|
63
|
+
*
|
|
64
|
+
* Explicit Override:
|
|
65
|
+
* - INNGEST_CLIENT_ID=custom-client-id → "custom-client-id"
|
|
66
|
+
*/export{generateInngestClientId};//# sourceMappingURL=client-id-generator.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-id-generator.mjs","sources":["../../src/inngest/client-id-generator.ts"],"sourcesContent":[null],"names":[],"mappings":"sBAQA;;;AAGG;AACa,SAAA,uBAAuB,CAAC,MAA6B,EAAE,MAAY,EAAA;IAC/E,IAAI,SAAS,GAAG,EAAE,CAAC;AAEnB,IAAA,IAAI,MAAM,CAAC,iBAAiB,EAAE;;AAE1B,QAAA,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC;KACxC;SAAM;;AAEH,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;AAC1E,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC;AAChC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC;AACvE,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;;AAGvD,QAAA,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,CAAC;;AAG7B,QAAA,IAAI,OAAO,KAAK,YAAY,EAAE;AAC1B,YAAA,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC5B;;AAGD,QAAA,IAAI,OAAO,KAAK,aAAa,EAAE;AAC3B,YAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;SACrE;;QAGD,MAAM,UAAU,GAAG,QAAQ;AACtB,aAAA,WAAW,EAAE;AACb,aAAA,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;AACzB,aAAA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjB,IAAI,UAAU,EAAE;AACZ,YAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC/B;AAED,QAAA,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACpC;;AAGD,IAAA,SAAS,GAAG,SAAS;AAChB,SAAA,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;AAC3B,SAAA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AACnB,SAAA,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;AACrB,SAAA,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAElB,IAAI,MAAM,EAAE;AACR,QAAA,MAAM,CAAC,IAAI,CAAC,gCAAgC,SAAS,CAAA,CAAE,CAAC,CAAC;KAC5D;AAED,IAAA,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;;;;;;;;AAkBG"}
|
|
@@ -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
|
};
|
|
@@ -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":"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;AACrD,IAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,IAAIC,0BAAe,CAAC,GAAG,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC;IACvF,MAAM,QAAQ,GAAGC,gCAAqB,CAAC;QACnC,KAAK;QACL,SAAS;QACT,MAAM;AACN,QAAA,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,GAAG,IAAI;QAC5C,QAAQ;AACX,KAAA,CAAC,CAAC;AACH,IAAA,IAAI;AACA,QAAA,IAAI,OAAO,iBAAiB,KAAK,UAAU,EAAE;YACzC,MAAM,YAAY,GAAG,iBAAiB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;YACjE,OAAO,YAAY,IAAI,QAAQ,CAAC;SACnC;AACD,QAAA,OAAO,QAAQ,CAAC;KACnB;IAAC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AACtD,QAAA,OAAO,QAAQ,CAAC;KACnB;AACL,EAAE;AACC,MAAM,mBAAmB,GAAG,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAA4B,KACvF,WAAW,CAAC;AACR,IAAA,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC;IACjF,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;AACjE,IAAA,kBAAkB,EAAE,CAAC,GAAG;;AAEpB,IAAA,WAAW,CAAC,GAAG,CAAC,IAAIC,SAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC;AAC5E,CAAA"}
|
|
@@ -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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"}
|
|
@@ -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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"}
|