Trying to build an api out for my AWS lambda and when I try and run serverless-offline so I can test and see if my api is working I get this error: 'TypeError: Cannot read property 'Subscriptions' of null'.
this is my yaml file:
service: mgm-lambda
frameworkVersion: '3'
plugins:
- serverless-webpack
# - serverless-webpack-prisma
- serverless-dotenv-plugin
- serverless-lift
- serverless-offline-sns
- serverless-offline
provider:
name: aws
runtime: nodejs14.x
region: eu-west-2
custom:
serverless-offline-sns:
sns-endpoint: sns.eu-west-2.amazonaws.com
sns-subscribe-endpoint: http://deeb-137-221-144-34.ngrok.io
remotePort: 80
localPort: 4002
accountId: 837696398555
subscriptions:
- topic: "backend-events"
functions:
producer:
handler: handler.producer
events:
- sns:
arn: 'arn:aws:sns:eu-west-2:837696398555:backend-events'
referral:
handler: handler.referral
events:
- httpApi:
path: /referral
method: get
package.json
{
"name": "mgm-lambda",
"version": "1.0.0",
"description": "Thursday Member Get Member",
"main": "handler.js",
"scripts": {
"test": "serverless-bundle test"
},
"author": "",
"license": "MIT",
"repository": {
"type": "git",
"url": "TODO"
},
"devDependencies": {
"@types/aws-lambda": "^8.10.64",
"@types/jest": "^26.0.14",
"@types/luxon": "^2.3.2",
"@types/node": "^18.0.3",
"prisma": "^4.4.0",
"serverless": "^3.22.0",
"serverless-dotenv-plugin": "^3.0.0",
"serverless-lift": "^1.20.2",
"serverless-webpack": "^5.7.1",
"serverless-webpack-prisma": "^1.1.0",
"ts-jest": "^28.0.5",
"ts-loader": "^9.3.1",
"typescript": "^4.7.4",
"webpack": "^5.73.0",
"webpack-node-externals": "^3.0.0"
},
"dependencies": {
"@prisma/client": "^4.0.0",
"aws-sdk": "^2.1225.0",
"dd-trace": "^2.10.0",
"ioredis": "^5.1.0",
"luxon": "^2.4.0",
"mysql2": "^2.3.3",
"offline": "0.0.1",
"sequelize": "^6.21.2",
"serverless-offline": "^11.0.0",
"serverless-offline-sns": "^0.76.0",
"winston": "^3.8.1"
}
}
handler.ts
import { defaultMaxListeners } from "events";
import { Prisma } from '@prisma/client';
import getPrismaClient from "./prisma";
import { userInfo } from "os";
import { Event } from "aws-sdk/clients/s3";
const isLocal = process.env.ENVIRONMENT
? process.env.ENVIRONMENT?.includes('local')
: false;
let DB_WRITE_HOST: string,
DB_NAME: string,
DB_PASSWORD: string,
DB_USER: string,
REDIS_CONNECTION_STRING: string;
if (isLocal) {
DB_WRITE_HOST = process.env.DB_WRITE_HOST || '';
DB_NAME = process.env.DB_NAME || '';
DB_PASSWORD = process.env.DB_PASSWORD || '';
DB_USER = process.env.DB_USER || '';
REDIS_CONNECTION_STRING = process.env.REDIS_CONNECTION_STRING || '';
}
// const producer = async (event: any) => {
// let statusCode = 200;
// let message;
// const eventsRecord = event.Records[0].Sns.Message.detail;
// const prisma = await getPrismaClient(
// DB_USER,
// DB_PASSWORD,
// DB_WRITE_HOST,
// 3306,
// DB_NAME
// )
// if (eventsRecord.backendEventType === 'user.created' && eventsRecord.body.referredBy ) {
// // write to table using prisma for EventsLog
// const eventCreate = await prisma.eventsLog.create({
// data: {
// eventType: 'CREATED',
// eventJSON: event.Records[0].Sns,
// status: 'PROCESSING',
// }
// })
// await prisma.referredUsers.create({
// data: {
// id: eventsRecord.body.userId,
// referredBy: eventsRecord.body.referredBy,
// status: 'PENDING'
// }
// })
// await prisma.eventsLog.update({
// where : { id: eventCreate.id },
// data: {
// status: 'PROCESSED',
// }
// })
// } else if (eventsRecord.backendEventType == 'checkin'){
// //Add to events log table to declare user verified
// const userVerified = await prisma.eventsLog.create({
// data: {
// eventType: 'CHECKED_IN',
// eventJSON: event.Records[0].Sns,
// status: 'PROCESSING'
// }
// })
// //Check referred user table - if user id exists
// const findUser = await prisma.referredUsers.findUnique({
// where: {
// id: eventsRecord.body.userId
// }
// })
// //If exists - update log to say said user has joined && we update the events log to say item has been processed
// if (findUser) {
// await prisma.referredUsers.update({
// where : { id: eventsRecord.body.userId },
// data : {
// status: 'JOINED'
// }
// })
// const userCreditTotal = await prisma.userCreditTransactions.findFirst({
// where: { userId : findUser.referredBy},
// orderBy : {
// updatedAt : 'desc'
// }
// })
// await prisma.userCreditTransactions.create({
// data : {
// userId : findUser.referredBy,
// type : 'REFERRAL',
// credits : 1,
// creditsTotal : userCreditTotal ? userCreditTotal.creditsTotal++ : 1
// }
// })
// await prisma.eventsLog.update({
// where : { id: userVerified.id},
// data : {
// status: 'PROCESSED'
// }
// })
// //Else - if dont exists: update events log to say status is ignored
// } else {
// await prisma.eventsLog.update({
// where : { id: userVerified.id },
// data : {
// status: 'IGNORED'
// }
// })
// }
// }
// return {
// statusCode,
// body: JSON.stringify({
// message
// })
// };
// };
const referral = async (event: Event) => {
let statusCode = 200;
return {
statusCode,
body: JSON.stringify(
{
message: 'Referral data',
input: event,
},
null,
2
)
}
}
module.exports = {
// producer,
referral
};
Any tips to get round this error? or where the issue lies?