@memberjunction/server 5.21.0 → 5.23.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.
Files changed (50) hide show
  1. package/README.md +44 -0
  2. package/dist/agents/skip-sdk.d.ts.map +1 -1
  3. package/dist/agents/skip-sdk.js +32 -2
  4. package/dist/agents/skip-sdk.js.map +1 -1
  5. package/dist/generated/generated.d.ts +172 -4
  6. package/dist/generated/generated.d.ts.map +1 -1
  7. package/dist/generated/generated.js +931 -2
  8. package/dist/generated/generated.js.map +1 -1
  9. package/dist/index.d.ts +6 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +10 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/resolvers/AutotagPipelineResolver.d.ts +21 -0
  14. package/dist/resolvers/AutotagPipelineResolver.d.ts.map +1 -0
  15. package/dist/resolvers/AutotagPipelineResolver.js +147 -0
  16. package/dist/resolvers/AutotagPipelineResolver.js.map +1 -0
  17. package/dist/resolvers/ClientToolRequestResolver.d.ts +43 -0
  18. package/dist/resolvers/ClientToolRequestResolver.d.ts.map +1 -0
  19. package/dist/resolvers/ClientToolRequestResolver.js +161 -0
  20. package/dist/resolvers/ClientToolRequestResolver.js.map +1 -0
  21. package/dist/resolvers/FetchEntityVectorsResolver.d.ts +29 -0
  22. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -0
  23. package/dist/resolvers/FetchEntityVectorsResolver.js +218 -0
  24. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -0
  25. package/dist/resolvers/PipelineProgressResolver.d.ts +33 -0
  26. package/dist/resolvers/PipelineProgressResolver.d.ts.map +1 -0
  27. package/dist/resolvers/PipelineProgressResolver.js +138 -0
  28. package/dist/resolvers/PipelineProgressResolver.js.map +1 -0
  29. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  30. package/dist/resolvers/RunAIAgentResolver.js +7 -5
  31. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  32. package/dist/resolvers/SearchKnowledgeResolver.d.ts +85 -0
  33. package/dist/resolvers/SearchKnowledgeResolver.d.ts.map +1 -0
  34. package/dist/resolvers/SearchKnowledgeResolver.js +587 -0
  35. package/dist/resolvers/SearchKnowledgeResolver.js.map +1 -0
  36. package/dist/resolvers/VectorizeEntityResolver.d.ts +21 -0
  37. package/dist/resolvers/VectorizeEntityResolver.d.ts.map +1 -0
  38. package/dist/resolvers/VectorizeEntityResolver.js +134 -0
  39. package/dist/resolvers/VectorizeEntityResolver.js.map +1 -0
  40. package/package.json +63 -62
  41. package/src/agents/skip-sdk.ts +31 -2
  42. package/src/generated/generated.ts +650 -7
  43. package/src/index.ts +13 -0
  44. package/src/resolvers/AutotagPipelineResolver.ts +146 -0
  45. package/src/resolvers/ClientToolRequestResolver.ts +128 -0
  46. package/src/resolvers/FetchEntityVectorsResolver.ts +234 -0
  47. package/src/resolvers/PipelineProgressResolver.ts +107 -0
  48. package/src/resolvers/RunAIAgentResolver.ts +7 -5
  49. package/src/resolvers/SearchKnowledgeResolver.ts +614 -0
  50. package/src/resolvers/VectorizeEntityResolver.ts +123 -0
@@ -0,0 +1,134 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { Resolver, Mutation, Arg, Ctx, ObjectType, Field, Float } from 'type-graphql';
14
+ import { LogError, LogStatus } from '@memberjunction/core';
15
+ import { ResolverBase } from '../generic/ResolverBase.js';
16
+ import { EntityVectorSyncer } from '@memberjunction/ai-vector-sync';
17
+ import { PubSubManager } from '../generic/PubSubManager.js';
18
+ import { v4 as uuidv4 } from 'uuid';
19
+ const PIPELINE_PROGRESS_TOPIC = 'PIPELINE_PROGRESS';
20
+ let VectorizeEntityResult = class VectorizeEntityResult {
21
+ };
22
+ __decorate([
23
+ Field(),
24
+ __metadata("design:type", Boolean)
25
+ ], VectorizeEntityResult.prototype, "Success", void 0);
26
+ __decorate([
27
+ Field({ nullable: true }),
28
+ __metadata("design:type", String)
29
+ ], VectorizeEntityResult.prototype, "Status", void 0);
30
+ __decorate([
31
+ Field({ nullable: true }),
32
+ __metadata("design:type", String)
33
+ ], VectorizeEntityResult.prototype, "ErrorMessage", void 0);
34
+ __decorate([
35
+ Field({ nullable: true }),
36
+ __metadata("design:type", String)
37
+ ], VectorizeEntityResult.prototype, "PipelineRunID", void 0);
38
+ VectorizeEntityResult = __decorate([
39
+ ObjectType()
40
+ ], VectorizeEntityResult);
41
+ export { VectorizeEntityResult };
42
+ let VectorizeEntityResolver = class VectorizeEntityResolver extends ResolverBase {
43
+ async VectorizeEntity(entityDocumentID, entityID, batchSize, { userPayload } = {}) {
44
+ try {
45
+ const currentUser = this.GetUserFromPayload(userPayload);
46
+ if (!currentUser) {
47
+ return { Success: false, Status: 'Error', ErrorMessage: 'Unable to determine current user' };
48
+ }
49
+ const pipelineRunID = uuidv4();
50
+ LogStatus(`VectorizeEntity: starting pipeline ${pipelineRunID} for entity document ${entityDocumentID}`);
51
+ // Fire-and-forget: start the pipeline in the background and return immediately.
52
+ // Progress is delivered to the client via the PipelineProgress GraphQL subscription.
53
+ this.runPipelineInBackground(pipelineRunID, entityDocumentID, entityID, batchSize, currentUser);
54
+ return {
55
+ Success: true,
56
+ Status: 'Started',
57
+ PipelineRunID: pipelineRunID,
58
+ };
59
+ }
60
+ catch (error) {
61
+ const msg = error instanceof Error ? error.message : String(error);
62
+ LogError(`VectorizeEntity mutation failed: ${msg}`);
63
+ return {
64
+ Success: false,
65
+ Status: 'Error',
66
+ ErrorMessage: msg
67
+ };
68
+ }
69
+ }
70
+ /**
71
+ * Runs the vectorization pipeline in the background, publishing progress
72
+ * updates via PubSub so the client can subscribe via PipelineProgress.
73
+ */
74
+ async runPipelineInBackground(pipelineRunID, entityDocumentID, entityID, batchSize, currentUser) {
75
+ try {
76
+ const syncer = new EntityVectorSyncer();
77
+ await syncer.Config(true, currentUser);
78
+ const params = {
79
+ entityDocumentID,
80
+ entityID,
81
+ listBatchCount: batchSize || 50,
82
+ VectorizeBatchCount: batchSize || 50,
83
+ UpsertBatchCount: batchSize || 50,
84
+ OnProgress: (update) => {
85
+ LogStatus(`VectorizeEntity pipeline ${pipelineRunID}: ${update.Stage} ${update.ProcessedRecords}/${update.TotalRecords} (${update.PercentComplete}%)`);
86
+ this.publishProgress(pipelineRunID, update);
87
+ },
88
+ };
89
+ const result = await syncer.VectorizeEntity(params, currentUser);
90
+ LogStatus(`VectorizeEntity pipeline ${pipelineRunID} complete: success=${result.success}`);
91
+ }
92
+ catch (error) {
93
+ const msg = error instanceof Error ? error.message : String(error);
94
+ LogError(`VectorizeEntity pipeline ${pipelineRunID} failed: ${msg}`);
95
+ // Publish error notification so the client knows the pipeline failed
96
+ this.publishProgress(pipelineRunID, {
97
+ TotalRecords: 0,
98
+ ProcessedRecords: 0,
99
+ Stage: 'error',
100
+ PercentComplete: 0,
101
+ ElapsedMs: 0,
102
+ });
103
+ }
104
+ }
105
+ /**
106
+ * Publish a progress update to the PipelineProgress subscription topic.
107
+ */
108
+ publishProgress(pipelineRunID, update) {
109
+ const notification = {
110
+ PipelineRunID: pipelineRunID,
111
+ Stage: update.Stage,
112
+ TotalItems: update.TotalRecords,
113
+ ProcessedItems: update.ProcessedRecords,
114
+ ElapsedMs: update.ElapsedMs,
115
+ PercentComplete: update.PercentComplete,
116
+ };
117
+ PubSubManager.Instance.Publish(PIPELINE_PROGRESS_TOPIC, { ...notification });
118
+ }
119
+ };
120
+ __decorate([
121
+ Mutation(() => VectorizeEntityResult),
122
+ __param(0, Arg('entityDocumentID')),
123
+ __param(1, Arg('entityID')),
124
+ __param(2, Arg('batchSize', () => Float, { nullable: true })),
125
+ __param(3, Ctx()),
126
+ __metadata("design:type", Function),
127
+ __metadata("design:paramtypes", [String, String, Number, Object]),
128
+ __metadata("design:returntype", Promise)
129
+ ], VectorizeEntityResolver.prototype, "VectorizeEntity", null);
130
+ VectorizeEntityResolver = __decorate([
131
+ Resolver()
132
+ ], VectorizeEntityResolver);
133
+ export { VectorizeEntityResolver };
134
+ //# sourceMappingURL=VectorizeEntityResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VectorizeEntityResolver.js","sourceRoot":"","sources":["../../src/resolvers/VectorizeEntityResolver.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/server",
3
- "version": "5.21.0",
3
+ "version": "5.23.0",
4
4
  "description": "MemberJunction: This project provides API access via GraphQL to the common data store.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./src/index.ts",
@@ -27,67 +27,68 @@
27
27
  "@as-integrations/express5": "^1.0.0",
28
28
  "@graphql-tools/schema": "latest",
29
29
  "@graphql-tools/utils": "^11.0.0",
30
- "@memberjunction/actions": "5.21.0",
31
- "@memberjunction/actions-apollo": "5.21.0",
32
- "@memberjunction/actions-base": "5.21.0",
33
- "@memberjunction/actions-bizapps-accounting": "5.21.0",
34
- "@memberjunction/actions-bizapps-crm": "5.21.0",
35
- "@memberjunction/actions-bizapps-formbuilders": "5.21.0",
36
- "@memberjunction/actions-bizapps-lms": "5.21.0",
37
- "@memberjunction/actions-bizapps-social": "5.21.0",
38
- "@memberjunction/ai": "5.21.0",
39
- "@memberjunction/ai-agent-manager": "5.21.0",
40
- "@memberjunction/ai-agent-manager-actions": "5.21.0",
41
- "@memberjunction/ai-agents": "5.21.0",
42
- "@memberjunction/ai-core-plus": "5.21.0",
43
- "@memberjunction/ai-mcp-client": "5.21.0",
44
- "@memberjunction/ai-prompts": "5.21.0",
45
- "@memberjunction/ai-provider-bundle": "5.21.0",
46
- "@memberjunction/ai-vectors-pinecone": "5.21.0",
47
- "@memberjunction/aiengine": "5.21.0",
48
- "@memberjunction/api-keys": "5.21.0",
49
- "@memberjunction/auth-providers": "5.21.0",
50
- "@memberjunction/codegen-lib": "5.21.0",
51
- "@memberjunction/communication-ms-graph": "5.21.0",
52
- "@memberjunction/communication-sendgrid": "5.21.0",
53
- "@memberjunction/communication-types": "5.21.0",
54
- "@memberjunction/component-registry-client-sdk": "5.21.0",
55
- "@memberjunction/computer-use-engine": "5.21.0",
56
- "@memberjunction/config": "5.21.0",
57
- "@memberjunction/core": "5.21.0",
58
- "@memberjunction/core-actions": "5.21.0",
59
- "@memberjunction/core-entities": "5.21.0",
60
- "@memberjunction/core-entities-server": "5.21.0",
61
- "@memberjunction/data-context": "5.21.0",
62
- "@memberjunction/data-context-server": "5.21.0",
63
- "@memberjunction/doc-utils": "5.21.0",
64
- "@memberjunction/encryption": "5.21.0",
65
- "@memberjunction/entity-communications-base": "5.21.0",
66
- "@memberjunction/entity-communications-server": "5.21.0",
67
- "@memberjunction/external-change-detection": "5.21.0",
68
- "@memberjunction/generic-database-provider": "5.21.0",
69
- "@memberjunction/global": "5.21.0",
70
- "@memberjunction/graphql-dataprovider": "5.21.0",
71
- "@memberjunction/integration-engine": "5.21.0",
72
- "@memberjunction/integration-schema-builder": "5.21.0",
73
- "@memberjunction/interactive-component-types": "5.21.0",
74
- "@memberjunction/notifications": "5.21.0",
75
- "@memberjunction/postgresql-dataprovider": "5.21.0",
76
- "@memberjunction/queue": "5.21.0",
77
- "@memberjunction/redis-provider": "5.21.0",
78
- "@memberjunction/scheduling-actions": "5.21.0",
79
- "@memberjunction/scheduling-base-types": "5.21.0",
80
- "@memberjunction/scheduling-engine": "5.21.0",
81
- "@memberjunction/scheduling-engine-base": "5.21.0",
82
- "@memberjunction/server-extensions-core": "5.21.0",
83
- "@memberjunction/skip-types": "5.21.0",
84
- "@memberjunction/sql-dialect": "5.21.0",
85
- "@memberjunction/sqlserver-dataprovider": "5.21.0",
86
- "@memberjunction/storage": "5.21.0",
87
- "@memberjunction/templates": "5.21.0",
88
- "@memberjunction/testing-engine": "5.21.0",
89
- "@memberjunction/testing-engine-base": "5.21.0",
90
- "@memberjunction/version-history": "5.21.0",
30
+ "@memberjunction/actions": "5.23.0",
31
+ "@memberjunction/actions-apollo": "5.23.0",
32
+ "@memberjunction/actions-base": "5.23.0",
33
+ "@memberjunction/actions-bizapps-accounting": "5.23.0",
34
+ "@memberjunction/actions-bizapps-crm": "5.23.0",
35
+ "@memberjunction/actions-bizapps-formbuilders": "5.23.0",
36
+ "@memberjunction/actions-bizapps-lms": "5.23.0",
37
+ "@memberjunction/actions-bizapps-social": "5.23.0",
38
+ "@memberjunction/ai": "5.23.0",
39
+ "@memberjunction/ai-agent-manager": "5.23.0",
40
+ "@memberjunction/ai-agent-manager-actions": "5.23.0",
41
+ "@memberjunction/ai-agents": "5.23.0",
42
+ "@memberjunction/ai-core-plus": "5.23.0",
43
+ "@memberjunction/ai-mcp-client": "5.23.0",
44
+ "@memberjunction/ai-prompts": "5.23.0",
45
+ "@memberjunction/ai-provider-bundle": "5.23.0",
46
+ "@memberjunction/ai-vector-sync": "5.23.0",
47
+ "@memberjunction/ai-vectors-pinecone": "5.23.0",
48
+ "@memberjunction/aiengine": "5.23.0",
49
+ "@memberjunction/api-keys": "5.23.0",
50
+ "@memberjunction/auth-providers": "5.23.0",
51
+ "@memberjunction/codegen-lib": "5.23.0",
52
+ "@memberjunction/communication-ms-graph": "5.23.0",
53
+ "@memberjunction/communication-sendgrid": "5.23.0",
54
+ "@memberjunction/communication-types": "5.23.0",
55
+ "@memberjunction/component-registry-client-sdk": "5.23.0",
56
+ "@memberjunction/computer-use-engine": "5.23.0",
57
+ "@memberjunction/config": "5.23.0",
58
+ "@memberjunction/core": "5.23.0",
59
+ "@memberjunction/core-actions": "5.23.0",
60
+ "@memberjunction/core-entities": "5.23.0",
61
+ "@memberjunction/core-entities-server": "5.23.0",
62
+ "@memberjunction/data-context": "5.23.0",
63
+ "@memberjunction/data-context-server": "5.23.0",
64
+ "@memberjunction/doc-utils": "5.23.0",
65
+ "@memberjunction/encryption": "5.23.0",
66
+ "@memberjunction/entity-communications-base": "5.23.0",
67
+ "@memberjunction/entity-communications-server": "5.23.0",
68
+ "@memberjunction/external-change-detection": "5.23.0",
69
+ "@memberjunction/generic-database-provider": "5.23.0",
70
+ "@memberjunction/global": "5.23.0",
71
+ "@memberjunction/graphql-dataprovider": "5.23.0",
72
+ "@memberjunction/integration-engine": "5.23.0",
73
+ "@memberjunction/integration-schema-builder": "5.23.0",
74
+ "@memberjunction/interactive-component-types": "5.23.0",
75
+ "@memberjunction/notifications": "5.23.0",
76
+ "@memberjunction/postgresql-dataprovider": "5.23.0",
77
+ "@memberjunction/queue": "5.23.0",
78
+ "@memberjunction/redis-provider": "5.23.0",
79
+ "@memberjunction/scheduling-actions": "5.23.0",
80
+ "@memberjunction/scheduling-base-types": "5.23.0",
81
+ "@memberjunction/scheduling-engine": "5.23.0",
82
+ "@memberjunction/scheduling-engine-base": "5.23.0",
83
+ "@memberjunction/server-extensions-core": "5.23.0",
84
+ "@memberjunction/skip-types": "5.23.0",
85
+ "@memberjunction/sql-dialect": "5.23.0",
86
+ "@memberjunction/sqlserver-dataprovider": "5.23.0",
87
+ "@memberjunction/storage": "5.23.0",
88
+ "@memberjunction/templates": "5.23.0",
89
+ "@memberjunction/testing-engine": "5.23.0",
90
+ "@memberjunction/testing-engine-base": "5.23.0",
91
+ "@memberjunction/version-history": "5.23.0",
91
92
  "@types/compression": "^1.8.1",
92
93
  "@types/cors": "^2.8.19",
93
94
  "@types/jsonwebtoken": "9.0.10",
@@ -294,8 +294,9 @@ export class SkipSDK {
294
294
  LogError(`[SkipSDK] Error calling Skip API: ${error}`);
295
295
 
296
296
  // Provide user-friendly error messages for common failures
297
- let userFriendlyError = String(error);
298
- const errorStr = String(error).toLowerCase();
297
+ const rawError = error instanceof Error ? error.message : String(error);
298
+ let userFriendlyError = rawError;
299
+ const errorStr = rawError.toLowerCase();
299
300
 
300
301
  if (errorStr.includes('stream error') || errorStr.includes('aborted') || errorStr.includes('econnreset')) {
301
302
  userFriendlyError = 'The Skip analysis service became unavailable during processing. Please try again.';
@@ -778,6 +779,34 @@ export class SkipSDK {
778
779
  };
779
780
 
780
781
  const req = requestFn(options, (res) => {
782
+ // Check for non-2xx HTTP status codes before attempting SSE parsing.
783
+ // The Skip API returns JSON error bodies for auth/validation failures (401, 403, etc.)
784
+ // which won't contain SSE `data:` lines, resulting in an empty events array
785
+ // and the misleading "No response received from Skip API" error.
786
+ if (res.statusCode && (res.statusCode < 200 || res.statusCode >= 300)) {
787
+ let errorBody = '';
788
+ res.on('data', (chunk: Buffer) => { errorBody += chunk.toString(); });
789
+ res.on('end', () => {
790
+ let errorMessage = `Skip API returned HTTP ${res.statusCode}`;
791
+ try {
792
+ const parsed = JSON.parse(errorBody);
793
+ if (parsed.message) {
794
+ errorMessage = parsed.message;
795
+ } else if (parsed.error) {
796
+ errorMessage = parsed.error;
797
+ }
798
+ } catch {
799
+ // Non-JSON body — use raw text if available
800
+ if (errorBody.trim()) {
801
+ errorMessage += `: ${errorBody.trim().substring(0, 200)}`;
802
+ }
803
+ }
804
+ LogError(`[SkipSDK] HTTP ${res.statusCode} from ${url}: ${errorMessage}`);
805
+ reject(new Error(errorMessage));
806
+ });
807
+ return;
808
+ }
809
+
781
810
  const gunzip = createGunzip();
782
811
  const stream = res.headers['content-encoding'] === 'gzip' ? res.pipe(gunzip) : res;
783
812