@ttoss/appsync-api 0.6.0 → 0.7.1

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.
@@ -539,7 +539,7 @@ var getPackageLambdaLayerStackName = (packageName) => {
539
539
  // package.json
540
540
  var package_default = {
541
541
  name: "@ttoss/appsync-api",
542
- version: "0.6.0",
542
+ version: "0.7.1",
543
543
  description: "A library for building GraphQL APIs for AWS AppSync.",
544
544
  license: "UNLICENSED",
545
545
  author: "ttoss",
@@ -583,8 +583,8 @@ var package_default = {
583
583
  },
584
584
  devDependencies: {
585
585
  "@ttoss/config": "^1.27.0",
586
- "@types/aws-lambda": "^8.10.109",
587
- carlin: "^1.22.0",
586
+ "@types/aws-lambda": "^8.10.110",
587
+ carlin: "^1.22.1",
588
588
  graphql: "^16.6.0",
589
589
  "graphql-compose": "^9.0.10"
590
590
  },
@@ -616,10 +616,12 @@ var AppSyncLambdaFunctionLogicalId = "AppSyncLambdaFunction";
616
616
  var AppSyncLambdaFunctionAppSyncDataSourceLogicalId = "AppSyncLambdaFunctionAppSyncDataSource";
617
617
  var AppSyncGraphQLApiKeyLogicalId = "AppSyncGraphQLApiKey";
618
618
  var createApiTemplate = ({
619
- apiKey,
619
+ additionalAuthenticationProviders,
620
+ authenticationType = "AMAZON_COGNITO_USER_POOLS",
620
621
  schemaComposer,
621
622
  dataSource,
622
- lambdaFunction
623
+ lambdaFunction,
624
+ userPoolConfig
623
625
  }) => {
624
626
  const sdl = schemaComposer.toSDL();
625
627
  graphql.validateSchema(schemaComposer.buildSchema());
@@ -671,7 +673,7 @@ var createApiTemplate = ({
671
673
  [AppSyncGraphQLApiLogicalId]: {
672
674
  Type: "AWS::AppSync::GraphQLApi",
673
675
  Properties: {
674
- AuthenticationType: "AWS_IAM",
676
+ AuthenticationType: authenticationType,
675
677
  Name: {
676
678
  "Fn::Join": [
677
679
  ":",
@@ -719,10 +721,28 @@ var createApiTemplate = ({
719
721
  }
720
722
  },
721
723
  Outputs: {
722
- [AppSyncGraphQLApiLogicalId]: {
724
+ AppSyncApiGraphQLUrl: {
725
+ Export: {
726
+ Name: {
727
+ "Fn::Join": [
728
+ ":",
729
+ [{ Ref: "AWS::StackName" }, "AppSyncApiGraphQLUrl"]
730
+ ]
731
+ }
732
+ },
723
733
  Value: {
724
734
  "Fn::GetAtt": [AppSyncGraphQLApiLogicalId, "GraphQLUrl"]
725
735
  }
736
+ },
737
+ AppSyncApiArn: {
738
+ Export: {
739
+ Name: {
740
+ "Fn::Join": [":", [{ Ref: "AWS::StackName" }, "AppSyncApiArn"]]
741
+ }
742
+ },
743
+ Value: {
744
+ "Fn::GetAtt": [AppSyncGraphQLApiLogicalId, "Arn"]
745
+ }
726
746
  }
727
747
  }
728
748
  };
@@ -743,12 +763,16 @@ var createApiTemplate = ({
743
763
  }
744
764
  };
745
765
  });
766
+ const apiKey = additionalAuthenticationProviders?.includes("API_KEY") || authenticationType === "API_KEY";
767
+ const cognitoUserPoolAuth = additionalAuthenticationProviders?.includes("AMAZON_COGNITO_USER_POOLS") || authenticationType === "AMAZON_COGNITO_USER_POOLS";
768
+ if (additionalAuthenticationProviders) {
769
+ template.Resources[AppSyncGraphQLApiLogicalId].Properties.AdditionalAuthenticationProviders = additionalAuthenticationProviders?.map((provider) => {
770
+ return {
771
+ AuthenticationType: provider
772
+ };
773
+ });
774
+ }
746
775
  if (apiKey) {
747
- template.Resources[AppSyncGraphQLApiLogicalId].Properties.AdditionalAuthenticationProvider = [
748
- {
749
- AuthenticationType: "API_KEY"
750
- }
751
- ];
752
776
  template.Resources[AppSyncGraphQLApiKeyLogicalId] = {
753
777
  Type: "AWS::AppSync::ApiKey",
754
778
  Properties: {
@@ -764,6 +788,24 @@ var createApiTemplate = ({
764
788
  }
765
789
  };
766
790
  }
791
+ if (cognitoUserPoolAuth) {
792
+ if (!userPoolConfig) {
793
+ throw new Error(
794
+ "userPoolConfig is required when using AMAZON_COGNITO_USER_POOLS authentication."
795
+ );
796
+ }
797
+ template.Resources[AppSyncGraphQLApiLogicalId].Properties.UserPoolConfig = {
798
+ AppIdClientRegex: userPoolConfig.appIdClientRegex,
799
+ AwsRegion: userPoolConfig.awsRegion,
800
+ DefaultAction: userPoolConfig.defaultAction,
801
+ UserPoolId: userPoolConfig.userPoolId
802
+ };
803
+ }
804
+ if (lambdaFunction.environment?.variables) {
805
+ template.Resources[AppSyncLambdaFunctionLogicalId].Properties.Environment = {
806
+ Variables: lambdaFunction.environment.variables
807
+ };
808
+ }
767
809
  return template;
768
810
  };
769
811
 
package/dist/esm/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
2
  import {
3
3
  AppSyncGraphQLSchemaLogicalId
4
- } from "./chunk-MENSBKNQ.js";
4
+ } from "./chunk-F5DPPZQE.js";
5
5
  import "./chunk-NQOARNEJ.js";
6
6
 
7
7
  // src/cli.ts
package/dist/esm/index.js CHANGED
@@ -1,25 +1,21 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
2
  import {
3
3
  createApiTemplate
4
- } from "./chunk-MENSBKNQ.js";
4
+ } from "./chunk-F5DPPZQE.js";
5
5
  import "./chunk-NQOARNEJ.js";
6
6
 
7
- // src/index.ts
8
- import { schemaComposer } from "graphql-compose";
9
-
10
7
  // src/createAppSyncResolverHandler.ts
11
8
  var createAppSyncResolverHandler = ({
12
- schemaComposer: schemaComposer2
9
+ schemaComposer
13
10
  }) => {
14
11
  return async (event, context) => {
15
12
  const { info, arguments: args, source } = event;
16
13
  const { parentTypeName, fieldName } = info;
17
- const resolver = schemaComposer2.getResolveMethods()[parentTypeName][fieldName];
18
- return resolver(source, args, context, info);
14
+ const resolver = schemaComposer.getResolveMethods()[parentTypeName][fieldName];
15
+ return resolver(source, args, { ...context, ...event.identity }, info);
19
16
  };
20
17
  };
21
18
  export {
22
19
  createApiTemplate,
23
- createAppSyncResolverHandler,
24
- schemaComposer
20
+ createAppSyncResolverHandler
25
21
  };
package/dist/index.d.ts CHANGED
@@ -1,20 +1,31 @@
1
1
  import { SchemaComposer } from 'graphql-compose';
2
- export { ResolverResolveParams, schemaComposer } from 'graphql-compose';
3
2
  import { CloudFormationTemplate } from '@ttoss/cloudformation';
4
3
  import { AppSyncResolverHandler as AppSyncResolverHandler$1 } from 'aws-lambda';
4
+ export { AppSyncIdentityCognito } from 'aws-lambda';
5
5
 
6
- type Role = string | {
6
+ type StringOrImport = string | {
7
7
  'Fn::ImportValue': string;
8
8
  };
9
- declare const createApiTemplate: ({ apiKey, schemaComposer, dataSource, lambdaFunction, }: {
10
- apiKey?: boolean | undefined;
9
+ type AuthenticationType = 'AMAZON_COGNITO_USER_POOLS' | 'API_KEY';
10
+ declare const createApiTemplate: ({ additionalAuthenticationProviders, authenticationType, schemaComposer, dataSource, lambdaFunction, userPoolConfig, }: {
11
+ additionalAuthenticationProviders?: AuthenticationType[] | undefined;
12
+ authenticationType?: AuthenticationType | undefined;
11
13
  schemaComposer: SchemaComposer<any>;
12
14
  dataSource: {
13
- roleArn: Role;
15
+ roleArn: StringOrImport;
14
16
  };
15
17
  lambdaFunction: {
16
- roleArn: Role;
18
+ environment?: {
19
+ variables: Record<string, string>;
20
+ };
21
+ roleArn: StringOrImport;
17
22
  };
23
+ userPoolConfig?: {
24
+ appIdClientRegex: StringOrImport;
25
+ awsRegion: StringOrImport;
26
+ defaultAction: 'ALLOW' | 'DENY';
27
+ userPoolId: StringOrImport;
28
+ } | undefined;
18
29
  }) => CloudFormationTemplate;
19
30
 
20
31
  type AppSyncResolverHandler<TArguments, TResult, TSource = Record<string, any> | null> = AppSyncResolverHandler$1<TArguments, TResult, TSource>;
package/dist/index.js CHANGED
@@ -471,11 +471,9 @@ var require_tslib = __commonJS({
471
471
  var src_exports = {};
472
472
  __export(src_exports, {
473
473
  createApiTemplate: () => createApiTemplate,
474
- createAppSyncResolverHandler: () => createAppSyncResolverHandler,
475
- schemaComposer: () => import_graphql_compose2.schemaComposer
474
+ createAppSyncResolverHandler: () => createAppSyncResolverHandler
476
475
  });
477
476
  module.exports = __toCommonJS(src_exports);
478
- var import_graphql_compose2 = require("graphql-compose");
479
477
 
480
478
  // src/createApiTemplate.ts
481
479
  var import_graphql_compose = require("graphql-compose");
@@ -572,7 +570,7 @@ var getPackageLambdaLayerStackName = (packageName) => {
572
570
  // package.json
573
571
  var package_default = {
574
572
  name: "@ttoss/appsync-api",
575
- version: "0.6.0",
573
+ version: "0.7.1",
576
574
  description: "A library for building GraphQL APIs for AWS AppSync.",
577
575
  license: "UNLICENSED",
578
576
  author: "ttoss",
@@ -616,8 +614,8 @@ var package_default = {
616
614
  },
617
615
  devDependencies: {
618
616
  "@ttoss/config": "^1.27.0",
619
- "@types/aws-lambda": "^8.10.109",
620
- carlin: "^1.22.0",
617
+ "@types/aws-lambda": "^8.10.110",
618
+ carlin: "^1.22.1",
621
619
  graphql: "^16.6.0",
622
620
  "graphql-compose": "^9.0.10"
623
621
  },
@@ -649,14 +647,16 @@ var AppSyncLambdaFunctionLogicalId = "AppSyncLambdaFunction";
649
647
  var AppSyncLambdaFunctionAppSyncDataSourceLogicalId = "AppSyncLambdaFunctionAppSyncDataSource";
650
648
  var AppSyncGraphQLApiKeyLogicalId = "AppSyncGraphQLApiKey";
651
649
  var createApiTemplate = ({
652
- apiKey,
653
- schemaComposer: schemaComposer2,
650
+ additionalAuthenticationProviders,
651
+ authenticationType = "AMAZON_COGNITO_USER_POOLS",
652
+ schemaComposer,
654
653
  dataSource,
655
- lambdaFunction
654
+ lambdaFunction,
655
+ userPoolConfig
656
656
  }) => {
657
- const sdl = schemaComposer2.toSDL();
658
- import_graphql_compose.graphql.validateSchema(schemaComposer2.buildSchema());
659
- const resolveMethods = schemaComposer2.getResolveMethods();
657
+ const sdl = schemaComposer.toSDL();
658
+ import_graphql_compose.graphql.validateSchema(schemaComposer.buildSchema());
659
+ const resolveMethods = schemaComposer.getResolveMethods();
660
660
  const resolveMethodsEntries = Object.entries(resolveMethods).flatMap(
661
661
  ([typeName, fieldResolvers]) => {
662
662
  return Object.entries(fieldResolvers).map(([fieldName]) => {
@@ -704,7 +704,7 @@ var createApiTemplate = ({
704
704
  [AppSyncGraphQLApiLogicalId]: {
705
705
  Type: "AWS::AppSync::GraphQLApi",
706
706
  Properties: {
707
- AuthenticationType: "AWS_IAM",
707
+ AuthenticationType: authenticationType,
708
708
  Name: {
709
709
  "Fn::Join": [
710
710
  ":",
@@ -752,10 +752,28 @@ var createApiTemplate = ({
752
752
  }
753
753
  },
754
754
  Outputs: {
755
- [AppSyncGraphQLApiLogicalId]: {
755
+ AppSyncApiGraphQLUrl: {
756
+ Export: {
757
+ Name: {
758
+ "Fn::Join": [
759
+ ":",
760
+ [{ Ref: "AWS::StackName" }, "AppSyncApiGraphQLUrl"]
761
+ ]
762
+ }
763
+ },
756
764
  Value: {
757
765
  "Fn::GetAtt": [AppSyncGraphQLApiLogicalId, "GraphQLUrl"]
758
766
  }
767
+ },
768
+ AppSyncApiArn: {
769
+ Export: {
770
+ Name: {
771
+ "Fn::Join": [":", [{ Ref: "AWS::StackName" }, "AppSyncApiArn"]]
772
+ }
773
+ },
774
+ Value: {
775
+ "Fn::GetAtt": [AppSyncGraphQLApiLogicalId, "Arn"]
776
+ }
759
777
  }
760
778
  }
761
779
  };
@@ -776,12 +794,16 @@ var createApiTemplate = ({
776
794
  }
777
795
  };
778
796
  });
797
+ const apiKey = additionalAuthenticationProviders?.includes("API_KEY") || authenticationType === "API_KEY";
798
+ const cognitoUserPoolAuth = additionalAuthenticationProviders?.includes("AMAZON_COGNITO_USER_POOLS") || authenticationType === "AMAZON_COGNITO_USER_POOLS";
799
+ if (additionalAuthenticationProviders) {
800
+ template.Resources[AppSyncGraphQLApiLogicalId].Properties.AdditionalAuthenticationProviders = additionalAuthenticationProviders?.map((provider) => {
801
+ return {
802
+ AuthenticationType: provider
803
+ };
804
+ });
805
+ }
779
806
  if (apiKey) {
780
- template.Resources[AppSyncGraphQLApiLogicalId].Properties.AdditionalAuthenticationProvider = [
781
- {
782
- AuthenticationType: "API_KEY"
783
- }
784
- ];
785
807
  template.Resources[AppSyncGraphQLApiKeyLogicalId] = {
786
808
  Type: "AWS::AppSync::ApiKey",
787
809
  Properties: {
@@ -797,23 +819,40 @@ var createApiTemplate = ({
797
819
  }
798
820
  };
799
821
  }
822
+ if (cognitoUserPoolAuth) {
823
+ if (!userPoolConfig) {
824
+ throw new Error(
825
+ "userPoolConfig is required when using AMAZON_COGNITO_USER_POOLS authentication."
826
+ );
827
+ }
828
+ template.Resources[AppSyncGraphQLApiLogicalId].Properties.UserPoolConfig = {
829
+ AppIdClientRegex: userPoolConfig.appIdClientRegex,
830
+ AwsRegion: userPoolConfig.awsRegion,
831
+ DefaultAction: userPoolConfig.defaultAction,
832
+ UserPoolId: userPoolConfig.userPoolId
833
+ };
834
+ }
835
+ if (lambdaFunction.environment?.variables) {
836
+ template.Resources[AppSyncLambdaFunctionLogicalId].Properties.Environment = {
837
+ Variables: lambdaFunction.environment.variables
838
+ };
839
+ }
800
840
  return template;
801
841
  };
802
842
 
803
843
  // src/createAppSyncResolverHandler.ts
804
844
  var createAppSyncResolverHandler = ({
805
- schemaComposer: schemaComposer2
845
+ schemaComposer
806
846
  }) => {
807
847
  return async (event, context) => {
808
848
  const { info, arguments: args, source } = event;
809
849
  const { parentTypeName, fieldName } = info;
810
- const resolver = schemaComposer2.getResolveMethods()[parentTypeName][fieldName];
811
- return resolver(source, args, context, info);
850
+ const resolver = schemaComposer.getResolveMethods()[parentTypeName][fieldName];
851
+ return resolver(source, args, { ...context, ...event.identity }, info);
812
852
  };
813
853
  };
814
854
  // Annotate the CommonJS export names for ESM import in node:
815
855
  0 && (module.exports = {
816
856
  createApiTemplate,
817
- createAppSyncResolverHandler,
818
- schemaComposer
857
+ createAppSyncResolverHandler
819
858
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ttoss/appsync-api",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
4
4
  "description": "A library for building GraphQL APIs for AWS AppSync.",
5
5
  "license": "UNLICENSED",
6
6
  "author": "ttoss",
@@ -44,8 +44,8 @@
44
44
  },
45
45
  "devDependencies": {
46
46
  "@ttoss/config": "^1.27.0",
47
- "@types/aws-lambda": "^8.10.109",
48
- "carlin": "^1.22.0",
47
+ "@types/aws-lambda": "^8.10.110",
48
+ "carlin": "^1.22.1",
49
49
  "graphql": "^16.6.0",
50
50
  "graphql-compose": "^9.0.10"
51
51
  },
@@ -68,5 +68,5 @@
68
68
  ]
69
69
  }
70
70
  },
71
- "gitHead": "6c5898425e2847fed46511ae1e573ff8dc3eb1d4"
71
+ "gitHead": "54403777733bc033dd317217f8cd679ee8244bba"
72
72
  }
@@ -14,25 +14,39 @@ const AppSyncLambdaFunctionAppSyncDataSourceLogicalId =
14
14
 
15
15
  export const AppSyncGraphQLApiKeyLogicalId = 'AppSyncGraphQLApiKey';
16
16
 
17
- type Role =
17
+ type StringOrImport =
18
18
  | string
19
19
  | {
20
20
  'Fn::ImportValue': string;
21
21
  };
22
22
 
23
+ type AuthenticationType = 'AMAZON_COGNITO_USER_POOLS' | 'API_KEY';
24
+
23
25
  export const createApiTemplate = ({
24
- apiKey,
26
+ additionalAuthenticationProviders,
27
+ authenticationType = 'AMAZON_COGNITO_USER_POOLS',
25
28
  schemaComposer,
26
29
  dataSource,
27
30
  lambdaFunction,
31
+ userPoolConfig,
28
32
  }: {
29
- apiKey?: boolean;
33
+ additionalAuthenticationProviders?: AuthenticationType[];
34
+ authenticationType?: AuthenticationType;
30
35
  schemaComposer: SchemaComposer<any>;
31
36
  dataSource: {
32
- roleArn: Role;
37
+ roleArn: StringOrImport;
33
38
  };
34
39
  lambdaFunction: {
35
- roleArn: Role;
40
+ environment?: {
41
+ variables: Record<string, string>;
42
+ };
43
+ roleArn: StringOrImport;
44
+ };
45
+ userPoolConfig?: {
46
+ appIdClientRegex: StringOrImport;
47
+ awsRegion: StringOrImport;
48
+ defaultAction: 'ALLOW' | 'DENY';
49
+ userPoolId: StringOrImport;
36
50
  };
37
51
  }): CloudFormationTemplate => {
38
52
  /**
@@ -100,7 +114,7 @@ export const createApiTemplate = ({
100
114
  [AppSyncGraphQLApiLogicalId]: {
101
115
  Type: 'AWS::AppSync::GraphQLApi',
102
116
  Properties: {
103
- AuthenticationType: 'AWS_IAM',
117
+ AuthenticationType: authenticationType,
104
118
  Name: {
105
119
  'Fn::Join': [
106
120
  ':',
@@ -152,11 +166,29 @@ export const createApiTemplate = ({
152
166
  },
153
167
  },
154
168
  Outputs: {
155
- [AppSyncGraphQLApiLogicalId]: {
169
+ AppSyncApiGraphQLUrl: {
170
+ Export: {
171
+ Name: {
172
+ 'Fn::Join': [
173
+ ':',
174
+ [{ Ref: 'AWS::StackName' }, 'AppSyncApiGraphQLUrl'],
175
+ ],
176
+ },
177
+ },
156
178
  Value: {
157
179
  'Fn::GetAtt': [AppSyncGraphQLApiLogicalId, 'GraphQLUrl'],
158
180
  },
159
181
  },
182
+ AppSyncApiArn: {
183
+ Export: {
184
+ Name: {
185
+ 'Fn::Join': [':', [{ Ref: 'AWS::StackName' }, 'AppSyncApiArn']],
186
+ },
187
+ },
188
+ Value: {
189
+ 'Fn::GetAtt': [AppSyncGraphQLApiLogicalId, 'Arn'],
190
+ },
191
+ },
160
192
  },
161
193
  };
162
194
 
@@ -178,15 +210,26 @@ export const createApiTemplate = ({
178
210
  };
179
211
  });
180
212
 
181
- if (apiKey) {
213
+ const apiKey =
214
+ additionalAuthenticationProviders?.includes('API_KEY') ||
215
+ authenticationType === 'API_KEY';
216
+
217
+ const cognitoUserPoolAuth =
218
+ additionalAuthenticationProviders?.includes('AMAZON_COGNITO_USER_POOLS') ||
219
+ authenticationType === 'AMAZON_COGNITO_USER_POOLS';
220
+
221
+ if (additionalAuthenticationProviders) {
182
222
  template.Resources[
183
223
  AppSyncGraphQLApiLogicalId
184
- ].Properties.AdditionalAuthenticationProvider = [
185
- {
186
- AuthenticationType: 'API_KEY',
187
- },
188
- ];
224
+ ].Properties.AdditionalAuthenticationProviders =
225
+ additionalAuthenticationProviders?.map((provider) => {
226
+ return {
227
+ AuthenticationType: provider,
228
+ };
229
+ });
230
+ }
189
231
 
232
+ if (apiKey) {
190
233
  template.Resources[AppSyncGraphQLApiKeyLogicalId] = {
191
234
  Type: 'AWS::AppSync::ApiKey',
192
235
  Properties: {
@@ -205,5 +248,27 @@ export const createApiTemplate = ({
205
248
  };
206
249
  }
207
250
 
251
+ if (cognitoUserPoolAuth) {
252
+ if (!userPoolConfig) {
253
+ throw new Error(
254
+ 'userPoolConfig is required when using AMAZON_COGNITO_USER_POOLS authentication.'
255
+ );
256
+ }
257
+
258
+ template.Resources[AppSyncGraphQLApiLogicalId].Properties.UserPoolConfig = {
259
+ AppIdClientRegex: userPoolConfig.appIdClientRegex,
260
+ AwsRegion: userPoolConfig.awsRegion,
261
+ DefaultAction: userPoolConfig.defaultAction,
262
+ UserPoolId: userPoolConfig.userPoolId,
263
+ };
264
+ }
265
+
266
+ if (lambdaFunction.environment?.variables) {
267
+ template.Resources[AppSyncLambdaFunctionLogicalId].Properties.Environment =
268
+ {
269
+ Variables: lambdaFunction.environment.variables,
270
+ };
271
+ }
272
+
208
273
  return template;
209
274
  };
@@ -18,6 +18,6 @@ export const createAppSyncResolverHandler = ({
18
18
  const resolver = (
19
19
  schemaComposer.getResolveMethods()[parentTypeName] as any
20
20
  )[fieldName];
21
- return resolver(source, args, context, info);
21
+ return resolver(source, args, { ...context, ...event.identity }, info);
22
22
  };
23
23
  };
package/src/index.ts CHANGED
@@ -1,6 +1,6 @@
1
- export { type ResolverResolveParams, schemaComposer } from 'graphql-compose';
2
1
  export { createApiTemplate } from './createApiTemplate';
3
2
  export {
4
3
  type AppSyncResolverHandler,
5
4
  createAppSyncResolverHandler,
6
5
  } from './createAppSyncResolverHandler';
6
+ export type { AppSyncIdentityCognito } from 'aws-lambda';