@aws-amplify/graphql-model-transformer 0.8.0-beta.1 → 0.9.2
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/CHANGELOG.md +22 -4
- package/lib/definitions.d.ts +1 -0
- package/lib/definitions.d.ts.map +1 -1
- package/lib/definitions.js +2 -1
- package/lib/definitions.js.map +1 -1
- package/lib/graphql-model-transformer.d.ts +2 -1
- package/lib/graphql-model-transformer.d.ts.map +1 -1
- package/lib/graphql-model-transformer.js +64 -12
- package/lib/graphql-model-transformer.js.map +1 -1
- package/lib/graphql-types/common.d.ts +6 -2
- package/lib/graphql-types/common.d.ts.map +1 -1
- package/lib/graphql-types/common.js +65 -1
- package/lib/graphql-types/common.js.map +1 -1
- package/lib/resolvers/common.d.ts +1 -1
- package/lib/resolvers/common.d.ts.map +1 -1
- package/lib/resolvers/common.js +1 -2
- package/lib/resolvers/common.js.map +1 -1
- package/package.json +6 -6
- package/src/__tests__/__snapshots__/model-transformer.test.ts.snap +51 -3
- package/src/__tests__/model-transformer.test.ts +194 -13
- package/src/definitions.ts +2 -0
- package/src/graphql-model-transformer.ts +81 -12
- package/src/graphql-types/common.ts +97 -1
- package/src/resolvers/common.ts +1 -3
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
SyncConfig,
|
|
6
6
|
SyncUtils,
|
|
7
7
|
TransformerModelBase,
|
|
8
|
+
TransformerNestedStack,
|
|
8
9
|
} from '@aws-amplify/graphql-transformer-core';
|
|
9
10
|
import {
|
|
10
11
|
AppSyncDataSourceType,
|
|
@@ -20,6 +21,7 @@ import {
|
|
|
20
21
|
TransformerSchemaVisitStepContextProvider,
|
|
21
22
|
TransformerTransformSchemaStepContextProvider,
|
|
22
23
|
TransformerValidationStepContextProvider,
|
|
24
|
+
TransformerBeforeStepContextProvider,
|
|
23
25
|
} from '@aws-amplify/graphql-transformer-interfaces';
|
|
24
26
|
import { AttributeType, CfnTable, ITable, StreamViewType, Table, TableEncryption } from '@aws-cdk/aws-dynamodb';
|
|
25
27
|
import * as iam from '@aws-cdk/aws-iam';
|
|
@@ -51,8 +53,10 @@ import {
|
|
|
51
53
|
toPascalCase,
|
|
52
54
|
} from 'graphql-transformer-common';
|
|
53
55
|
import {
|
|
56
|
+
addDirectivesToOperation,
|
|
54
57
|
addModelConditionInputs,
|
|
55
58
|
createEnumModelFilters,
|
|
59
|
+
extendTypeWithDirectives,
|
|
56
60
|
makeCreateInputField,
|
|
57
61
|
makeDeleteInputField,
|
|
58
62
|
makeListQueryFilterInput,
|
|
@@ -60,6 +64,7 @@ import {
|
|
|
60
64
|
makeModelSortDirectionEnumObject,
|
|
61
65
|
makeMutationConditionInput,
|
|
62
66
|
makeUpdateInputField,
|
|
67
|
+
propagateApiKeyToNestedTypes,
|
|
63
68
|
} from './graphql-types';
|
|
64
69
|
import {
|
|
65
70
|
generateAuthExpressionForSandboxMode,
|
|
@@ -82,6 +87,7 @@ import {
|
|
|
82
87
|
import { FieldWrapper, InputObjectDefinitionWrapper, ObjectDefinitionWrapper } from './wrappers/object-definition-wrapper';
|
|
83
88
|
import { CfnRole } from '@aws-cdk/aws-iam';
|
|
84
89
|
import md5 from 'md5';
|
|
90
|
+
import { API_KEY_DIRECTIVE } from './definitions';
|
|
85
91
|
|
|
86
92
|
export type Nullable<T> = T | null;
|
|
87
93
|
export type OptionalAndNullable<T> = Partial<T>;
|
|
@@ -167,6 +173,37 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
167
173
|
this.options = this.getOptions(options);
|
|
168
174
|
}
|
|
169
175
|
|
|
176
|
+
before = (ctx: TransformerBeforeStepContextProvider) => {
|
|
177
|
+
// add model related-parameters to the root stack
|
|
178
|
+
ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS, {
|
|
179
|
+
description: 'The number of read IOPS the table should support.',
|
|
180
|
+
type: 'Number',
|
|
181
|
+
default: 5,
|
|
182
|
+
});
|
|
183
|
+
ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS, {
|
|
184
|
+
description: 'The number of write IOPS the table should support.',
|
|
185
|
+
type: 'Number',
|
|
186
|
+
default: 5,
|
|
187
|
+
});
|
|
188
|
+
ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBBillingMode, {
|
|
189
|
+
description: 'Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes.',
|
|
190
|
+
default: 'PAY_PER_REQUEST',
|
|
191
|
+
allowedValues: ['PAY_PER_REQUEST', 'PROVISIONED'],
|
|
192
|
+
});
|
|
193
|
+
ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBEnablePointInTimeRecovery, {
|
|
194
|
+
description: 'Whether to enable Point in Time Recovery on the table.',
|
|
195
|
+
type: 'String',
|
|
196
|
+
default: 'false',
|
|
197
|
+
allowedValues: ['true', 'false'],
|
|
198
|
+
});
|
|
199
|
+
ctx.stackManager.addParameter(ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption, {
|
|
200
|
+
description: 'Enable server side encryption powered by KMS.',
|
|
201
|
+
type: 'String',
|
|
202
|
+
default: 'true',
|
|
203
|
+
allowedValues: ['true', 'false'],
|
|
204
|
+
});
|
|
205
|
+
};
|
|
206
|
+
|
|
170
207
|
object = (definition: ObjectTypeDefinitionNode, directive: DirectiveNode, ctx: TransformerSchemaVisitStepContextProvider): void => {
|
|
171
208
|
const isTypeNameReserved =
|
|
172
209
|
definition.name.value === ctx.output.getQueryTypeName() ||
|
|
@@ -227,6 +264,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
227
264
|
this.ensureModelSortDirectionEnum(ctx);
|
|
228
265
|
for (const type of this.typesWithModelDirective) {
|
|
229
266
|
const def = ctx.output.getObject(type)!;
|
|
267
|
+
const hasAuth = def.directives!.some(dir => dir.name.value === 'auth');
|
|
230
268
|
|
|
231
269
|
// add Non Model type inputs
|
|
232
270
|
this.createNonModelInputs(ctx, def);
|
|
@@ -246,6 +284,24 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
246
284
|
if (ctx.isProjectUsingDataStore()) {
|
|
247
285
|
this.addModelSyncFields(ctx, type);
|
|
248
286
|
}
|
|
287
|
+
// global auth check
|
|
288
|
+
if (!hasAuth && ctx.sandboxModeEnabled && ctx.authConfig.defaultAuthentication.authenticationType !== 'API_KEY') {
|
|
289
|
+
const apiKeyDirArray = [makeDirective(API_KEY_DIRECTIVE, [])];
|
|
290
|
+
extendTypeWithDirectives(ctx, def.name.value, apiKeyDirArray);
|
|
291
|
+
propagateApiKeyToNestedTypes(ctx as TransformerContextProvider, def, new Set<string>());
|
|
292
|
+
for (let operationField of queryFields) {
|
|
293
|
+
const operationName = operationField.name.value;
|
|
294
|
+
addDirectivesToOperation(ctx, ctx.output.getQueryTypeName()!, operationName, apiKeyDirArray);
|
|
295
|
+
}
|
|
296
|
+
for (let operationField of mutationFields) {
|
|
297
|
+
const operationName = operationField.name.value;
|
|
298
|
+
addDirectivesToOperation(ctx, ctx.output.getMutationTypeName()!, operationName, apiKeyDirArray);
|
|
299
|
+
}
|
|
300
|
+
for (let operationField of subscriptionsFields) {
|
|
301
|
+
const operationName = operationField.name.value;
|
|
302
|
+
addDirectivesToOperation(ctx, ctx.output.getSubscriptionTypeName()!, operationName, apiKeyDirArray);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
249
305
|
}
|
|
250
306
|
};
|
|
251
307
|
|
|
@@ -274,10 +330,12 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
274
330
|
default:
|
|
275
331
|
throw new Error('Unknown query field type');
|
|
276
332
|
}
|
|
333
|
+
// TODO: add mechanism to add an auth like rule to all non auth @models
|
|
334
|
+
// this way we can just depend on auth to add the check
|
|
277
335
|
resolver.addToSlot(
|
|
278
336
|
'postAuth',
|
|
279
337
|
MappingTemplate.s3MappingTemplateFromString(
|
|
280
|
-
generateAuthExpressionForSandboxMode(context),
|
|
338
|
+
generateAuthExpressionForSandboxMode(context.sandboxModeEnabled),
|
|
281
339
|
`${query.typeName}.${query.fieldName}.{slotName}.{slotIndex}.req.vtl`,
|
|
282
340
|
),
|
|
283
341
|
);
|
|
@@ -304,7 +362,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
304
362
|
resolver.addToSlot(
|
|
305
363
|
'postAuth',
|
|
306
364
|
MappingTemplate.s3MappingTemplateFromString(
|
|
307
|
-
generateAuthExpressionForSandboxMode(context),
|
|
365
|
+
generateAuthExpressionForSandboxMode(context.sandboxModeEnabled),
|
|
308
366
|
`${mutation.typeName}.${mutation.fieldName}.{slotName}.{slotIndex}.req.vtl`,
|
|
309
367
|
),
|
|
310
368
|
);
|
|
@@ -352,7 +410,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
352
410
|
resolver.addToSlot(
|
|
353
411
|
'postAuth',
|
|
354
412
|
MappingTemplate.s3MappingTemplateFromString(
|
|
355
|
-
generateAuthExpressionForSandboxMode(context),
|
|
413
|
+
generateAuthExpressionForSandboxMode(context.sandboxModeEnabled),
|
|
356
414
|
`${subscription.typeName}.${subscription.fieldName}.{slotName}.{slotIndex}.req.vtl`,
|
|
357
415
|
),
|
|
358
416
|
);
|
|
@@ -752,7 +810,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
752
810
|
typeName: 'Subscription',
|
|
753
811
|
fieldName: fieldName,
|
|
754
812
|
type: SubscriptionFieldType.ON_CREATE,
|
|
755
|
-
resolverLogicalId:
|
|
813
|
+
resolverLogicalId: ResolverResourceIDs.ResolverResourceID('Subscription', fieldName),
|
|
756
814
|
});
|
|
757
815
|
}
|
|
758
816
|
}
|
|
@@ -763,7 +821,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
763
821
|
typeName: 'Subscription',
|
|
764
822
|
fieldName: fieldName,
|
|
765
823
|
type: SubscriptionFieldType.ON_UPDATE,
|
|
766
|
-
resolverLogicalId:
|
|
824
|
+
resolverLogicalId: ResolverResourceIDs.ResolverResourceID('Subscription', fieldName),
|
|
767
825
|
});
|
|
768
826
|
}
|
|
769
827
|
}
|
|
@@ -774,7 +832,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
774
832
|
typeName: 'Subscription',
|
|
775
833
|
fieldName: fieldName,
|
|
776
834
|
type: SubscriptionFieldType.ON_DELETE,
|
|
777
|
-
resolverLogicalId:
|
|
835
|
+
resolverLogicalId: ResolverResourceIDs.ResolverResourceID('Subscription', fieldName),
|
|
778
836
|
});
|
|
779
837
|
}
|
|
780
838
|
}
|
|
@@ -1085,30 +1143,42 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
1085
1143
|
description: 'The number of read IOPS the table should support.',
|
|
1086
1144
|
type: 'Number',
|
|
1087
1145
|
default: 5,
|
|
1088
|
-
})
|
|
1146
|
+
});
|
|
1089
1147
|
const writeIops = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS, {
|
|
1090
1148
|
description: 'The number of write IOPS the table should support.',
|
|
1091
1149
|
type: 'Number',
|
|
1092
1150
|
default: 5,
|
|
1093
|
-
})
|
|
1151
|
+
});
|
|
1094
1152
|
const billingMode = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBBillingMode, {
|
|
1095
1153
|
description: 'Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes.',
|
|
1096
1154
|
type: 'String',
|
|
1097
1155
|
default: 'PAY_PER_REQUEST',
|
|
1098
1156
|
allowedValues: ['PAY_PER_REQUEST', 'PROVISIONED'],
|
|
1099
|
-
})
|
|
1157
|
+
});
|
|
1100
1158
|
const pointInTimeRecovery = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBEnablePointInTimeRecovery, {
|
|
1101
1159
|
description: 'Whether to enable Point in Time Recovery on the table.',
|
|
1102
1160
|
type: 'String',
|
|
1103
1161
|
default: 'false',
|
|
1104
1162
|
allowedValues: ['true', 'false'],
|
|
1105
|
-
})
|
|
1163
|
+
});
|
|
1106
1164
|
const enableSSE = new cdk.CfnParameter(stack, ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption, {
|
|
1107
1165
|
description: 'Enable server side encryption powered by KMS.',
|
|
1108
1166
|
type: 'String',
|
|
1109
1167
|
default: 'true',
|
|
1110
1168
|
allowedValues: ['true', 'false'],
|
|
1111
|
-
})
|
|
1169
|
+
});
|
|
1170
|
+
// add the connection between the root and nested stack so the values can be passed down
|
|
1171
|
+
(stack as TransformerNestedStack).setParameter(readIops.node.id, cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBModelTableReadIOPS));
|
|
1172
|
+
(stack as TransformerNestedStack).setParameter(writeIops.node.id, cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBModelTableWriteIOPS));
|
|
1173
|
+
(stack as TransformerNestedStack).setParameter(billingMode.node.id, cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBBillingMode));
|
|
1174
|
+
(stack as TransformerNestedStack).setParameter(
|
|
1175
|
+
pointInTimeRecovery.node.id,
|
|
1176
|
+
cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBEnablePointInTimeRecovery),
|
|
1177
|
+
);
|
|
1178
|
+
(stack as TransformerNestedStack).setParameter(
|
|
1179
|
+
enableSSE.node.id,
|
|
1180
|
+
cdk.Fn.ref(ResourceConstants.PARAMETERS.DynamoDBEnableServerSideEncryption),
|
|
1181
|
+
);
|
|
1112
1182
|
|
|
1113
1183
|
// Add conditions.
|
|
1114
1184
|
// eslint-disable-next-line no-new
|
|
@@ -1193,7 +1263,6 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
1193
1263
|
|
|
1194
1264
|
const cfnDataSource = dataSource.node.defaultChild as CfnDataSource;
|
|
1195
1265
|
cfnDataSource.addDependsOn(role.node.defaultChild as CfnRole);
|
|
1196
|
-
cfnDataSource.overrideLogicalId(datasourceRoleLogicalID);
|
|
1197
1266
|
|
|
1198
1267
|
if (context.isProjectUsingDataStore()) {
|
|
1199
1268
|
const datasourceDynamoDb = cfnDataSource.dynamoDbConfig as any;
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
import { TransformerTransformSchemaStepContextProvider } from '@aws-amplify/graphql-transformer-interfaces';
|
|
1
|
+
import { TransformerContextProvider, TransformerTransformSchemaStepContextProvider } from '@aws-amplify/graphql-transformer-interfaces';
|
|
2
2
|
import {
|
|
3
|
+
DirectiveNode,
|
|
3
4
|
EnumTypeDefinitionNode,
|
|
4
5
|
FieldDefinitionNode,
|
|
5
6
|
InputObjectTypeDefinitionNode,
|
|
6
7
|
Kind,
|
|
8
|
+
NamedTypeNode,
|
|
7
9
|
ObjectTypeDefinitionNode,
|
|
8
10
|
TypeDefinitionNode,
|
|
9
11
|
} from 'graphql';
|
|
10
12
|
import {
|
|
13
|
+
blankObjectExtension,
|
|
11
14
|
DEFAULT_SCALARS,
|
|
15
|
+
extendFieldWithDirectives,
|
|
16
|
+
extensionWithDirectives,
|
|
17
|
+
getBaseType,
|
|
12
18
|
makeArgument,
|
|
13
19
|
makeDirective,
|
|
14
20
|
makeField,
|
|
@@ -29,6 +35,7 @@ import {
|
|
|
29
35
|
SIZE_CONDITIONS,
|
|
30
36
|
STRING_CONDITIONS,
|
|
31
37
|
STRING_FUNCTIONS,
|
|
38
|
+
API_KEY_DIRECTIVE,
|
|
32
39
|
} from '../definitions';
|
|
33
40
|
import {
|
|
34
41
|
EnumWrapper,
|
|
@@ -245,7 +252,96 @@ export function makeEnumFilterInput(fieldWrapper: FieldWrapper): InputObjectType
|
|
|
245
252
|
return input.serialize();
|
|
246
253
|
}
|
|
247
254
|
|
|
255
|
+
export const addDirectivesToField = (
|
|
256
|
+
ctx: TransformerTransformSchemaStepContextProvider,
|
|
257
|
+
typeName: string,
|
|
258
|
+
fieldName: string,
|
|
259
|
+
directives: Array<DirectiveNode>,
|
|
260
|
+
) => {
|
|
261
|
+
const type = ctx.output.getType(typeName) as ObjectTypeDefinitionNode;
|
|
262
|
+
if (type) {
|
|
263
|
+
const field = type.fields?.find(f => f.name.value === fieldName);
|
|
264
|
+
if (field) {
|
|
265
|
+
const newFields = [...type.fields!.filter(f => f.name.value !== field.name.value), extendFieldWithDirectives(field, directives)];
|
|
266
|
+
|
|
267
|
+
const newType = {
|
|
268
|
+
...type,
|
|
269
|
+
fields: newFields,
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
ctx.output.putType(newType);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
export const addDirectivesToOperation = (
|
|
278
|
+
ctx: TransformerTransformSchemaStepContextProvider,
|
|
279
|
+
typeName: string,
|
|
280
|
+
operationName: string,
|
|
281
|
+
directives: Array<DirectiveNode>,
|
|
282
|
+
) => {
|
|
283
|
+
// add directives to the given operation
|
|
284
|
+
addDirectivesToField(ctx, typeName, operationName, directives);
|
|
285
|
+
|
|
286
|
+
// add the directives to the result type of the operation
|
|
287
|
+
const type = ctx.output.getType(typeName) as ObjectTypeDefinitionNode;
|
|
288
|
+
if (type) {
|
|
289
|
+
const field = type.fields!.find(f => f.name.value === operationName);
|
|
290
|
+
|
|
291
|
+
if (field) {
|
|
292
|
+
const returnFieldType = field.type as NamedTypeNode;
|
|
293
|
+
|
|
294
|
+
if (returnFieldType.name) {
|
|
295
|
+
const returnTypeName = returnFieldType.name.value;
|
|
296
|
+
|
|
297
|
+
extendTypeWithDirectives(ctx, returnTypeName, directives);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
export const extendTypeWithDirectives = (
|
|
304
|
+
ctx: TransformerTransformSchemaStepContextProvider,
|
|
305
|
+
typeName: string,
|
|
306
|
+
directives: Array<DirectiveNode>,
|
|
307
|
+
): void => {
|
|
308
|
+
let objectTypeExtension = blankObjectExtension(typeName);
|
|
309
|
+
objectTypeExtension = extensionWithDirectives(objectTypeExtension, directives);
|
|
310
|
+
ctx.output.addObjectExtension(objectTypeExtension);
|
|
311
|
+
};
|
|
312
|
+
|
|
248
313
|
export function makeModelSortDirectionEnumObject(): EnumTypeDefinitionNode {
|
|
249
314
|
const name = 'ModelSortDirection';
|
|
250
315
|
return EnumWrapper.create(name, ['ASC', 'DESC']).serialize();
|
|
251
316
|
}
|
|
317
|
+
// the smaller version of it's @auth equivalent since we only support
|
|
318
|
+
// apikey as the only global auth rule
|
|
319
|
+
export const propagateApiKeyToNestedTypes = (
|
|
320
|
+
ctx: TransformerContextProvider,
|
|
321
|
+
def: ObjectTypeDefinitionNode,
|
|
322
|
+
seenNonModelTypes: Set<string>,
|
|
323
|
+
) => {
|
|
324
|
+
const nonModelTypePredicate = (fieldType: TypeDefinitionNode): TypeDefinitionNode | undefined => {
|
|
325
|
+
if (fieldType) {
|
|
326
|
+
if (fieldType.kind !== 'ObjectTypeDefinition') {
|
|
327
|
+
return undefined;
|
|
328
|
+
}
|
|
329
|
+
const typeModel = fieldType.directives!.find(dir => dir.name.value === 'model');
|
|
330
|
+
return typeModel !== undefined ? undefined : fieldType;
|
|
331
|
+
}
|
|
332
|
+
return fieldType;
|
|
333
|
+
};
|
|
334
|
+
const nonModelFieldTypes = def
|
|
335
|
+
.fields!.map(f => ctx.output.getType(getBaseType(f.type)) as TypeDefinitionNode)
|
|
336
|
+
.filter(nonModelTypePredicate);
|
|
337
|
+
for (const nonModelFieldType of nonModelFieldTypes) {
|
|
338
|
+
const nonModelName = nonModelFieldType.name.value;
|
|
339
|
+
const hasSeenType = seenNonModelTypes.has(nonModelName);
|
|
340
|
+
const hasApiKey = nonModelFieldType.directives?.some(dir => dir.name.value === API_KEY_DIRECTIVE) ?? false;
|
|
341
|
+
if (!hasSeenType && !hasApiKey) {
|
|
342
|
+
seenNonModelTypes.add(nonModelName);
|
|
343
|
+
extendTypeWithDirectives(ctx, nonModelName, [makeDirective(API_KEY_DIRECTIVE, [])]);
|
|
344
|
+
propagateApiKeyToNestedTypes(ctx, nonModelFieldType as ObjectTypeDefinitionNode, seenNonModelTypes);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
};
|
package/src/resolvers/common.ts
CHANGED
|
@@ -96,10 +96,8 @@ export const generateResolverKey = (typeName: string, fieldName: string): string
|
|
|
96
96
|
|
|
97
97
|
/**
|
|
98
98
|
* Util function to generate sandbox mode expression
|
|
99
|
-
* @param ctx context to get sandbox mode
|
|
100
99
|
*/
|
|
101
|
-
export const generateAuthExpressionForSandboxMode = (
|
|
102
|
-
const enabled = ctx.resourceHelper.api.sandboxModeEnabled;
|
|
100
|
+
export const generateAuthExpressionForSandboxMode = (enabled: boolean): string => {
|
|
103
101
|
let exp;
|
|
104
102
|
|
|
105
103
|
if (enabled) exp = iff(notEquals(methodCall(ref('util.authType')), str(API_KEY)), methodCall(ref('util.unauthorized')));
|