handler.ts (73 lines of code) (raw):

import { APIGatewayProxyHandler, APIGatewayProxyResult } from "aws-lambda"; import "source-map-support/register"; import { Trekin } from "trekin"; const isObject = (x: unknown): x is any => x !== null && (typeof x === "object" || typeof x === "function"); export const webhook: APIGatewayProxyHandler = async (event, _context) => { const response: APIGatewayProxyResult = { statusCode: 500, body: "", }; if (event.httpMethod === "HEAD") { // TrelloにWebhookを登録すると、TrelloがまずHEADで疎通確認を行うため response.statusCode = 200; return response; } if (event.body === undefined) { // 不正なリクエストならエラーを返す console.error("ERROR\n" + event); return response; } console.info("EVENT\n" + event.body); const action = isObject(event.body) ? (event.body as any).action : JSON.parse(event.body).action; const trekin = new Trekin( { baseUrl: process.env.KINTONE_API_BASE_URL, defaultKintoneUserCode: process.env.DEFAULT_KINTONE_USER_ID, cards: { id: process.env.KINTONE_APP_ID_CARDS, token: process.env.KINTONE_API_TOKEN_CARDS, }, labels: { id: process.env.KINTONE_APP_ID_LABELS, token: process.env.KINTONE_API_TOKEN_LABELS, }, lists: { id: process.env.KINTONE_APP_ID_LISTS, token: process.env.KINTONE_API_TOKEN_LISTS, }, members: { id: process.env.KINTONE_APP_ID_MEMBERS, token: process.env.KINTONE_API_TOKEN_MEMBERS, }, }, { apiKey: process.env.TRELLO_API_KEY, apiToken: process.env.TRELLO_API_TOKEN, } ); trekin.guardian.setting = { prefixRecordId: "EPTRE", excludes: [ { charactersOrLess: 12, }, ], isAddDoneTime: true, doneListName: "Done🎉", }; const result = await trekin.operation(action); console.info("Operation\n" + JSON.stringify(result)); const postResult = await trekin.postOperation(action); console.info("Post operation\n" + JSON.stringify(postResult)); return { statusCode: 200, body: JSON.stringify( { message: "OK", }, null, 2 ), }; };