@memberjunction/server 6.1.5 → 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/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.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.js +6 -3
- package/dist/auth/magicLink/MagicLinkService.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 +13 -11
- 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 +8 -1
- 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/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 +28 -0
- package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.js +46 -0
- 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 +39 -16
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +84 -38
- 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/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/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 +8 -0
- package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphActionRunner.js +27 -1
- 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 +4 -2
- 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 +106 -41
- 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 +2 -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__/cacheInvalidationRecordData.test.ts +64 -0
- package/src/__tests__/isolatedProviderTransactions.test.ts +169 -0
- package/src/__tests__/magicLinkService.consume.test.ts +6 -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/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 +6 -3
- package/src/auth/newUsers.ts +15 -11
- package/src/context.ts +14 -10
- 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 +9 -1
- package/src/isolatedProvider.ts +22 -0
- package/src/multiTenancy/index.ts +24 -2
- package/src/realtimeWidget/widgetGuestElevation.ts +4 -2
- package/src/resolvers/ActionResolver.ts +84 -21
- package/src/resolvers/AdhocQueryResolver.ts +49 -1
- 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 +103 -42
- package/src/resolvers/RemoteBrowserActionResolver.ts +11 -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/rest/ViewOperationsHandler.ts +37 -18
- package/src/services/TaskGraphActionRunner.ts +29 -1
|
@@ -13,12 +13,15 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
13
13
|
import { Resolver, Mutation, Arg, Ctx } from "type-graphql";
|
|
14
14
|
import { ActionEngineServer } from "@memberjunction/actions";
|
|
15
15
|
import { EntityActionEngineServer } from "@memberjunction/actions";
|
|
16
|
-
import { CompositeKey, KeyValuePair, LogError } from "@memberjunction/core";
|
|
16
|
+
import { Metadata, CompositeKey, KeyValuePair, LogError, RunView } from "@memberjunction/core";
|
|
17
|
+
import { UserCache } from "@memberjunction/generic-database-provider";
|
|
17
18
|
import { Field, InputType, ObjectType } from "type-graphql";
|
|
18
19
|
import { KeyValuePairInput } from "../generic/KeyValuePairInput.js";
|
|
19
|
-
import { CopyScalarsAndArrays, UUIDsEqual } from "@memberjunction/global";
|
|
20
|
+
import { CopyScalarsAndArrays, EscapeSQLString, UUIDsEqual } from "@memberjunction/global";
|
|
20
21
|
import { GetReadOnlyProvider, GetReadWriteProvider } from "../util.js";
|
|
21
22
|
import { ResolverBase } from "../generic/ResolverBase.js";
|
|
23
|
+
import { IsScopeLimitedPrincipal } from "../auth/scopeLimitedPrincipal.js";
|
|
24
|
+
import { EvaluateActionRunAuthorization, IsOwner } from "../auth/actionAuthorization.js";
|
|
22
25
|
/**
|
|
23
26
|
* Input type for action parameters
|
|
24
27
|
* Used to pass parameters to actions when invoking them
|
|
@@ -149,30 +152,32 @@ export { ActionResultOutput };
|
|
|
149
152
|
*/
|
|
150
153
|
let ActionResolver = class ActionResolver extends ResolverBase {
|
|
151
154
|
/**
|
|
152
|
-
* Mutation for running an action
|
|
155
|
+
* Mutation for running an action.
|
|
156
|
+
*
|
|
157
|
+
* Scope-limited sessions are refused. Any other caller must be authorized for the action — see
|
|
158
|
+
* {@link EvaluateActionRunAuthorization}: an Owner may run any action; anyone else needs a role that
|
|
159
|
+
* holds an authorization linked to the action through `MJ: Action Authorizations`, or, when the
|
|
160
|
+
* action has no such link, an action class that authorizes its caller itself. The run is always
|
|
161
|
+
* logged.
|
|
153
162
|
* @param input The input parameters for running the action
|
|
154
163
|
* @param ctx The GraphQL context containing user authentication information
|
|
155
164
|
* @returns The result of running the action
|
|
156
165
|
*/
|
|
157
166
|
async RunAction(input, ctx) {
|
|
158
167
|
try {
|
|
168
|
+
const user = this.getRunActionPrincipal(ctx);
|
|
159
169
|
// Check API key scope authorization for action execution
|
|
160
170
|
await this.CheckAPIKeyScopeAuthorization('action:execute', input.ActionID, ctx.userPayload);
|
|
161
|
-
// Get the user from context
|
|
162
|
-
const user = ctx.userPayload.userRecord;
|
|
163
|
-
if (!user) {
|
|
164
|
-
throw new Error("User is not authenticated");
|
|
165
|
-
}
|
|
166
171
|
// Initialize the action engine
|
|
167
172
|
await ActionEngineServer.Instance.Config(false, user);
|
|
168
|
-
// Get the action by ID
|
|
169
173
|
const action = this.findActionById(input.ActionID);
|
|
174
|
+
await this.assertCanRunAction(action, user, ctx.providers);
|
|
170
175
|
// Parse the parameters
|
|
171
176
|
const params = this.parseActionParameters(input.Params);
|
|
172
177
|
// Run the action — thread the request-scoped provider so provider-bound
|
|
173
178
|
// actions (e.g. the semantic find-* / Search Entity actions, which call
|
|
174
179
|
// params.Provider.SearchEntity) run against the caller's metadata layer.
|
|
175
|
-
const result = await this.executeAction(action, user, params, ctx.providers
|
|
180
|
+
const result = await this.executeAction(action, user, params, ctx.providers);
|
|
176
181
|
// Return the result
|
|
177
182
|
return this.createActionResult(result);
|
|
178
183
|
}
|
|
@@ -180,6 +185,63 @@ let ActionResolver = class ActionResolver extends ResolverBase {
|
|
|
180
185
|
return this.handleActionError(e);
|
|
181
186
|
}
|
|
182
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* The authenticated caller of RunAction. A scope-limited session is refused: its confinement exists
|
|
190
|
+
* only as row-level-security filters, and an action can reach data and services those filters never
|
|
191
|
+
* cover.
|
|
192
|
+
* @throws Error when there is no user or the session is scope-limited
|
|
193
|
+
*/
|
|
194
|
+
getRunActionPrincipal(ctx) {
|
|
195
|
+
const user = ctx.userPayload?.userRecord;
|
|
196
|
+
if (!user) {
|
|
197
|
+
throw new Error("User is not authenticated");
|
|
198
|
+
}
|
|
199
|
+
if (IsScopeLimitedPrincipal(user)) {
|
|
200
|
+
throw new Error("RunAction is not permitted for scope-limited sessions");
|
|
201
|
+
}
|
|
202
|
+
return user;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Refuses the run unless the caller is authorized for the action — see
|
|
206
|
+
* {@link EvaluateActionRunAuthorization}. The `MJ: Action Authorizations` rows, the authorization
|
|
207
|
+
* tree and the role grants all come from the request's provider, or all from the global provider
|
|
208
|
+
* when the request carries none.
|
|
209
|
+
* @throws Error when the caller may not run the action
|
|
210
|
+
*/
|
|
211
|
+
async assertCanRunAction(action, user, providers) {
|
|
212
|
+
if (IsOwner(user)) {
|
|
213
|
+
return; // an Owner may run any action, so nothing needs to be read
|
|
214
|
+
}
|
|
215
|
+
const provider = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true });
|
|
216
|
+
const actionAuthorizationIDs = await this.loadActionAuthorizationIDs(action.ID, provider);
|
|
217
|
+
const metadata = provider ?? Metadata.Provider; // global-provider-ok: fallback only when the request carries no provider
|
|
218
|
+
const actionAuthorizesCaller = ActionEngineServer.Instance.ActionAuthorizesCaller(action);
|
|
219
|
+
const decision = EvaluateActionRunAuthorization(user, actionAuthorizationIDs, metadata, actionAuthorizesCaller);
|
|
220
|
+
if (!decision.Allowed) {
|
|
221
|
+
throw new Error(`Not authorized to run action ${action.ID}: ${decision.Reason}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* The AuthorizationID of each `MJ: Action Authorizations` row for the action. Read as the system
|
|
226
|
+
* user: this is the server's own authorization decision, so it must not depend on whether the
|
|
227
|
+
* caller can read that entity.
|
|
228
|
+
*/
|
|
229
|
+
async loadActionAuthorizationIDs(actionID, provider) {
|
|
230
|
+
const systemUser = UserCache.Instance.GetSystemUser();
|
|
231
|
+
if (!systemUser) {
|
|
232
|
+
throw new Error("System user not found");
|
|
233
|
+
}
|
|
234
|
+
const result = await new RunView(provider).RunView({
|
|
235
|
+
EntityName: 'MJ: Action Authorizations',
|
|
236
|
+
ExtraFilter: `ActionID='${EscapeSQLString(actionID)}'`,
|
|
237
|
+
Fields: ['AuthorizationID'],
|
|
238
|
+
ResultType: 'simple'
|
|
239
|
+
}, systemUser);
|
|
240
|
+
if (!result.Success) {
|
|
241
|
+
throw new Error(`Could not read the authorizations for action ${actionID}: ${result.ErrorMessage}`);
|
|
242
|
+
}
|
|
243
|
+
return result.Results.map(row => row.AuthorizationID);
|
|
244
|
+
}
|
|
183
245
|
/**
|
|
184
246
|
* Finds an action by its ID
|
|
185
247
|
* @param actionID The ID of the action to find
|
|
@@ -225,15 +287,14 @@ let ActionResolver = class ActionResolver extends ResolverBase {
|
|
|
225
287
|
});
|
|
226
288
|
}
|
|
227
289
|
/**
|
|
228
|
-
* Executes an action
|
|
290
|
+
* Executes an action. The run is always logged: a client cannot switch off the action execution log.
|
|
229
291
|
* @param action The action to execute
|
|
230
292
|
* @param user The user context
|
|
231
293
|
* @param params The action parameters
|
|
232
|
-
* @param skipActionLog Whether to skip action logging
|
|
233
294
|
* @returns The action result
|
|
234
295
|
* @private
|
|
235
296
|
*/
|
|
236
|
-
async executeAction(action, user, params, providers
|
|
297
|
+
async executeAction(action, user, params, providers) {
|
|
237
298
|
// Resolve the request-scoped provider. Prefer read-write (actions may mutate);
|
|
238
299
|
// fall back to read-only, then to the engine's global-Metadata default when no
|
|
239
300
|
// request providers are present (preserves prior behavior).
|
|
@@ -242,7 +303,7 @@ let ActionResolver = class ActionResolver extends ResolverBase {
|
|
|
242
303
|
Action: action,
|
|
243
304
|
ContextUser: user,
|
|
244
305
|
Params: params,
|
|
245
|
-
SkipActionLog:
|
|
306
|
+
SkipActionLog: false,
|
|
246
307
|
Filters: [],
|
|
247
308
|
Provider: provider
|
|
248
309
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionResolver.js","sourceRoot":"","sources":["../../src/resolvers/ActionResolver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActionResolver.js","sourceRoot":"","sources":["../../src/resolvers/ActionResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { DatabaseProviderBase, UserInfo } from '@memberjunction/core';
|
|
2
|
+
import type { AdhocSQLAuthorizer } from '@memberjunction/actions';
|
|
1
3
|
import { AppContext } from '../types.js';
|
|
2
4
|
import { ResolverBase } from '../generic/ResolverBase.js';
|
|
3
5
|
import { RunQueryResultType } from './QueryResolver.js';
|
|
@@ -21,6 +23,10 @@ declare class AdhocQueryInput {
|
|
|
21
23
|
*
|
|
22
24
|
* Security:
|
|
23
25
|
* - SQL validated by the provider (SQLExpressionValidator, single read query) — blocks mutations
|
|
26
|
+
* - Authorizes the RENDERED SQL: every table reference must be an entity base view the caller
|
|
27
|
+
* reads unscoped (CanRead, no row-level filter, no denied fields). Entities with row/field
|
|
28
|
+
* policy for this user are refused — raw SQL cannot apply that policy, so those reads belong
|
|
29
|
+
* on RunView.
|
|
24
30
|
* - Read-only provider only (no fallback to read-write)
|
|
25
31
|
* - Configurable timeout (default 30s), enforced by the database
|
|
26
32
|
* - Requires authenticated user (standard GraphQL auth, no @RequireSystemUser)
|
|
@@ -33,9 +39,31 @@ declare class AdhocQueryInput {
|
|
|
33
39
|
*/
|
|
34
40
|
export declare class AdhocQueryResolver extends ResolverBase {
|
|
35
41
|
ExecuteAdhocQuery(input: AdhocQueryInput, context: AppContext): Promise<RunQueryResultType>;
|
|
42
|
+
/**
|
|
43
|
+
* SECURITY: authorizes the READ itself, against the SQL that will actually run. The provider
|
|
44
|
+
* validates that the SQL is a single read statement but places no restriction on WHAT is read.
|
|
45
|
+
* Rendering comes first because composition (`{{query:"..."}}`) and templates can introduce
|
|
46
|
+
* table references the raw input never named. Every table reference must be an entity base
|
|
47
|
+
* view the caller can read UNSCOPED — CanRead with no row-level filter and no denied fields —
|
|
48
|
+
* because raw SQL applies neither (see assertFullQueryUsesReadableEntityViews). The provider
|
|
49
|
+
* renders the same input the same way and only wraps it in server-built paging and a count,
|
|
50
|
+
* so the rendered SQL is the full set of reads. Returns the refusal message, or null.
|
|
51
|
+
*
|
|
52
|
+
* `provider` is the read-only provider the SQL will run on; it supplies the platform and the
|
|
53
|
+
* entity metadata. {@link CreateAdhocSQLAuthorizer} exposes this check to the action engine.
|
|
54
|
+
*/
|
|
55
|
+
AuthorizeRenderedSQL(sqlText: string, provider: DatabaseProviderBase, contextUser: UserInfo | undefined): string | null;
|
|
36
56
|
/** Maps the provider's result to the GraphQL shape, naming a timeout plainly. */
|
|
37
57
|
private toResultType;
|
|
38
58
|
private buildErrorResult;
|
|
39
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* The ad-hoc SQL checks MJServer registers with the action engine, so that Run Ad-hoc Query applies
|
|
62
|
+
* the same checks as {@link AdhocQueryResolver.ExecuteAdhocQuery}: the rendered SQL must be one read
|
|
63
|
+
* statement that reads only entity views the caller may read in full, and the timeout is limited by
|
|
64
|
+
* the server's request timeout.
|
|
65
|
+
* @param requestTimeoutMs the server's request timeout in milliseconds; 0 or less means no limit
|
|
66
|
+
*/
|
|
67
|
+
export declare function CreateAdhocSQLAuthorizer(requestTimeoutMs: number): AdhocSQLAuthorizer;
|
|
40
68
|
export {};
|
|
41
69
|
//# sourceMappingURL=AdhocQueryResolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdhocQueryResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/AdhocQueryResolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdhocQueryResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/AdhocQueryResolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAkB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD;;;GAGG;AACH,cACM,eAAe;IAEjB,GAAG,EAAE,MAAM,CAAC;IAGZ,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBACa,kBAAmB,SAAQ,YAAY;IAE1C,iBAAiB,CACkB,KAAK,EAAE,eAAe,EACpD,OAAO,EAAE,UAAU,GAC3B,OAAO,CAAC,kBAAkB,CAAC;IAoC9B;;;;;;;;;;;;OAYG;IACI,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,WAAW,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI;IAU9H,iFAAiF;IACjF,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,gBAAgB;CAc3B;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,GAAG,kBAAkB,CAMrF"}
|
|
@@ -12,6 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
12
|
};
|
|
13
13
|
import { Arg, Ctx, Query, Resolver, Field, Int, InputType } from 'type-graphql';
|
|
14
14
|
import { LogError } from '@memberjunction/core';
|
|
15
|
+
import { RenderPipeline } from '@memberjunction/generic-database-provider';
|
|
15
16
|
import { configInfo } from '../config.js';
|
|
16
17
|
import { GetReadOnlyProvider } from '../util.js';
|
|
17
18
|
import { ResolverBase } from '../generic/ResolverBase.js';
|
|
@@ -53,6 +54,10 @@ AdhocQueryInput = __decorate([
|
|
|
53
54
|
*
|
|
54
55
|
* Security:
|
|
55
56
|
* - SQL validated by the provider (SQLExpressionValidator, single read query) — blocks mutations
|
|
57
|
+
* - Authorizes the RENDERED SQL: every table reference must be an entity base view the caller
|
|
58
|
+
* reads unscoped (CanRead, no row-level filter, no denied fields). Entities with row/field
|
|
59
|
+
* policy for this user are refused — raw SQL cannot apply that policy, so those reads belong
|
|
60
|
+
* on RunView.
|
|
56
61
|
* - Read-only provider only (no fallback to read-write)
|
|
57
62
|
* - Configurable timeout (default 30s), enforced by the database
|
|
58
63
|
* - Requires authenticated user (standard GraphQL auth, no @RequireSystemUser)
|
|
@@ -78,6 +83,10 @@ let AdhocQueryResolver = class AdhocQueryResolver extends ResolverBase {
|
|
|
78
83
|
return this.buildErrorResult('No read-only data source available for ad-hoc query execution');
|
|
79
84
|
}
|
|
80
85
|
const contextUser = context.userPayload?.userRecord;
|
|
86
|
+
const refusal = this.AuthorizeRenderedSQL(input.SQL, provider, contextUser);
|
|
87
|
+
if (refusal) {
|
|
88
|
+
return this.buildErrorResult(refusal, Date.now() - startTime);
|
|
89
|
+
}
|
|
81
90
|
const timeoutSeconds = ClampAdhocTimeoutSeconds(input.TimeoutSeconds, configInfo.databaseSettings.requestTimeout);
|
|
82
91
|
// A negative offset must not reach paging, where it would turn paging off.
|
|
83
92
|
const startRow = Math.max(0, Number.isInteger(input.StartRow) ? input.StartRow : 0);
|
|
@@ -96,6 +105,29 @@ let AdhocQueryResolver = class AdhocQueryResolver extends ResolverBase {
|
|
|
96
105
|
return this.buildErrorResult(`Query execution failed: ${errorMessage}`, Date.now() - startTime);
|
|
97
106
|
}
|
|
98
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* SECURITY: authorizes the READ itself, against the SQL that will actually run. The provider
|
|
110
|
+
* validates that the SQL is a single read statement but places no restriction on WHAT is read.
|
|
111
|
+
* Rendering comes first because composition (`{{query:"..."}}`) and templates can introduce
|
|
112
|
+
* table references the raw input never named. Every table reference must be an entity base
|
|
113
|
+
* view the caller can read UNSCOPED — CanRead with no row-level filter and no denied fields —
|
|
114
|
+
* because raw SQL applies neither (see assertFullQueryUsesReadableEntityViews). The provider
|
|
115
|
+
* renders the same input the same way and only wraps it in server-built paging and a count,
|
|
116
|
+
* so the rendered SQL is the full set of reads. Returns the refusal message, or null.
|
|
117
|
+
*
|
|
118
|
+
* `provider` is the read-only provider the SQL will run on; it supplies the platform and the
|
|
119
|
+
* entity metadata. {@link CreateAdhocSQLAuthorizer} exposes this check to the action engine.
|
|
120
|
+
*/
|
|
121
|
+
AuthorizeRenderedSQL(sqlText, provider, contextUser) {
|
|
122
|
+
try {
|
|
123
|
+
const rendered = RenderPipeline.Run(sqlText, { Platform: provider.PlatformKey, ContextUser: contextUser, RequireReadStatement: true });
|
|
124
|
+
this.assertFullQueryUsesReadableEntityViews(rendered.Trace.AfterTemplates, provider, contextUser, 'ad-hoc SQL');
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
return err instanceof Error ? err.message : String(err);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
99
131
|
/** Maps the provider's result to the GraphQL shape, naming a timeout plainly. */
|
|
100
132
|
toResultType(result, startRow, maxRows, timeoutSeconds, executionTimeMs) {
|
|
101
133
|
if (!result.Success) {
|
|
@@ -143,4 +175,18 @@ AdhocQueryResolver = __decorate([
|
|
|
143
175
|
Resolver()
|
|
144
176
|
], AdhocQueryResolver);
|
|
145
177
|
export { AdhocQueryResolver };
|
|
178
|
+
/**
|
|
179
|
+
* The ad-hoc SQL checks MJServer registers with the action engine, so that Run Ad-hoc Query applies
|
|
180
|
+
* the same checks as {@link AdhocQueryResolver.ExecuteAdhocQuery}: the rendered SQL must be one read
|
|
181
|
+
* statement that reads only entity views the caller may read in full, and the timeout is limited by
|
|
182
|
+
* the server's request timeout.
|
|
183
|
+
* @param requestTimeoutMs the server's request timeout in milliseconds; 0 or less means no limit
|
|
184
|
+
*/
|
|
185
|
+
export function CreateAdhocSQLAuthorizer(requestTimeoutMs) {
|
|
186
|
+
const resolver = new AdhocQueryResolver();
|
|
187
|
+
return {
|
|
188
|
+
Authorize: (sql, provider, contextUser) => resolver.AuthorizeRenderedSQL(sql, provider, contextUser),
|
|
189
|
+
ClampTimeoutSeconds: (requestedSeconds) => ClampAdhocTimeoutSeconds(requestedSeconds, requestTimeoutMs),
|
|
190
|
+
};
|
|
191
|
+
}
|
|
146
192
|
//# sourceMappingURL=AdhocQueryResolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdhocQueryResolver.js","sourceRoot":"","sources":["../../src/resolvers/AdhocQueryResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"AdhocQueryResolver.js","sourceRoot":"","sources":["../../src/resolvers/AdhocQueryResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { AppContext } from '../types.js';
|
|
1
|
+
import { AppContext, UserPayload } from '../types.js';
|
|
2
|
+
import { DatabaseProviderBase, DatasetItemFilterType, DatasetItemResultType, UserInfo } from '@memberjunction/core';
|
|
2
3
|
import { ResolverBase } from '../generic/ResolverBase.js';
|
|
3
4
|
export declare class DatasetResultType {
|
|
4
5
|
DatasetID: string;
|
|
@@ -12,7 +13,27 @@ export declare class DatasetItemFilterTypeGQL {
|
|
|
12
13
|
ItemCode: string;
|
|
13
14
|
Filter: string;
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Request handling shared by the dataset queries. Every read runs as the session's user, so the
|
|
18
|
+
* provider applies that user's entity read permission and row-level security per item, and every
|
|
19
|
+
* client ItemFilter passes the same AST screen as a RunView ExtraFilter before a provider sees it.
|
|
20
|
+
*/
|
|
21
|
+
export declare abstract class DatasetResolverBase extends ResolverBase {
|
|
22
|
+
/** The session's user. A dataset read never runs without one: the provider applies no read checks then. */
|
|
23
|
+
protected RequireDatasetUser(userPayload: UserPayload): UserInfo;
|
|
24
|
+
/**
|
|
25
|
+
* Screens every client ItemFilter: one statement, read-only, and subqueries only over entity base
|
|
26
|
+
* views the user can read. Throws on the first refusal. Returns the filters without null entries.
|
|
27
|
+
*/
|
|
28
|
+
protected ScreenItemFilters(itemFilters: DatasetItemFilterTypeGQL[] | undefined, provider: DatabaseProviderBase, user: UserInfo): DatasetItemFilterType[] | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Applies the API encryption policy to each item's rows, as every other GraphQL read path does:
|
|
31
|
+
* an encrypted field the entity does not allow decrypted over the API leaves as ciphertext or the
|
|
32
|
+
* sentinel. Works on copies, because the rows can be the server cache's own frozen objects.
|
|
33
|
+
*/
|
|
34
|
+
protected ProtectEncryptedFields(items: DatasetItemResultType[], provider: DatabaseProviderBase, user: UserInfo): Promise<DatasetItemResultType[]>;
|
|
35
|
+
}
|
|
36
|
+
export declare class DatasetResolverExtended extends DatasetResolverBase {
|
|
16
37
|
GetDatasetByName(DatasetName: string, { providers, userPayload }: AppContext, ItemFilters?: DatasetItemFilterTypeGQL[]): Promise<{
|
|
17
38
|
DatasetID: string;
|
|
18
39
|
DatasetName: string;
|
|
@@ -30,7 +51,7 @@ export declare class DatasetStatusResultType {
|
|
|
30
51
|
LatestUpdateDate: Date;
|
|
31
52
|
EntityUpdateDates: string;
|
|
32
53
|
}
|
|
33
|
-
export declare class DatasetStatusResolver extends
|
|
54
|
+
export declare class DatasetStatusResolver extends DatasetResolverBase {
|
|
34
55
|
GetDatasetStatusByName(DatasetName: string, { providers, userPayload }: AppContext, ItemFilters?: DatasetItemFilterTypeGQL[]): Promise<{
|
|
35
56
|
DatasetID: string;
|
|
36
57
|
DatasetName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatasetResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/DatasetResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"DatasetResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/DatasetResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,qBAAqB,EAAsB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAExI,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,qBACa,iBAAiB;IAE5B,SAAS,EAAE,MAAM,CAAC;IAGlB,WAAW,EAAE,MAAM,CAAC;IAGpB,OAAO,EAAE,OAAO,CAAC;IAGjB,MAAM,EAAE,MAAM,CAAC;IAGf,gBAAgB,EAAE,IAAI,CAAC;IAGvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBACa,wBAAwB;IAEnC,QAAQ,EAAE,MAAM,CAAC;IAGjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,8BAAsB,mBAAoB,SAAQ,YAAY;IAC5D,2GAA2G;IAC3G,SAAS,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,QAAQ;IAQhE;;;OAGG;IACH,SAAS,CAAC,iBAAiB,CACzB,WAAW,EAAE,wBAAwB,EAAE,GAAG,SAAS,EACnD,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,EAAE,QAAQ,GACb,qBAAqB,EAAE,GAAG,SAAS;IAUtC;;;;OAIG;cACa,sBAAsB,CACpC,KAAK,EAAE,qBAAqB,EAAE,EAC9B,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,qBAAqB,EAAE,CAAC;CAYpC;AAED,qBACa,uBAAwB,SAAQ,mBAAmB;IAExD,gBAAgB,CACc,WAAW,EAAE,MAAM,EAC9C,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,UAAU,EACuC,WAAW,CAAC,EAAE,wBAAwB,EAAE;;;;;;;;CA2B/H;AAED,qBACa,uBAAuB;IAElC,SAAS,EAAE,MAAM,CAAC;IAGlB,WAAW,EAAE,MAAM,CAAC;IAGpB,OAAO,EAAE,OAAO,CAAC;IAGjB,MAAM,EAAE,MAAM,CAAC;IAGf,gBAAgB,EAAE,IAAI,CAAC;IAGvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,qBACa,qBAAsB,SAAQ,mBAAmB;IAEtD,sBAAsB,CACQ,WAAW,EAAE,MAAM,EAC9C,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,UAAU,EACuC,WAAW,CAAC,EAAE,wBAAwB,EAAE;;;;;;;;IA4B9H;;;OAGG;IAEG,8BAA8B,CACG,YAAY,EAAE,MAAM,EAAE,EACpD,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,UAAU,GAC5C,OAAO,CAAC,uBAAuB,EAAE,CAAC;CA4BtC"}
|
|
@@ -58,13 +58,59 @@ DatasetItemFilterTypeGQL = __decorate([
|
|
|
58
58
|
InputType()
|
|
59
59
|
], DatasetItemFilterTypeGQL);
|
|
60
60
|
export { DatasetItemFilterTypeGQL };
|
|
61
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Request handling shared by the dataset queries. Every read runs as the session's user, so the
|
|
63
|
+
* provider applies that user's entity read permission and row-level security per item, and every
|
|
64
|
+
* client ItemFilter passes the same AST screen as a RunView ExtraFilter before a provider sees it.
|
|
65
|
+
*/
|
|
66
|
+
export class DatasetResolverBase extends ResolverBase {
|
|
67
|
+
/** The session's user. A dataset read never runs without one: the provider applies no read checks then. */
|
|
68
|
+
RequireDatasetUser(userPayload) {
|
|
69
|
+
const user = this.GetUserFromPayload(userPayload);
|
|
70
|
+
if (!user) {
|
|
71
|
+
throw new Error('Dataset request refused: the session resolves to no user');
|
|
72
|
+
}
|
|
73
|
+
return user;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Screens every client ItemFilter: one statement, read-only, and subqueries only over entity base
|
|
77
|
+
* views the user can read. Throws on the first refusal. Returns the filters without null entries.
|
|
78
|
+
*/
|
|
79
|
+
ScreenItemFilters(itemFilters, provider, user) {
|
|
80
|
+
if (!itemFilters)
|
|
81
|
+
return undefined;
|
|
82
|
+
itemFilters.forEach((itemFilter, index) => {
|
|
83
|
+
if (itemFilter) {
|
|
84
|
+
this.assertClientClauseUsesEntityBaseViews(itemFilter.Filter, `ItemFilters[${index}].Filter`, provider, user);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
return itemFilters.filter((itemFilter) => itemFilter != null);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Applies the API encryption policy to each item's rows, as every other GraphQL read path does:
|
|
91
|
+
* an encrypted field the entity does not allow decrypted over the API leaves as ciphertext or the
|
|
92
|
+
* sentinel. Works on copies, because the rows can be the server cache's own frozen objects.
|
|
93
|
+
*/
|
|
94
|
+
async ProtectEncryptedFields(items, provider, user) {
|
|
95
|
+
return Promise.all(items.map(async (item) => {
|
|
96
|
+
const entity = provider.EntityByName(item.EntityName);
|
|
97
|
+
if (!item.Results?.length || !entity?.EncryptedFields.some((field) => !field.AllowDecryptInAPI)) {
|
|
98
|
+
return item;
|
|
99
|
+
}
|
|
100
|
+
const rows = item.Results.map((row) => ({ ...row }));
|
|
101
|
+
return { ...item, Results: await this.ArrayFilterEncryptedFieldsForAPI(item.EntityName, rows, user, provider, 'Name') };
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
let DatasetResolverExtended = class DatasetResolverExtended extends DatasetResolverBase {
|
|
62
106
|
async GetDatasetByName(DatasetName, { providers, userPayload }, ItemFilters) {
|
|
63
107
|
// Check API key scope authorization for dataset read
|
|
64
108
|
await this.CheckAPIKeyScopeAuthorization('dataset:read', DatasetName, userPayload);
|
|
109
|
+
const md = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true });
|
|
110
|
+
const user = this.RequireDatasetUser(userPayload);
|
|
111
|
+
const itemFilters = this.ScreenItemFilters(ItemFilters, md, user);
|
|
65
112
|
try {
|
|
66
|
-
const
|
|
67
|
-
const result = await md.GetDatasetByName(DatasetName, ItemFilters);
|
|
113
|
+
const result = await md.GetDatasetByName(DatasetName, itemFilters, user);
|
|
68
114
|
if (result) {
|
|
69
115
|
return {
|
|
70
116
|
DatasetID: result.DatasetID,
|
|
@@ -72,7 +118,7 @@ let DatasetResolverExtended = class DatasetResolverExtended extends ResolverBase
|
|
|
72
118
|
Success: result.Success,
|
|
73
119
|
Status: result.Status,
|
|
74
120
|
LatestUpdateDate: result.LatestUpdateDate,
|
|
75
|
-
Results: JSON.stringify(result.Results),
|
|
121
|
+
Results: JSON.stringify(await this.ProtectEncryptedFields(result.Results, md, user)),
|
|
76
122
|
};
|
|
77
123
|
}
|
|
78
124
|
else {
|
|
@@ -128,13 +174,15 @@ DatasetStatusResultType = __decorate([
|
|
|
128
174
|
ObjectType()
|
|
129
175
|
], DatasetStatusResultType);
|
|
130
176
|
export { DatasetStatusResultType };
|
|
131
|
-
let DatasetStatusResolver = class DatasetStatusResolver extends
|
|
177
|
+
let DatasetStatusResolver = class DatasetStatusResolver extends DatasetResolverBase {
|
|
132
178
|
async GetDatasetStatusByName(DatasetName, { providers, userPayload }, ItemFilters) {
|
|
133
179
|
// Check API key scope authorization for dataset read
|
|
134
180
|
await this.CheckAPIKeyScopeAuthorization('dataset:read', DatasetName, userPayload);
|
|
181
|
+
const md = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true });
|
|
182
|
+
const user = this.RequireDatasetUser(userPayload);
|
|
183
|
+
const itemFilters = this.ScreenItemFilters(ItemFilters, md, user);
|
|
135
184
|
try {
|
|
136
|
-
const
|
|
137
|
-
const result = await md.GetDatasetStatusByName(DatasetName, ItemFilters);
|
|
185
|
+
const result = await md.GetDatasetStatusByName(DatasetName, itemFilters, user);
|
|
138
186
|
if (result) {
|
|
139
187
|
return {
|
|
140
188
|
DatasetID: result.DatasetID,
|
|
@@ -160,11 +208,12 @@ let DatasetStatusResolver = class DatasetStatusResolver extends ResolverBase {
|
|
|
160
208
|
*/
|
|
161
209
|
async GetMultipleDatasetStatusByName(DatasetNames, { providers, userPayload }) {
|
|
162
210
|
const md = GetReadOnlyProvider(providers, { allowFallbackToReadWrite: true });
|
|
211
|
+
const user = this.RequireDatasetUser(userPayload);
|
|
163
212
|
const results = [];
|
|
164
213
|
// Execute all status checks in parallel
|
|
165
214
|
const statusPromises = DatasetNames.map(async (name) => {
|
|
166
215
|
await this.CheckAPIKeyScopeAuthorization('dataset:read', name, userPayload);
|
|
167
|
-
return md.GetDatasetStatusByName(name);
|
|
216
|
+
return md.GetDatasetStatusByName(name, undefined, user);
|
|
168
217
|
});
|
|
169
218
|
const statuses = await Promise.all(statusPromises);
|
|
170
219
|
for (const result of statuses) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatasetResolver.js","sourceRoot":"","sources":["../../src/resolvers/DatasetResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAO,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE5F,OAAO,
|
|
1
|
+
{"version":3,"file":"DatasetResolver.js","sourceRoot":"","sources":["../../src/resolvers/DatasetResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CompositeKey, DatabaseProviderBase
|
|
1
|
+
import { CompositeKey, DatabaseProviderBase } from '@memberjunction/core';
|
|
2
2
|
import { AppContext, UserPayload } from '../types.js';
|
|
3
3
|
import { CompositeKeyInputType } from '../generic/KeyInputOutputTypes.js';
|
|
4
4
|
import { ResolverBase } from '../generic/ResolverBase.js';
|
|
@@ -17,34 +17,19 @@ export declare class EntityRecordNameResult {
|
|
|
17
17
|
* Resolves a record's display NAME from its primary key — the lookup behind every foreign-key
|
|
18
18
|
* link, breadcrumb and picker label in the UI.
|
|
19
19
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* form-field FK control falls through to this query precisely WHEN the joined display column is
|
|
25
|
-
* denied, so the one case the fallback exists for was the case that leaked.
|
|
20
|
+
* Entity-level read permission is checked here ({@link ResolverBase.CheckUserReadPermissions}).
|
|
21
|
+
* Field- and row-level security are applied by the provider's lookup, for the acting user passed
|
|
22
|
+
* to it: when any field the name is built from is withheld, it answers with no name, and it reads
|
|
23
|
+
* only rows the user's read row filter allows. Without an acting user there is no lookup.
|
|
26
24
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* A field-level denial answers `Success: false` with no name rather than throwing. Callers
|
|
32
|
-
* already treat "no name" as "show the primary key", which is the intended degradation — and it
|
|
33
|
-
* keeps this query from becoming a probe that distinguishes "restricted" from "missing".
|
|
25
|
+
* A withheld name answers `Success: false` with the same status as a record that does not exist.
|
|
26
|
+
* Callers already treat "no name" as "show the primary key", and the identical answer keeps this
|
|
27
|
+
* query from becoming a probe that distinguishes "restricted" from "missing".
|
|
34
28
|
*/
|
|
35
29
|
export declare class EntityRecordNameResolver extends ResolverBase {
|
|
36
30
|
GetEntityRecordName(EntityName: string, primaryKey: CompositeKey, { providers, userPayload }: AppContext): Promise<EntityRecordNameResult>;
|
|
37
31
|
GetEntityRecordNames(info: EntityRecordNameInput[], { providers, userPayload }: AppContext): Promise<EntityRecordNameResult[]>;
|
|
38
32
|
InnerGetEntityRecordName(md: DatabaseProviderBase, EntityName: string, primaryKey: CompositeKeyInputType, userPayload?: UserPayload): Promise<EntityRecordNameResult>;
|
|
39
|
-
/**
|
|
40
|
-
* Whether field security withholds this entity's NAME field from the user.
|
|
41
|
-
*
|
|
42
|
-
* Resolves the name field the same way the provider's own lookup does — the designated
|
|
43
|
-
* `IsNameField`, else a field literally called `Name` — so the check cannot drift from the
|
|
44
|
-
* value it is guarding. Fails OPEN only where field security does not apply at all (flag off,
|
|
45
|
-
* no user, no name field), matching every other FLS gate.
|
|
46
|
-
*/
|
|
47
|
-
protected IsNameFieldDeniedToUser(entity: EntityInfo, contextUser?: UserInfo): boolean;
|
|
48
33
|
}
|
|
49
34
|
export default EntityRecordNameResolver;
|
|
50
35
|
//# sourceMappingURL=EntityRecordNameResolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityRecordNameResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/EntityRecordNameResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"EntityRecordNameResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/EntityRecordNameResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAA0B,MAAM,mCAAmC,CAAC;AAClG,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,qBACa,qBAAqB;IAEhC,UAAU,EAAE,MAAM,CAAC;IAGnB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,qBACa,sBAAsB;IAEjC,OAAO,EAAE,OAAO,CAAC;IAGjB,MAAM,EAAE,MAAM,CAAC;IAGf,YAAY,EAAE,YAAY,CAAC;IAG3B,UAAU,EAAE,MAAM,CAAC;IAGnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,qBACa,wBAAyB,SAAQ,YAAY;IAElD,mBAAmB,CACU,UAAU,EAAE,MAAM,EACD,UAAU,EAAE,YAAY,EACnE,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,UAAU,GAC5C,OAAO,CAAC,sBAAsB,CAAC;IAQ5B,oBAAoB,CACoB,IAAI,EAAE,qBAAqB,EAAE,EAClE,EAAC,SAAS,EAAE,WAAW,EAAC,EAAE,UAAU,GAC1C,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAY9B,wBAAwB,CAC5B,EAAE,EAAE,oBAAoB,EACxB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,qBAAqB,EACjC,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,sBAAsB,CAAC;CAiBnC;AAED,eAAe,wBAAwB,CAAC"}
|