@flutchai/flutch-sdk 0.1.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/README.md +287 -0
- package/dist/api/callback-token.guard.d.ts +17 -0
- package/dist/api/callback-token.guard.js +80 -0
- package/dist/api/callback-token.guard.js.map +1 -0
- package/dist/api/callback.controller.d.ts +7 -0
- package/dist/api/callback.controller.js +44 -0
- package/dist/api/callback.controller.js.map +1 -0
- package/dist/api/graph.controller.d.ts +32 -0
- package/dist/api/graph.controller.js +187 -0
- package/dist/api/graph.controller.js.map +1 -0
- package/dist/api/ui-dispatch.controller.d.ts +34 -0
- package/dist/api/ui-dispatch.controller.js +178 -0
- package/dist/api/ui-dispatch.controller.js.map +1 -0
- package/dist/bootstrap.d.ts +4 -0
- package/dist/bootstrap.js +177 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/callbacks/callback-acl.service.d.ts +24 -0
- package/dist/callbacks/callback-acl.service.js +144 -0
- package/dist/callbacks/callback-acl.service.js.map +1 -0
- package/dist/callbacks/callback-auditor.service.d.ts +47 -0
- package/dist/callbacks/callback-auditor.service.js +286 -0
- package/dist/callbacks/callback-auditor.service.js.map +1 -0
- package/dist/callbacks/callback-metrics.service.d.ts +34 -0
- package/dist/callbacks/callback-metrics.service.js +216 -0
- package/dist/callbacks/callback-metrics.service.js.map +1 -0
- package/dist/callbacks/callback-patch.service.d.ts +13 -0
- package/dist/callbacks/callback-patch.service.js +51 -0
- package/dist/callbacks/callback-patch.service.js.map +1 -0
- package/dist/callbacks/callback-rate-limiter.d.ts +27 -0
- package/dist/callbacks/callback-rate-limiter.js +129 -0
- package/dist/callbacks/callback-rate-limiter.js.map +1 -0
- package/dist/callbacks/callback-registry.d.ts +7 -0
- package/dist/callbacks/callback-registry.js +29 -0
- package/dist/callbacks/callback-registry.js.map +1 -0
- package/dist/callbacks/callback-store.d.ts +19 -0
- package/dist/callbacks/callback-store.js +145 -0
- package/dist/callbacks/callback-store.js.map +1 -0
- package/dist/callbacks/example.callback.d.ts +2 -0
- package/dist/callbacks/example.callback.js +10 -0
- package/dist/callbacks/example.callback.js.map +1 -0
- package/dist/callbacks/idempotency-manager.d.ts +54 -0
- package/dist/callbacks/idempotency-manager.js +230 -0
- package/dist/callbacks/idempotency-manager.js.map +1 -0
- package/dist/callbacks/index.d.ts +13 -0
- package/dist/callbacks/index.js +30 -0
- package/dist/callbacks/index.js.map +1 -0
- package/dist/callbacks/smart-callback.router.d.ts +52 -0
- package/dist/callbacks/smart-callback.router.js +213 -0
- package/dist/callbacks/smart-callback.router.js.map +1 -0
- package/dist/callbacks/telegram-patch.handler.d.ts +6 -0
- package/dist/callbacks/telegram-patch.handler.js +24 -0
- package/dist/callbacks/telegram-patch.handler.js.map +1 -0
- package/dist/callbacks/universal-callback.service.d.ts +14 -0
- package/dist/callbacks/universal-callback.service.js +20 -0
- package/dist/callbacks/universal-callback.service.js.map +1 -0
- package/dist/callbacks/web-patch.handler.d.ts +6 -0
- package/dist/callbacks/web-patch.handler.js +24 -0
- package/dist/callbacks/web-patch.handler.js.map +1 -0
- package/dist/core/abstract-graph.builder.d.ts +128 -0
- package/dist/core/abstract-graph.builder.js +488 -0
- package/dist/core/abstract-graph.builder.js.map +1 -0
- package/dist/core/builder-registry.service.d.ts +6 -0
- package/dist/core/builder-registry.service.js +29 -0
- package/dist/core/builder-registry.service.js.map +1 -0
- package/dist/core/universal-graph.module.d.ts +10 -0
- package/dist/core/universal-graph.module.js +294 -0
- package/dist/core/universal-graph.module.js.map +1 -0
- package/dist/decorators/callback.decorators.d.ts +21 -0
- package/dist/decorators/callback.decorators.js +73 -0
- package/dist/decorators/callback.decorators.js.map +1 -0
- package/dist/endpoint-registry/endpoint.decorators.d.ts +35 -0
- package/dist/endpoint-registry/endpoint.decorators.js +115 -0
- package/dist/endpoint-registry/endpoint.decorators.js.map +1 -0
- package/dist/endpoint-registry/endpoint.registry.d.ts +44 -0
- package/dist/endpoint-registry/endpoint.registry.js +90 -0
- package/dist/endpoint-registry/endpoint.registry.js.map +1 -0
- package/dist/endpoint-registry/index.d.ts +3 -0
- package/dist/endpoint-registry/index.js +20 -0
- package/dist/endpoint-registry/index.js.map +1 -0
- package/dist/endpoint-registry/ui-endpoints.discovery.d.ts +11 -0
- package/dist/endpoint-registry/ui-endpoints.discovery.js +72 -0
- package/dist/endpoint-registry/ui-endpoints.discovery.js.map +1 -0
- package/dist/engine/api-call-tracer.utils.d.ts +8 -0
- package/dist/engine/api-call-tracer.utils.js +184 -0
- package/dist/engine/api-call-tracer.utils.js.map +1 -0
- package/dist/engine/event-processor.utils.d.ts +49 -0
- package/dist/engine/event-processor.utils.js +314 -0
- package/dist/engine/event-processor.utils.js.map +1 -0
- package/dist/engine/graph-engine.factory.d.ts +12 -0
- package/dist/engine/graph-engine.factory.js +43 -0
- package/dist/engine/graph-engine.factory.js.map +1 -0
- package/dist/engine/langgraph-engine.d.ts +14 -0
- package/dist/engine/langgraph-engine.js +261 -0
- package/dist/engine/langgraph-engine.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/callback.interface.d.ts +46 -0
- package/dist/interfaces/callback.interface.js +3 -0
- package/dist/interfaces/callback.interface.js.map +1 -0
- package/dist/interfaces/graph-registry.interface.d.ts +8 -0
- package/dist/interfaces/graph-registry.interface.js +3 -0
- package/dist/interfaces/graph-registry.interface.js.map +1 -0
- package/dist/interfaces/graph-service.interface.d.ts +43 -0
- package/dist/interfaces/graph-service.interface.js +9 -0
- package/dist/interfaces/graph-service.interface.js.map +1 -0
- package/dist/interfaces/index.d.ts +3 -0
- package/dist/interfaces/index.js +20 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/llm/index.d.ts +6 -0
- package/dist/llm/index.js +23 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/llm.initializer.d.ts +14 -0
- package/dist/llm/llm.initializer.js +167 -0
- package/dist/llm/llm.initializer.js.map +1 -0
- package/dist/llm/llm.interface.d.ts +6 -0
- package/dist/llm/llm.interface.js +3 -0
- package/dist/llm/llm.interface.js.map +1 -0
- package/dist/llm/llm.types.d.ts +32 -0
- package/dist/llm/llm.types.js +3 -0
- package/dist/llm/llm.types.js.map +1 -0
- package/dist/llm/model.initializer.d.ts +45 -0
- package/dist/llm/model.initializer.js +630 -0
- package/dist/llm/model.initializer.js.map +1 -0
- package/dist/llm/model.interface.d.ts +38 -0
- package/dist/llm/model.interface.js +4 -0
- package/dist/llm/model.interface.js.map +1 -0
- package/dist/llm/rerankers/voyageai-rerank.d.ts +17 -0
- package/dist/llm/rerankers/voyageai-rerank.js +56 -0
- package/dist/llm/rerankers/voyageai-rerank.js.map +1 -0
- package/dist/retriever/database-factory.d.ts +15 -0
- package/dist/retriever/database-factory.js +83 -0
- package/dist/retriever/database-factory.js.map +1 -0
- package/dist/retriever/index.d.ts +2 -0
- package/dist/retriever/index.js +19 -0
- package/dist/retriever/index.js.map +1 -0
- package/dist/retriever/retriever.client.d.ts +28 -0
- package/dist/retriever/retriever.client.js +97 -0
- package/dist/retriever/retriever.client.js.map +1 -0
- package/dist/retriever/retriever.service.d.ts +25 -0
- package/dist/retriever/retriever.service.js +265 -0
- package/dist/retriever/retriever.service.js.map +1 -0
- package/dist/retriever/types.d.ts +22 -0
- package/dist/retriever/types.js +3 -0
- package/dist/retriever/types.js.map +1 -0
- package/dist/schemas/graph-manifest.schema.d.ts +134 -0
- package/dist/schemas/graph-manifest.schema.js +180 -0
- package/dist/schemas/graph-manifest.schema.js.map +1 -0
- package/dist/schemas/index.d.ts +1 -0
- package/dist/schemas/index.js +18 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/shared-types/index.d.ts +199 -0
- package/dist/shared-types/index.js +58 -0
- package/dist/shared-types/index.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.js +20 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/mcp-converter.d.ts +15 -0
- package/dist/tools/mcp-converter.js +133 -0
- package/dist/tools/mcp-converter.js.map +1 -0
- package/dist/tools/mcp-tool-filter.d.ts +11 -0
- package/dist/tools/mcp-tool-filter.js +123 -0
- package/dist/tools/mcp-tool-filter.js.map +1 -0
- package/dist/tools/mcp.interfaces.d.ts +19 -0
- package/dist/tools/mcp.interfaces.js +3 -0
- package/dist/tools/mcp.interfaces.js.map +1 -0
- package/dist/types/graph-types.d.ts +82 -0
- package/dist/types/graph-types.js +6 -0
- package/dist/types/graph-types.js.map +1 -0
- package/dist/utils/error.utils.d.ts +18 -0
- package/dist/utils/error.utils.js +78 -0
- package/dist/utils/error.utils.js.map +1 -0
- package/dist/utils/graph-type.utils.d.ts +14 -0
- package/dist/utils/graph-type.utils.js +71 -0
- package/dist/utils/graph-type.utils.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +18 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/usage-recorder.d.ts +23 -0
- package/dist/utils/usage-recorder.js +29 -0
- package/dist/utils/usage-recorder.js.map +1 -0
- package/dist/versioning/index.d.ts +2 -0
- package/dist/versioning/index.js +19 -0
- package/dist/versioning/index.js.map +1 -0
- package/dist/versioning/versioned-graph.service.d.ts +16 -0
- package/dist/versioning/versioned-graph.service.js +132 -0
- package/dist/versioning/versioned-graph.service.js.map +1 -0
- package/dist/versioning/versioning.types.d.ts +21 -0
- package/dist/versioning/versioning.types.js +3 -0
- package/dist/versioning/versioning.types.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CallbackPatch } from "../interfaces/callback.interface";
|
|
2
|
+
import { CallbackPatchHandler } from "./callback-patch.service";
|
|
3
|
+
export declare class WebPatchHandler implements CallbackPatchHandler {
|
|
4
|
+
private readonly logger;
|
|
5
|
+
apply(patch: CallbackPatch, context?: any): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var WebPatchHandler_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.WebPatchHandler = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
let WebPatchHandler = WebPatchHandler_1 = class WebPatchHandler {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.logger = new common_1.Logger(WebPatchHandler_1.name);
|
|
15
|
+
}
|
|
16
|
+
async apply(patch, context) {
|
|
17
|
+
this.logger.debug(`Applying Web patch ${JSON.stringify(patch)} with context ${JSON.stringify(context)}`);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
exports.WebPatchHandler = WebPatchHandler;
|
|
21
|
+
exports.WebPatchHandler = WebPatchHandler = WebPatchHandler_1 = __decorate([
|
|
22
|
+
(0, common_1.Injectable)()
|
|
23
|
+
], WebPatchHandler);
|
|
24
|
+
//# sourceMappingURL=web-patch.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-patch.handler.js","sourceRoot":"","sources":["../../src/callbacks/web-patch.handler.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAoD;AAK7C,IAAM,eAAe,uBAArB,MAAM,eAAe;IAArB;QACY,WAAM,GAAG,IAAI,eAAM,CAAC,iBAAe,CAAC,IAAI,CAAC,CAAC;IAS7D,CAAC;IAPC,KAAK,CAAC,KAAK,CAAC,KAAoB,EAAE,OAAa;QAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,sBAAsB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CACxE,OAAO,CACR,EAAE,CACJ,CAAC;IACJ,CAAC;CACF,CAAA;AAVY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;GACA,eAAe,CAU3B"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Logger } from "@nestjs/common";
|
|
2
|
+
import { ConfigService } from "@nestjs/config";
|
|
3
|
+
import { CallbackResult, IGraphRequestPayload, IGraphResponsePayload, IGraphService } from "../interfaces";
|
|
4
|
+
import { CallbackRegistry } from "../callbacks/callback-registry";
|
|
5
|
+
import { EndpointRegistry } from "../endpoint-registry/endpoint.registry";
|
|
6
|
+
export interface IGraphManifest {
|
|
7
|
+
companySlug: string;
|
|
8
|
+
name: string;
|
|
9
|
+
title: string;
|
|
10
|
+
description: string;
|
|
11
|
+
detailedDescription: string;
|
|
12
|
+
category?: string;
|
|
13
|
+
author?: string;
|
|
14
|
+
maintainer?: string;
|
|
15
|
+
repository?: string;
|
|
16
|
+
tags?: string[];
|
|
17
|
+
ui?: {
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
title: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
defaultScreen: string;
|
|
22
|
+
menu: string[];
|
|
23
|
+
screens: Record<string, any>;
|
|
24
|
+
theme?: Record<string, any>;
|
|
25
|
+
permissions?: Record<string, any>;
|
|
26
|
+
};
|
|
27
|
+
versioning: {
|
|
28
|
+
strategy: "semver";
|
|
29
|
+
defaultVersion: string;
|
|
30
|
+
supportedVersions: string[];
|
|
31
|
+
};
|
|
32
|
+
versions: Record<string, {
|
|
33
|
+
status: string;
|
|
34
|
+
releaseDate: string;
|
|
35
|
+
isActive: boolean;
|
|
36
|
+
visibility: "public" | "private";
|
|
37
|
+
configSchemaPath?: string;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
export declare abstract class AbstractGraphBuilder<V extends string = string> {
|
|
41
|
+
abstract readonly version: V;
|
|
42
|
+
protected logger: Logger;
|
|
43
|
+
protected callbackRegistry: CallbackRegistry;
|
|
44
|
+
protected endpointRegistry: EndpointRegistry;
|
|
45
|
+
get graphType(): string;
|
|
46
|
+
protected manifestPath: string;
|
|
47
|
+
protected manifest?: IGraphManifest;
|
|
48
|
+
constructor();
|
|
49
|
+
abstract buildGraph(config: any): Promise<any>;
|
|
50
|
+
protected createGraphContext(payload: IGraphRequestPayload): {
|
|
51
|
+
messageId?: string;
|
|
52
|
+
threadId: string;
|
|
53
|
+
userId: string;
|
|
54
|
+
agentId: string;
|
|
55
|
+
companyId?: string;
|
|
56
|
+
};
|
|
57
|
+
prepareConfig(payload: IGraphRequestPayload): Promise<any>;
|
|
58
|
+
protected loadManifest(): Promise<IGraphManifest | null>;
|
|
59
|
+
protected loadManifestSync(): IGraphManifest | null;
|
|
60
|
+
protected validateManifest(manifest: IGraphManifest): void;
|
|
61
|
+
getGraphMetadata(): Promise<IGraphManifest | null>;
|
|
62
|
+
getVersionConfig(): Promise<{
|
|
63
|
+
configSchema: any;
|
|
64
|
+
graphType: string;
|
|
65
|
+
version: V;
|
|
66
|
+
status: string;
|
|
67
|
+
releaseDate: string;
|
|
68
|
+
isActive: boolean;
|
|
69
|
+
visibility: "public" | "private";
|
|
70
|
+
configSchemaPath?: string;
|
|
71
|
+
companySlug: string;
|
|
72
|
+
name: string;
|
|
73
|
+
title: string;
|
|
74
|
+
description: string;
|
|
75
|
+
detailedDescription: string;
|
|
76
|
+
category: string;
|
|
77
|
+
tags: string[];
|
|
78
|
+
ui: {
|
|
79
|
+
enabled: boolean;
|
|
80
|
+
title: string;
|
|
81
|
+
description?: string;
|
|
82
|
+
defaultScreen: string;
|
|
83
|
+
menu: string[];
|
|
84
|
+
screens: Record<string, any>;
|
|
85
|
+
theme?: Record<string, any>;
|
|
86
|
+
permissions?: Record<string, any>;
|
|
87
|
+
};
|
|
88
|
+
}>;
|
|
89
|
+
getFullGraphType(baseGraphType: string): string;
|
|
90
|
+
validateVersion(): boolean;
|
|
91
|
+
protected registerCallbacks(): Promise<void>;
|
|
92
|
+
protected registerEndpoints(): Promise<void>;
|
|
93
|
+
protected registerEndpointsManually(endpoints: import("../endpoint-registry/endpoint.registry").EndpointDescriptor[]): void;
|
|
94
|
+
}
|
|
95
|
+
export interface IGraphEngine {
|
|
96
|
+
invokeGraph(graph: any, config: any, signal?: AbortSignal): Promise<any>;
|
|
97
|
+
streamGraph(graph: any, config: any, onPartial: (chunk: string) => void, signal?: AbortSignal): Promise<any>;
|
|
98
|
+
}
|
|
99
|
+
export declare class UniversalGraphService implements IGraphService {
|
|
100
|
+
protected readonly configService: ConfigService;
|
|
101
|
+
private readonly builders;
|
|
102
|
+
private readonly engine;
|
|
103
|
+
private readonly endpointRegistry;
|
|
104
|
+
readonly logger: Logger;
|
|
105
|
+
constructor(configService: ConfigService, builders: AbstractGraphBuilder<string>[], engine: IGraphEngine, endpointRegistry: EndpointRegistry);
|
|
106
|
+
getSupportedGraphTypes(): Promise<string[]>;
|
|
107
|
+
generateAnswer(payload: IGraphRequestPayload): Promise<IGraphResponsePayload>;
|
|
108
|
+
streamAnswer(payload: any, onPartial: any): Promise<{
|
|
109
|
+
requestId: any;
|
|
110
|
+
text: any;
|
|
111
|
+
attachments: any;
|
|
112
|
+
metadata: any;
|
|
113
|
+
reasoningChains: any;
|
|
114
|
+
}>;
|
|
115
|
+
healthCheck(): Promise<boolean>;
|
|
116
|
+
cancelGeneration(requestId: string): Promise<void>;
|
|
117
|
+
private readonly activeGenerations;
|
|
118
|
+
private registerActiveGeneration;
|
|
119
|
+
private unregisterActiveGeneration;
|
|
120
|
+
executeCallback(token: string, platform?: string, platformContext?: any): Promise<CallbackResult>;
|
|
121
|
+
private executeCallbackFromDecorators;
|
|
122
|
+
private parseCallbackToken;
|
|
123
|
+
private parseCallbackParams;
|
|
124
|
+
callEndpoint(graphType: string, endpointName: string, context: import("../endpoint-registry/endpoint.registry").RequestContext): Promise<import("../endpoint-registry/endpoint.registry").DataEnvelope>;
|
|
125
|
+
listEndpoints(graphType: string): string[];
|
|
126
|
+
listGraphTypesWithEndpoints(): string[];
|
|
127
|
+
private getBuilderForType;
|
|
128
|
+
}
|
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
45
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
46
|
+
};
|
|
47
|
+
var UniversalGraphService_1;
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.UniversalGraphService = exports.AbstractGraphBuilder = void 0;
|
|
50
|
+
const common_1 = require("@nestjs/common");
|
|
51
|
+
const config_1 = require("@nestjs/config");
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const callback_registry_1 = require("../callbacks/callback-registry");
|
|
54
|
+
const endpoint_registry_1 = require("../endpoint-registry/endpoint.registry");
|
|
55
|
+
class AbstractGraphBuilder {
|
|
56
|
+
get graphType() {
|
|
57
|
+
var _a, _b, _c, _d;
|
|
58
|
+
if (((_a = this.manifest) === null || _a === void 0 ? void 0 : _a.companySlug) && ((_b = this.manifest) === null || _b === void 0 ? void 0 : _b.name)) {
|
|
59
|
+
return `${this.manifest.companySlug}.${this.manifest.name}::${this.version}`;
|
|
60
|
+
}
|
|
61
|
+
console.log(`DEBUG graphType: manifest=${!!this.manifest}, companySlug=${(_c = this.manifest) === null || _c === void 0 ? void 0 : _c.companySlug}, name=${(_d = this.manifest) === null || _d === void 0 ? void 0 : _d.name}, version=${this.version}`);
|
|
62
|
+
return `unknown::${this.version}`;
|
|
63
|
+
}
|
|
64
|
+
constructor() {
|
|
65
|
+
this.logger = new common_1.Logger(AbstractGraphBuilder.name);
|
|
66
|
+
this.manifestPath = path.join(process.cwd(), "graph.manifest.json");
|
|
67
|
+
try {
|
|
68
|
+
this.loadManifestSync();
|
|
69
|
+
if (this.manifest) {
|
|
70
|
+
this.logger.debug(`Loaded manifest for ${this.manifest.companySlug}.${this.manifest.name} (${this.constructor.name})`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
this.logger.warn(`Failed to load manifest in constructor: ${error.message}`);
|
|
75
|
+
}
|
|
76
|
+
setImmediate(() => {
|
|
77
|
+
this.logger.debug(`Starting callback and endpoint registration for ${this.constructor.name}`);
|
|
78
|
+
this.registerCallbacks().catch(error => {
|
|
79
|
+
this.logger.error(`Failed to register callbacks in constructor: ${error.message}`);
|
|
80
|
+
});
|
|
81
|
+
this.registerEndpoints().catch(error => {
|
|
82
|
+
this.logger.error(`Failed to register endpoints in constructor: ${error.message}`);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
createGraphContext(payload) {
|
|
87
|
+
return {
|
|
88
|
+
messageId: payload.messageId,
|
|
89
|
+
threadId: payload.threadId,
|
|
90
|
+
userId: payload.userId,
|
|
91
|
+
agentId: payload.agentId,
|
|
92
|
+
companyId: payload.companyId,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
async prepareConfig(payload) {
|
|
96
|
+
const context = this.createGraphContext(payload);
|
|
97
|
+
return {
|
|
98
|
+
configurable: {
|
|
99
|
+
thread_id: payload.threadId,
|
|
100
|
+
context,
|
|
101
|
+
metadata: {
|
|
102
|
+
userId: payload.userId,
|
|
103
|
+
agentId: payload.agentId,
|
|
104
|
+
requestId: payload.requestId,
|
|
105
|
+
graphType: this.graphType,
|
|
106
|
+
version: this.version,
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
async loadManifest() {
|
|
112
|
+
if (!this.manifestPath) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
const fs = await Promise.resolve().then(() => __importStar(require("fs/promises")));
|
|
117
|
+
const path = await Promise.resolve().then(() => __importStar(require("path")));
|
|
118
|
+
const manifestFullPath = path.resolve(this.manifestPath);
|
|
119
|
+
const manifestContent = await fs.readFile(manifestFullPath, "utf-8");
|
|
120
|
+
const manifest = JSON.parse(manifestContent);
|
|
121
|
+
this.manifest = manifest;
|
|
122
|
+
return manifest;
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.error(`Failed to load manifest from ${this.manifestPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
loadManifestSync() {
|
|
130
|
+
if (!this.manifestPath) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
const fs = require("fs");
|
|
135
|
+
const path = require("path");
|
|
136
|
+
const manifestFullPath = path.resolve(this.manifestPath);
|
|
137
|
+
const manifestContent = fs.readFileSync(manifestFullPath, "utf-8");
|
|
138
|
+
const manifest = JSON.parse(manifestContent);
|
|
139
|
+
this.manifest = manifest;
|
|
140
|
+
return manifest;
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
console.error(`Failed to load manifest from ${this.manifestPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
validateManifest(manifest) {
|
|
148
|
+
}
|
|
149
|
+
async getGraphMetadata() {
|
|
150
|
+
if (this.manifest) {
|
|
151
|
+
return this.manifest;
|
|
152
|
+
}
|
|
153
|
+
return await this.loadManifest();
|
|
154
|
+
}
|
|
155
|
+
async getVersionConfig() {
|
|
156
|
+
const manifest = await this.loadManifest();
|
|
157
|
+
if (!manifest) {
|
|
158
|
+
throw new Error(`Manifest not found at ${this.manifestPath}`);
|
|
159
|
+
}
|
|
160
|
+
const versionConfig = manifest.versions[this.version];
|
|
161
|
+
if (!versionConfig) {
|
|
162
|
+
throw new Error(`Version ${this.version} not found in manifest`);
|
|
163
|
+
}
|
|
164
|
+
let configSchema = null;
|
|
165
|
+
if (versionConfig.configSchemaPath) {
|
|
166
|
+
try {
|
|
167
|
+
const fs = await Promise.resolve().then(() => __importStar(require("fs/promises")));
|
|
168
|
+
const schemaPath = path.resolve(process.cwd(), versionConfig.configSchemaPath);
|
|
169
|
+
const schemaContent = await fs.readFile(schemaPath, "utf-8");
|
|
170
|
+
const schemaData = JSON.parse(schemaContent);
|
|
171
|
+
configSchema = schemaData.schema;
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
this.logger.warn(`Failed to load config schema: ${error.message}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return Object.assign(Object.assign({ companySlug: manifest.companySlug, name: manifest.name, title: manifest.title, description: manifest.description, detailedDescription: manifest.detailedDescription, category: manifest.category, tags: manifest.tags, ui: manifest.ui }, versionConfig), { configSchema, graphType: this.graphType, version: this.version });
|
|
178
|
+
}
|
|
179
|
+
getFullGraphType(baseGraphType) {
|
|
180
|
+
if (!baseGraphType) {
|
|
181
|
+
throw new Error("baseGraphType is required for versioned graphs");
|
|
182
|
+
}
|
|
183
|
+
return `${baseGraphType}::${this.version}`;
|
|
184
|
+
}
|
|
185
|
+
validateVersion() {
|
|
186
|
+
const versionRegex = /^\d+\.\d+\.\d+$/;
|
|
187
|
+
if (!versionRegex.test(this.version)) {
|
|
188
|
+
throw new Error(`Invalid version format: ${this.version}. Expected format: X.Y.Z`);
|
|
189
|
+
}
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
async registerCallbacks() {
|
|
193
|
+
this.logger.log(`CallbackRegistry instance: ${!!this.callbackRegistry}`);
|
|
194
|
+
if (!this.callbackRegistry) {
|
|
195
|
+
this.logger.error("CallbackRegistry not injected! This should not happen.");
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
const { getCallbackMetadata } = await Promise.resolve().then(() => __importStar(require("../decorators/callback.decorators")));
|
|
200
|
+
const callbackMetadata = getCallbackMetadata(this.constructor);
|
|
201
|
+
this.logger.log(`Found ${(callbackMetadata === null || callbackMetadata === void 0 ? void 0 : callbackMetadata.length) || 0} callbacks for ${this.constructor.name}`);
|
|
202
|
+
this.logger.log(`Callback metadata:`, JSON.stringify(callbackMetadata, null, 2));
|
|
203
|
+
if (!callbackMetadata || callbackMetadata.length === 0) {
|
|
204
|
+
this.logger.warn(`No callbacks found for ${this.constructor.name}. Check @WithCallbacks decorator.`);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const fullGraphType = this.graphType;
|
|
208
|
+
for (const { handler, method } of callbackMetadata) {
|
|
209
|
+
const callbackMethod = this[method];
|
|
210
|
+
if (typeof callbackMethod === "function") {
|
|
211
|
+
const boundCallback = async (context) => {
|
|
212
|
+
return callbackMethod.call(this, context);
|
|
213
|
+
};
|
|
214
|
+
this.callbackRegistry.register(handler, boundCallback, fullGraphType);
|
|
215
|
+
this.logger.log(`Registered callback "${handler}" for graph type "${fullGraphType}"`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
this.logger.log(`Registered ${callbackMetadata.length} callbacks for ${this.constructor.name}`);
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
this.logger.error(`Failed to register callbacks: ${error instanceof Error ? error.message : String(error)}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
async registerEndpoints() {
|
|
225
|
+
this.logger.log(`EndpointRegistry instance: ${!!this.endpointRegistry}`);
|
|
226
|
+
if (!this.endpointRegistry) {
|
|
227
|
+
this.logger.error("EndpointRegistry not injected! This should not happen.");
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
try {
|
|
231
|
+
const { getEndpointMetadata, createEndpointDescriptors } = await Promise.resolve().then(() => __importStar(require("../endpoint-registry/endpoint.decorators")));
|
|
232
|
+
const endpointMetadata = getEndpointMetadata(this.constructor);
|
|
233
|
+
if (!endpointMetadata || endpointMetadata.length === 0) {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
this.logger.log(`Found ${endpointMetadata.length} endpoints for ${this.constructor.name}`);
|
|
237
|
+
this.logger.debug(`Endpoint metadata:`, JSON.stringify(endpointMetadata, null, 2));
|
|
238
|
+
const fullGraphType = this.graphType;
|
|
239
|
+
const endpointDescriptors = createEndpointDescriptors(this, endpointMetadata);
|
|
240
|
+
for (const descriptor of endpointDescriptors) {
|
|
241
|
+
this.endpointRegistry.register(fullGraphType, descriptor);
|
|
242
|
+
this.logger.log(`Registered endpoint "${descriptor.name}" for graph type "${fullGraphType}"`);
|
|
243
|
+
}
|
|
244
|
+
this.logger.log(`Registered ${endpointDescriptors.length} endpoints for ${this.constructor.name}`);
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
this.logger.error(`Failed to register endpoints: ${error instanceof Error ? error.message : String(error)}`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
registerEndpointsManually(endpoints) {
|
|
251
|
+
if (!this.endpointRegistry) {
|
|
252
|
+
this.logger.error("EndpointRegistry not available");
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const fullGraphType = this.graphType;
|
|
256
|
+
for (const endpoint of endpoints) {
|
|
257
|
+
this.endpointRegistry.register(fullGraphType, endpoint);
|
|
258
|
+
this.logger.log(`Manually registered endpoint "${endpoint.name}" for graph type "${fullGraphType}"`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
exports.AbstractGraphBuilder = AbstractGraphBuilder;
|
|
263
|
+
__decorate([
|
|
264
|
+
(0, common_1.Inject)(callback_registry_1.CallbackRegistry),
|
|
265
|
+
__metadata("design:type", callback_registry_1.CallbackRegistry)
|
|
266
|
+
], AbstractGraphBuilder.prototype, "callbackRegistry", void 0);
|
|
267
|
+
__decorate([
|
|
268
|
+
(0, common_1.Inject)(endpoint_registry_1.EndpointRegistry),
|
|
269
|
+
__metadata("design:type", endpoint_registry_1.EndpointRegistry)
|
|
270
|
+
], AbstractGraphBuilder.prototype, "endpointRegistry", void 0);
|
|
271
|
+
let UniversalGraphService = UniversalGraphService_1 = class UniversalGraphService {
|
|
272
|
+
constructor(configService, builders, engine, endpointRegistry) {
|
|
273
|
+
this.configService = configService;
|
|
274
|
+
this.builders = builders;
|
|
275
|
+
this.engine = engine;
|
|
276
|
+
this.endpointRegistry = endpointRegistry;
|
|
277
|
+
this.logger = new common_1.Logger(UniversalGraphService_1.name);
|
|
278
|
+
this.activeGenerations = new Map();
|
|
279
|
+
this.logger.log("UniversalGraphService initialized");
|
|
280
|
+
}
|
|
281
|
+
async getSupportedGraphTypes() {
|
|
282
|
+
return this.builders.map(builder => {
|
|
283
|
+
return builder.graphType;
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
async generateAnswer(payload) {
|
|
287
|
+
const builder = this.getBuilderForType(payload.graphType);
|
|
288
|
+
const graph = await builder.buildGraph(payload);
|
|
289
|
+
const config = await builder.prepareConfig(payload);
|
|
290
|
+
const abortController = new AbortController();
|
|
291
|
+
this.registerActiveGeneration(payload.requestId, () => {
|
|
292
|
+
abortController.abort();
|
|
293
|
+
});
|
|
294
|
+
try {
|
|
295
|
+
const result = await this.engine.invokeGraph(graph, config, abortController.signal);
|
|
296
|
+
return {
|
|
297
|
+
requestId: payload.requestId,
|
|
298
|
+
text: result.text || "",
|
|
299
|
+
attachments: result.attachments || [],
|
|
300
|
+
metadata: result.metadata || {},
|
|
301
|
+
reasoningChains: result.reasoningChains || [],
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
finally {
|
|
305
|
+
this.unregisterActiveGeneration(payload.requestId);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
async streamAnswer(payload, onPartial) {
|
|
309
|
+
var _a, _b, _c;
|
|
310
|
+
this.logger.debug(`>>> Entering streamAnswer with requestId: ${payload.requestId}`);
|
|
311
|
+
const abortController = new AbortController();
|
|
312
|
+
try {
|
|
313
|
+
const builder = this.getBuilderForType(payload.graphType);
|
|
314
|
+
this.logger.debug(`Got builder for graph type: ${payload.graphType}`);
|
|
315
|
+
const graph = await builder.buildGraph(payload);
|
|
316
|
+
this.logger.debug(`Graph built for requestId: ${payload.requestId}`);
|
|
317
|
+
this.logger.debug(`Preparing config for requestId: ${payload.requestId}`);
|
|
318
|
+
const config = await builder.prepareConfig(payload);
|
|
319
|
+
this.logger.debug(`Config prepared`);
|
|
320
|
+
this.registerActiveGeneration(payload.requestId, () => {
|
|
321
|
+
abortController.abort();
|
|
322
|
+
});
|
|
323
|
+
this.logger.debug(`Active generation registered: ${payload.requestId}`);
|
|
324
|
+
this.logger.debug(`Calling engine.streamGraph for requestId: ${payload.requestId}`);
|
|
325
|
+
const result = await this.engine.streamGraph(graph, config, onPartial, abortController.signal);
|
|
326
|
+
this.logger.debug(`[STREAM-RESULT] Engine returned:`, {
|
|
327
|
+
hasText: !!result.text,
|
|
328
|
+
textLength: ((_a = result.text) === null || _a === void 0 ? void 0 : _a.length) || 0,
|
|
329
|
+
attachmentsCount: ((_b = result.attachments) === null || _b === void 0 ? void 0 : _b.length) || 0,
|
|
330
|
+
reasoningChainsCount: ((_c = result.reasoningChains) === null || _c === void 0 ? void 0 : _c.length) || 0,
|
|
331
|
+
resultKeys: Object.keys(result || {}),
|
|
332
|
+
});
|
|
333
|
+
return {
|
|
334
|
+
requestId: payload.requestId,
|
|
335
|
+
text: result.text || "",
|
|
336
|
+
attachments: result.attachments || [],
|
|
337
|
+
metadata: result.metadata || {},
|
|
338
|
+
reasoningChains: result.reasoningChains || [],
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
catch (error) {
|
|
342
|
+
this.logger.error(`Ошибка в streamAnswer: ${error.message}`);
|
|
343
|
+
this.logger.error(`Стектрейс: ${error.stack}`);
|
|
344
|
+
throw error;
|
|
345
|
+
}
|
|
346
|
+
finally {
|
|
347
|
+
abortController.abort();
|
|
348
|
+
this.unregisterActiveGeneration(payload.requestId);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
async healthCheck() {
|
|
352
|
+
try {
|
|
353
|
+
if (this.builders.length === 0) {
|
|
354
|
+
this.logger.warn("No builders registered");
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
return true;
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
this.logger.error(`Health check failed: ${error.message}`);
|
|
361
|
+
return false;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
async cancelGeneration(requestId) {
|
|
365
|
+
const generation = this.activeGenerations.get(requestId);
|
|
366
|
+
if (generation) {
|
|
367
|
+
generation.cancel();
|
|
368
|
+
this.activeGenerations.delete(requestId);
|
|
369
|
+
this.logger.log(`Cancelled generation for request: ${requestId}`);
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
this.logger.warn(`No active generation found for request: ${requestId}`);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
registerActiveGeneration(requestId, cancel) {
|
|
376
|
+
this.activeGenerations.set(requestId, { cancel });
|
|
377
|
+
setTimeout(() => {
|
|
378
|
+
if (this.activeGenerations.has(requestId)) {
|
|
379
|
+
this.activeGenerations.delete(requestId);
|
|
380
|
+
this.logger.debug(`Auto-cleaned generation for request: ${requestId}`);
|
|
381
|
+
}
|
|
382
|
+
}, 10 * 60 * 1000);
|
|
383
|
+
}
|
|
384
|
+
unregisterActiveGeneration(requestId) {
|
|
385
|
+
this.activeGenerations.delete(requestId);
|
|
386
|
+
}
|
|
387
|
+
async executeCallback(token, platform, platformContext) {
|
|
388
|
+
this.logger.debug(`Executing callback with token: ${token}`);
|
|
389
|
+
try {
|
|
390
|
+
const result = await this.executeCallbackFromDecorators(token, platform, platformContext);
|
|
391
|
+
if (result) {
|
|
392
|
+
return result;
|
|
393
|
+
}
|
|
394
|
+
return {
|
|
395
|
+
success: false,
|
|
396
|
+
error: "Callback handler not found",
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
catch (error) {
|
|
400
|
+
this.logger.error(`Error executing callback: ${error instanceof Error ? error.message : String(error)}`);
|
|
401
|
+
return {
|
|
402
|
+
success: false,
|
|
403
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
async executeCallbackFromDecorators(token, platform, platformContext) {
|
|
408
|
+
const { getCallbackMetadata, findCallbackMethod } = await Promise.resolve().then(() => __importStar(require("../decorators/callback.decorators")));
|
|
409
|
+
const { graphType, handler } = this.parseCallbackToken(token);
|
|
410
|
+
const builder = this.builders.find(b => b.graphType === graphType);
|
|
411
|
+
if (!builder) {
|
|
412
|
+
this.logger.warn(`No builder found for graph type: ${graphType}`);
|
|
413
|
+
return null;
|
|
414
|
+
}
|
|
415
|
+
const methodName = findCallbackMethod(builder.constructor, handler);
|
|
416
|
+
if (!methodName || typeof builder[methodName] !== "function") {
|
|
417
|
+
this.logger.warn(`No callback method found for handler: ${handler} in ${graphType}`);
|
|
418
|
+
return null;
|
|
419
|
+
}
|
|
420
|
+
const context = {
|
|
421
|
+
userId: (platformContext === null || platformContext === void 0 ? void 0 : platformContext.userId) || "unknown",
|
|
422
|
+
threadId: platformContext === null || platformContext === void 0 ? void 0 : platformContext.threadId,
|
|
423
|
+
agentId: platformContext === null || platformContext === void 0 ? void 0 : platformContext.agentId,
|
|
424
|
+
params: this.parseCallbackParams(token),
|
|
425
|
+
platform,
|
|
426
|
+
metadata: {
|
|
427
|
+
token,
|
|
428
|
+
platformContext,
|
|
429
|
+
graphType,
|
|
430
|
+
handler,
|
|
431
|
+
},
|
|
432
|
+
};
|
|
433
|
+
this.logger.debug(`Executing callback ${handler} on builder ${graphType}`);
|
|
434
|
+
const result = await builder[methodName](context);
|
|
435
|
+
return result;
|
|
436
|
+
}
|
|
437
|
+
parseCallbackToken(token) {
|
|
438
|
+
const parts = token.split("_");
|
|
439
|
+
if (parts.length < 4 || parts[0] !== "cb") {
|
|
440
|
+
throw new Error(`Invalid callback token format: ${token}`);
|
|
441
|
+
}
|
|
442
|
+
const graphName = parts[1];
|
|
443
|
+
const handler = parts[2];
|
|
444
|
+
const graphType = `${graphName}::1.0.0`;
|
|
445
|
+
return { graphType, handler };
|
|
446
|
+
}
|
|
447
|
+
parseCallbackParams(token) {
|
|
448
|
+
const parts = token.split("_");
|
|
449
|
+
if (parts.length < 4) {
|
|
450
|
+
return {};
|
|
451
|
+
}
|
|
452
|
+
try {
|
|
453
|
+
const encodedParams = parts.slice(3).join("_");
|
|
454
|
+
const decodedParams = Buffer.from(encodedParams, "base64url").toString("utf8");
|
|
455
|
+
return JSON.parse(decodedParams);
|
|
456
|
+
}
|
|
457
|
+
catch (error) {
|
|
458
|
+
this.logger.warn(`Failed to parse callback params from token: ${token}`, error);
|
|
459
|
+
return {};
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
async callEndpoint(graphType, endpointName, context) {
|
|
463
|
+
this.logger.debug(`Calling endpoint "${endpointName}" for graph "${graphType}"`);
|
|
464
|
+
return await this.endpointRegistry.call(graphType, endpointName, context);
|
|
465
|
+
}
|
|
466
|
+
listEndpoints(graphType) {
|
|
467
|
+
return this.endpointRegistry.list(graphType);
|
|
468
|
+
}
|
|
469
|
+
listGraphTypesWithEndpoints() {
|
|
470
|
+
return this.endpointRegistry.listGraphTypes();
|
|
471
|
+
}
|
|
472
|
+
getBuilderForType(graphType) {
|
|
473
|
+
const builder = this.builders.find(b => b.graphType === graphType);
|
|
474
|
+
if (!builder) {
|
|
475
|
+
throw new Error(`No builder found for graph type: ${graphType}`);
|
|
476
|
+
}
|
|
477
|
+
return builder;
|
|
478
|
+
}
|
|
479
|
+
};
|
|
480
|
+
exports.UniversalGraphService = UniversalGraphService;
|
|
481
|
+
exports.UniversalGraphService = UniversalGraphService = UniversalGraphService_1 = __decorate([
|
|
482
|
+
(0, common_1.Injectable)(),
|
|
483
|
+
__param(1, (0, common_1.Inject)("GRAPH_BUILDERS")),
|
|
484
|
+
__param(2, (0, common_1.Inject)("GRAPH_ENGINE")),
|
|
485
|
+
__param(3, (0, common_1.Inject)(endpoint_registry_1.EndpointRegistry)),
|
|
486
|
+
__metadata("design:paramtypes", [config_1.ConfigService, Array, Object, endpoint_registry_1.EndpointRegistry])
|
|
487
|
+
], UniversalGraphService);
|
|
488
|
+
//# sourceMappingURL=abstract-graph.builder.js.map
|