@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.
Files changed (113) hide show
  1. package/lib/MainStackServer.cjs +101 -142
  2. package/lib/MainStackServer.cjs.map +1 -1
  3. package/lib/MainStackServer.d.ts +10 -5
  4. package/lib/MainStackServer.mjs +101 -142
  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 +127 -0
  38. package/lib/infrastructure/infrastructure-factory.cjs.map +1 -0
  39. package/lib/infrastructure/infrastructure-factory.d.ts +33 -0
  40. package/lib/infrastructure/infrastructure-factory.mjs +127 -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 +7 -2
  74. package/lib/servers/ExpressApp.cjs.map +1 -1
  75. package/lib/servers/ExpressApp.d.ts +1 -1
  76. package/lib/servers/ExpressApp.mjs +7 -2
  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,27 @@
1
+ import {ContainerModule}from'inversify';import {CommonType,ClientTypes}from'@common-stack/core';const createInfrastructureModule = (context, connectorConfig) => {
2
+ return new ContainerModule((bind) => {
3
+ // Core bindings - always included
4
+ // Bind logger with multiple identifiers for compatibility, avoiding duplicates
5
+ bind('Logger').toConstantValue(context.logger);
6
+ bind(CommonType.LOGGER).toConstantValue(context.logger); // 'LOGGER'
7
+ bind(ClientTypes.Logger).toConstantValue(context.logger); // Symbol.for('Logger')
8
+ bind('Environment').toConstantValue(process.env.NODE_ENV || 'development');
9
+ bind(CommonType.ENVIRONMENT).toConstantValue(process.env.NODE_ENV || 'development');
10
+ bind(CommonType.MOLECULER_BROKER).toConstantValue(context.broker);
11
+ bind('MoleculerBroker').toConstantValue(context.broker);
12
+ // Conditional bindings based on connector configuration
13
+ if (connectorConfig.pubsub && context.pubsub) {
14
+ bind('PubSub').toConstantValue(context.pubsub);
15
+ bind(CommonType.PUBSUB).toConstantValue(context.pubsub);
16
+ }
17
+ if (connectorConfig.mongo && context.mongoClient) {
18
+ bind('MongoDBConnection').toConstantValue(context.mongoClient);
19
+ }
20
+ if (connectorConfig.redis && context.redisClient) {
21
+ bind(CommonType.REDIS_CLIENT).toConstantValue(context.redisClient);
22
+ }
23
+ if (connectorConfig.inngest && context.inngestClient) {
24
+ bind(CommonType.INNGEST_CLIENT).toConstantValue(context.inngestClient);
25
+ }
26
+ });
27
+ };export{createInfrastructureModule};//# sourceMappingURL=container-module.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-module.mjs","sources":["../../src/infrastructure/container-module.ts"],"sourcesContent":[null],"names":[],"mappings":"sGAIa,0BAA0B,GAAG,CAAC,OAA8B,EAAE,eAAgC,KAAI;AAC3G,IAAA,OAAO,IAAI,eAAe,CAAC,CAAC,IAAqB,KAAI;;;QAGjD,IAAI,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAEzD,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC,CAAC;AACpF,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;;QAGxD,IAAI,eAAe,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;YAC1C,IAAI,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SAC3D;QAED,IAAI,eAAe,CAAC,KAAK,IAAI,OAAO,CAAC,WAAW,EAAE;YAC9C,IAAI,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SAClE;QAED,IAAI,eAAe,CAAC,KAAK,IAAI,OAAO,CAAC,WAAW,EAAE;AAC9C,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACtE;QAED,IAAI,eAAe,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE;AAClD,YAAA,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;SAC1E;AACL,KAAC,CAAC,CAAC;AACP"}
@@ -0,0 +1,16 @@
1
+ import { WorkflowStep, ConnectorConfig } from './types';
2
+ /**
3
+ * Example custom workflow steps that can be added to the infrastructure initialization
4
+ */
5
+ export declare const metricsInitializationStep: WorkflowStep;
6
+ export declare const customMigrationStep: WorkflowStep;
7
+ export declare const healthCheckStep: WorkflowStep;
8
+ export declare const cacheWarmingStep: WorkflowStep;
9
+ export declare const HIGH_PERFORMANCE_CONFIG: ConnectorConfig;
10
+ export declare const MINIMAL_CONFIG: ConnectorConfig;
11
+ export declare function createCustomWorkflow(environment: string): WorkflowStep[];
12
+ export declare function createCustomInfrastructureConfig(environment: string): {
13
+ connectors: ConnectorConfig;
14
+ workflows: WorkflowStep[];
15
+ environment: string;
16
+ };
@@ -0,0 +1,5 @@
1
+ export * from './types';
2
+ export * from './container-module';
3
+ export * from './workflow-orchestrator';
4
+ export * from './infrastructure-factory';
5
+ export * from './inngest-factory';
@@ -0,0 +1,127 @@
1
+ 'use strict';var moleculer=require('moleculer'),serverCore=require('@common-stack/server-core'),workflowOrchestrator=require('./workflow-orchestrator.cjs'),containerModule=require('./container-module.cjs'),inngestFactory=require('./inngest-factory.cjs'),connectionBroker=require('../connectors/connection-broker.cjs'),moleculer_config=require('../config/moleculer.config.cjs'),moleculerInterNamespace=require('../middleware/moleculer-inter-namespace.cjs');class InfrastructureFactory {
2
+ logger;
3
+ connectionBroker;
4
+ orchestrator;
5
+ constructor(logger) {
6
+ this.logger = logger;
7
+ }
8
+ async initialize() {
9
+ this.logger.info('Initializing Infrastructure Factory');
10
+ this.connectionBroker = new connectionBroker.ConnectionBroker(moleculer_config.default.transporter, this.logger);
11
+ }
12
+ async createBrokerAndContainer(options, serverFeature, settings, existingAllModules) {
13
+ const { type, nodeId, connectorConfig, enableMetrics = true, workflows = [] } = options;
14
+ // Create infrastructure context
15
+ const context = await this.createInfrastructureContext(connectorConfig);
16
+ // Create workflow orchestrator
17
+ const config = {
18
+ connectors: connectorConfig,
19
+ workflows,
20
+ environment: process.env.NODE_ENV || 'development',
21
+ };
22
+ this.orchestrator = new workflowOrchestrator.WorkflowOrchestrator(config);
23
+ // Create service broker
24
+ const broker = this.createServiceBroker(type, nodeId, enableMetrics);
25
+ context.broker = broker;
26
+ // Create container with infrastructure module
27
+ const infraModule = containerModule.createInfrastructureModule(context, connectorConfig);
28
+ const feature = new serverCore.Feature({
29
+ createContainerFunc: [(settings) => infraModule],
30
+ createHemeraContainerFunc: [(settings) => infraModule],
31
+ });
32
+ // Reuse existing allModules if provided (for microservice in development), otherwise create new one
33
+ const allModules = existingAllModules || new serverCore.Feature(feature, serverFeature);
34
+ let container;
35
+ if (type === 'main') {
36
+ container = await allModules.createContainers({ ...settings, mongoConnection: context.mongoClient });
37
+ }
38
+ else {
39
+ container = await allModules.createHemeraContainers({ ...settings, mongoConnection: context.mongoClient });
40
+ }
41
+ // Load moleculer services
42
+ if (type === 'main') {
43
+ allModules.loadMainMoleculerService({
44
+ broker,
45
+ container,
46
+ settings,
47
+ });
48
+ }
49
+ else {
50
+ allModules.loadClientMoleculerService({
51
+ broker,
52
+ container,
53
+ settings,
54
+ });
55
+ }
56
+ return { broker, container, context, allModules };
57
+ }
58
+ async createInfrastructureContext(connectorConfig) {
59
+ const context = {
60
+ logger: this.logger,
61
+ };
62
+ if (connectorConfig.redis) {
63
+ context.redisClient = await this.connectionBroker.redisConnection;
64
+ }
65
+ if (connectorConfig.mongo) {
66
+ context.mongoClient = await this.connectionBroker.mongoConnection;
67
+ }
68
+ if (connectorConfig.pubsub) {
69
+ context.pubsub = await this.connectionBroker.graphqlPubsub;
70
+ }
71
+ if (connectorConfig.inngest) {
72
+ context.inngestClient = inngestFactory.createInngestClient(this.logger);
73
+ }
74
+ return context;
75
+ }
76
+ createServiceBroker(type, nodeId, enableMetrics = true) {
77
+ const config = {
78
+ ...moleculer_config.default,
79
+ metrics: { enabled: enableMetrics },
80
+ ...(nodeId && { nodeID: nodeId }),
81
+ };
82
+ if (type === 'main') {
83
+ config.middlewares = [
84
+ moleculerInterNamespace.InterNamespaceMiddleware([
85
+ {
86
+ namespace: 'api-admin',
87
+ transporter: moleculer_config.default.transporter,
88
+ metrics: { enabled: false },
89
+ },
90
+ ]),
91
+ ];
92
+ }
93
+ return new moleculer.ServiceBroker(config);
94
+ }
95
+ getConnectionBroker() {
96
+ return this.connectionBroker;
97
+ }
98
+ async cleanup() {
99
+ if (this.connectionBroker) {
100
+ await this.connectionBroker.stop();
101
+ }
102
+ }
103
+ // Factory methods for common configurations
104
+ static createMainServiceConfig() {
105
+ return {
106
+ type: 'main',
107
+ connectorConfig: workflowOrchestrator.CONNECTOR_CONFIGS.FULL,
108
+ enableMetrics: true,
109
+ };
110
+ }
111
+ static createMicroserviceConfig(nodeId) {
112
+ return {
113
+ type: 'microservice',
114
+ nodeId: nodeId || `microservice-node-${Date.now()}`,
115
+ connectorConfig: workflowOrchestrator.CONNECTOR_CONFIGS.MICROSERVICE,
116
+ enableMetrics: false,
117
+ };
118
+ }
119
+ static createDevelopmentMicroserviceConfig() {
120
+ return {
121
+ type: 'microservice',
122
+ nodeId: 'node-broker-2',
123
+ connectorConfig: workflowOrchestrator.CONNECTOR_CONFIGS.DEVELOPMENT,
124
+ enableMetrics: false,
125
+ };
126
+ }
127
+ }exports.InfrastructureFactory=InfrastructureFactory;//# sourceMappingURL=infrastructure-factory.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infrastructure-factory.cjs","sources":["../../src/infrastructure/infrastructure-factory.ts"],"sourcesContent":[null],"names":["ConnectionBroker","brokerConfig","WorkflowOrchestrator","createInfrastructureModule","ServerFeature","createInngestClient","InterNamespaceMiddleware","ServiceBroker","CONNECTOR_CONFIGS"],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { ServiceBroker } from 'moleculer';
2
+ import { Container } from 'inversify';
3
+ import { Feature as ServerFeature } from '@common-stack/server-core';
4
+ import { CdmLogger } from '@cdm-logger/core';
5
+ import { InfrastructureContext, ConnectorConfig, WorkflowStep } from './types';
6
+ import { ConnectionBroker } from '../connectors/connection-broker';
7
+ export interface BrokerInitializationOptions {
8
+ type: 'main' | 'microservice';
9
+ nodeId?: string;
10
+ connectorConfig: ConnectorConfig;
11
+ enableMetrics?: boolean;
12
+ workflows?: WorkflowStep[];
13
+ }
14
+ export declare class InfrastructureFactory {
15
+ private logger;
16
+ private connectionBroker;
17
+ private orchestrator;
18
+ constructor(logger: CdmLogger.ILogger);
19
+ initialize(): Promise<void>;
20
+ createBrokerAndContainer(options: BrokerInitializationOptions, serverFeature: ServerFeature, settings: any, existingAllModules?: ServerFeature): Promise<{
21
+ broker: ServiceBroker;
22
+ container: Container;
23
+ context: InfrastructureContext;
24
+ allModules: ServerFeature;
25
+ }>;
26
+ private createInfrastructureContext;
27
+ private createServiceBroker;
28
+ getConnectionBroker(): ConnectionBroker;
29
+ cleanup(): Promise<void>;
30
+ static createMainServiceConfig(): BrokerInitializationOptions;
31
+ static createMicroserviceConfig(nodeId?: string): BrokerInitializationOptions;
32
+ static createDevelopmentMicroserviceConfig(): BrokerInitializationOptions;
33
+ }
@@ -0,0 +1,127 @@
1
+ import {ServiceBroker}from'moleculer';import {Feature}from'@common-stack/server-core';import {WorkflowOrchestrator,CONNECTOR_CONFIGS}from'./workflow-orchestrator.mjs';import {createInfrastructureModule}from'./container-module.mjs';import {createInngestClient}from'./inngest-factory.mjs';import {ConnectionBroker}from'../connectors/connection-broker.mjs';import brokerConfig from'../config/moleculer.config.mjs';import {InterNamespaceMiddleware}from'../middleware/moleculer-inter-namespace.mjs';class InfrastructureFactory {
2
+ logger;
3
+ connectionBroker;
4
+ orchestrator;
5
+ constructor(logger) {
6
+ this.logger = logger;
7
+ }
8
+ async initialize() {
9
+ this.logger.info('Initializing Infrastructure Factory');
10
+ this.connectionBroker = new ConnectionBroker(brokerConfig.transporter, this.logger);
11
+ }
12
+ async createBrokerAndContainer(options, serverFeature, settings, existingAllModules) {
13
+ const { type, nodeId, connectorConfig, enableMetrics = true, workflows = [] } = options;
14
+ // Create infrastructure context
15
+ const context = await this.createInfrastructureContext(connectorConfig);
16
+ // Create workflow orchestrator
17
+ const config = {
18
+ connectors: connectorConfig,
19
+ workflows,
20
+ environment: process.env.NODE_ENV || 'development',
21
+ };
22
+ this.orchestrator = new WorkflowOrchestrator(config);
23
+ // Create service broker
24
+ const broker = this.createServiceBroker(type, nodeId, enableMetrics);
25
+ context.broker = broker;
26
+ // Create container with infrastructure module
27
+ const infraModule = createInfrastructureModule(context, connectorConfig);
28
+ const feature = new Feature({
29
+ createContainerFunc: [(settings) => infraModule],
30
+ createHemeraContainerFunc: [(settings) => infraModule],
31
+ });
32
+ // Reuse existing allModules if provided (for microservice in development), otherwise create new one
33
+ const allModules = existingAllModules || new Feature(feature, serverFeature);
34
+ let container;
35
+ if (type === 'main') {
36
+ container = await allModules.createContainers({ ...settings, mongoConnection: context.mongoClient });
37
+ }
38
+ else {
39
+ container = await allModules.createHemeraContainers({ ...settings, mongoConnection: context.mongoClient });
40
+ }
41
+ // Load moleculer services
42
+ if (type === 'main') {
43
+ allModules.loadMainMoleculerService({
44
+ broker,
45
+ container,
46
+ settings,
47
+ });
48
+ }
49
+ else {
50
+ allModules.loadClientMoleculerService({
51
+ broker,
52
+ container,
53
+ settings,
54
+ });
55
+ }
56
+ return { broker, container, context, allModules };
57
+ }
58
+ async createInfrastructureContext(connectorConfig) {
59
+ const context = {
60
+ logger: this.logger,
61
+ };
62
+ if (connectorConfig.redis) {
63
+ context.redisClient = await this.connectionBroker.redisConnection;
64
+ }
65
+ if (connectorConfig.mongo) {
66
+ context.mongoClient = await this.connectionBroker.mongoConnection;
67
+ }
68
+ if (connectorConfig.pubsub) {
69
+ context.pubsub = await this.connectionBroker.graphqlPubsub;
70
+ }
71
+ if (connectorConfig.inngest) {
72
+ context.inngestClient = createInngestClient(this.logger);
73
+ }
74
+ return context;
75
+ }
76
+ createServiceBroker(type, nodeId, enableMetrics = true) {
77
+ const config = {
78
+ ...brokerConfig,
79
+ metrics: { enabled: enableMetrics },
80
+ ...(nodeId && { nodeID: nodeId }),
81
+ };
82
+ if (type === 'main') {
83
+ config.middlewares = [
84
+ InterNamespaceMiddleware([
85
+ {
86
+ namespace: 'api-admin',
87
+ transporter: brokerConfig.transporter,
88
+ metrics: { enabled: false },
89
+ },
90
+ ]),
91
+ ];
92
+ }
93
+ return new ServiceBroker(config);
94
+ }
95
+ getConnectionBroker() {
96
+ return this.connectionBroker;
97
+ }
98
+ async cleanup() {
99
+ if (this.connectionBroker) {
100
+ await this.connectionBroker.stop();
101
+ }
102
+ }
103
+ // Factory methods for common configurations
104
+ static createMainServiceConfig() {
105
+ return {
106
+ type: 'main',
107
+ connectorConfig: CONNECTOR_CONFIGS.FULL,
108
+ enableMetrics: true,
109
+ };
110
+ }
111
+ static createMicroserviceConfig(nodeId) {
112
+ return {
113
+ type: 'microservice',
114
+ nodeId: nodeId || `microservice-node-${Date.now()}`,
115
+ connectorConfig: CONNECTOR_CONFIGS.MICROSERVICE,
116
+ enableMetrics: false,
117
+ };
118
+ }
119
+ static createDevelopmentMicroserviceConfig() {
120
+ return {
121
+ type: 'microservice',
122
+ nodeId: 'node-broker-2',
123
+ connectorConfig: CONNECTOR_CONFIGS.DEVELOPMENT,
124
+ enableMetrics: false,
125
+ };
126
+ }
127
+ }export{InfrastructureFactory};//# sourceMappingURL=infrastructure-factory.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infrastructure-factory.mjs","sources":["../../src/infrastructure/infrastructure-factory.ts"],"sourcesContent":[null],"names":["ServerFeature"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ 'use strict';var inngest=require('inngest'),envConfig=require('../config/env-config.cjs');const generateInngestClientId = (configParams, logger) => {
2
+ const { APP_NAME, NODE_ENV, INNGEST_CLIENT_ID } = configParams;
3
+ if (INNGEST_CLIENT_ID) {
4
+ return INNGEST_CLIENT_ID;
5
+ }
6
+ const inngestId = `${APP_NAME}-${NODE_ENV}-${Date.now()}`;
7
+ logger.info(`Generated Inngest client ID: ${inngestId}`);
8
+ return inngestId;
9
+ };
10
+ const createInngestClient = (logger) => {
11
+ // Generate unique Inngest client ID for multi-developer environments
12
+ const inngestId = generateInngestClientId({
13
+ APP_NAME: envConfig.config.APP_NAME,
14
+ NODE_ENV: envConfig.config.NODE_ENV,
15
+ INNGEST_CLIENT_ID: envConfig.config.INNGEST_CLIENT_ID,
16
+ }, logger);
17
+ // Create Inngest client
18
+ return new inngest.Inngest({
19
+ id: inngestId,
20
+ eventKey: envConfig.config.INNGEST_EVENT_KEY,
21
+ signingKey: envConfig.config.INNGEST_SIGNING_KEY,
22
+ isDev: envConfig.config.INNGEST_IS_DEV,
23
+ env: envConfig.config.INNGEST_ENVIRONMENT,
24
+ baseUrl: envConfig.config.INNGEST_BASE_URL,
25
+ });
26
+ };exports.createInngestClient=createInngestClient;exports.generateInngestClientId=generateInngestClientId;//# sourceMappingURL=inngest-factory.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inngest-factory.cjs","sources":["../../src/infrastructure/inngest-factory.ts"],"sourcesContent":[null],"names":["config","Inngest"],"mappings":"gGAIa,uBAAuB,GAAG,CACnC,YAIC,EACD,MAAyB,KACjB;IACR,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,YAAY,CAAC;IAE/D,IAAI,iBAAiB,EAAE;AACnB,QAAA,OAAO,iBAAiB,CAAC;KAC5B;AAED,IAAA,MAAM,SAAS,GAAG,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE,CAAC;AAC1D,IAAA,MAAM,CAAC,IAAI,CAAC,gCAAgC,SAAS,CAAA,CAAE,CAAC,CAAC;AACzD,IAAA,OAAO,SAAS,CAAC;AACrB,EAAE;AAEW,MAAA,mBAAmB,GAAG,CAAC,MAAyB,KAAa;;IAEtE,MAAM,SAAS,GAAG,uBAAuB,CACrC;QACI,QAAQ,EAAEA,gBAAM,CAAC,QAAQ;QACzB,QAAQ,EAAEA,gBAAM,CAAC,QAAQ;QACzB,iBAAiB,EAAEA,gBAAM,CAAC,iBAAiB;KAC9C,EACD,MAAM,CACT,CAAC;;IAGF,OAAO,IAAIC,eAAO,CAAC;AACf,QAAA,EAAE,EAAE,SAAS;QACb,QAAQ,EAAED,gBAAM,CAAC,iBAAiB;QAClC,UAAU,EAAEA,gBAAM,CAAC,mBAAmB;QACtC,KAAK,EAAEA,gBAAM,CAAC,cAAc;QAC5B,GAAG,EAAEA,gBAAM,CAAC,mBAAmB;QAC/B,OAAO,EAAEA,gBAAM,CAAC,gBAAgB;AACnC,KAAA,CAAC,CAAC;AACP"}
@@ -0,0 +1,8 @@
1
+ import { Inngest } from 'inngest';
2
+ import { CdmLogger } from '@cdm-logger/core';
3
+ export declare const generateInngestClientId: (configParams: {
4
+ APP_NAME: string;
5
+ NODE_ENV: string;
6
+ INNGEST_CLIENT_ID?: string;
7
+ }, logger: CdmLogger.ILogger) => string;
8
+ export declare const createInngestClient: (logger: CdmLogger.ILogger) => Inngest;
@@ -0,0 +1,26 @@
1
+ import {Inngest}from'inngest';import {config}from'../config/env-config.mjs';const generateInngestClientId = (configParams, logger) => {
2
+ const { APP_NAME, NODE_ENV, INNGEST_CLIENT_ID } = configParams;
3
+ if (INNGEST_CLIENT_ID) {
4
+ return INNGEST_CLIENT_ID;
5
+ }
6
+ const inngestId = `${APP_NAME}-${NODE_ENV}-${Date.now()}`;
7
+ logger.info(`Generated Inngest client ID: ${inngestId}`);
8
+ return inngestId;
9
+ };
10
+ const createInngestClient = (logger) => {
11
+ // Generate unique Inngest client ID for multi-developer environments
12
+ const inngestId = generateInngestClientId({
13
+ APP_NAME: config.APP_NAME,
14
+ NODE_ENV: config.NODE_ENV,
15
+ INNGEST_CLIENT_ID: config.INNGEST_CLIENT_ID,
16
+ }, logger);
17
+ // Create Inngest client
18
+ return new Inngest({
19
+ id: inngestId,
20
+ eventKey: config.INNGEST_EVENT_KEY,
21
+ signingKey: config.INNGEST_SIGNING_KEY,
22
+ isDev: config.INNGEST_IS_DEV,
23
+ env: config.INNGEST_ENVIRONMENT,
24
+ baseUrl: config.INNGEST_BASE_URL,
25
+ });
26
+ };export{createInngestClient,generateInngestClientId};//# sourceMappingURL=inngest-factory.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inngest-factory.mjs","sources":["../../src/infrastructure/inngest-factory.ts"],"sourcesContent":[null],"names":[],"mappings":"kFAIa,uBAAuB,GAAG,CACnC,YAIC,EACD,MAAyB,KACjB;IACR,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,YAAY,CAAC;IAE/D,IAAI,iBAAiB,EAAE;AACnB,QAAA,OAAO,iBAAiB,CAAC;KAC5B;AAED,IAAA,MAAM,SAAS,GAAG,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE,CAAC;AAC1D,IAAA,MAAM,CAAC,IAAI,CAAC,gCAAgC,SAAS,CAAA,CAAE,CAAC,CAAC;AACzD,IAAA,OAAO,SAAS,CAAC;AACrB,EAAE;AAEW,MAAA,mBAAmB,GAAG,CAAC,MAAyB,KAAa;;IAEtE,MAAM,SAAS,GAAG,uBAAuB,CACrC;QACI,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;KAC9C,EACD,MAAM,CACT,CAAC;;IAGF,OAAO,IAAI,OAAO,CAAC;AACf,QAAA,EAAE,EAAE,SAAS;QACb,QAAQ,EAAE,MAAM,CAAC,iBAAiB;QAClC,UAAU,EAAE,MAAM,CAAC,mBAAmB;QACtC,KAAK,EAAE,MAAM,CAAC,cAAc;QAC5B,GAAG,EAAE,MAAM,CAAC,mBAAmB;QAC/B,OAAO,EAAE,MAAM,CAAC,gBAAgB;AACnC,KAAA,CAAC,CAAC;AACP"}
@@ -0,0 +1,28 @@
1
+ import { ServiceBroker } from 'moleculer';
2
+ import { CdmLogger } from '@cdm-logger/core';
3
+ import { Inngest } from 'inngest';
4
+ export interface InfrastructureContext {
5
+ broker: ServiceBroker;
6
+ pubsub: any;
7
+ mongoClient: any;
8
+ logger: CdmLogger.ILogger;
9
+ redisClient: any;
10
+ inngestClient?: Inngest;
11
+ }
12
+ export interface WorkflowStep {
13
+ name: string;
14
+ order: number;
15
+ enabled: boolean;
16
+ execute: (context: InfrastructureContext) => Promise<void> | void;
17
+ }
18
+ export interface ConnectorConfig {
19
+ redis: boolean;
20
+ mongo: boolean;
21
+ pubsub: boolean;
22
+ inngest: boolean;
23
+ }
24
+ export interface InfrastructureConfig {
25
+ connectors: ConnectorConfig;
26
+ workflows: WorkflowStep[];
27
+ environment: string;
28
+ }
@@ -0,0 +1,9 @@
1
+ import { MainStackServer } from '../MainStackServer';
2
+ import { StackServer } from '../StackServer';
3
+ /**
4
+ * Example usage of the new modular infrastructure system
5
+ */
6
+ export declare function startMainServer(): Promise<MainStackServer>;
7
+ export declare function startMicroservice(): Promise<StackServer>;
8
+ export declare function startServerWithCustomWorkflows(): Promise<MainStackServer>;
9
+ export declare function getEnvironmentConfig(environment: string): import("./types").ConnectorConfig;
@@ -0,0 +1,59 @@
1
+ 'use strict';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
+ };exports.CONNECTOR_CONFIGS=CONNECTOR_CONFIGS;exports.WorkflowOrchestrator=WorkflowOrchestrator;//# sourceMappingURL=workflow-orchestrator.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-orchestrator.cjs","sources":["../../src/infrastructure/workflow-orchestrator.ts"],"sourcesContent":[null],"names":[],"mappings":"mBAEa,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,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
+ */