@blokjs/runner 0.6.21 → 0.7.0
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/dist/Blok.d.ts +2 -0
- package/dist/Blok.js +42 -110
- package/dist/Blok.js.map +1 -1
- package/dist/DefaultLogger.d.ts +13 -0
- package/dist/DefaultLogger.js +25 -0
- package/dist/DefaultLogger.js.map +1 -1
- package/dist/RunnerSteps.d.ts +23 -0
- package/dist/RunnerSteps.js +128 -87
- package/dist/RunnerSteps.js.map +1 -1
- package/dist/SubworkflowNode.js +19 -0
- package/dist/SubworkflowNode.js.map +1 -1
- package/dist/TriggerBase.d.ts +12 -0
- package/dist/TriggerBase.js +216 -181
- package/dist/TriggerBase.js.map +1 -1
- package/dist/adapters/grpc/GrpcRuntimeAdapter.d.ts +9 -0
- package/dist/adapters/grpc/GrpcRuntimeAdapter.js +76 -6
- package/dist/adapters/grpc/GrpcRuntimeAdapter.js.map +1 -1
- package/dist/index.d.ts +4 -39
- package/dist/index.js +7 -32
- package/dist/index.js.map +1 -1
- package/dist/monitoring/JanitorMetrics.d.ts +3 -0
- package/dist/monitoring/JanitorMetrics.js +11 -0
- package/dist/monitoring/JanitorMetrics.js.map +1 -1
- package/dist/monitoring/ProcessErrorMetrics.d.ts +32 -0
- package/dist/monitoring/ProcessErrorMetrics.js +43 -0
- package/dist/monitoring/ProcessErrorMetrics.js.map +1 -0
- package/dist/monitoring/PrometheusMetricsBridge.d.ts +7 -0
- package/dist/monitoring/PrometheusMetricsBridge.js +8 -2
- package/dist/monitoring/PrometheusMetricsBridge.js.map +1 -1
- package/dist/monitoring/SubworkflowMetrics.d.ts +25 -0
- package/dist/monitoring/SubworkflowMetrics.js +38 -0
- package/dist/monitoring/SubworkflowMetrics.js.map +1 -0
- package/dist/observability/ErrorSink.d.ts +23 -0
- package/dist/observability/ErrorSink.js +32 -0
- package/dist/observability/ErrorSink.js.map +1 -0
- package/dist/observability/SentryIntegration.d.ts +9 -0
- package/dist/observability/SentryIntegration.js +31 -0
- package/dist/observability/SentryIntegration.js.map +1 -0
- package/dist/scheduling/DebounceCoordinator.d.ts +7 -53
- package/dist/scheduling/DebounceCoordinator.js +8 -207
- package/dist/scheduling/DebounceCoordinator.js.map +1 -1
- package/dist/tracing/InMemoryRunStore.d.ts +5 -1
- package/dist/tracing/InMemoryRunStore.js +14 -0
- package/dist/tracing/InMemoryRunStore.js.map +1 -1
- package/dist/tracing/Janitor.js +3 -0
- package/dist/tracing/Janitor.js.map +1 -1
- package/dist/tracing/PostgresRunStore.d.ts +4 -1
- package/dist/tracing/PostgresRunStore.js +73 -3
- package/dist/tracing/PostgresRunStore.js.map +1 -1
- package/dist/tracing/RunStore.d.ts +17 -1
- package/dist/tracing/RunTracker.d.ts +13 -34
- package/dist/tracing/RunTracker.js +62 -32
- package/dist/tracing/RunTracker.js.map +1 -1
- package/dist/tracing/SqliteRunStore.d.ts +4 -1
- package/dist/tracing/SqliteRunStore.js +60 -0
- package/dist/tracing/SqliteRunStore.js.map +1 -1
- package/dist/tracing/TraceRouter.d.ts +13 -0
- package/dist/tracing/TraceRouter.js +43 -11
- package/dist/tracing/TraceRouter.js.map +1 -1
- package/dist/tracing/TracingLogger.js +22 -0
- package/dist/tracing/TracingLogger.js.map +1 -1
- package/dist/tracing/createStore.js +51 -22
- package/dist/tracing/createStore.js.map +1 -1
- package/dist/tracing/types.d.ts +22 -0
- package/dist/types/GlobalOptions.d.ts +5 -7
- package/dist/workflow/WorkflowNormalizer.js +63 -0
- package/dist/workflow/WorkflowNormalizer.js.map +1 -1
- package/package.json +7 -4
- package/dist/cache/NodeResultCache.d.ts +0 -286
- package/dist/cache/NodeResultCache.js +0 -506
- package/dist/cache/NodeResultCache.js.map +0 -1
- package/dist/cache/index.d.ts +0 -1
- package/dist/cache/index.js +0 -2
- package/dist/cache/index.js.map +0 -1
- package/dist/concurrency/ConcurrencyBackend.d.ts +0 -61
- package/dist/concurrency/ConcurrencyBackend.js +0 -20
- package/dist/concurrency/ConcurrencyBackend.js.map +0 -1
- package/dist/concurrency/NatsKvConcurrencyBackend.d.ts +0 -64
- package/dist/concurrency/NatsKvConcurrencyBackend.js +0 -310
- package/dist/concurrency/NatsKvConcurrencyBackend.js.map +0 -1
- package/dist/concurrency/RedisConcurrencyBackend.d.ts +0 -64
- package/dist/concurrency/RedisConcurrencyBackend.js +0 -374
- package/dist/concurrency/RedisConcurrencyBackend.js.map +0 -1
- package/dist/concurrency/createConcurrencyBackend.d.ts +0 -24
- package/dist/concurrency/createConcurrencyBackend.js +0 -38
- package/dist/concurrency/createConcurrencyBackend.js.map +0 -1
- package/dist/graphql/GraphQLSchemaGenerator.d.ts +0 -129
- package/dist/graphql/GraphQLSchemaGenerator.js +0 -425
- package/dist/graphql/GraphQLSchemaGenerator.js.map +0 -1
- package/dist/integrations/APMIntegration.d.ts +0 -141
- package/dist/integrations/APMIntegration.js +0 -212
- package/dist/integrations/APMIntegration.js.map +0 -1
- package/dist/integrations/AzureMonitorIntegration.d.ts +0 -118
- package/dist/integrations/AzureMonitorIntegration.js +0 -254
- package/dist/integrations/AzureMonitorIntegration.js.map +0 -1
- package/dist/integrations/CloudWatchIntegration.d.ts +0 -135
- package/dist/integrations/CloudWatchIntegration.js +0 -293
- package/dist/integrations/CloudWatchIntegration.js.map +0 -1
- package/dist/integrations/SentryIntegration.d.ts +0 -153
- package/dist/integrations/SentryIntegration.js +0 -200
- package/dist/integrations/SentryIntegration.js.map +0 -1
- package/dist/integrations/index.d.ts +0 -19
- package/dist/integrations/index.js +0 -16
- package/dist/integrations/index.js.map +0 -1
- package/dist/marketplace/RuntimeAutoScaler.d.ts +0 -148
- package/dist/marketplace/RuntimeAutoScaler.js +0 -366
- package/dist/marketplace/RuntimeAutoScaler.js.map +0 -1
- package/dist/marketplace/RuntimeCatalog.d.ts +0 -180
- package/dist/marketplace/RuntimeCatalog.js +0 -339
- package/dist/marketplace/RuntimeCatalog.js.map +0 -1
- package/dist/marketplace/RuntimeDiscovery.d.ts +0 -86
- package/dist/marketplace/RuntimeDiscovery.js +0 -231
- package/dist/marketplace/RuntimeDiscovery.js.map +0 -1
- package/dist/marketplace/RuntimeHealthMonitor.d.ts +0 -100
- package/dist/marketplace/RuntimeHealthMonitor.js +0 -241
- package/dist/marketplace/RuntimeHealthMonitor.js.map +0 -1
- package/dist/marketplace/RuntimeMetricsDashboard.d.ts +0 -113
- package/dist/marketplace/RuntimeMetricsDashboard.js +0 -293
- package/dist/marketplace/RuntimeMetricsDashboard.js.map +0 -1
- package/dist/openapi/OpenAPIGenerator.d.ts +0 -192
- package/dist/openapi/OpenAPIGenerator.js +0 -378
- package/dist/openapi/OpenAPIGenerator.js.map +0 -1
- package/dist/openapi/index.d.ts +0 -20
- package/dist/openapi/index.js +0 -20
- package/dist/openapi/index.js.map +0 -1
- package/dist/scheduling/DebounceBackend.d.ts +0 -108
- package/dist/scheduling/DebounceBackend.js +0 -23
- package/dist/scheduling/DebounceBackend.js.map +0 -1
- package/dist/scheduling/NatsKvDebounceBackend.d.ts +0 -53
- package/dist/scheduling/NatsKvDebounceBackend.js +0 -334
- package/dist/scheduling/NatsKvDebounceBackend.js.map +0 -1
- package/dist/scheduling/RedisDebounceBackend.d.ts +0 -49
- package/dist/scheduling/RedisDebounceBackend.js +0 -356
- package/dist/scheduling/RedisDebounceBackend.js.map +0 -1
- package/dist/scheduling/createDebounceBackend.d.ts +0 -25
- package/dist/scheduling/createDebounceBackend.js +0 -39
- package/dist/scheduling/createDebounceBackend.js.map +0 -1
- package/dist/security/ABAC.d.ts +0 -224
- package/dist/security/ABAC.js +0 -380
- package/dist/security/ABAC.js.map +0 -1
- package/dist/security/AuditLogger.d.ts +0 -242
- package/dist/security/AuditLogger.js +0 -317
- package/dist/security/AuditLogger.js.map +0 -1
- package/dist/security/AuthMiddleware.d.ts +0 -162
- package/dist/security/AuthMiddleware.js +0 -289
- package/dist/security/AuthMiddleware.js.map +0 -1
- package/dist/security/EncryptionAtRest.d.ts +0 -206
- package/dist/security/EncryptionAtRest.js +0 -236
- package/dist/security/EncryptionAtRest.js.map +0 -1
- package/dist/security/OAuthProvider.d.ts +0 -334
- package/dist/security/OAuthProvider.js +0 -719
- package/dist/security/OAuthProvider.js.map +0 -1
- package/dist/security/PIIDetector.d.ts +0 -233
- package/dist/security/PIIDetector.js +0 -354
- package/dist/security/PIIDetector.js.map +0 -1
- package/dist/security/RBAC.d.ts +0 -143
- package/dist/security/RBAC.js +0 -285
- package/dist/security/RBAC.js.map +0 -1
- package/dist/security/SecretManager.d.ts +0 -652
- package/dist/security/SecretManager.js +0 -1147
- package/dist/security/SecretManager.js.map +0 -1
- package/dist/security/TLSConfig.d.ts +0 -305
- package/dist/security/TLSConfig.js +0 -550
- package/dist/security/TLSConfig.js.map +0 -1
- package/dist/security/index.d.ts +0 -81
- package/dist/security/index.js +0 -82
- package/dist/security/index.js.map +0 -1
|
@@ -1,425 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GraphQL Schema Generator for Blok Workflows
|
|
3
|
-
*
|
|
4
|
-
* Automatically generates GraphQL schema definitions (SDL) from workflow definitions.
|
|
5
|
-
* Introspects HTTP trigger configurations and node structures to produce
|
|
6
|
-
* Query/Mutation types with appropriate input/output types.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```typescript
|
|
10
|
-
* const generator = new GraphQLSchemaGenerator({
|
|
11
|
-
* schemaName: "BlokAPI",
|
|
12
|
-
* includeSubscriptions: true,
|
|
13
|
-
* });
|
|
14
|
-
*
|
|
15
|
-
* generator.addWorkflow({
|
|
16
|
-
* name: "get-user",
|
|
17
|
-
* version: "1.0.0",
|
|
18
|
-
* trigger: { http: { method: "GET", path: "/users/:id" } },
|
|
19
|
-
* steps: [{ name: "fetch", node: "db-query", type: "local" }],
|
|
20
|
-
* nodes: { "db-query": {} },
|
|
21
|
-
* });
|
|
22
|
-
*
|
|
23
|
-
* console.log(generator.generate());
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export class GraphQLSchemaGenerator {
|
|
27
|
-
config;
|
|
28
|
-
workflows = [];
|
|
29
|
-
customTypes = new Map();
|
|
30
|
-
constructor(config) {
|
|
31
|
-
this.config = {
|
|
32
|
-
schemaName: config?.schemaName ?? "BlokAPI",
|
|
33
|
-
description: config?.description ?? "Auto-generated GraphQL schema from Blok workflows",
|
|
34
|
-
includeSubscriptions: config?.includeSubscriptions ?? true,
|
|
35
|
-
includeMetadata: config?.includeMetadata ?? true,
|
|
36
|
-
customScalars: config?.customScalars ?? [],
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
addWorkflow(workflow) {
|
|
40
|
-
this.workflows.push(workflow);
|
|
41
|
-
}
|
|
42
|
-
addWorkflows(workflows) {
|
|
43
|
-
this.workflows.push(...workflows);
|
|
44
|
-
}
|
|
45
|
-
addCustomType(name, definition) {
|
|
46
|
-
this.customTypes.set(name, definition);
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Generate GraphQL Schema Definition Language (SDL)
|
|
50
|
-
*/
|
|
51
|
-
generate() {
|
|
52
|
-
if (this.workflows.length === 0) {
|
|
53
|
-
return this.emptySchema();
|
|
54
|
-
}
|
|
55
|
-
const lines = [];
|
|
56
|
-
const queries = [];
|
|
57
|
-
const mutations = [];
|
|
58
|
-
const subscriptions = [];
|
|
59
|
-
const typeDefinitions = [];
|
|
60
|
-
// Schema header
|
|
61
|
-
lines.push(`# ${this.config.description}`);
|
|
62
|
-
lines.push(`# Generated from ${this.workflows.length} Blok workflow(s)`);
|
|
63
|
-
lines.push("");
|
|
64
|
-
// Custom scalars
|
|
65
|
-
lines.push("scalar JSON");
|
|
66
|
-
lines.push("scalar DateTime");
|
|
67
|
-
for (const scalar of this.config.customScalars) {
|
|
68
|
-
lines.push(`"""${scalar.description}"""`);
|
|
69
|
-
lines.push(`scalar ${scalar.name}`);
|
|
70
|
-
}
|
|
71
|
-
lines.push("");
|
|
72
|
-
// Process each workflow
|
|
73
|
-
for (const workflow of this.workflows) {
|
|
74
|
-
const resolved = this.resolveWorkflow(workflow);
|
|
75
|
-
// Generate input type if needed
|
|
76
|
-
if (resolved.inputTypeName) {
|
|
77
|
-
typeDefinitions.push(this.generateInputType(workflow, resolved));
|
|
78
|
-
}
|
|
79
|
-
// Generate output type
|
|
80
|
-
typeDefinitions.push(this.generateOutputType(workflow, resolved));
|
|
81
|
-
// Add to appropriate root type
|
|
82
|
-
const fieldDef = this.generateFieldDefinition(workflow, resolved);
|
|
83
|
-
if (resolved.isQuery) {
|
|
84
|
-
queries.push(fieldDef);
|
|
85
|
-
}
|
|
86
|
-
if (resolved.isMutation) {
|
|
87
|
-
mutations.push(fieldDef);
|
|
88
|
-
}
|
|
89
|
-
if (resolved.isSubscription) {
|
|
90
|
-
subscriptions.push(this.generateSubscriptionField(workflow, resolved));
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
// Custom types
|
|
94
|
-
for (const [, definition] of this.customTypes) {
|
|
95
|
-
typeDefinitions.push(definition);
|
|
96
|
-
}
|
|
97
|
-
// Output type definitions
|
|
98
|
-
for (const typeDef of typeDefinitions) {
|
|
99
|
-
lines.push(typeDef);
|
|
100
|
-
lines.push("");
|
|
101
|
-
}
|
|
102
|
-
// Common error type
|
|
103
|
-
lines.push("type BlokError {");
|
|
104
|
-
lines.push(' """Error message"""');
|
|
105
|
-
lines.push(" message: String!");
|
|
106
|
-
lines.push(' """Node that caused the error"""');
|
|
107
|
-
lines.push(" origin: String");
|
|
108
|
-
lines.push(' """Error code"""');
|
|
109
|
-
lines.push(" code: String");
|
|
110
|
-
lines.push("}");
|
|
111
|
-
lines.push("");
|
|
112
|
-
// Workflow metadata type
|
|
113
|
-
if (this.config.includeMetadata) {
|
|
114
|
-
lines.push("type WorkflowMetadata {");
|
|
115
|
-
lines.push(" name: String!");
|
|
116
|
-
lines.push(" version: String!");
|
|
117
|
-
lines.push(" description: String");
|
|
118
|
-
lines.push(" trigger: String!");
|
|
119
|
-
lines.push(" stepCount: Int!");
|
|
120
|
-
lines.push("}");
|
|
121
|
-
lines.push("");
|
|
122
|
-
}
|
|
123
|
-
// Query type
|
|
124
|
-
if (queries.length > 0) {
|
|
125
|
-
lines.push("type Query {");
|
|
126
|
-
for (const q of queries) {
|
|
127
|
-
lines.push(` ${q}`);
|
|
128
|
-
}
|
|
129
|
-
if (this.config.includeMetadata) {
|
|
130
|
-
lines.push(' """List all available workflows"""');
|
|
131
|
-
lines.push(" _workflows: [WorkflowMetadata!]!");
|
|
132
|
-
}
|
|
133
|
-
lines.push("}");
|
|
134
|
-
lines.push("");
|
|
135
|
-
}
|
|
136
|
-
// Mutation type
|
|
137
|
-
if (mutations.length > 0) {
|
|
138
|
-
lines.push("type Mutation {");
|
|
139
|
-
for (const m of mutations) {
|
|
140
|
-
lines.push(` ${m}`);
|
|
141
|
-
}
|
|
142
|
-
lines.push("}");
|
|
143
|
-
lines.push("");
|
|
144
|
-
}
|
|
145
|
-
// Subscription type
|
|
146
|
-
if (this.config.includeSubscriptions && subscriptions.length > 0) {
|
|
147
|
-
lines.push("type Subscription {");
|
|
148
|
-
for (const s of subscriptions) {
|
|
149
|
-
lines.push(` ${s}`);
|
|
150
|
-
}
|
|
151
|
-
lines.push("}");
|
|
152
|
-
lines.push("");
|
|
153
|
-
}
|
|
154
|
-
// Schema definition
|
|
155
|
-
const schemaFields = [];
|
|
156
|
-
if (queries.length > 0)
|
|
157
|
-
schemaFields.push(" query: Query");
|
|
158
|
-
if (mutations.length > 0)
|
|
159
|
-
schemaFields.push(" mutation: Mutation");
|
|
160
|
-
if (this.config.includeSubscriptions && subscriptions.length > 0) {
|
|
161
|
-
schemaFields.push(" subscription: Subscription");
|
|
162
|
-
}
|
|
163
|
-
if (schemaFields.length > 0) {
|
|
164
|
-
lines.push("schema {");
|
|
165
|
-
lines.push(schemaFields.join("\n"));
|
|
166
|
-
lines.push("}");
|
|
167
|
-
}
|
|
168
|
-
return lines.join("\n");
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Generate an introspection-friendly JSON representation
|
|
172
|
-
*/
|
|
173
|
-
toJSON() {
|
|
174
|
-
const types = [];
|
|
175
|
-
const queries = [];
|
|
176
|
-
const mutations = [];
|
|
177
|
-
const subscriptions = [];
|
|
178
|
-
for (const workflow of this.workflows) {
|
|
179
|
-
const resolved = this.resolveWorkflow(workflow);
|
|
180
|
-
types.push({
|
|
181
|
-
name: resolved.outputTypeName,
|
|
182
|
-
kind: "OBJECT",
|
|
183
|
-
fields: this.inferOutputFields(workflow),
|
|
184
|
-
});
|
|
185
|
-
if (resolved.inputTypeName) {
|
|
186
|
-
types.push({
|
|
187
|
-
name: resolved.inputTypeName,
|
|
188
|
-
kind: "INPUT_OBJECT",
|
|
189
|
-
fields: this.inferInputFields(workflow, resolved),
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
const fieldInfo = {
|
|
193
|
-
name: this.toFieldName(workflow.name),
|
|
194
|
-
type: resolved.outputTypeName,
|
|
195
|
-
description: resolved.description,
|
|
196
|
-
args: resolved.inputTypeName
|
|
197
|
-
? [{ name: "input", type: `${resolved.inputTypeName}!` }]
|
|
198
|
-
: resolved.pathParams.map((p) => ({ name: p, type: "String!" })),
|
|
199
|
-
};
|
|
200
|
-
if (resolved.isQuery)
|
|
201
|
-
queries.push(fieldInfo);
|
|
202
|
-
if (resolved.isMutation)
|
|
203
|
-
mutations.push(fieldInfo);
|
|
204
|
-
if (resolved.isSubscription) {
|
|
205
|
-
subscriptions.push({
|
|
206
|
-
...fieldInfo,
|
|
207
|
-
name: `on${this.toPascalCase(workflow.name)}`,
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
return {
|
|
212
|
-
schemaName: this.config.schemaName,
|
|
213
|
-
types,
|
|
214
|
-
queries,
|
|
215
|
-
mutations,
|
|
216
|
-
subscriptions,
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
// -- Internal helpers --
|
|
220
|
-
resolveWorkflow(workflow) {
|
|
221
|
-
const triggerType = this.getTriggerType(workflow.trigger);
|
|
222
|
-
const typeName = this.toPascalCase(workflow.name);
|
|
223
|
-
const pathParams = this.extractPathParams(workflow.trigger.http?.path || "");
|
|
224
|
-
const isGet = workflow.trigger.http?.method === "GET";
|
|
225
|
-
const hasBody = workflow.trigger.http?.method === "POST" ||
|
|
226
|
-
workflow.trigger.http?.method === "PUT" ||
|
|
227
|
-
workflow.trigger.http?.method === "PATCH";
|
|
228
|
-
const isDelete = workflow.trigger.http?.method === "DELETE";
|
|
229
|
-
const isQuery = isGet ||
|
|
230
|
-
triggerType === "grpc" ||
|
|
231
|
-
triggerType === "manual" ||
|
|
232
|
-
(!workflow.trigger.http && !workflow.trigger.websocket && !workflow.trigger.sse);
|
|
233
|
-
const isMutation = hasBody || isDelete;
|
|
234
|
-
const isSubscription = triggerType === "websocket" || triggerType === "sse";
|
|
235
|
-
const needsInput = hasBody || (workflow.inputs && Object.keys(workflow.inputs).length > 0);
|
|
236
|
-
let description = workflow.description || `${typeName} workflow`;
|
|
237
|
-
if (this.config.includeMetadata) {
|
|
238
|
-
description += ` (v${workflow.version}, trigger: ${triggerType})`;
|
|
239
|
-
}
|
|
240
|
-
return {
|
|
241
|
-
typeName,
|
|
242
|
-
isQuery: isQuery && !isMutation,
|
|
243
|
-
isMutation,
|
|
244
|
-
isSubscription,
|
|
245
|
-
inputTypeName: needsInput ? `${typeName}Input` : null,
|
|
246
|
-
outputTypeName: `${typeName}Response`,
|
|
247
|
-
description,
|
|
248
|
-
pathParams,
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
generateInputType(workflow, resolved) {
|
|
252
|
-
const lines = [];
|
|
253
|
-
lines.push(`"""Input for ${workflow.name}"""`);
|
|
254
|
-
lines.push(`input ${resolved.inputTypeName} {`);
|
|
255
|
-
if (workflow.inputs && Object.keys(workflow.inputs).length > 0) {
|
|
256
|
-
for (const [name, field] of Object.entries(workflow.inputs)) {
|
|
257
|
-
const gqlType = this.fieldDefToGraphQLType(field);
|
|
258
|
-
if (field.description) {
|
|
259
|
-
lines.push(` """${field.description}"""`);
|
|
260
|
-
}
|
|
261
|
-
lines.push(` ${name}: ${gqlType}`);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
else {
|
|
265
|
-
lines.push(' """Request payload as JSON"""');
|
|
266
|
-
lines.push(" data: JSON");
|
|
267
|
-
}
|
|
268
|
-
lines.push("}");
|
|
269
|
-
return lines.join("\n");
|
|
270
|
-
}
|
|
271
|
-
generateOutputType(workflow, resolved) {
|
|
272
|
-
const lines = [];
|
|
273
|
-
lines.push(`"""Response from ${workflow.name}"""`);
|
|
274
|
-
lines.push(`type ${resolved.outputTypeName} {`);
|
|
275
|
-
if (workflow.outputs && Object.keys(workflow.outputs).length > 0) {
|
|
276
|
-
for (const [name, field] of Object.entries(workflow.outputs)) {
|
|
277
|
-
const gqlType = this.fieldDefToGraphQLType(field);
|
|
278
|
-
if (field.description) {
|
|
279
|
-
lines.push(` """${field.description}"""`);
|
|
280
|
-
}
|
|
281
|
-
lines.push(` ${name}: ${gqlType}`);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
else {
|
|
285
|
-
lines.push(' """Whether the operation succeeded"""');
|
|
286
|
-
lines.push(" success: Boolean!");
|
|
287
|
-
lines.push(' """Response data"""');
|
|
288
|
-
lines.push(" data: JSON");
|
|
289
|
-
lines.push(' """Error information"""');
|
|
290
|
-
lines.push(" error: BlokError");
|
|
291
|
-
}
|
|
292
|
-
lines.push("}");
|
|
293
|
-
return lines.join("\n");
|
|
294
|
-
}
|
|
295
|
-
generateFieldDefinition(workflow, resolved) {
|
|
296
|
-
const fieldName = this.toFieldName(workflow.name);
|
|
297
|
-
const args = [];
|
|
298
|
-
// Path params become required args
|
|
299
|
-
for (const param of resolved.pathParams) {
|
|
300
|
-
args.push(`${param}: String!`);
|
|
301
|
-
}
|
|
302
|
-
// Input type
|
|
303
|
-
if (resolved.inputTypeName) {
|
|
304
|
-
args.push(`input: ${resolved.inputTypeName}!`);
|
|
305
|
-
}
|
|
306
|
-
const argStr = args.length > 0 ? `(${args.join(", ")})` : "";
|
|
307
|
-
const desc = `"""${resolved.description}"""`;
|
|
308
|
-
return `${desc}\n ${fieldName}${argStr}: ${resolved.outputTypeName}!`;
|
|
309
|
-
}
|
|
310
|
-
generateSubscriptionField(workflow, resolved) {
|
|
311
|
-
const fieldName = `on${this.toPascalCase(workflow.name)}`;
|
|
312
|
-
const desc = `"""Subscribe to ${workflow.name} events"""`;
|
|
313
|
-
return `${desc}\n ${fieldName}: ${resolved.outputTypeName}!`;
|
|
314
|
-
}
|
|
315
|
-
inferOutputFields(workflow) {
|
|
316
|
-
if (workflow.outputs && Object.keys(workflow.outputs).length > 0) {
|
|
317
|
-
return Object.entries(workflow.outputs).map(([name, field]) => ({
|
|
318
|
-
name,
|
|
319
|
-
type: this.fieldDefToGraphQLType(field),
|
|
320
|
-
description: field.description,
|
|
321
|
-
}));
|
|
322
|
-
}
|
|
323
|
-
return [
|
|
324
|
-
{ name: "success", type: "Boolean!" },
|
|
325
|
-
{ name: "data", type: "JSON" },
|
|
326
|
-
{ name: "error", type: "BlokError" },
|
|
327
|
-
];
|
|
328
|
-
}
|
|
329
|
-
inferInputFields(workflow, resolved) {
|
|
330
|
-
if (workflow.inputs && Object.keys(workflow.inputs).length > 0) {
|
|
331
|
-
return Object.entries(workflow.inputs).map(([name, field]) => ({
|
|
332
|
-
name,
|
|
333
|
-
type: this.fieldDefToGraphQLType(field),
|
|
334
|
-
description: field.description,
|
|
335
|
-
}));
|
|
336
|
-
}
|
|
337
|
-
return [{ name: "data", type: "JSON" }];
|
|
338
|
-
}
|
|
339
|
-
fieldDefToGraphQLType(field) {
|
|
340
|
-
let baseType;
|
|
341
|
-
switch (field.type) {
|
|
342
|
-
case "string":
|
|
343
|
-
baseType = "String";
|
|
344
|
-
break;
|
|
345
|
-
case "number":
|
|
346
|
-
case "float":
|
|
347
|
-
baseType = "Float";
|
|
348
|
-
break;
|
|
349
|
-
case "integer":
|
|
350
|
-
case "int":
|
|
351
|
-
baseType = "Int";
|
|
352
|
-
break;
|
|
353
|
-
case "boolean":
|
|
354
|
-
baseType = "Boolean";
|
|
355
|
-
break;
|
|
356
|
-
case "array":
|
|
357
|
-
if (field.items) {
|
|
358
|
-
baseType = `[${this.fieldDefToGraphQLType(field.items)}]`;
|
|
359
|
-
}
|
|
360
|
-
else {
|
|
361
|
-
baseType = "[JSON]";
|
|
362
|
-
}
|
|
363
|
-
break;
|
|
364
|
-
case "object":
|
|
365
|
-
baseType = "JSON";
|
|
366
|
-
break;
|
|
367
|
-
case "datetime":
|
|
368
|
-
case "date":
|
|
369
|
-
baseType = "DateTime";
|
|
370
|
-
break;
|
|
371
|
-
default:
|
|
372
|
-
baseType = field.type.charAt(0).toUpperCase() + field.type.slice(1);
|
|
373
|
-
break;
|
|
374
|
-
}
|
|
375
|
-
return field.required ? `${baseType}!` : baseType;
|
|
376
|
-
}
|
|
377
|
-
getTriggerType(trigger) {
|
|
378
|
-
if (trigger.http)
|
|
379
|
-
return "http";
|
|
380
|
-
if (trigger.grpc)
|
|
381
|
-
return "grpc";
|
|
382
|
-
if (trigger.websocket)
|
|
383
|
-
return "websocket";
|
|
384
|
-
if (trigger.sse)
|
|
385
|
-
return "sse";
|
|
386
|
-
return "other";
|
|
387
|
-
}
|
|
388
|
-
extractPathParams(path) {
|
|
389
|
-
const params = [];
|
|
390
|
-
const regex = /:([a-zA-Z_][a-zA-Z0-9_]*)/g;
|
|
391
|
-
for (const match of path.matchAll(regex)) {
|
|
392
|
-
params.push(match[1]);
|
|
393
|
-
}
|
|
394
|
-
return params;
|
|
395
|
-
}
|
|
396
|
-
toPascalCase(name) {
|
|
397
|
-
return name
|
|
398
|
-
.split(/[-_.\s]+/)
|
|
399
|
-
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
400
|
-
.join("");
|
|
401
|
-
}
|
|
402
|
-
toFieldName(name) {
|
|
403
|
-
const pascal = this.toPascalCase(name);
|
|
404
|
-
return pascal.charAt(0).toLowerCase() + pascal.slice(1);
|
|
405
|
-
}
|
|
406
|
-
emptySchema() {
|
|
407
|
-
return [
|
|
408
|
-
`# ${this.config.description}`,
|
|
409
|
-
"# No workflows registered",
|
|
410
|
-
"",
|
|
411
|
-
"scalar JSON",
|
|
412
|
-
"scalar DateTime",
|
|
413
|
-
"",
|
|
414
|
-
"type Query {",
|
|
415
|
-
' """Health check"""',
|
|
416
|
-
" _health: Boolean!",
|
|
417
|
-
"}",
|
|
418
|
-
"",
|
|
419
|
-
"schema {",
|
|
420
|
-
" query: Query",
|
|
421
|
-
"}",
|
|
422
|
-
].join("\n");
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
//# sourceMappingURL=GraphQLSchemaGenerator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GraphQLSchemaGenerator.js","sourceRoot":"","sources":["../../src/graphql/GraphQLSchemaGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAwDH,MAAM,OAAO,sBAAsB;IAC1B,MAAM,CAAmC;IACzC,SAAS,GAA4B,EAAE,CAAC;IACxC,WAAW,GAAwB,IAAI,GAAG,EAAE,CAAC;IAErD,YAAY,MAA+B;QAC1C,IAAI,CAAC,MAAM,GAAG;YACb,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,SAAS;YAC3C,WAAW,EAAE,MAAM,EAAE,WAAW,IAAI,mDAAmD;YACvF,oBAAoB,EAAE,MAAM,EAAE,oBAAoB,IAAI,IAAI;YAC1D,eAAe,EAAE,MAAM,EAAE,eAAe,IAAI,IAAI;YAChD,aAAa,EAAE,MAAM,EAAE,aAAa,IAAI,EAAE;SAC1C,CAAC;IACH,CAAC;IAED,WAAW,CAAC,QAA+B;QAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,YAAY,CAAC,SAAkC;QAC9C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IACnC,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,UAAkB;QAC7C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,QAAQ;QACP,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,MAAM,eAAe,GAAa,EAAE,CAAC;QAErC,gBAAgB;QAChB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,MAAM,mBAAmB,CAAC,CAAC;QACzE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,iBAAiB;QACjB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,WAAW,KAAK,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,wBAAwB;QACxB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAEhD,gCAAgC;YAChC,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC5B,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YAClE,CAAC;YAED,uBAAuB;YACvB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YAElE,+BAA+B;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAElE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;YACD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACzB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;YACD,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC7B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YACxE,CAAC;QACF,CAAC;QAED,eAAe;QACf,KAAK,MAAM,CAAC,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/C,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC;QAED,0BAA0B;QAC1B,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;QAED,oBAAoB;QACpB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,yBAAyB;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;QAED,aAAa;QACb,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;gBACjC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBACnD,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YAClD,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;QAED,gBAAgB;QAChB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;QAED,oBAAoB;QACpB,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAClC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;QAED,oBAAoB;QACpB,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,YAAY,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,MAAM;QACL,MAAM,KAAK,GAAsB,EAAE,CAAC;QACpC,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,MAAM,SAAS,GAAuB,EAAE,CAAC;QACzC,MAAM,aAAa,GAAuB,EAAE,CAAC;QAE7C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAEhD,KAAK,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ,CAAC,cAAc;gBAC7B,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;aACxC,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,QAAQ,CAAC,aAAa;oBAC5B,IAAI,EAAE,cAAc;oBACpB,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;iBACjD,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAqB;gBACnC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACrC,IAAI,EAAE,QAAQ,CAAC,cAAc;gBAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,IAAI,EAAE,QAAQ,CAAC,aAAa;oBAC3B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,aAAa,GAAG,EAAE,CAAC;oBACzD,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;aACjE,CAAC;YAEF,IAAI,QAAQ,CAAC,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,QAAQ,CAAC,UAAU;gBAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC7B,aAAa,CAAC,IAAI,CAAC;oBAClB,GAAG,SAAS;oBACZ,IAAI,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;iBAC7C,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,OAAO;YACN,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,KAAK;YACL,OAAO;YACP,SAAS;YACT,aAAa;SACb,CAAC;IACH,CAAC;IAED,yBAAyB;IAEjB,eAAe,CAAC,QAA+B;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAE7E,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;QACtD,MAAM,OAAO,GACZ,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM;YACxC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK;YACvC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC;QAE5D,MAAM,OAAO,GACZ,KAAK;YACL,WAAW,KAAK,MAAM;YACtB,WAAW,KAAK,QAAQ;YACxB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClF,MAAM,UAAU,GAAG,OAAO,IAAI,QAAQ,CAAC;QACvC,MAAM,cAAc,GAAG,WAAW,KAAK,WAAW,IAAI,WAAW,KAAK,KAAK,CAAC;QAE5E,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE3F,IAAI,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,GAAG,QAAQ,WAAW,CAAC;QACjE,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YACjC,WAAW,IAAI,MAAM,QAAQ,CAAC,OAAO,cAAc,WAAW,GAAG,CAAC;QACnE,CAAC;QAED,OAAO;YACN,QAAQ;YACR,OAAO,EAAE,OAAO,IAAI,CAAC,UAAU;YAC/B,UAAU;YACV,cAAc;YACd,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC,IAAI;YACrD,cAAc,EAAE,GAAG,QAAQ,UAAU;YACrC,WAAW;YACX,UAAU;SACV,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,QAA+B,EAAE,QAAsB;QAChF,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,aAAa,IAAI,CAAC,CAAC;QAEhD,IAAI,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,WAAW,KAAK,CAAC,CAAC;gBAC5C,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;YACrC,CAAC;QACF,CAAC;aAAM,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEO,kBAAkB,CAAC,QAA+B,EAAE,QAAsB;QACjF,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,QAAQ,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAC;QAEhD,IAAI,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,WAAW,KAAK,CAAC,CAAC;gBAC5C,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;YACrC,CAAC;QACF,CAAC;aAAM,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEO,uBAAuB,CAAC,QAA+B,EAAE,QAAsB;QACtF,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,mCAAmC;QACnC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC;QAChC,CAAC;QAED,aAAa;QACb,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,WAAW,KAAK,CAAC;QAE7C,OAAO,GAAG,IAAI,OAAO,SAAS,GAAG,MAAM,KAAK,QAAQ,CAAC,cAAc,GAAG,CAAC;IACxE,CAAC;IAEO,yBAAyB,CAAC,QAA+B,EAAE,QAAsB;QACxF,MAAM,SAAS,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,mBAAmB,QAAQ,CAAC,IAAI,YAAY,CAAC;QAC1D,OAAO,GAAG,IAAI,OAAO,SAAS,KAAK,QAAQ,CAAC,cAAc,GAAG,CAAC;IAC/D,CAAC;IAEO,iBAAiB,CAAC,QAA+B;QACxD,IAAI,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/D,IAAI;gBACJ,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;gBACvC,WAAW,EAAE,KAAK,CAAC,WAAW;aAC9B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO;YACN,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;YACrC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;YAC9B,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;SACpC,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,QAA+B,EAAE,QAAsB;QAC/E,IAAI,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9D,IAAI;gBACJ,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;gBACvC,WAAW,EAAE,KAAK,CAAC,WAAW;aAC9B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAEO,qBAAqB,CAAC,KAAkB;QAC/C,IAAI,QAAgB,CAAC;QAErB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,QAAQ;gBACZ,QAAQ,GAAG,QAAQ,CAAC;gBACpB,MAAM;YACP,KAAK,QAAQ,CAAC;YACd,KAAK,OAAO;gBACX,QAAQ,GAAG,OAAO,CAAC;gBACnB,MAAM;YACP,KAAK,SAAS,CAAC;YACf,KAAK,KAAK;gBACT,QAAQ,GAAG,KAAK,CAAC;gBACjB,MAAM;YACP,KAAK,SAAS;gBACb,QAAQ,GAAG,SAAS,CAAC;gBACrB,MAAM;YACP,KAAK,OAAO;gBACX,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBACjB,QAAQ,GAAG,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC3D,CAAC;qBAAM,CAAC;oBACP,QAAQ,GAAG,QAAQ,CAAC;gBACrB,CAAC;gBACD,MAAM;YACP,KAAK,QAAQ;gBACZ,QAAQ,GAAG,MAAM,CAAC;gBAClB,MAAM;YACP,KAAK,UAAU,CAAC;YAChB,KAAK,MAAM;gBACV,QAAQ,GAAG,UAAU,CAAC;gBACtB,MAAM;YACP;gBACC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpE,MAAM;QACR,CAAC;QAED,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;IACnD,CAAC;IAEO,cAAc,CAAC,OAAyC;QAC/D,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,MAAM,CAAC;QAChC,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,MAAM,CAAC;QAChC,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO,WAAW,CAAC;QAC1C,IAAI,OAAO,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QAC9B,OAAO,OAAO,CAAC;IAChB,CAAC;IAEO,iBAAiB,CAAC,IAAY;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,4BAA4B,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAEO,YAAY,CAAC,IAAY;QAChC,OAAO,IAAI;aACT,KAAK,CAAC,UAAU,CAAC;aACjB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC3D,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC;IAEO,WAAW,CAAC,IAAY;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IAEO,WAAW;QAClB,OAAO;YACN,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YAC9B,2BAA2B;YAC3B,EAAE;YACF,aAAa;YACb,iBAAiB;YACjB,EAAE;YACF,cAAc;YACd,sBAAsB;YACtB,qBAAqB;YACrB,GAAG;YACH,EAAE;YACF,UAAU;YACV,gBAAgB;YAChB,GAAG;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;CACD"}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* APMIntegration - Unified APM bridge for DataDog, New Relic, and generic OTLP backends
|
|
3
|
-
*
|
|
4
|
-
* Configures OpenTelemetry trace and metric exporters targeting specific APM vendors.
|
|
5
|
-
* Each vendor has pre-configured OTLP endpoints and required headers/env vars.
|
|
6
|
-
*
|
|
7
|
-
* Uses lazy dynamic imports so vendor-specific SDK packages are optional.
|
|
8
|
-
* Falls back to generic OTLP if vendor-specific packages are not installed.
|
|
9
|
-
*
|
|
10
|
-
* Supported vendors:
|
|
11
|
-
* - **DataDog**: Sends traces/metrics via dd-trace or OTLP to DataDog Agent
|
|
12
|
-
* - **New Relic**: Sends traces/metrics via OTLP to New Relic ingest endpoint
|
|
13
|
-
* - **Generic OTLP**: Any OTLP-compatible backend (Jaeger, Grafana Tempo, etc.)
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```typescript
|
|
17
|
-
* import { APMIntegration } from "@blokjs/runner";
|
|
18
|
-
*
|
|
19
|
-
* // DataDog
|
|
20
|
-
* const apm = new APMIntegration({
|
|
21
|
-
* vendor: "datadog",
|
|
22
|
-
* serviceName: "blok-http",
|
|
23
|
-
* datadogAgentUrl: "http://localhost:4318",
|
|
24
|
-
* });
|
|
25
|
-
* await apm.init();
|
|
26
|
-
*
|
|
27
|
-
* // New Relic
|
|
28
|
-
* const apm = new APMIntegration({
|
|
29
|
-
* vendor: "newrelic",
|
|
30
|
-
* serviceName: "blok-http",
|
|
31
|
-
* newrelicLicenseKey: process.env.NEW_RELIC_LICENSE_KEY!,
|
|
32
|
-
* });
|
|
33
|
-
* await apm.init();
|
|
34
|
-
*
|
|
35
|
-
* // Generic OTLP
|
|
36
|
-
* const apm = new APMIntegration({
|
|
37
|
-
* vendor: "otlp",
|
|
38
|
-
* serviceName: "blok-http",
|
|
39
|
-
* otlpEndpoint: "http://tempo:4318/v1/traces",
|
|
40
|
-
* });
|
|
41
|
-
* await apm.init();
|
|
42
|
-
* ```
|
|
43
|
-
*/
|
|
44
|
-
export type APMVendor = "datadog" | "newrelic" | "otlp";
|
|
45
|
-
export interface APMConfig {
|
|
46
|
-
/** APM vendor */
|
|
47
|
-
vendor: APMVendor;
|
|
48
|
-
/** Service name */
|
|
49
|
-
serviceName: string;
|
|
50
|
-
/** Service version */
|
|
51
|
-
serviceVersion?: string;
|
|
52
|
-
/** Environment (defaults to NODE_ENV) */
|
|
53
|
-
environment?: string;
|
|
54
|
-
/** DataDog: Agent OTLP endpoint (default: http://localhost:4318) */
|
|
55
|
-
datadogAgentUrl?: string;
|
|
56
|
-
/** DataDog: dd-trace service name override */
|
|
57
|
-
datadogServiceName?: string;
|
|
58
|
-
/** New Relic: License key (or set NEW_RELIC_LICENSE_KEY env) */
|
|
59
|
-
newrelicLicenseKey?: string;
|
|
60
|
-
/** New Relic: OTLP endpoint (default: US region endpoint) */
|
|
61
|
-
newrelicEndpoint?: string;
|
|
62
|
-
/** New Relic: Region "us" | "eu" (default: "us") */
|
|
63
|
-
newrelicRegion?: "us" | "eu";
|
|
64
|
-
/** Generic OTLP: endpoint URL */
|
|
65
|
-
otlpEndpoint?: string;
|
|
66
|
-
/** Generic OTLP: additional headers */
|
|
67
|
-
otlpHeaders?: Record<string, string>;
|
|
68
|
-
/** Trace sampling ratio (0.0 to 1.0, default: 1.0) */
|
|
69
|
-
samplingRatio?: number;
|
|
70
|
-
/** Enable debug logging */
|
|
71
|
-
debug?: boolean;
|
|
72
|
-
}
|
|
73
|
-
export interface APMBootstrapResult {
|
|
74
|
-
/** Vendor name */
|
|
75
|
-
vendor: APMVendor;
|
|
76
|
-
/** Gracefully shut down the APM integration */
|
|
77
|
-
shutdown: () => Promise<void>;
|
|
78
|
-
/** Force flush pending data */
|
|
79
|
-
forceFlush: () => Promise<void>;
|
|
80
|
-
}
|
|
81
|
-
export declare class APMIntegration {
|
|
82
|
-
private config;
|
|
83
|
-
private initialized;
|
|
84
|
-
private shutdownFn;
|
|
85
|
-
private flushFn;
|
|
86
|
-
constructor(config: APMConfig);
|
|
87
|
-
/**
|
|
88
|
-
* Initialize the APM integration.
|
|
89
|
-
* Dynamically loads vendor-specific or generic OTLP packages.
|
|
90
|
-
* Returns false if required packages are not installed.
|
|
91
|
-
*/
|
|
92
|
-
init(): Promise<boolean>;
|
|
93
|
-
/**
|
|
94
|
-
* Initialize DataDog APM.
|
|
95
|
-
*
|
|
96
|
-
* Strategy: Use OTLP export to the DataDog Agent, which accepts OTLP
|
|
97
|
-
* on port 4318 (HTTP) or 4317 (gRPC) when configured with
|
|
98
|
-
* DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT.
|
|
99
|
-
*/
|
|
100
|
-
private initDataDog;
|
|
101
|
-
/**
|
|
102
|
-
* Initialize New Relic APM.
|
|
103
|
-
*
|
|
104
|
-
* Strategy: Send traces via OTLP to New Relic's ingest endpoint.
|
|
105
|
-
* Requires NEW_RELIC_LICENSE_KEY in headers.
|
|
106
|
-
*/
|
|
107
|
-
private initNewRelic;
|
|
108
|
-
/**
|
|
109
|
-
* Initialize generic OTLP backend.
|
|
110
|
-
*/
|
|
111
|
-
private initOTLP;
|
|
112
|
-
/**
|
|
113
|
-
* Shared OTLP bootstrap using TracingBootstrap.
|
|
114
|
-
*/
|
|
115
|
-
private bootstrapOTLPTracing;
|
|
116
|
-
/**
|
|
117
|
-
* Check if the APM integration is initialized.
|
|
118
|
-
*/
|
|
119
|
-
isInitialized(): boolean;
|
|
120
|
-
/**
|
|
121
|
-
* Get the configured vendor.
|
|
122
|
-
*/
|
|
123
|
-
getVendor(): APMVendor;
|
|
124
|
-
/**
|
|
125
|
-
* Shut down the APM integration, flushing pending data.
|
|
126
|
-
*/
|
|
127
|
-
shutdown(): Promise<void>;
|
|
128
|
-
/**
|
|
129
|
-
* Force flush pending traces/metrics.
|
|
130
|
-
*/
|
|
131
|
-
forceFlush(): Promise<void>;
|
|
132
|
-
/**
|
|
133
|
-
* Get the OTLP endpoint configuration for the current vendor.
|
|
134
|
-
* Useful for debugging and diagnostics.
|
|
135
|
-
*/
|
|
136
|
-
getEndpointInfo(): {
|
|
137
|
-
vendor: APMVendor;
|
|
138
|
-
endpoint: string;
|
|
139
|
-
initialized: boolean;
|
|
140
|
-
};
|
|
141
|
-
}
|