@common-stack/server-stack 8.0.2-alpha.0 → 8.2.1-alpha.1

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 (147) hide show
  1. package/LICENSE +34 -21
  2. package/lib/MainStackServer.cjs +126 -146
  3. package/lib/MainStackServer.cjs.map +1 -1
  4. package/lib/MainStackServer.d.ts +12 -6
  5. package/lib/MainStackServer.mjs +126 -146
  6. package/lib/MainStackServer.mjs.map +1 -1
  7. package/lib/StackServer.cjs +23 -66
  8. package/lib/StackServer.cjs.map +1 -1
  9. package/lib/StackServer.d.ts +4 -5
  10. package/lib/StackServer.mjs +23 -66
  11. package/lib/StackServer.mjs.map +1 -1
  12. package/lib/api/schema-builder.cjs +13 -12
  13. package/lib/api/schema-builder.cjs.map +1 -1
  14. package/lib/api/schema-builder.mjs +13 -12
  15. package/lib/api/schema-builder.mjs.map +1 -1
  16. package/lib/api/sub-graph-schema-builder.cjs +147 -0
  17. package/lib/api/sub-graph-schema-builder.cjs.map +1 -0
  18. package/lib/api/sub-graph-schema-builder.d.ts +24 -0
  19. package/lib/api/sub-graph-schema-builder.mjs +147 -0
  20. package/lib/api/sub-graph-schema-builder.mjs.map +1 -0
  21. package/lib/config/env-config.cjs +6 -0
  22. package/lib/config/env-config.cjs.map +1 -1
  23. package/lib/config/env-config.d.ts +6 -0
  24. package/lib/config/env-config.mjs +6 -0
  25. package/lib/config/env-config.mjs.map +1 -1
  26. package/lib/examples/tenant-feature-example.d.ts +13 -0
  27. package/lib/examples/tenant-feature-integration.d.ts +14 -0
  28. package/lib/features/multi-module-example.d.ts +17 -0
  29. package/lib/index.cjs +1 -1
  30. package/lib/index.d.ts +1 -0
  31. package/lib/index.mjs +1 -1
  32. package/lib/infrastructure/container-module.cjs +27 -0
  33. package/lib/infrastructure/container-module.cjs.map +1 -0
  34. package/lib/infrastructure/container-module.d.ts +3 -0
  35. package/lib/infrastructure/container-module.mjs +27 -0
  36. package/lib/infrastructure/container-module.mjs.map +1 -0
  37. package/lib/infrastructure/example-workflows.d.ts +16 -0
  38. package/lib/infrastructure/index.d.ts +5 -0
  39. package/lib/infrastructure/infrastructure-factory.cjs +172 -0
  40. package/lib/infrastructure/infrastructure-factory.cjs.map +1 -0
  41. package/lib/infrastructure/infrastructure-factory.d.ts +36 -0
  42. package/lib/infrastructure/infrastructure-factory.mjs +172 -0
  43. package/lib/infrastructure/infrastructure-factory.mjs.map +1 -0
  44. package/lib/infrastructure/inngest-factory.cjs +47 -0
  45. package/lib/infrastructure/inngest-factory.cjs.map +1 -0
  46. package/lib/infrastructure/inngest-factory.d.ts +8 -0
  47. package/lib/infrastructure/inngest-factory.mjs +47 -0
  48. package/lib/infrastructure/inngest-factory.mjs.map +1 -0
  49. package/lib/infrastructure/types.d.ts +28 -0
  50. package/lib/infrastructure/usage-examples.d.ts +9 -0
  51. package/lib/infrastructure/workflow-orchestrator.cjs +59 -0
  52. package/lib/infrastructure/workflow-orchestrator.cjs.map +1 -0
  53. package/lib/infrastructure/workflow-orchestrator.d.ts +10 -0
  54. package/lib/infrastructure/workflow-orchestrator.mjs +59 -0
  55. package/lib/infrastructure/workflow-orchestrator.mjs.map +1 -0
  56. package/lib/inngest/client-id-generator.d.ts +29 -0
  57. package/lib/inngest/handler-factory.d.ts +24 -0
  58. package/lib/inngest/middleware/auto-resolve-invoke.middleware.cjs +275 -0
  59. package/lib/inngest/middleware/auto-resolve-invoke.middleware.cjs.map +1 -0
  60. package/lib/inngest/middleware/auto-resolve-invoke.middleware.d.ts +111 -0
  61. package/lib/inngest/middleware/auto-resolve-invoke.middleware.mjs +275 -0
  62. package/lib/inngest/middleware/auto-resolve-invoke.middleware.mjs.map +1 -0
  63. package/lib/inngest/middleware/function-reference-helper.cjs +363 -0
  64. package/lib/inngest/middleware/function-reference-helper.cjs.map +1 -0
  65. package/lib/inngest/middleware/function-reference-helper.d.ts +211 -0
  66. package/lib/inngest/middleware/function-reference-helper.mjs +363 -0
  67. package/lib/inngest/middleware/function-reference-helper.mjs.map +1 -0
  68. package/lib/inngest/middleware/index.d.ts +31 -0
  69. package/lib/inngest/middleware/types.d.ts +162 -0
  70. package/lib/inngest/multi-module-functions.d.ts +133 -0
  71. package/lib/inngest/setup.cjs +55 -0
  72. package/lib/inngest/setup.cjs.map +1 -0
  73. package/lib/inngest/setup.d.ts +10 -0
  74. package/lib/inngest/setup.mjs +55 -0
  75. package/lib/inngest/setup.mjs.map +1 -0
  76. package/lib/interfaces/graphql-request-context.d.ts +5 -0
  77. package/lib/middleware/index.d.ts +5 -0
  78. package/lib/middleware/redis-client.cjs +18 -0
  79. package/lib/middleware/redis-client.cjs.map +1 -0
  80. package/lib/middleware/redis-client.d.ts +16 -0
  81. package/lib/middleware/redis-client.mjs +18 -0
  82. package/lib/middleware/redis-client.mjs.map +1 -0
  83. package/lib/plugins/responseCachePlugin.cjs +2 -2
  84. package/lib/plugins/responseCachePlugin.cjs.map +1 -1
  85. package/lib/plugins/responseCachePlugin.mjs +2 -2
  86. package/lib/plugins/responseCachePlugin.mjs.map +1 -1
  87. package/lib/servers/ExpressApp.cjs +8 -3
  88. package/lib/servers/ExpressApp.cjs.map +1 -1
  89. package/lib/servers/ExpressApp.d.ts +1 -1
  90. package/lib/servers/ExpressApp.mjs +8 -3
  91. package/lib/servers/ExpressApp.mjs.map +1 -1
  92. package/lib/servers/GraphqlServer.cjs +7 -2
  93. package/lib/servers/GraphqlServer.cjs.map +1 -1
  94. package/lib/servers/GraphqlServer.d.ts +8 -6
  95. package/lib/servers/GraphqlServer.mjs +7 -2
  96. package/lib/servers/GraphqlServer.mjs.map +1 -1
  97. package/lib/servers/GraphqlWs.cjs +3 -44
  98. package/lib/servers/GraphqlWs.cjs.map +1 -1
  99. package/lib/servers/GraphqlWs.mjs +3 -44
  100. package/lib/servers/GraphqlWs.mjs.map +1 -1
  101. package/lib/servers/WebsocketMultipathUpdate.cjs +4 -2
  102. package/lib/servers/WebsocketMultipathUpdate.cjs.map +1 -1
  103. package/lib/servers/WebsocketMultipathUpdate.mjs +4 -2
  104. package/lib/servers/WebsocketMultipathUpdate.mjs.map +1 -1
  105. package/lib/servers/mongodb-migration-update.d.ts +1 -1
  106. package/lib/servers/websocket-context.cjs +70 -0
  107. package/lib/servers/websocket-context.cjs.map +1 -0
  108. package/lib/servers/websocket-context.d.ts +30 -0
  109. package/lib/servers/websocket-context.mjs +70 -0
  110. package/lib/servers/websocket-context.mjs.map +1 -0
  111. package/lib/utils/add-shareable-directive-to-schema.cjs +44 -0
  112. package/lib/utils/add-shareable-directive-to-schema.cjs.map +1 -0
  113. package/lib/utils/add-shareable-directive-to-schema.d.ts +1 -0
  114. package/lib/utils/add-shareable-directive-to-schema.mjs +44 -0
  115. package/lib/utils/add-shareable-directive-to-schema.mjs.map +1 -0
  116. package/lib/utils/index.d.ts +2 -0
  117. package/lib/utils/safe-model-factory.d.ts +18 -0
  118. package/package.json +15 -11
  119. package/lib/api/resolver.cjs +0 -12
  120. package/lib/api/resolver.cjs.map +0 -1
  121. package/lib/api/resolver.mjs +0 -12
  122. package/lib/api/resolver.mjs.map +0 -1
  123. package/lib/api/root-schema.graphqls.cjs +0 -2
  124. package/lib/api/root-schema.graphqls.cjs.map +0 -1
  125. package/lib/api/root-schema.graphqls.mjs +0 -2
  126. package/lib/api/root-schema.graphqls.mjs.map +0 -1
  127. package/lib/api/scalar.cjs +0 -16
  128. package/lib/api/scalar.cjs.map +0 -1
  129. package/lib/api/scalar.mjs +0 -16
  130. package/lib/api/scalar.mjs.map +0 -1
  131. package/lib/graphql/directives/index.cjs +0 -10
  132. package/lib/graphql/directives/index.cjs.map +0 -1
  133. package/lib/graphql/directives/index.d.ts +0 -7
  134. package/lib/graphql/directives/index.mjs +0 -10
  135. package/lib/graphql/directives/index.mjs.map +0 -1
  136. package/lib/graphql/index.d.ts +0 -2
  137. package/lib/graphql/schema/directives.graphql.cjs +0 -1
  138. package/lib/graphql/schema/directives.graphql.cjs.map +0 -1
  139. package/lib/graphql/schema/directives.graphql.mjs +0 -1
  140. package/lib/graphql/schema/directives.graphql.mjs.map +0 -1
  141. package/lib/graphql/schema/index.cjs +0 -1
  142. package/lib/graphql/schema/index.cjs.map +0 -1
  143. package/lib/graphql/schema/index.d.ts +0 -1
  144. package/lib/graphql/schema/index.mjs +0 -1
  145. package/lib/graphql/schema/index.mjs.map +0 -1
  146. package/lib/plugins/invalidateCachePlugin.test.d.ts +0 -1
  147. package/lib/plugins/response-cache-plugin.test.d.ts +0 -1
@@ -0,0 +1,363 @@
1
+ /**
2
+ * Function Reference Helper for Inngest
3
+ *
4
+ * Provides automatic function reference resolution for all registered functions.
5
+ * Instead of manually importing functions, you can reference them by ID.
6
+ *
7
+ * This combines:
8
+ * 1. Inngest's native `referenceFunction()` pattern
9
+ * 2. Automatic registry from all Feature-registered functions
10
+ * 3. Type-safe helpers for common patterns
11
+ *
12
+ * Usage:
13
+ * ```typescript
14
+ * // Instead of:
15
+ * import { someFunction } from '../other-module';
16
+ * await step.invoke('call-it', { function: someFunction, data: {...} });
17
+ *
18
+ * // You can do:
19
+ * await step.invoke('call-it', {
20
+ * function: ctx.resolveFunction('some-function-id'),
21
+ * data: {...}
22
+ * });
23
+ *
24
+ * // Or even simpler (if middleware auto-resolve enabled):
25
+ * await step.invoke('some-function-id', { data: {...} });
26
+ * ```
27
+ */
28
+ /**
29
+ * Global function registry
30
+ * Populated by setup.ts after all functions are loaded
31
+ */
32
+ class FunctionRegistry {
33
+ functions = new Map();
34
+ initialized = false;
35
+ /**
36
+ * Register all functions from Feature system
37
+ */
38
+ register(functions) {
39
+ if (this.initialized) {
40
+ console.warn('[FunctionRegistry] Already initialized, skipping re-registration');
41
+ return;
42
+ }
43
+ console.log(`[FunctionRegistry] Registering ${functions.length} functions...`);
44
+ functions.forEach((fn, index) => {
45
+ try {
46
+ if (!fn) {
47
+ console.warn(`[FunctionRegistry] Skipping null function at index ${index}`);
48
+ return;
49
+ }
50
+ // Get function ID (might be method or property)
51
+ let fnId;
52
+ if (typeof fn.id === 'function') {
53
+ fnId = fn.id();
54
+ }
55
+ else {
56
+ fnId = String(fn.id);
57
+ }
58
+ if (!fnId) {
59
+ console.warn(`[FunctionRegistry] Skipping function at index ${index} - empty ID`);
60
+ return;
61
+ }
62
+ this.functions.set(fnId, fn);
63
+ // Also register lowercase version for case-insensitive lookup
64
+ this.functions.set(fnId.toLowerCase(), fn);
65
+ }
66
+ catch (error) {
67
+ console.error(`[FunctionRegistry] Error registering function at index ${index}:`, error);
68
+ }
69
+ });
70
+ this.initialized = true;
71
+ const uniqueCount = Array.from(new Set(this.functions.values())).length;
72
+ console.log(`[FunctionRegistry] ✅ Registered ${uniqueCount} unique functions`);
73
+ }
74
+ /**
75
+ * Get function by ID (case-insensitive)
76
+ */
77
+ get(functionId) {
78
+ // Try exact match first
79
+ let fn = this.functions.get(functionId);
80
+ if (fn)
81
+ return fn;
82
+ // Try lowercase match
83
+ fn = this.functions.get(functionId.toLowerCase());
84
+ if (fn)
85
+ return fn;
86
+ return undefined;
87
+ }
88
+ /**
89
+ * Check if function exists
90
+ */
91
+ has(functionId) {
92
+ return this.functions.has(functionId) || this.functions.has(functionId.toLowerCase());
93
+ }
94
+ /**
95
+ * Get all registered function IDs
96
+ */
97
+ getAllIds() {
98
+ const uniqueFunctions = Array.from(new Set(this.functions.values()));
99
+ return uniqueFunctions
100
+ .map((fn) => {
101
+ if (typeof fn.id === 'function') {
102
+ return fn.id();
103
+ }
104
+ return String(fn.id);
105
+ })
106
+ .filter(Boolean);
107
+ }
108
+ /**
109
+ * Get count of registered functions
110
+ */
111
+ get count() {
112
+ return Array.from(new Set(this.functions.values())).length;
113
+ }
114
+ /**
115
+ * Check if registry is initialized
116
+ */
117
+ get isInitialized() {
118
+ return this.initialized;
119
+ }
120
+ /**
121
+ * Clear registry (for testing)
122
+ */
123
+ clear() {
124
+ this.functions.clear();
125
+ this.initialized = false;
126
+ }
127
+ }
128
+ // Global singleton instance
129
+ const globalFunctionRegistry = new FunctionRegistry();
130
+ /**
131
+ * Reference a function by its ID
132
+ * Similar to Inngest's native referenceFunction, but automatically uses global registry
133
+ *
134
+ * @param functionIdOrOptions - The ID of the function or options object with functionId
135
+ * @returns The function reference to use in step.invoke()
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * // Simple usage
140
+ * const userCreateFn = referenceFunction('user-create');
141
+ *
142
+ * // Type-safe usage
143
+ * const computePi = referenceFunction({ functionId: 'compute-pi' });
144
+ *
145
+ * await step.invoke('create-user', {
146
+ * function: userCreateFn,
147
+ * data: { email: 'user@example.com' }
148
+ * });
149
+ * ```
150
+ */
151
+ function referenceFunction(functionIdOrOptions) {
152
+ const functionId = typeof functionIdOrOptions === 'string' ? functionIdOrOptions : functionIdOrOptions.functionId;
153
+ if (!globalFunctionRegistry.isInitialized) {
154
+ throw new Error(`[referenceFunction] Function registry not initialized yet. ` +
155
+ `Ensure setupInngestFunctions() has completed before using referenceFunction().`);
156
+ }
157
+ const fn = globalFunctionRegistry.get(functionId);
158
+ if (!fn) {
159
+ const available = globalFunctionRegistry.getAllIds();
160
+ const suggestions = available.filter((id) => id.toLowerCase().includes(functionId.toLowerCase())).slice(0, 5);
161
+ let errorMsg = `[referenceFunction] Function "${functionId}" not found in registry.`;
162
+ if (suggestions.length > 0) {
163
+ errorMsg += `\n\nDid you mean one of these?\n - ${suggestions.join('\n - ')}`;
164
+ }
165
+ else {
166
+ errorMsg += `\n\nAvailable functions (${available.length} total):\n - ${available.slice(0, 10).join('\n - ')}`;
167
+ if (available.length > 10) {
168
+ errorMsg += `\n ... and ${available.length - 10} more`;
169
+ }
170
+ }
171
+ throw new Error(errorMsg);
172
+ }
173
+ return fn;
174
+ }
175
+ /**
176
+ * Batch reference multiple functions at once
177
+ * Useful for orchestrator workflows that call many functions
178
+ *
179
+ * @example
180
+ * ```typescript
181
+ * const { userCreate, emailSend, analyticsTrack } = referenceFunctions([
182
+ * 'user-create',
183
+ * 'email-send-welcome',
184
+ * 'analytics-track-event'
185
+ * ]);
186
+ *
187
+ * await step.invoke('create-user', { function: userCreate, data: {...} });
188
+ * await step.invoke('send-email', { function: emailSend, data: {...} });
189
+ * await step.invoke('track', { function: analyticsTrack, data: {...} });
190
+ * ```
191
+ */
192
+ function referenceFunctions(functionIds) {
193
+ const result = {};
194
+ for (const functionId of functionIds) {
195
+ result[functionId] = referenceFunction(functionId);
196
+ }
197
+ return result;
198
+ }
199
+ /**
200
+ * Check if a function is registered
201
+ * Useful for conditional logic
202
+ *
203
+ * @example
204
+ * ```typescript
205
+ * if (hasFunctionReference('email-send-welcome')) {
206
+ * const emailFn = referenceFunction('email-send-welcome');
207
+ * await step.invoke('send-email', { function: emailFn, data: {...} });
208
+ * }
209
+ * ```
210
+ */
211
+ function hasFunctionReference(functionId) {
212
+ return globalFunctionRegistry.has(functionId);
213
+ }
214
+ /**
215
+ * Get all available function IDs
216
+ * Useful for debugging and introspection
217
+ *
218
+ * @example
219
+ * ```typescript
220
+ * console.log('Available functions:', getAvailableFunctions());
221
+ * ```
222
+ */
223
+ function getAvailableFunctions() {
224
+ return globalFunctionRegistry.getAllIds();
225
+ }
226
+ /**
227
+ * Resolve a workflow-style or ID-style function reference to an Inngest function reference.
228
+ *
229
+ * Supported inputs:
230
+ * - Exact function id: "user-create"
231
+ * - Workflow-style: "WORKFLOWNAME.Function/trigger" or "WORKFLOWNAME.Function.trigger"
232
+ *
233
+ * The resolver will first try the exact ID as provided. If not found it will
234
+ * normalize the string by replacing separators ("/", ".") with dashes and
235
+ * collapsing non-alphanumerics, then lower-case the result. Example:
236
+ *
237
+ * WORKFLOWNAME.Function/trigger -> workflowname-function-trigger
238
+ *
239
+ * If still not found, it will throw the same helpful error as `referenceFunction`.
240
+ */
241
+ function resolveFunctionId(functionRef) {
242
+ const raw = typeof functionRef === 'string' ? functionRef : functionRef.functionId;
243
+ if (!raw || typeof raw !== 'string') {
244
+ throw new Error('[resolveFunctionId] Invalid function reference');
245
+ }
246
+ // Try direct lookup first
247
+ if (globalFunctionRegistry.has(raw)) {
248
+ return referenceFunction(raw);
249
+ }
250
+ // Normalize common workflow-style patterns into kebab-case id
251
+ let normalized = raw
252
+ // Replace separators with dashes
253
+ .replace(/[\/\.\s]+/g, '-')
254
+ // Insert dashes between camelCase / PascalCase boundaries (aB -> a-B)
255
+ .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
256
+ // Remove non-alphanumeric/dash characters
257
+ .replace(/[^a-zA-Z0-9-]+/g, '-')
258
+ // Collapse multiple dashes
259
+ .replace(/-+/g, '-')
260
+ // Trim dashes
261
+ .replace(/(^-|-$)/g, '')
262
+ .toLowerCase();
263
+ if (globalFunctionRegistry.has(normalized)) {
264
+ return referenceFunction(normalized);
265
+ }
266
+ // As a last resort, try lowercasing the raw input
267
+ if (globalFunctionRegistry.has(raw.toLowerCase())) {
268
+ return referenceFunction(raw.toLowerCase());
269
+ }
270
+ // Not found - rethrow a helpful error from referenceFunction to show suggestions
271
+ return referenceFunction(normalized);
272
+ }
273
+ /**
274
+ * Combined middleware: Reference + Auto-Resolve
275
+ * Provides both manual and automatic function resolution
276
+ *
277
+ * @example
278
+ * ```typescript
279
+ * const inngest = new Inngest({
280
+ * middleware: [createCombinedFunctionMiddleware()],
281
+ * });
282
+ *
283
+ * // Method 1: Manual reference
284
+ * const userFn = ctx.resolveFunction('user-create');
285
+ * await step.invoke('create-user', { function: userFn, data: {...} });
286
+ *
287
+ * // Method 2: Automatic (if function ID matches)
288
+ * await step.invoke('user-create', { data: {...} }); // Auto-resolved!
289
+ * ```
290
+ */
291
+ function createCombinedFunctionMiddleware(options) {
292
+ const { autoResolve = true, caseSensitive = false, debug = false } = options || {};
293
+ const log = (...args) => {
294
+ if (debug) {
295
+ console.log('[CombinedFunctionMiddleware]', ...args);
296
+ }
297
+ };
298
+ return {
299
+ name: 'combined-function-middleware',
300
+ init() {
301
+ return {
302
+ onFunctionRun({ ctx }) {
303
+ // Inject reference helpers
304
+ ctx.resolveFunction = referenceFunction;
305
+ ctx.resolveFunctions = referenceFunctions;
306
+ ctx.hasFunction = hasFunctionReference;
307
+ ctx.getAvailableFunctions = getAvailableFunctions;
308
+ ctx.resolveFunctionId = resolveFunctionId;
309
+ return {
310
+ transformInput(inputCtx) {
311
+ // Inject into context
312
+ if (inputCtx.ctx) {
313
+ inputCtx.ctx.resolveFunction = referenceFunction;
314
+ inputCtx.ctx.resolveFunctions = referenceFunctions;
315
+ inputCtx.ctx.hasFunction = hasFunctionReference;
316
+ inputCtx.ctx.getAvailableFunctions = getAvailableFunctions;
317
+ inputCtx.ctx.resolveFunctionId = resolveFunctionId;
318
+ }
319
+ // Inject helper functions into step object for inline editor support
320
+ // The actual step object that gets passed to workflow functions is inputCtx.ctx.step
321
+ // inputCtx.step is the step data array, inputCtx.ctx.step is the step object with methods
322
+ const stepObject = inputCtx.ctx && inputCtx.ctx.step;
323
+ log('Checking step object - inputCtx.step:', !!inputCtx.step, 'inputCtx.steps:', !!inputCtx.steps, 'inputCtx.ctx.step:', !!stepObject, 'found step object:', !!stepObject);
324
+ if (stepObject) {
325
+ // Make referenceFunction available as step.referenceFunction()
326
+ stepObject.referenceFunction = referenceFunction;
327
+ stepObject.hasFunction = hasFunctionReference;
328
+ stepObject.getAvailableFunctions = getAvailableFunctions;
329
+ stepObject.resolveFunctionId = resolveFunctionId;
330
+ log('✅ Injected referenceFunction into step object');
331
+ }
332
+ else {
333
+ log('❌ No step object found in inputCtx.ctx.step');
334
+ }
335
+ // Auto-resolve if enabled
336
+ if (autoResolve && stepObject) {
337
+ const originalInvoke = stepObject.invoke;
338
+ stepObject.invoke = async (stepId, opts = {}) => {
339
+ log(`invoke() called: "${stepId}", has function:`, !!opts.function);
340
+ // Auto-resolve if no function provided
341
+ if (!opts.function) {
342
+ try {
343
+ const fn = referenceFunction(stepId);
344
+ opts = { ...opts, function: fn };
345
+ log(`✅ Auto-resolved function for step "${stepId}"`);
346
+ }
347
+ catch (error) {
348
+ log(`⚠️ Could not auto-resolve "${stepId}":`, error.message);
349
+ // Continue with original behavior
350
+ }
351
+ }
352
+ return originalInvoke.call(stepObject, stepId, opts);
353
+ };
354
+ }
355
+ return inputCtx;
356
+ },
357
+ };
358
+ },
359
+ onSendEvent: () => ({}),
360
+ };
361
+ },
362
+ };
363
+ }export{createCombinedFunctionMiddleware,getAvailableFunctions,globalFunctionRegistry,hasFunctionReference,referenceFunction,referenceFunctions,resolveFunctionId};//# sourceMappingURL=function-reference-helper.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function-reference-helper.mjs","sources":["../../../src/inngest/middleware/function-reference-helper.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Inngest Middleware - Public Exports
3
+ *
4
+ * This module provides middleware to automatically resolve Inngest function references
5
+ * in step.invoke() calls, enabling cleaner workflow code.
6
+ */
7
+ export { createAutoResolveInvokeMiddleware, createAutoResolveInvokeMiddlewareWithFunctions, createAutoResolveInvokeMiddlewareWithDefaults, createCommonStackAutoResolveMiddleware, createStrictAutoResolveInvokeMiddleware, type AutoResolveInvokeOptions, } from './auto-resolve-invoke.middleware';
8
+ export { referenceFunction, referenceFunctions, hasFunctionReference, getAvailableFunctions, resolveFunctionId, globalFunctionRegistry, createFunctionReferenceMiddleware, createCombinedFunctionMiddleware, } from './function-reference-helper';
9
+ export type { InngestFunction } from 'inngest';
10
+ export type { ExtendedContext, ExtendedStep, InlineEditorHandler, FullContextHandler } from './types';
11
+ /**
12
+ * Usage Example:
13
+ *
14
+ * ```typescript
15
+ * import { createCommonStackAutoResolveMiddleware } from '@common-stack/server-stack';
16
+ *
17
+ * const inngest = new Inngest({
18
+ * id: 'my-app',
19
+ * middleware: [
20
+ * createCommonStackAutoResolveMiddleware({
21
+ * debug: true,
22
+ * })
23
+ * ]
24
+ * });
25
+ *
26
+ * // In your workflows:
27
+ * await step.invoke(WorkflowNamespace.USER_CREATE, {
28
+ * data: { email: 'test@example.com' }
29
+ * });
30
+ * ```
31
+ */
@@ -0,0 +1,162 @@
1
+ /**
2
+ * TypeScript type extensions for Inngest middleware-injected helpers
3
+ *
4
+ * These types extend the Inngest Step and Context objects with our custom helpers
5
+ * that are injected by the function-reference middleware.
6
+ *
7
+ * Usage in your code:
8
+ * ```typescript
9
+ * import type { ExtendedStep, ExtendedContext } from '@common-stack/server-stack';
10
+ *
11
+ * const myFn = inngest.createFunction(..., async ({ event, ctx, step }: {
12
+ * event: any;
13
+ * ctx: ExtendedContext;
14
+ * step: ExtendedStep;
15
+ * }) => {
16
+ * // Now you get autocomplete for ctx.resolveFunctionId and step.resolveFunctionId!
17
+ * const userFn = ctx.resolveFunctionId('USER.Create/trigger');
18
+ * await step.invoke('create-user', { function: userFn, data: {...} });
19
+ * });
20
+ * ```
21
+ */
22
+ import type { InngestFunction } from 'inngest';
23
+ /**
24
+ * Extended Context with injected function reference helpers
25
+ */
26
+ export interface ExtendedContext {
27
+ /**
28
+ * Reference a function by its exact ID
29
+ * @param functionId - The exact function ID (e.g., 'user-create')
30
+ */
31
+ resolveFunction<T extends InngestFunction.Any = InngestFunction.Any>(functionId: string | {
32
+ functionId: string;
33
+ }): T;
34
+ /**
35
+ * Resolve a function reference from a workflow-style string or plain ID
36
+ * Normalizes strings like "WORKFLOWNAME.Function/trigger" to "workflowname-function-trigger"
37
+ * @param functionRef - Workflow-style string or plain function ID
38
+ */
39
+ resolveFunctionId<T extends InngestFunction.Any = InngestFunction.Any>(functionRef: string | {
40
+ functionId: string;
41
+ }): T;
42
+ /**
43
+ * Batch reference multiple functions at once
44
+ * @param functionIds - Array of function IDs to reference
45
+ */
46
+ resolveFunctions<T extends readonly string[]>(functionIds: T): {
47
+ [K in T[number]]: InngestFunction.Any;
48
+ };
49
+ /**
50
+ * Check if a function is registered in the global registry
51
+ * @param functionId - The function ID to check
52
+ */
53
+ hasFunction(functionId: string): boolean;
54
+ /**
55
+ * Get all available function IDs from the registry
56
+ */
57
+ getAvailableFunctions(): string[];
58
+ }
59
+ /**
60
+ * Extended Step with injected function reference helpers
61
+ *
62
+ * These are available on the step object for inline editors that can't import modules.
63
+ */
64
+ export interface ExtendedStep {
65
+ /**
66
+ * Reference a function by its exact ID
67
+ * Available on step object for inline editor support (no imports needed)
68
+ * @param functionId - The exact function ID (e.g., 'user-create')
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * const step_159 = async (event, step) => {
73
+ * const userFn = step.referenceFunction('user-create');
74
+ * await step.invoke('create-user', { function: userFn, data: {...} });
75
+ * };
76
+ * ```
77
+ */
78
+ referenceFunction<T extends InngestFunction.Any = InngestFunction.Any>(functionId: string | {
79
+ functionId: string;
80
+ }): T;
81
+ /**
82
+ * Resolve a function reference from a workflow-style string or plain ID
83
+ * Available on step object for inline editor support (no imports needed)
84
+ * Normalizes strings like "WORKFLOWNAME.Function/trigger" to "workflowname-function-trigger"
85
+ * @param functionRef - Workflow-style string or plain function ID
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * const step_159 = async (event, step) => {
90
+ * // Workflow-style reference
91
+ * const paymentFn = step.resolveFunctionId('BILLING.ProcessPayment/trigger');
92
+ * await step.invoke('process-payment', { function: paymentFn, data: {...} });
93
+ * };
94
+ * ```
95
+ */
96
+ resolveFunctionId<T extends InngestFunction.Any = InngestFunction.Any>(functionRef: string | {
97
+ functionId: string;
98
+ }): T;
99
+ /**
100
+ * Check if a function is registered in the global registry
101
+ * Available on step object for inline editor support (no imports needed)
102
+ * @param functionId - The function ID to check
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * const step_159 = async (event, step) => {
107
+ * if (step.hasFunction('email-send')) {
108
+ * const emailFn = step.referenceFunction('email-send');
109
+ * await step.invoke('send-email', { function: emailFn, data: {...} });
110
+ * }
111
+ * };
112
+ * ```
113
+ */
114
+ hasFunction(functionId: string): boolean;
115
+ /**
116
+ * Get all available function IDs from the registry
117
+ * Available on step object for inline editor support (no imports needed)
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * const step_159 = async (event, step) => {
122
+ * console.log('Available functions:', step.getAvailableFunctions());
123
+ * };
124
+ * ```
125
+ */
126
+ getAvailableFunctions(): string[];
127
+ invoke: any;
128
+ run: any;
129
+ sleep: any;
130
+ sleepUntil: any;
131
+ waitForEvent: any;
132
+ sendEvent: any;
133
+ [key: string]: any;
134
+ }
135
+ /**
136
+ * Helper type for inline editor function handlers
137
+ * Use this for your inline editor functions to get full autocomplete
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * const step_159: InlineEditorHandler = async (event, step) => {
142
+ * // Full autocomplete for step.resolveFunctionId, step.referenceFunction, etc!
143
+ * const userFn = step.resolveFunctionId('USER.Create/trigger');
144
+ * await step.invoke('create-user', { function: userFn, data: {...} });
145
+ * return { success: true };
146
+ * };
147
+ * ```
148
+ */
149
+ export type InlineEditorHandler = (event: any, step: ExtendedStep) => Promise<any>;
150
+ /**
151
+ * Full context handler with both ctx and step extended
152
+ *
153
+ * @example
154
+ * ```typescript
155
+ * const myHandler: FullContextHandler = async (event, ctx, step) => {
156
+ * const userFn = ctx.resolveFunctionId('USER.Create/trigger');
157
+ * await step.invoke('create-user', { function: userFn, data: {...} });
158
+ * return { success: true };
159
+ * };
160
+ * ```
161
+ */
162
+ export type FullContextHandler = (event: any, ctx: ExtendedContext, step: ExtendedStep) => Promise<any>;