@memberjunction/server 6.1.4 → 6.1.6
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 +30 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/agentSessions/SessionManager.d.ts +5 -2
- package/dist/agentSessions/SessionManager.d.ts.map +1 -1
- package/dist/agentSessions/SessionManager.js +17 -8
- package/dist/agentSessions/SessionManager.js.map +1 -1
- package/dist/agentSessions/SessionRunIDVerifier.d.ts +63 -0
- package/dist/agentSessions/SessionRunIDVerifier.d.ts.map +1 -0
- package/dist/agentSessions/SessionRunIDVerifier.js +129 -0
- package/dist/agentSessions/SessionRunIDVerifier.js.map +1 -0
- package/dist/agentSessions/index.d.ts +1 -0
- package/dist/agentSessions/index.d.ts.map +1 -1
- package/dist/agentSessions/index.js +1 -0
- package/dist/agentSessions/index.js.map +1 -1
- package/dist/auth/actionAuthorization.d.ts +40 -0
- package/dist/auth/actionAuthorization.d.ts.map +1 -0
- package/dist/auth/actionAuthorization.js +94 -0
- package/dist/auth/actionAuthorization.js.map +1 -0
- package/dist/auth/exampleNewUserSubClass.js +2 -1
- package/dist/auth/exampleNewUserSubClass.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.d.ts +17 -15
- package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.js +55 -38
- package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
- package/dist/auth/magicLink/magicLinkCore.d.ts +14 -33
- package/dist/auth/magicLink/magicLinkCore.d.ts.map +1 -1
- package/dist/auth/magicLink/magicLinkCore.js +20 -52
- package/dist/auth/magicLink/magicLinkCore.js.map +1 -1
- package/dist/auth/newUsers.d.ts.map +1 -1
- package/dist/auth/newUsers.js +15 -11
- package/dist/auth/newUsers.js.map +1 -1
- package/dist/context.d.ts +6 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +24 -34
- package/dist/context.js.map +1 -1
- package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
- package/dist/generated/graphql-schemas/__mj.js +3417 -3428
- package/dist/generated/graphql-schemas/__mj.js.map +1 -1
- package/dist/generic/CacheInvalidationResolver.d.ts +44 -8
- package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
- package/dist/generic/CacheInvalidationResolver.js +59 -19
- package/dist/generic/CacheInvalidationResolver.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +95 -11
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +186 -76
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/generic/RunViewResolver.d.ts.map +1 -1
- package/dist/generic/RunViewResolver.js +12 -0
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -45
- package/dist/index.js.map +1 -1
- package/dist/isolatedProvider.d.ts +20 -0
- package/dist/isolatedProvider.d.ts.map +1 -0
- package/dist/isolatedProvider.js +22 -0
- package/dist/isolatedProvider.js.map +1 -0
- package/dist/multiTenancy/index.d.ts.map +1 -1
- package/dist/multiTenancy/index.js +22 -2
- package/dist/multiTenancy/index.js.map +1 -1
- package/dist/postgresqlCompat.d.ts +8 -0
- package/dist/postgresqlCompat.d.ts.map +1 -0
- package/dist/postgresqlCompat.js +19 -0
- package/dist/postgresqlCompat.js.map +1 -0
- package/dist/postgresqlPoolSettings.d.ts +108 -0
- package/dist/postgresqlPoolSettings.d.ts.map +1 -0
- package/dist/postgresqlPoolSettings.js +134 -0
- package/dist/postgresqlPoolSettings.js.map +1 -0
- package/dist/realtimeWidget/widgetGuestElevation.d.ts +4 -2
- package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.js +4 -2
- package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
- package/dist/resolvers/ActionResolver.d.ts +31 -5
- package/dist/resolvers/ActionResolver.d.ts.map +1 -1
- package/dist/resolvers/ActionResolver.js +75 -14
- package/dist/resolvers/ActionResolver.js.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.d.ts +35 -17
- package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.js +92 -166
- package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
- package/dist/resolvers/DatasetResolver.d.ts +24 -3
- package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
- package/dist/resolvers/DatasetResolver.js +57 -8
- package/dist/resolvers/DatasetResolver.js.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.d.ts +8 -23
- package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.js +11 -48
- package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
- package/dist/resolvers/FetchEntityVectorsResolver.js +2 -2
- package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.d.ts +33 -7
- package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.js +117 -38
- package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +13 -1
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.js +2 -1
- package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts +83 -22
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +174 -72
- package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts +2 -0
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js +5 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +2 -1
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTemplateResolver.js +12 -11
- package/dist/resolvers/RunTemplateResolver.js.map +1 -1
- package/dist/resolvers/SearchKnowledgeResolver.d.ts +1 -0
- package/dist/resolvers/SearchKnowledgeResolver.d.ts.map +1 -1
- package/dist/resolvers/SearchKnowledgeResolver.js +5 -0
- package/dist/resolvers/SearchKnowledgeResolver.js.map +1 -1
- package/dist/resolvers/SearchKnowledgeSystemUserResolver.d.ts.map +1 -1
- package/dist/resolvers/SearchKnowledgeSystemUserResolver.js +1 -0
- package/dist/resolvers/SearchKnowledgeSystemUserResolver.js.map +1 -1
- package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncDataResolver.js +6 -2
- package/dist/resolvers/SyncDataResolver.js.map +1 -1
- package/dist/resolvers/VectorizeEntityResolver.d.ts +1 -1
- package/dist/resolvers/VectorizeEntityResolver.d.ts.map +1 -1
- package/dist/resolvers/VectorizeEntityResolver.js +14 -10
- package/dist/resolvers/VectorizeEntityResolver.js.map +1 -1
- package/dist/resolvers/adhocTimeout.d.ts +7 -0
- package/dist/resolvers/adhocTimeout.d.ts.map +1 -0
- package/dist/resolvers/adhocTimeout.js +12 -0
- package/dist/resolvers/adhocTimeout.js.map +1 -0
- package/dist/rest/ViewOperationsHandler.d.ts +3 -1
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +29 -17
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/services/TaskGraphActionRunner.d.ts +21 -8
- package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphActionRunner.js +43 -16
- package/dist/services/TaskGraphActionRunner.js.map +1 -1
- package/package.json +92 -92
- package/src/__tests__/ActionResolver.authorization.test.ts +353 -0
- package/src/__tests__/AdhocQueryResolver.bugs.test.ts +14 -35
- package/src/__tests__/AdhocQueryResolver.pagination.test.ts +6 -2
- package/src/__tests__/AdhocQueryResolver.scopeGuard.test.ts +3 -3
- package/src/__tests__/AdhocQueryResolver.sqlAuthorizer.test.ts +104 -0
- package/src/__tests__/DatasetResolver.itemFilters.test.ts +201 -0
- package/src/__tests__/EntityRecordNameResolver.fieldSecurity.test.ts +27 -72
- package/src/__tests__/EntityRecordNameResolver.rowSecurity.test.ts +152 -0
- package/src/__tests__/GetDataContextDataResolver.sqlItems.test.ts +416 -0
- package/src/__tests__/ListOperationsResolver.adhocScreen.test.ts +137 -0
- package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +383 -0
- package/src/__tests__/RealtimeClientSessionResolver.test.ts +310 -31
- package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +129 -0
- package/src/__tests__/ResolverBase.adhocReadScope.test.ts +227 -0
- package/src/__tests__/ResolverBase.aggregateScreen.test.ts +174 -0
- package/src/__tests__/ResolverBase.balancedClause.test.ts +155 -0
- package/src/__tests__/ResolverBase.clauseUnscopedRead.test.ts +127 -0
- package/src/__tests__/ResolverBase.filterEscaping.test.ts +24 -2
- package/src/__tests__/ResolverBase.isaPromotionCreate.test.ts +412 -0
- package/src/__tests__/RunTemplateResolver.test.ts +132 -0
- package/src/__tests__/RunViewResolver.cacheCheckScreen.test.ts +165 -0
- package/src/__tests__/SessionManager.test.ts +94 -17
- package/src/__tests__/SessionRunIDVerifier.test.ts +251 -0
- package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +131 -0
- package/src/__tests__/TaskGraphActionRunner.storableOutputs.test.ts +76 -0
- package/src/__tests__/UpdateMJDataContextItem.oldValues.test.ts +220 -0
- package/src/__tests__/VectorizeEntityResolver.test.ts +106 -0
- package/src/__tests__/ViewOperationsHandler.clauseScreen.test.ts +157 -0
- package/src/__tests__/actionAuthorization.test.ts +130 -0
- package/src/__tests__/adhocTimeoutClamp.test.ts +26 -0
- package/src/__tests__/cacheInvalidationRecordData.test.ts +64 -0
- package/src/__tests__/isolatedProviderTransactions.test.ts +169 -0
- package/src/__tests__/magicLink.test.ts +15 -76
- package/src/__tests__/magicLinkService.consume.test.ts +230 -0
- package/src/__tests__/magicLinkService.provisionLog.test.ts +5 -0
- package/src/__tests__/multiTenancy.postgresRewrite.test.ts +181 -0
- package/src/__tests__/multiTenancy.security.test.ts +51 -0
- package/src/__tests__/multiTenancy.test.ts +1 -1
- package/src/__tests__/newUsers.test.ts +62 -5
- package/src/__tests__/postgresqlPoolSettings.test.ts +131 -0
- package/src/__tests__/translateBracketsToPG.test.ts +20 -0
- package/src/agentSessions/SessionManager.ts +23 -25
- package/src/agentSessions/SessionRunIDVerifier.ts +171 -0
- package/src/agentSessions/index.ts +1 -0
- package/src/auth/actionAuthorization.ts +119 -0
- package/src/auth/exampleNewUserSubClass.ts +2 -2
- package/src/auth/magicLink/MagicLinkService.ts +61 -39
- package/src/auth/magicLink/magicLinkCore.ts +19 -56
- package/src/auth/newUsers.ts +15 -11
- package/src/context.ts +25 -34
- package/src/generated/graphql-schemas/__mj.ts +3417 -3428
- package/src/generic/CacheInvalidationResolver.ts +74 -19
- package/src/generic/ResolverBase.ts +207 -80
- package/src/generic/RunViewResolver.ts +17 -0
- package/src/index.ts +49 -46
- package/src/isolatedProvider.ts +22 -0
- package/src/multiTenancy/index.ts +24 -2
- package/src/postgresqlCompat.ts +21 -0
- package/src/postgresqlPoolSettings.ts +213 -0
- package/src/realtimeWidget/widgetGuestElevation.ts +4 -2
- package/src/resolvers/ActionResolver.ts +84 -21
- package/src/resolvers/AdhocQueryResolver.ts +105 -187
- package/src/resolvers/DatasetResolver.ts +70 -10
- package/src/resolvers/EntityRecordNameResolver.ts +11 -52
- package/src/resolvers/FetchEntityVectorsResolver.ts +2 -2
- package/src/resolvers/GetDataContextDataResolver.ts +139 -41
- package/src/resolvers/GetDataResolver.ts +14 -1
- package/src/resolvers/QuerySystemUserResolver.ts +2 -1
- package/src/resolvers/RealtimeClientSessionResolver.ts +196 -77
- package/src/resolvers/RemoteBrowserActionResolver.ts +11 -1
- package/src/resolvers/RunAIAgentResolver.ts +4 -1
- package/src/resolvers/RunTemplateResolver.ts +13 -12
- package/src/resolvers/SearchKnowledgeResolver.ts +4 -0
- package/src/resolvers/SearchKnowledgeSystemUserResolver.ts +1 -0
- package/src/resolvers/SyncDataResolver.ts +6 -2
- package/src/resolvers/VectorizeEntityResolver.ts +16 -11
- package/src/resolvers/__tests__/GetDataResolver.validation.test.ts +95 -0
- package/src/resolvers/adhocTimeout.ts +12 -0
- package/src/rest/ViewOperationsHandler.ts +37 -18
- package/src/services/TaskGraphActionRunner.ts +45 -16
- package/dist/resolvers/adhoc-query-helpers.d.ts +0 -27
- package/dist/resolvers/adhoc-query-helpers.d.ts.map +0 -1
- package/dist/resolvers/adhoc-query-helpers.js +0 -42
- package/dist/resolvers/adhoc-query-helpers.js.map +0 -1
- package/src/__tests__/adhoc-query-helpers.test.ts +0 -50
- package/src/resolvers/adhoc-query-helpers.ts +0 -50
|
@@ -16,23 +16,24 @@ import { ResolverBase } from '../generic/ResolverBase.js';
|
|
|
16
16
|
import { EntityVectorSyncer } from '@memberjunction/ai-vector-sync';
|
|
17
17
|
import { PubSubManager } from '../generic/PubSubManager.js';
|
|
18
18
|
import { v4 as uuidv4 } from 'uuid';
|
|
19
|
+
import { GetReadWriteProvider } from '../util.js';
|
|
19
20
|
const PIPELINE_PROGRESS_TOPIC = 'PIPELINE_PROGRESS';
|
|
20
21
|
let VectorizeEntityResult = class VectorizeEntityResult {
|
|
21
22
|
};
|
|
22
23
|
__decorate([
|
|
23
|
-
Field(),
|
|
24
|
+
Field(() => Boolean),
|
|
24
25
|
__metadata("design:type", Boolean)
|
|
25
26
|
], VectorizeEntityResult.prototype, "Success", void 0);
|
|
26
27
|
__decorate([
|
|
27
|
-
Field({ nullable: true }),
|
|
28
|
+
Field(() => String, { nullable: true }),
|
|
28
29
|
__metadata("design:type", String)
|
|
29
30
|
], VectorizeEntityResult.prototype, "Status", void 0);
|
|
30
31
|
__decorate([
|
|
31
|
-
Field({ nullable: true }),
|
|
32
|
+
Field(() => String, { nullable: true }),
|
|
32
33
|
__metadata("design:type", String)
|
|
33
34
|
], VectorizeEntityResult.prototype, "ErrorMessage", void 0);
|
|
34
35
|
__decorate([
|
|
35
|
-
Field({ nullable: true }),
|
|
36
|
+
Field(() => String, { nullable: true }),
|
|
36
37
|
__metadata("design:type", String)
|
|
37
38
|
], VectorizeEntityResult.prototype, "PipelineRunID", void 0);
|
|
38
39
|
VectorizeEntityResult = __decorate([
|
|
@@ -40,17 +41,20 @@ VectorizeEntityResult = __decorate([
|
|
|
40
41
|
], VectorizeEntityResult);
|
|
41
42
|
export { VectorizeEntityResult };
|
|
42
43
|
let VectorizeEntityResolver = class VectorizeEntityResolver extends ResolverBase {
|
|
43
|
-
async VectorizeEntity(entityDocumentID, entityID, batchSize, { userPayload } = {}) {
|
|
44
|
+
async VectorizeEntity(entityDocumentID, entityID, batchSize, { userPayload, providers } = {}) {
|
|
44
45
|
try {
|
|
45
46
|
const currentUser = this.GetUserFromPayload(userPayload);
|
|
46
47
|
if (!currentUser) {
|
|
47
48
|
return { Success: false, Status: 'Error', ErrorMessage: 'Unable to determine current user' };
|
|
48
49
|
}
|
|
50
|
+
// Capture the request's provider before returning, so the background run writes through the
|
|
51
|
+
// same connection the caller used. It is also the colocated vector host (#4910).
|
|
52
|
+
const provider = GetReadWriteProvider(providers, { allowFallbackToReadOnly: true }) ?? undefined;
|
|
49
53
|
const pipelineRunID = uuidv4();
|
|
50
54
|
LogStatus(`VectorizeEntity: starting pipeline ${pipelineRunID} for entity document ${entityDocumentID}`);
|
|
51
55
|
// Fire-and-forget: start the pipeline in the background and return immediately.
|
|
52
56
|
// Progress is delivered to the client via the PipelineProgress GraphQL subscription.
|
|
53
|
-
this.runPipelineInBackground(pipelineRunID, entityDocumentID, entityID, batchSize, currentUser);
|
|
57
|
+
this.runPipelineInBackground(pipelineRunID, entityDocumentID, entityID, batchSize, currentUser, provider);
|
|
54
58
|
return {
|
|
55
59
|
Success: true,
|
|
56
60
|
Status: 'Started',
|
|
@@ -71,9 +75,9 @@ let VectorizeEntityResolver = class VectorizeEntityResolver extends ResolverBase
|
|
|
71
75
|
* Runs the vectorization pipeline in the background, publishing progress
|
|
72
76
|
* updates via PubSub so the client can subscribe via PipelineProgress.
|
|
73
77
|
*/
|
|
74
|
-
async runPipelineInBackground(pipelineRunID, entityDocumentID, entityID, batchSize, currentUser) {
|
|
78
|
+
async runPipelineInBackground(pipelineRunID, entityDocumentID, entityID, batchSize, currentUser, provider) {
|
|
75
79
|
try {
|
|
76
|
-
const syncer = new EntityVectorSyncer();
|
|
80
|
+
const syncer = new EntityVectorSyncer(provider);
|
|
77
81
|
await syncer.Config(true, currentUser);
|
|
78
82
|
const params = {
|
|
79
83
|
entityDocumentID,
|
|
@@ -132,8 +136,8 @@ let VectorizeEntityResolver = class VectorizeEntityResolver extends ResolverBase
|
|
|
132
136
|
};
|
|
133
137
|
__decorate([
|
|
134
138
|
Mutation(() => VectorizeEntityResult),
|
|
135
|
-
__param(0, Arg('entityDocumentID')),
|
|
136
|
-
__param(1, Arg('entityID')),
|
|
139
|
+
__param(0, Arg('entityDocumentID', () => String)),
|
|
140
|
+
__param(1, Arg('entityID', () => String)),
|
|
137
141
|
__param(2, Arg('batchSize', () => Float, { nullable: true })),
|
|
138
142
|
__param(3, Ctx()),
|
|
139
143
|
__metadata("design:type", Function),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VectorizeEntityResolver.js","sourceRoot":"","sources":["../../src/resolvers/VectorizeEntityResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAEtF,OAAO,
|
|
1
|
+
{"version":3,"file":"VectorizeEntityResolver.js","sourceRoot":"","sources":["../../src/resolvers/VectorizeEntityResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The timeout an ad-hoc query runs with: what the caller asked for (or the default), but never
|
|
3
|
+
* longer than the server's `requestTimeout`, so a caller cannot hold a read-only connection longer
|
|
4
|
+
* than any other request may. `requestTimeoutMs` of 0 or less means the server sets no limit.
|
|
5
|
+
*/
|
|
6
|
+
export declare function ClampAdhocTimeoutSeconds(requested: number | undefined, requestTimeoutMs: number): number;
|
|
7
|
+
//# sourceMappingURL=adhocTimeout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adhocTimeout.d.ts","sourceRoot":"","sources":["../../src/resolvers/adhocTimeout.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAGxG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** The timeout an ad-hoc query gets when the caller names none. */
|
|
2
|
+
const DEFAULT_TIMEOUT_SECONDS = 30;
|
|
3
|
+
/**
|
|
4
|
+
* The timeout an ad-hoc query runs with: what the caller asked for (or the default), but never
|
|
5
|
+
* longer than the server's `requestTimeout`, so a caller cannot hold a read-only connection longer
|
|
6
|
+
* than any other request may. `requestTimeoutMs` of 0 or less means the server sets no limit.
|
|
7
|
+
*/
|
|
8
|
+
export function ClampAdhocTimeoutSeconds(requested, requestTimeoutMs) {
|
|
9
|
+
const seconds = requested != null && requested > 0 ? requested : DEFAULT_TIMEOUT_SECONDS;
|
|
10
|
+
return requestTimeoutMs > 0 ? Math.min(seconds, Math.max(1, Math.floor(requestTimeoutMs / 1000))) : seconds;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=adhocTimeout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adhocTimeout.js","sourceRoot":"","sources":["../../src/resolvers/adhocTimeout.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAA6B,EAAE,gBAAwB;IAC5F,MAAM,OAAO,GAAG,SAAS,IAAI,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC;IACzF,OAAO,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAChH,CAAC"}
|
|
@@ -33,7 +33,9 @@ export declare class ViewOperationsHandler {
|
|
|
33
33
|
error?: string;
|
|
34
34
|
}>;
|
|
35
35
|
/**
|
|
36
|
-
* Sanitize and validate RunViewParams
|
|
36
|
+
* Sanitize and validate RunViewParams. Client filter and sort text passes the same clause
|
|
37
|
+
* screen as the GraphQL RunView resolvers, parsed in the dialect of `provider`, the provider
|
|
38
|
+
* that runs the view.
|
|
37
39
|
*/
|
|
38
40
|
private static sanitizeRunViewParams;
|
|
39
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewOperationsHandler.d.ts","sourceRoot":"","sources":["../../src/rest/ViewOperationsHandler.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ViewOperationsHandler.d.ts","sourceRoot":"","sources":["../../src/rest/ViewOperationsHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACsC,aAAa,EACtD,aAAa,EAAE,QAAQ,EAC1B,MAAM,sBAAsB,CAAC;AAG9B;;;GAGG;AACH,qBAAa,qBAAqB;IAC9B;;OAEG;WACU,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,aAAa,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAmClI;;OAEG;WACU,QAAQ,CAAC,WAAW,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAsC7I;;OAEG;WACU,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;IA0BxF;;OAEG;WACU,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAqD7H;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;CA6CvC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { LogError, Metadata, RunView } from '@memberjunction/core';
|
|
1
|
+
import { BaseEntity, LogError, Metadata, RunView } from '@memberjunction/core';
|
|
2
|
+
import { ClientClauseScreen } from '@memberjunction/generic-database-provider';
|
|
2
3
|
/**
|
|
3
4
|
* View Operations Implementation for REST endpoints
|
|
4
5
|
* These functions handle running views through the REST API
|
|
@@ -26,10 +27,10 @@ export class ViewOperationsHandler {
|
|
|
26
27
|
error: `User ${user.Name} does not have permission to read ${params.EntityName} records`
|
|
27
28
|
};
|
|
28
29
|
}
|
|
29
|
-
// Sanitize and validate parameters
|
|
30
|
-
this.sanitizeRunViewParams(params);
|
|
31
|
-
// Execute the view
|
|
30
|
+
// Sanitize and validate parameters against the provider that runs the view
|
|
32
31
|
const runView = new RunView();
|
|
32
|
+
this.sanitizeRunViewParams(params, md, runView.ProviderToUse, user);
|
|
33
|
+
// Execute the view
|
|
33
34
|
const result = await runView.RunView(params, user);
|
|
34
35
|
return { success: true, result };
|
|
35
36
|
}
|
|
@@ -43,8 +44,9 @@ export class ViewOperationsHandler {
|
|
|
43
44
|
*/
|
|
44
45
|
static async runViews(paramsArray, user) {
|
|
45
46
|
try {
|
|
46
|
-
// Validate and sanitize each set of parameters
|
|
47
|
+
// Validate and sanitize each set of parameters against the provider that runs the views
|
|
47
48
|
const md = new Metadata(); // global-provider-ok: REST endpoint — no per-request provider injection in REST middleware yet
|
|
49
|
+
const runView = new RunView();
|
|
48
50
|
for (const params of paramsArray) {
|
|
49
51
|
// Validate entity exists
|
|
50
52
|
const entity = md.Entities.find(e => e.Name === params.EntityName);
|
|
@@ -63,10 +65,9 @@ export class ViewOperationsHandler {
|
|
|
63
65
|
};
|
|
64
66
|
}
|
|
65
67
|
// Sanitize parameters
|
|
66
|
-
this.sanitizeRunViewParams(params);
|
|
68
|
+
this.sanitizeRunViewParams(params, md, runView.ProviderToUse, user);
|
|
67
69
|
}
|
|
68
70
|
// Execute the views
|
|
69
|
-
const runView = new RunView();
|
|
70
71
|
const results = await runView.RunViews(paramsArray, user);
|
|
71
72
|
return { success: true, results };
|
|
72
73
|
}
|
|
@@ -90,10 +91,10 @@ export class ViewOperationsHandler {
|
|
|
90
91
|
if (!permissions.CanRead) {
|
|
91
92
|
throw new Error(`User ${user.Name} does not have permission to read ${params.EntityName} records`);
|
|
92
93
|
}
|
|
93
|
-
// Sanitize and validate parameters
|
|
94
|
-
this.sanitizeRunViewParams(params);
|
|
95
|
-
// Execute the view
|
|
94
|
+
// Sanitize and validate parameters against the provider that runs the view
|
|
96
95
|
const runView = new RunView();
|
|
96
|
+
this.sanitizeRunViewParams(params, md, runView.ProviderToUse, user);
|
|
97
|
+
// Execute the view
|
|
97
98
|
return await runView.RunView(params, user);
|
|
98
99
|
}
|
|
99
100
|
catch (error) {
|
|
@@ -152,32 +153,43 @@ export class ViewOperationsHandler {
|
|
|
152
153
|
}
|
|
153
154
|
}
|
|
154
155
|
/**
|
|
155
|
-
* Sanitize and validate RunViewParams
|
|
156
|
+
* Sanitize and validate RunViewParams. Client filter and sort text passes the same clause
|
|
157
|
+
* screen as the GraphQL RunView resolvers, parsed in the dialect of `provider`, the provider
|
|
158
|
+
* that runs the view.
|
|
156
159
|
*/
|
|
157
|
-
static sanitizeRunViewParams(params) {
|
|
160
|
+
static sanitizeRunViewParams(params, md, provider, user) {
|
|
158
161
|
// Ensure EntityName is provided
|
|
159
162
|
if (!params.EntityName) {
|
|
160
163
|
throw new Error('EntityName is required');
|
|
161
164
|
}
|
|
165
|
+
// A loaded view entity cannot arrive over JSON; the provider would trust a plain object's
|
|
166
|
+
// fields (its ID is spliced into view SQL). REST callers name a saved view by ViewID or ViewName.
|
|
167
|
+
if (params.ViewEntity != null && !(params.ViewEntity instanceof BaseEntity)) {
|
|
168
|
+
throw new Error('ViewEntity is not accepted over REST; use ViewID or ViewName');
|
|
169
|
+
}
|
|
162
170
|
// Convert string arrays if they came in as comma-separated strings
|
|
163
171
|
if (params.Fields && typeof params.Fields === 'string') {
|
|
164
172
|
params.Fields = params.Fields.split(',');
|
|
165
173
|
}
|
|
166
|
-
// Sanitize numeric values
|
|
174
|
+
// Sanitize numeric values: base-10, integral, and clamped to a sane range so a
|
|
175
|
+
// negative/garbage value can never reach the SQL layer.
|
|
167
176
|
if (params.MaxRows !== undefined) {
|
|
168
|
-
|
|
169
|
-
? parseInt(params.MaxRows)
|
|
177
|
+
const parsed = typeof params.MaxRows === 'string'
|
|
178
|
+
? parseInt(params.MaxRows, 10)
|
|
170
179
|
: params.MaxRows;
|
|
180
|
+
params.MaxRows = Number.isFinite(parsed) ? Math.max(0, Math.floor(parsed)) : undefined;
|
|
171
181
|
}
|
|
172
182
|
if (params.StartRow !== undefined) {
|
|
173
|
-
|
|
174
|
-
? parseInt(params.StartRow)
|
|
183
|
+
const parsed = typeof params.StartRow === 'string'
|
|
184
|
+
? parseInt(params.StartRow, 10)
|
|
175
185
|
: params.StartRow;
|
|
186
|
+
params.StartRow = Number.isFinite(parsed) ? Math.max(0, Math.floor(parsed)) : undefined;
|
|
176
187
|
}
|
|
177
188
|
// Default ResultType if not provided
|
|
178
189
|
if (!params.ResultType) {
|
|
179
190
|
params.ResultType = 'simple';
|
|
180
191
|
}
|
|
192
|
+
ClientClauseScreen.ScreenViewClauses({ ExtraFilter: params.ExtraFilter, OrderBy: params.OrderBy, OverrideExcludeFilter: params.OverrideExcludeFilter }, md.Entities, ClientClauseScreen.DialectFor(provider), user);
|
|
181
193
|
}
|
|
182
194
|
}
|
|
183
195
|
//# sourceMappingURL=ViewOperationsHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewOperationsHandler.js","sourceRoot":"","sources":["../../src/rest/ViewOperationsHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EAAE,QAAQ,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"ViewOperationsHandler.js","sourceRoot":"","sources":["../../src/rest/ViewOperationsHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import type { TaskActionRunner, TaskActionRunParams, TaskActionRunResult } from '@memberjunction/task-graph';
|
|
2
2
|
export declare class TaskGraphActionRunner implements TaskActionRunner {
|
|
3
3
|
RunActionForTask(params: TaskActionRunParams): Promise<TaskActionRunResult>;
|
|
4
|
+
/**
|
|
5
|
+
* The first output param that cannot be written to the Task row as JSON, or null.
|
|
6
|
+
*
|
|
7
|
+
* Checked here because this is the last place that knows the action's and the param's NAMES: the
|
|
8
|
+
* dispatcher serializes the whole Output later and, for a live object (an entity, an observable),
|
|
9
|
+
* fails with a bare "Converting circular structure to JSON" that names neither.
|
|
10
|
+
*/
|
|
11
|
+
private findUnstorableOutput;
|
|
4
12
|
/**
|
|
5
13
|
* Projects the action's parameters onto the flat result a workflow step is expected to produce.
|
|
6
14
|
*
|
|
@@ -18,16 +26,21 @@ export declare class TaskGraphActionRunner implements TaskActionRunner {
|
|
|
18
26
|
*/
|
|
19
27
|
private buildOutput;
|
|
20
28
|
/**
|
|
21
|
-
* Rebuilds the action's parameters from the task's
|
|
29
|
+
* Rebuilds the action's parameters from the task's input, one parameter per key.
|
|
22
30
|
*
|
|
23
|
-
* **
|
|
24
|
-
*
|
|
25
|
-
* marked as not-logged
|
|
26
|
-
* value, which is the honest consequence of choosing not to persist it, and the
|
|
27
|
-
* dispatch is opt-in per binding rather than the default.
|
|
31
|
+
* For a **durable entity-action** graph the input was written by `RedactParamsToRecord`
|
|
32
|
+
* (`@memberjunction/actions-base`) at deferral time, so its values have been through redaction:
|
|
33
|
+
* a parameter the binding marked as not-logged arrives absent rather than secret — the action
|
|
34
|
+
* sees a missing value, which is the honest consequence of choosing not to persist it, and the
|
|
35
|
+
* reason durable dispatch is opt-in per binding rather than the default. Every other graph's
|
|
36
|
+
* input is whatever its spec authored. This method re-applies no redaction rule in either case.
|
|
28
37
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
38
|
+
* `InputPayload` already carries the dependency outputs: the dispatcher merges them underneath
|
|
39
|
+
* the task's own input (`mergedPayload`) before calling this runner, so a node's explicit
|
|
40
|
+
* parameters win and a step with an input mapping gets exactly the parameters it declared.
|
|
41
|
+
* `DependencyOutputs` is keyed by upstream task ID, not by parameter name, so it is deliberately
|
|
42
|
+
* not read here — spreading it would hand the action one extra parameter per dependency, named
|
|
43
|
+
* by a GUID and holding that task's whole output.
|
|
31
44
|
*/
|
|
32
45
|
private buildParams;
|
|
33
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskGraphActionRunner.d.ts","sourceRoot":"","sources":["../../src/services/TaskGraphActionRunner.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAE7G,qBAAa,qBAAsB,YAAW,gBAAgB;IAC7C,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"TaskGraphActionRunner.d.ts","sourceRoot":"","sources":["../../src/services/TaskGraphActionRunner.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAE7G,qBAAa,qBAAsB,YAAW,gBAAgB;IAC7C,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA6CxF;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,WAAW;IAQnB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,WAAW;CAMtB"}
|
|
@@ -30,9 +30,17 @@ export class TaskGraphActionRunner {
|
|
|
30
30
|
// transition question with nothing to answer it, and fail closed on every retry.
|
|
31
31
|
Filters: [],
|
|
32
32
|
});
|
|
33
|
+
const output = this.buildOutput(result.Params);
|
|
34
|
+
const unstorable = this.findUnstorableOutput(output);
|
|
35
|
+
if (unstorable) {
|
|
36
|
+
const message = `Action "${action.Name}" returned output param "${unstorable.Name}", which cannot be stored ` +
|
|
37
|
+
`as the step's result: ${unstorable.Reason}. Output params of a durable step must be plain data.`;
|
|
38
|
+
LogError(`[TaskGraphActionRunner] Task ${params.TaskID}: ${message}`);
|
|
39
|
+
return { Success: false, ErrorMessage: message, ActionLogID: result.LogEntry?.ID };
|
|
40
|
+
}
|
|
33
41
|
return {
|
|
34
42
|
Success: result.Success,
|
|
35
|
-
Output:
|
|
43
|
+
Output: output,
|
|
36
44
|
ErrorMessage: result.Success ? undefined : result.Message,
|
|
37
45
|
// The engine already wrote the log; this is the only place its id is in hand. Without
|
|
38
46
|
// carrying it out, a workflow's action step has no path back to its own execution
|
|
@@ -46,6 +54,24 @@ export class TaskGraphActionRunner {
|
|
|
46
54
|
return { Success: false, ErrorMessage: message };
|
|
47
55
|
}
|
|
48
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* The first output param that cannot be written to the Task row as JSON, or null.
|
|
59
|
+
*
|
|
60
|
+
* Checked here because this is the last place that knows the action's and the param's NAMES: the
|
|
61
|
+
* dispatcher serializes the whole Output later and, for a live object (an entity, an observable),
|
|
62
|
+
* fails with a bare "Converting circular structure to JSON" that names neither.
|
|
63
|
+
*/
|
|
64
|
+
findUnstorableOutput(output) {
|
|
65
|
+
for (const [Name, value] of Object.entries(output)) {
|
|
66
|
+
try {
|
|
67
|
+
JSON.stringify(value);
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
return { Name, Reason: e instanceof Error ? e.message.split('\n')[0] : String(e) };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
49
75
|
/**
|
|
50
76
|
* Projects the action's parameters onto the flat result a workflow step is expected to produce.
|
|
51
77
|
*
|
|
@@ -70,26 +96,27 @@ export class TaskGraphActionRunner {
|
|
|
70
96
|
return output;
|
|
71
97
|
}
|
|
72
98
|
/**
|
|
73
|
-
* Rebuilds the action's parameters from the task's
|
|
99
|
+
* Rebuilds the action's parameters from the task's input, one parameter per key.
|
|
74
100
|
*
|
|
75
|
-
* **
|
|
76
|
-
*
|
|
77
|
-
* marked as not-logged
|
|
78
|
-
* value, which is the honest consequence of choosing not to persist it, and the
|
|
79
|
-
* dispatch is opt-in per binding rather than the default.
|
|
101
|
+
* For a **durable entity-action** graph the input was written by `RedactParamsToRecord`
|
|
102
|
+
* (`@memberjunction/actions-base`) at deferral time, so its values have been through redaction:
|
|
103
|
+
* a parameter the binding marked as not-logged arrives absent rather than secret — the action
|
|
104
|
+
* sees a missing value, which is the honest consequence of choosing not to persist it, and the
|
|
105
|
+
* reason durable dispatch is opt-in per binding rather than the default. Every other graph's
|
|
106
|
+
* input is whatever its spec authored. This method re-applies no redaction rule in either case.
|
|
80
107
|
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
108
|
+
* `InputPayload` already carries the dependency outputs: the dispatcher merges them underneath
|
|
109
|
+
* the task's own input (`mergedPayload`) before calling this runner, so a node's explicit
|
|
110
|
+
* parameters win and a step with an input mapping gets exactly the parameters it declared.
|
|
111
|
+
* `DependencyOutputs` is keyed by upstream task ID, not by parameter name, so it is deliberately
|
|
112
|
+
* not read here — spreading it would hand the action one extra parameter per dependency, named
|
|
113
|
+
* by a GUID and holding that task's whole output.
|
|
83
114
|
*/
|
|
84
115
|
buildParams(params) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
merged[name] = value;
|
|
88
|
-
}
|
|
89
|
-
if (params.InputPayload && typeof params.InputPayload === 'object') {
|
|
90
|
-
Object.assign(merged, params.InputPayload);
|
|
116
|
+
if (!params.InputPayload || typeof params.InputPayload !== 'object') {
|
|
117
|
+
return [];
|
|
91
118
|
}
|
|
92
|
-
return Object.entries(
|
|
119
|
+
return Object.entries(params.InputPayload).map(([Name, Value]) => ({ Name, Value, Type: 'Input' }));
|
|
93
120
|
}
|
|
94
121
|
}
|
|
95
122
|
//# sourceMappingURL=TaskGraphActionRunner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskGraphActionRunner.js","sourceRoot":"","sources":["../../src/services/TaskGraphActionRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,MAAM,OAAO,qBAAqB;IACvB,KAAK,CAAC,gBAAgB,CAAC,MAA2B;QACrD,IAAI,CAAC;YACD,MAAM,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,MAAM,CAAC,QAAQ,mCAAmC,EAAE,CAAC;YAC1G,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACvD,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBAChC,oFAAoF;gBACpF,qFAAqF;gBACrF,4EAA4E;gBAC5E,iFAAiF;gBACjF,OAAO,EAAE,EAAE;aACd,CAAC,CAAC;YAEH,
|
|
1
|
+
{"version":3,"file":"TaskGraphActionRunner.js","sourceRoot":"","sources":["../../src/services/TaskGraphActionRunner.ts"],"names":[],"mappings":"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"}
|