constructor()

in Infra/lib/stack/AppSyncStack.ts [26:97]


    constructor(scope: Construct, id: string, props: AppsyncStackProps) {
        super(scope, id, props);

        // Creates the AppSync API
        const api = new appsync.GraphqlApi(this, "ChimeSessionEventsApi", {
            name: "chime-session-api",
            schema: appsync.Schema.fromAsset(
                path.join(__dirname, "../graphql/schema.graphql")
            ),
            authorizationConfig: {
                defaultAuthorization: {
                    authorizationType: appsync.AuthorizationType.USER_POOL,
                    userPoolConfig: {
                        userPool: props.userPool,
                        defaultAction: appsync.UserPoolDefaultAction.ALLOW,
                    },
                },
            },
            xrayEnabled: true,
        });

        const noneDataSource = api.addNoneDataSource("NoneDataSource");

        const meetingRequestTemplate = MappingTemplate.fromString(
            '{"version": "2018-05-29", "payload": { "meeting": "${ctx.args.meeting}", "attendee": "${ctx.args.attendee}", "username": "${ctx.args.username}" } }'
        );

        const meetingResponseTemplate = MappingTemplate.fromString(
            "$util.toJson($context.result)"
        );

        const claimChimeSessionRequestTemplate = MappingTemplate.fromString(
            '{"version": "2018-05-29", "payload": "${ctx.args.meeting}"}'
        );

        noneDataSource.createResolver({
            typeName: "Query",
            fieldName: "stub",
            requestMappingTemplate: meetingRequestTemplate,
            responseMappingTemplate: meetingResponseTemplate,
        });

        noneDataSource.createResolver({
            typeName: "Mutation",
            fieldName: "startChimeSession",
            requestMappingTemplate: meetingRequestTemplate,
            responseMappingTemplate: meetingResponseTemplate,
        });

        noneDataSource.createResolver({
            typeName: "Mutation",
            fieldName: "claimChimeSession",
            requestMappingTemplate: claimChimeSessionRequestTemplate,
            responseMappingTemplate: meetingResponseTemplate,
        });

        noneDataSource.createResolver({
            typeName: "Subscription",
            fieldName: "chimeSessionStarted",
            requestMappingTemplate: meetingRequestTemplate,
            responseMappingTemplate: meetingResponseTemplate,
        });

        noneDataSource.createResolver({
            typeName: "Subscription",
            fieldName: "chimeSessionClaimed",
            requestMappingTemplate: claimChimeSessionRequestTemplate,
            responseMappingTemplate: meetingResponseTemplate,
        });

        this.graphqlApi = api;
    }