UNPKG

@octokit/webhooks

Version:

GitHub webhook events toolset for Node.js

1 lines 38.1 kB
{"version":3,"file":"index.js","sources":["../dist-src/createLogger.js","../dist-src/generated/webhook-names.js","../dist-src/event-handler/on.js","../dist-src/event-handler/wrap-error-handler.js","../dist-src/event-handler/receive.js","../dist-src/event-handler/remove-listener.js","../dist-src/event-handler/index.js","../dist-src/to-normalized-json-string.js","../dist-src/sign.js","../dist-src/verify.js","../dist-src/verify-and-receive.js","../dist-src/middleware/node/get-missing-headers.js","../dist-src/middleware/node/get-payload.js","../dist-src/middleware/node/middleware.js","../dist-src/middleware/node/on-unhandled-request-default.js","../dist-src/middleware/node/index.js","../dist-src/index.js"],"sourcesContent":["export const createLogger = (logger) => ({\n debug: () => { },\n info: () => { },\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n ...logger,\n});\n","// THIS FILE IS GENERATED - DO NOT EDIT DIRECTLY\n// make edits in scripts/generate-types.ts\nexport const emitterEventNames = [\n \"branch_protection_rule\",\n \"branch_protection_rule.created\",\n \"branch_protection_rule.deleted\",\n \"branch_protection_rule.edited\",\n \"check_run\",\n \"check_run.completed\",\n \"check_run.created\",\n \"check_run.requested_action\",\n \"check_run.rerequested\",\n \"check_suite\",\n \"check_suite.completed\",\n \"check_suite.requested\",\n \"check_suite.rerequested\",\n \"code_scanning_alert\",\n \"code_scanning_alert.appeared_in_branch\",\n \"code_scanning_alert.closed_by_user\",\n \"code_scanning_alert.created\",\n \"code_scanning_alert.fixed\",\n \"code_scanning_alert.reopened\",\n \"code_scanning_alert.reopened_by_user\",\n \"commit_comment\",\n \"commit_comment.created\",\n \"create\",\n \"delete\",\n \"deploy_key\",\n \"deploy_key.created\",\n \"deploy_key.deleted\",\n \"deployment\",\n \"deployment.created\",\n \"deployment_status\",\n \"deployment_status.created\",\n \"discussion\",\n \"discussion.answered\",\n \"discussion.category_changed\",\n \"discussion.created\",\n \"discussion.deleted\",\n \"discussion.edited\",\n \"discussion.labeled\",\n \"discussion.locked\",\n \"discussion.pinned\",\n \"discussion.transferred\",\n \"discussion.unanswered\",\n \"discussion.unlabeled\",\n \"discussion.unlocked\",\n \"discussion.unpinned\",\n \"discussion_comment\",\n \"discussion_comment.created\",\n \"discussion_comment.deleted\",\n \"discussion_comment.edited\",\n \"fork\",\n \"github_app_authorization\",\n \"github_app_authorization.revoked\",\n \"gollum\",\n \"installation\",\n \"installation.created\",\n \"installation.deleted\",\n \"installation.new_permissions_accepted\",\n \"installation.suspend\",\n \"installation.unsuspend\",\n \"installation_repositories\",\n \"installation_repositories.added\",\n \"installation_repositories.removed\",\n \"issue_comment\",\n \"issue_comment.created\",\n \"issue_comment.deleted\",\n \"issue_comment.edited\",\n \"issues\",\n \"issues.assigned\",\n \"issues.closed\",\n \"issues.deleted\",\n \"issues.demilestoned\",\n \"issues.edited\",\n \"issues.labeled\",\n \"issues.locked\",\n \"issues.milestoned\",\n \"issues.opened\",\n \"issues.pinned\",\n \"issues.reopened\",\n \"issues.transferred\",\n \"issues.unassigned\",\n \"issues.unlabeled\",\n \"issues.unlocked\",\n \"issues.unpinned\",\n \"label\",\n \"label.created\",\n \"label.deleted\",\n \"label.edited\",\n \"marketplace_purchase\",\n \"marketplace_purchase.cancelled\",\n \"marketplace_purchase.changed\",\n \"marketplace_purchase.pending_change\",\n \"marketplace_purchase.pending_change_cancelled\",\n \"marketplace_purchase.purchased\",\n \"member\",\n \"member.added\",\n \"member.edited\",\n \"member.removed\",\n \"membership\",\n \"membership.added\",\n \"membership.removed\",\n \"meta\",\n \"meta.deleted\",\n \"milestone\",\n \"milestone.closed\",\n \"milestone.created\",\n \"milestone.deleted\",\n \"milestone.edited\",\n \"milestone.opened\",\n \"org_block\",\n \"org_block.blocked\",\n \"org_block.unblocked\",\n \"organization\",\n \"organization.deleted\",\n \"organization.member_added\",\n \"organization.member_invited\",\n \"organization.member_removed\",\n \"organization.renamed\",\n \"package\",\n \"package.published\",\n \"package.updated\",\n \"page_build\",\n \"ping\",\n \"project\",\n \"project.closed\",\n \"project.created\",\n \"project.deleted\",\n \"project.edited\",\n \"project.reopened\",\n \"project_card\",\n \"project_card.converted\",\n \"project_card.created\",\n \"project_card.deleted\",\n \"project_card.edited\",\n \"project_card.moved\",\n \"project_column\",\n \"project_column.created\",\n \"project_column.deleted\",\n \"project_column.edited\",\n \"project_column.moved\",\n \"projects_v2_item\",\n \"projects_v2_item.archived\",\n \"projects_v2_item.converted\",\n \"projects_v2_item.created\",\n \"projects_v2_item.deleted\",\n \"projects_v2_item.edited\",\n \"projects_v2_item.reordered\",\n \"projects_v2_item.restored\",\n \"public\",\n \"pull_request\",\n \"pull_request.assigned\",\n \"pull_request.auto_merge_disabled\",\n \"pull_request.auto_merge_enabled\",\n \"pull_request.closed\",\n \"pull_request.converted_to_draft\",\n \"pull_request.edited\",\n \"pull_request.labeled\",\n \"pull_request.locked\",\n \"pull_request.opened\",\n \"pull_request.ready_for_review\",\n \"pull_request.reopened\",\n \"pull_request.review_request_removed\",\n \"pull_request.review_requested\",\n \"pull_request.synchronize\",\n \"pull_request.unassigned\",\n \"pull_request.unlabeled\",\n \"pull_request.unlocked\",\n \"pull_request_review\",\n \"pull_request_review.dismissed\",\n \"pull_request_review.edited\",\n \"pull_request_review.submitted\",\n \"pull_request_review_comment\",\n \"pull_request_review_comment.created\",\n \"pull_request_review_comment.deleted\",\n \"pull_request_review_comment.edited\",\n \"pull_request_review_thread\",\n \"pull_request_review_thread.resolved\",\n \"pull_request_review_thread.unresolved\",\n \"push\",\n \"release\",\n \"release.created\",\n \"release.deleted\",\n \"release.edited\",\n \"release.prereleased\",\n \"release.published\",\n \"release.released\",\n \"release.unpublished\",\n \"repository\",\n \"repository.archived\",\n \"repository.created\",\n \"repository.deleted\",\n \"repository.edited\",\n \"repository.privatized\",\n \"repository.publicized\",\n \"repository.renamed\",\n \"repository.transferred\",\n \"repository.unarchived\",\n \"repository_dispatch\",\n \"repository_import\",\n \"repository_vulnerability_alert\",\n \"repository_vulnerability_alert.create\",\n \"repository_vulnerability_alert.dismiss\",\n \"repository_vulnerability_alert.reopen\",\n \"repository_vulnerability_alert.resolve\",\n \"secret_scanning_alert\",\n \"secret_scanning_alert.created\",\n \"secret_scanning_alert.reopened\",\n \"secret_scanning_alert.resolved\",\n \"security_advisory\",\n \"security_advisory.performed\",\n \"security_advisory.published\",\n \"security_advisory.updated\",\n \"security_advisory.withdrawn\",\n \"sponsorship\",\n \"sponsorship.cancelled\",\n \"sponsorship.created\",\n \"sponsorship.edited\",\n \"sponsorship.pending_cancellation\",\n \"sponsorship.pending_tier_change\",\n \"sponsorship.tier_changed\",\n \"star\",\n \"star.created\",\n \"star.deleted\",\n \"status\",\n \"team\",\n \"team.added_to_repository\",\n \"team.created\",\n \"team.deleted\",\n \"team.edited\",\n \"team.removed_from_repository\",\n \"team_add\",\n \"watch\",\n \"watch.started\",\n \"workflow_dispatch\",\n \"workflow_job\",\n \"workflow_job.completed\",\n \"workflow_job.in_progress\",\n \"workflow_job.queued\",\n \"workflow_run\",\n \"workflow_run.completed\",\n \"workflow_run.requested\",\n];\n","import { emitterEventNames } from \"../generated/webhook-names\";\nfunction handleEventHandlers(state, webhookName, handler) {\n if (!state.hooks[webhookName]) {\n state.hooks[webhookName] = [];\n }\n state.hooks[webhookName].push(handler);\n}\nexport function receiverOn(state, webhookNameOrNames, handler) {\n if (Array.isArray(webhookNameOrNames)) {\n webhookNameOrNames.forEach((webhookName) => receiverOn(state, webhookName, handler));\n return;\n }\n if ([\"*\", \"error\"].includes(webhookNameOrNames)) {\n const webhookName = webhookNameOrNames === \"*\" ? \"any\" : webhookNameOrNames;\n const message = `Using the \"${webhookNameOrNames}\" event with the regular Webhooks.on() function is not supported. Please use the Webhooks.on${webhookName.charAt(0).toUpperCase() + webhookName.slice(1)}() method instead`;\n throw new Error(message);\n }\n if (!emitterEventNames.includes(webhookNameOrNames)) {\n state.log.warn(`\"${webhookNameOrNames}\" is not a known webhook name (https://developer.github.com/v3/activity/events/types/)`);\n }\n handleEventHandlers(state, webhookNameOrNames, handler);\n}\nexport function receiverOnAny(state, handler) {\n handleEventHandlers(state, \"*\", handler);\n}\nexport function receiverOnError(state, handler) {\n handleEventHandlers(state, \"error\", handler);\n}\n","// Errors thrown or rejected Promises in \"error\" event handlers are not handled\n// as they are in the webhook event handlers. If errors occur, we log a\n// \"Fatal: Error occurred\" message to stdout\nexport function wrapErrorHandler(handler, error) {\n let returnValue;\n try {\n returnValue = handler(error);\n }\n catch (error) {\n console.log('FATAL: Error occurred in \"error\" event handler');\n console.log(error);\n }\n if (returnValue && returnValue.catch) {\n returnValue.catch((error) => {\n console.log('FATAL: Error occurred in \"error\" event handler');\n console.log(error);\n });\n }\n}\n","// @ts-ignore to address #245\nimport AggregateError from \"aggregate-error\";\nimport { wrapErrorHandler } from \"./wrap-error-handler\";\nfunction getHooks(state, eventPayloadAction, eventName) {\n const hooks = [state.hooks[eventName], state.hooks[\"*\"]];\n if (eventPayloadAction) {\n hooks.unshift(state.hooks[`${eventName}.${eventPayloadAction}`]);\n }\n return [].concat(...hooks.filter(Boolean));\n}\n// main handler function\nexport function receiverHandle(state, event) {\n const errorHandlers = state.hooks.error || [];\n if (event instanceof Error) {\n const error = Object.assign(new AggregateError([event]), {\n event,\n errors: [event],\n });\n errorHandlers.forEach((handler) => wrapErrorHandler(handler, error));\n return Promise.reject(error);\n }\n if (!event || !event.name) {\n throw new AggregateError([\"Event name not passed\"]);\n }\n if (!event.payload) {\n throw new AggregateError([\"Event payload not passed\"]);\n }\n // flatten arrays of event listeners and remove undefined values\n const hooks = getHooks(state, \"action\" in event.payload ? event.payload.action : null, event.name);\n if (hooks.length === 0) {\n return Promise.resolve();\n }\n const errors = [];\n const promises = hooks.map((handler) => {\n let promise = Promise.resolve(event);\n if (state.transform) {\n promise = promise.then(state.transform);\n }\n return promise\n .then((event) => {\n return handler(event);\n })\n .catch((error) => errors.push(Object.assign(error, { event })));\n });\n return Promise.all(promises).then(() => {\n if (errors.length === 0) {\n return;\n }\n const error = new AggregateError(errors);\n Object.assign(error, {\n event,\n errors,\n });\n errorHandlers.forEach((handler) => wrapErrorHandler(handler, error));\n throw error;\n });\n}\n","export function removeListener(state, webhookNameOrNames, handler) {\n if (Array.isArray(webhookNameOrNames)) {\n webhookNameOrNames.forEach((webhookName) => removeListener(state, webhookName, handler));\n return;\n }\n if (!state.hooks[webhookNameOrNames]) {\n return;\n }\n // remove last hook that has been added, that way\n // it behaves the same as removeListener\n for (let i = state.hooks[webhookNameOrNames].length - 1; i >= 0; i--) {\n if (state.hooks[webhookNameOrNames][i] === handler) {\n state.hooks[webhookNameOrNames].splice(i, 1);\n return;\n }\n }\n}\n","import { createLogger } from \"../createLogger\";\nimport { receiverOn as on, receiverOnAny as onAny, receiverOnError as onError, } from \"./on\";\nimport { receiverHandle as receive } from \"./receive\";\nimport { removeListener } from \"./remove-listener\";\nexport function createEventHandler(options) {\n const state = {\n hooks: {},\n log: createLogger(options && options.log),\n };\n if (options && options.transform) {\n state.transform = options.transform;\n }\n return {\n on: on.bind(null, state),\n onAny: onAny.bind(null, state),\n onError: onError.bind(null, state),\n removeListener: removeListener.bind(null, state),\n receive: receive.bind(null, state),\n };\n}\n","/**\n * GitHub sends its JSON with an indentation of 2 spaces and a line break at the end\n */\nexport function toNormalizedJsonString(payload) {\n const payloadString = JSON.stringify(payload);\n return payloadString.replace(/[^\\\\]\\\\u[\\da-f]{4}/g, (s) => {\n return s.substr(0, 3) + s.substr(3).toUpperCase();\n });\n}\n","import { sign as signMethod } from \"@octokit/webhooks-methods\";\nimport { toNormalizedJsonString } from \"./to-normalized-json-string\";\nexport async function sign(secret, payload) {\n return signMethod(secret, typeof payload === \"string\" ? payload : toNormalizedJsonString(payload));\n}\n","import { verify as verifyMethod } from \"@octokit/webhooks-methods\";\nimport { toNormalizedJsonString } from \"./to-normalized-json-string\";\nexport async function verify(secret, payload, signature) {\n return verifyMethod(secret, typeof payload === \"string\" ? payload : toNormalizedJsonString(payload), signature);\n}\n","import { verify } from \"@octokit/webhooks-methods\";\nimport { toNormalizedJsonString } from \"./to-normalized-json-string\";\nexport async function verifyAndReceive(state, event) {\n // verify will validate that the secret is not undefined\n const matchesSignature = await verify(state.secret, typeof event.payload === \"object\"\n ? toNormalizedJsonString(event.payload)\n : event.payload, event.signature);\n if (!matchesSignature) {\n const error = new Error(\"[@octokit/webhooks] signature does not match event payload and secret\");\n return state.eventHandler.receive(Object.assign(error, { event, status: 400 }));\n }\n return state.eventHandler.receive({\n id: event.id,\n name: event.name,\n payload: typeof event.payload === \"string\"\n ? JSON.parse(event.payload)\n : event.payload,\n });\n}\n","const WEBHOOK_HEADERS = [\n \"x-github-event\",\n \"x-hub-signature-256\",\n \"x-github-delivery\",\n];\n// https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#delivery-headers\nexport function getMissingHeaders(request) {\n return WEBHOOK_HEADERS.filter((header) => !(header in request.headers));\n}\n","// @ts-ignore to address #245\nimport AggregateError from \"aggregate-error\";\nexport function getPayload(request) {\n // If request.body already exists we can stop here\n // See https://github.com/octokit/webhooks.js/pull/23\n if (request.body)\n return Promise.resolve(request.body);\n return new Promise((resolve, reject) => {\n let data = \"\";\n request.setEncoding(\"utf8\");\n // istanbul ignore next\n request.on(\"error\", (error) => reject(new AggregateError([error])));\n request.on(\"data\", (chunk) => (data += chunk));\n request.on(\"end\", () => {\n try {\n resolve(JSON.parse(data));\n }\n catch (error) {\n error.message = \"Invalid JSON\";\n error.status = 400;\n reject(new AggregateError([error]));\n }\n });\n });\n}\n","import { getMissingHeaders } from \"./get-missing-headers\";\nimport { getPayload } from \"./get-payload\";\nexport async function middleware(webhooks, options, request, response, next) {\n let pathname;\n try {\n pathname = new URL(request.url, \"http://localhost\").pathname;\n }\n catch (error) {\n response.writeHead(422, {\n \"content-type\": \"application/json\",\n });\n response.end(JSON.stringify({\n error: `Request URL could not be parsed: ${request.url}`,\n }));\n return;\n }\n const isUnknownRoute = request.method !== \"POST\" || pathname !== options.path;\n const isExpressMiddleware = typeof next === \"function\";\n if (isUnknownRoute) {\n if (isExpressMiddleware) {\n return next();\n }\n else {\n return options.onUnhandledRequest(request, response);\n }\n }\n const missingHeaders = getMissingHeaders(request).join(\", \");\n if (missingHeaders) {\n response.writeHead(400, {\n \"content-type\": \"application/json\",\n });\n response.end(JSON.stringify({\n error: `Required headers missing: ${missingHeaders}`,\n }));\n return;\n }\n const eventName = request.headers[\"x-github-event\"];\n const signatureSHA256 = request.headers[\"x-hub-signature-256\"];\n const id = request.headers[\"x-github-delivery\"];\n options.log.debug(`${eventName} event received (id: ${id})`);\n // GitHub will abort the request if it does not receive a response within 10s\n // See https://github.com/octokit/webhooks.js/issues/185\n let didTimeout = false;\n const timeout = setTimeout(() => {\n didTimeout = true;\n response.statusCode = 202;\n response.end(\"still processing\\n\");\n }, 9000).unref();\n try {\n const payload = await getPayload(request);\n await webhooks.verifyAndReceive({\n id: id,\n name: eventName,\n payload: payload,\n signature: signatureSHA256,\n });\n clearTimeout(timeout);\n if (didTimeout)\n return;\n response.end(\"ok\\n\");\n }\n catch (error) {\n clearTimeout(timeout);\n if (didTimeout)\n return;\n const statusCode = Array.from(error)[0].status;\n response.statusCode = typeof statusCode !== \"undefined\" ? statusCode : 500;\n response.end(String(error));\n }\n}\n","export function onUnhandledRequestDefault(request, response) {\n response.writeHead(404, {\n \"content-type\": \"application/json\",\n });\n response.end(JSON.stringify({\n error: `Unknown route: ${request.method} ${request.url}`,\n }));\n}\n","import { createLogger } from \"../../createLogger\";\nimport { middleware } from \"./middleware\";\nimport { onUnhandledRequestDefault } from \"./on-unhandled-request-default\";\nexport function createNodeMiddleware(webhooks, { path = \"/api/github/webhooks\", onUnhandledRequest = onUnhandledRequestDefault, log = createLogger(), } = {}) {\n return middleware.bind(null, webhooks, {\n path,\n onUnhandledRequest,\n log,\n });\n}\n","import { createLogger } from \"./createLogger\";\nimport { createEventHandler } from \"./event-handler/index\";\nimport { sign } from \"./sign\";\nimport { verify } from \"./verify\";\nimport { verifyAndReceive } from \"./verify-and-receive\";\nexport { createNodeMiddleware } from \"./middleware/node/index\";\nexport { emitterEventNames } from \"./generated/webhook-names\";\n// U holds the return value of `transform` function in Options\nclass Webhooks {\n constructor(options) {\n if (!options || !options.secret) {\n throw new Error(\"[@octokit/webhooks] options.secret required\");\n }\n const state = {\n eventHandler: createEventHandler(options),\n secret: options.secret,\n hooks: {},\n log: createLogger(options.log),\n };\n this.sign = sign.bind(null, options.secret);\n this.verify = verify.bind(null, options.secret);\n this.on = state.eventHandler.on;\n this.onAny = state.eventHandler.onAny;\n this.onError = state.eventHandler.onError;\n this.removeListener = state.eventHandler.removeListener;\n this.receive = state.eventHandler.receive;\n this.verifyAndReceive = verifyAndReceive.bind(null, state);\n }\n}\nexport { createEventHandler, Webhooks, };\n"],"names":["on","onAny","onError","receive","signMethod","verifyMethod","verify"],"mappings":"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"}