in typescript/src/feast/pubsub/apple.ts [22:72]
export function buildHandler(
sendMessageToSqs: (
queueUrl: string,
message: AppleSubscriptionReference,
) => Promise<PromiseResult<Sqs.SendMessageResult, AWSError>> = sendToSqs,
storeEventInDynamo: (
event: StatusUpdateNotification,
) => Promise<void> = defaultStoreEventInDynamo,
logRequest: (request: APIGatewayProxyEvent) => void = defaultLogRequest,
): (request: APIGatewayProxyEvent) => Promise<APIGatewayProxyResult> {
return async (request: APIGatewayProxyEvent) => {
const secret = process.env.Secret;
if (secret === undefined) {
console.error("PubSub secret in env is 'undefined'");
return HTTPResponses.INTERNAL_ERROR;
}
if (request.queryStringParameters?.secret === secret) {
logRequest(request);
const statusUpdateNotification = parsePayload(request.body);
if (statusUpdateNotification instanceof Error) {
return HTTPResponses.INVALID_REQUEST;
}
const appleSubscriptionReference = toSqsSubReference(
statusUpdateNotification,
);
try {
const queueUrl = process.env.QueueUrl;
if (queueUrl === undefined) {
throw new Error('No QueueUrl env parameter provided');
}
await Promise.all([
sendMessageToSqs(queueUrl, appleSubscriptionReference),
storeEventInDynamo(statusUpdateNotification),
]);
return HTTPResponses.OK;
} catch (e) {
console.error('Internal server error', e);
return HTTPResponses.INTERNAL_ERROR;
}
} else {
return HTTPResponses.UNAUTHORISED;
}
};
}