From 99f4af745f543c97277dbf86a54a5d347b853c6e Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Wed, 10 Jan 2024 21:20:10 -0800 Subject: [PATCH 1/7] Add SeamWebhook --- package-lock.json | 78 +++++++++++++++++++++++++++++++++++++---- package.json | 12 +++++++ src/lib/index.ts | 1 + src/lib/seam-webhook.ts | 23 ++++++++++++ 4 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 src/lib/seam-webhook.ts diff --git a/package-lock.json b/package-lock.json index c26429d..368cb42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "@seamapi/webhook", "version": "0.0.1", "license": "MIT", + "dependencies": { + "svix": "^1.15.0" + }, "devDependencies": { "@types/node": "^20.8.10", "ava": "^6.0.1", @@ -21,6 +24,7 @@ "eslint-plugin-unused-imports": "^3.0.0", "landlubber": "^1.0.0", "prettier": "^3.0.0", + "seamapi-types": "^1.32.0", "tsc-alias": "^1.8.2", "tsup": "^8.0.1", "tsx": "^4.6.2", @@ -1080,6 +1084,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@stablelib/base64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/base64/-/base64-1.0.1.tgz", + "integrity": "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==" + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -2786,6 +2795,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, "node_modules/esbuild": { "version": "0.19.11", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", @@ -3558,6 +3572,11 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, + "node_modules/fast-sha256": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-sha256/-/fast-sha256-1.3.0.tgz", + "integrity": "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==" + }, "node_modules/fastq": { "version": "1.16.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", @@ -5350,7 +5369,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -6024,6 +6042,11 @@ "node": ">=6" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "node_modules/queue-lit": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/queue-lit/-/queue-lit-1.5.2.tgz", @@ -6220,6 +6243,11 @@ "node": ">=0.10.0" } }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -6414,6 +6442,12 @@ "node": ">=10" } }, + "node_modules/seamapi-types": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/seamapi-types/-/seamapi-types-1.32.0.tgz", + "integrity": "sha512-dIuiq7aniheP5Fmr3v2bNKYrmGPkpuZAbPgo+Khz7gXGkqfExlXbNnbNwrJQyyr6nJpvJWulkKabn91SCzmUwQ==", + "dev": true + }, "node_modules/secure-json-parse": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", @@ -7007,6 +7041,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svix": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/svix/-/svix-1.15.0.tgz", + "integrity": "sha512-oV11/VIpD77QymPEIjGr8XvQwcJxPIRO8XVpWJb33ZX2qs1q7jYlVaSJ6ABYThKbmnxIGyJr5+RpchVOSE7pZg==", + "dependencies": { + "@stablelib/base64": "^1.0.0", + "es6-promise": "^4.2.4", + "fast-sha256": "^1.3.0", + "svix-fetch": "^3.0.0", + "url-parse": "^1.4.3" + } + }, + "node_modules/svix-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/svix-fetch/-/svix-fetch-3.0.0.tgz", + "integrity": "sha512-rcADxEFhSqHbraZIsjyZNh4TF6V+koloX1OzZ+AQuObX9mZ2LIMhm1buZeuc5BIZPftZpJCMBsSiBaeszo9tRw==", + "dependencies": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, "node_modules/tar": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", @@ -7129,8 +7184,7 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/tree-kill": { "version": "1.2.2", @@ -7418,6 +7472,15 @@ "punycode": "^2.1.0" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -7451,8 +7514,7 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/well-known-symbols": { "version": "2.0.0", @@ -7463,11 +7525,15 @@ "node": ">=6" } }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" diff --git a/package.json b/package.json index 474dc18..a999e03 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,17 @@ "node": ">=18.12.0", "npm": ">= 9.0.0" }, + "peerDependencies": { + "seamapi-types": "^1.32.0" + }, + "peerDependenciesMeta": { + "seamapi-types": { + "optional": true + } + }, + "dependencies": { + "svix": "^1.15.0" + }, "devDependencies": { "@types/node": "^20.8.10", "ava": "^6.0.1", @@ -80,6 +91,7 @@ "eslint-plugin-unused-imports": "^3.0.0", "landlubber": "^1.0.0", "prettier": "^3.0.0", + "seamapi-types": "^1.32.0", "tsc-alias": "^1.8.2", "tsup": "^8.0.1", "tsx": "^4.6.2", diff --git a/src/lib/index.ts b/src/lib/index.ts index b718586..badc6f9 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,2 +1,3 @@ +export * from './seam-webhook.js' export { todo as default } from './todo.js' export { todo } from './todo.js' diff --git a/src/lib/seam-webhook.ts b/src/lib/seam-webhook.ts new file mode 100644 index 0000000..d03477b --- /dev/null +++ b/src/lib/seam-webhook.ts @@ -0,0 +1,23 @@ +import type { SeamEvent } from 'seamapi-types' +import { Webhook } from 'svix' + +// UPSTREAM: This type should come from @seamapi/types. +export type SeamWebhookEvent = Distribute + +export class SeamWebhook { + readonly #webhook: Webhook + + constructor(secret: string) { + this.#webhook = new Webhook(secret) + } + + verify(payload: string, headers: Record): SeamWebhookEvent { + return this.#webhook.verify(payload, headers) as SeamWebhookEvent + } +} + +type Distribute = EventType extends SeamEvent['event_type'] + ? { + event_type: EventType + } & Extract['payload'] + : never From 916451e7915b5e767d3f0f242e97acb1156f914e Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Wed, 10 Jan 2024 21:59:49 -0800 Subject: [PATCH 2/7] Add usage to README --- README.md | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c9cc3cd..b238843 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,31 @@ Webhook SDK for the Seam API written in TypeScript. ## Description -TODO +[Seam] makes it easy to integrate IoT devices with your applications. +This is an official SDK for the Seam API. +Please refer to the official [Seam Docs] to get started. + +The Seam API implements webhooks using [Svix]. +This SDK exports a thin wrapper around the svix package +Use it to parse and validate Seam webhook events +with full TypeScript support for Seam event types. + +Refer to the [Svix docs on Consuming Webhooks] for +an in-depth guide on best-practices for handling webhooks +in your application. + +[Seam]: https://www.seam.co/ +[Seam Docs]: https://docs.seam.co/latest/ +[Svix]: https://www.svix.com/ +[Svix docs on Consuming Webhooks]: https://docs.svix.com/receiving/introduction ## Installation +_This is a low-level package meant for applications and libraries with particular dependency requirements. +Before using this package, ensure you understand the installation and updating instructions. +This SDK is entirely contained in the [seamapi] package. Seam recommends using that package instead +for simpler dependency management._ + Add this as a dependency to your project using [npm] with ``` @@ -18,6 +39,79 @@ $ npm install @seamapi/webhook ``` [npm]: https://www.npmjs.com/ +[seamapi]: https://www.npmjs.com/package/seamapi + +### Optional Peer Dependencies for TypeScript + +This package has optional peer dependencies for TypeScript users. +Recent versions of npm will automatically install peer dependencies by default. +For those users, no additional steps are necessary for full TypeScript support, +however users should still explicitly install the latest types (see the next section). + +Other package managers require peer dependencies to be added manually. +Refer to any warnings generated by your package manager +about missing peer dependencies and install them as needed. +Refer to the next section for keeping the types updated. + +#### Keeping up with the latest types + +This package depends on [seamapi-types] for the latest TypeScript types. +New versions of this SDK are generally not released when new types are published. +Unless your project frequently runs a blanket `npm update`, +the types will become outdated with the Seam API over time. +Thus, users of this package should explicitly install the types with + +``` +$ npm install -D seamapi-types +``` + +and update them when consuming new API features with + +``` +$ npm install -D seamapi-types +``` + +[seamapi-types]: https://github.com/seamapi/seamapi-types/ + +## Usage + +First, create a webhook using the Seam API or Seam Console +and obtain a Seam webhook secret. + +_This example is for [Express], see the [Svix docs with more framework specific examples](https://docs.svix.com/receiving/verifying-payloads/how)._ + +```js +import { SeamWebhook } from '@seamapi/webhook' +import express from 'express' +import bodyParser from 'body-parser' + +const app = express() + +const webhook = new SeamWebhook(process.env.SEAM_WEBHOOK_SECRET) + +app.post( + '/webhook', + bodyParser.raw({ type: 'application/json' }), + (req, res) => { + let data + try { + data = webhook.verify(payload, headers) + } catch { + res.status(400).send() + } + + storeEvent(data, (err) => { + if (err != null) { + res.status(500).send() + return + } + res.status(204).send() + }) + }, +) +``` + +[Express]: https://expressjs.com/ ## Development and Testing From 11289dbdf57b4ebea848b8f93817371f8d669984 Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Wed, 10 Jan 2024 22:01:28 -0800 Subject: [PATCH 3/7] Remove todo --- .c8rc.json | 1 - examples/index.ts | 9 - examples/todo.ts | 23 -- package-lock.json | 416 +---------------------------------- package.json | 3 - src/index.ts | 1 - src/lib/index.ts | 2 - src/lib/seam-webhook.test.ts | 7 + src/lib/todo.test.ts | 7 - src/lib/todo.ts | 1 - test/todo.test.ts | 7 - tsconfig.json | 2 +- 12 files changed, 17 insertions(+), 462 deletions(-) delete mode 100755 examples/index.ts delete mode 100644 examples/todo.ts create mode 100644 src/lib/seam-webhook.test.ts delete mode 100644 src/lib/todo.test.ts delete mode 100644 src/lib/todo.ts delete mode 100644 test/todo.test.ts diff --git a/.c8rc.json b/.c8rc.json index 8734c3d..a7d2534 100644 --- a/.c8rc.json +++ b/.c8rc.json @@ -2,7 +2,6 @@ "exclude": [ "**/index.ts", "package/**/*.ts", - "examples/**/*.ts", "**/*.test.ts", "ava.config.js" ], diff --git a/examples/index.ts b/examples/index.ts deleted file mode 100755 index 7a1cc11..0000000 --- a/examples/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env tsx - -import landlubber from 'landlubber' - -import * as todo from './todo.js' - -const commands = [todo] - -await landlubber(commands).parse() diff --git a/examples/todo.ts b/examples/todo.ts deleted file mode 100644 index 864a151..0000000 --- a/examples/todo.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { Builder, Command, Describe, Handler } from 'landlubber' - -import { todo } from '@seamapi/webhook' - -interface Options { - x: string -} - -export const command: Command = 'todo x' - -export const describe: Describe = 'TODO' - -export const builder: Builder = { - x: { - type: 'string', - default: 'TODO', - describe: 'TODO', - }, -} - -export const handler: Handler = async ({ x, logger }) => { - logger.info({ data: todo(x) }, 'TODO') -} diff --git a/package-lock.json b/package-lock.json index 368cb42..4fc9a9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,6 @@ "eslint-config-standard-with-typescript": "^43.0.0", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^3.0.0", - "landlubber": "^1.0.0", "prettier": "^3.0.0", "seamapi-types": "^1.32.0", "tsc-alias": "^1.8.2", @@ -33,6 +32,14 @@ "engines": { "node": ">=18.12.0", "npm": ">= 9.0.0" + }, + "peerDependencies": { + "seamapi-types": "^1.32.0" + }, + "peerDependenciesMeta": { + "seamapi-types": { + "optional": true + } } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -1143,21 +1150,6 @@ "dev": true, "peer": true }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.18.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.18.1.tgz", @@ -1388,18 +1380,6 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", @@ -1713,15 +1693,6 @@ "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", "dev": true }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/ava": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ava/-/ava-6.0.1.tgz", @@ -1847,26 +1818,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1912,30 +1863,6 @@ "node": ">=8" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -2319,12 +2246,6 @@ "color-support": "bin.js" } }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, "node_modules/commander": { "version": "9.5.0", "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", @@ -2424,15 +2345,6 @@ "node": ">=6" } }, - "node_modules/dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -2680,15 +2592,6 @@ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", "dev": true }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3458,24 +3361,6 @@ "node": ">=0.10.0" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -3499,12 +3384,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/fast-copy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.1.tgz", - "integrity": "sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==", - "dev": true - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3557,21 +3436,6 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "node_modules/fast-redact": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz", - "integrity": "sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, "node_modules/fast-sha256": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/fast-sha256/-/fast-sha256-1.3.0.tgz", @@ -4187,47 +4051,6 @@ "node": ">= 0.4" } }, - "node_modules/help-me": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/help-me/-/help-me-4.2.0.tgz", - "integrity": "sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==", - "dev": true, - "dependencies": { - "glob": "^8.0.0", - "readable-stream": "^3.6.0" - } - }, - "node_modules/help-me/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/help-me/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -4268,26 +4091,6 @@ "node": ">=10.17.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ignore": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", @@ -4919,22 +4722,6 @@ "node": ">=0.10.0" } }, - "node_modules/landlubber": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/landlubber/-/landlubber-1.0.0.tgz", - "integrity": "sha512-EDESH65qgF19ka8GDLZqq7AHR38VQ+kN0mXK6+vgwOkOuh6iHgeo/lyL9tmhy82PnQemD3owoFZhyKy3HcItqw==", - "dev": true, - "dependencies": { - "@types/yargs": "^17.0.20", - "pino": "^8.8.0", - "pino-pretty": "^9.1.1", - "yargs": "^17.6.2" - }, - "engines": { - "node": ">=16.13.0", - "npm": ">= 8.1.0" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -5256,6 +5043,7 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5564,15 +5352,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/on-exit-leak-free": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5803,101 +5582,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pino": { - "version": "8.17.2", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.17.2.tgz", - "integrity": "sha512-LA6qKgeDMLr2ux2y/YiUt47EfgQ+S9LznBWOJdN3q1dx2sv0ziDLUBeVpyVv17TEcGCBuWf0zNtg3M5m1NhhWQ==", - "dev": true, - "dependencies": { - "atomic-sleep": "^1.0.0", - "fast-redact": "^3.1.1", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "v1.1.0", - "pino-std-serializers": "^6.0.0", - "process-warning": "^3.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^3.7.0", - "thread-stream": "^2.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/pino-abstract-transport": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", - "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", - "dev": true, - "dependencies": { - "readable-stream": "^4.0.0", - "split2": "^4.0.0" - } - }, - "node_modules/pino-abstract-transport/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/pino-pretty": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-9.4.1.tgz", - "integrity": "sha512-loWr5SNawVycvY//hamIzyz3Fh5OSpvkcO13MwdDW+eKIGylobPLqnVGTDwDXkdmpJd1BhEG+qhDw09h6SqJiQ==", - "dev": true, - "dependencies": { - "colorette": "^2.0.7", - "dateformat": "^4.6.3", - "fast-copy": "^3.0.0", - "fast-safe-stringify": "^2.1.1", - "help-me": "^4.0.1", - "joycon": "^3.1.1", - "minimist": "^1.2.6", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^1.0.0", - "pump": "^3.0.0", - "readable-stream": "^4.0.0", - "secure-json-parse": "^2.4.0", - "sonic-boom": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "pino-pretty": "bin.js" - } - }, - "node_modules/pino-pretty/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/pino-std-serializers": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", - "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==", - "dev": true - }, "node_modules/pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", @@ -6008,31 +5692,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -6076,12 +5735,6 @@ } ] }, - "node_modules/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", - "dev": true - }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -6191,15 +5844,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/real-require": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - } - }, "node_modules/redent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", @@ -6433,27 +6077,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/seamapi-types": { "version": "1.32.0", "resolved": "https://registry.npmjs.org/seamapi-types/-/seamapi-types-1.32.0.tgz", "integrity": "sha512-dIuiq7aniheP5Fmr3v2bNKYrmGPkpuZAbPgo+Khz7gXGkqfExlXbNnbNwrJQyyr6nJpvJWulkKabn91SCzmUwQ==", "dev": true }, - "node_modules/secure-json-parse": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", - "dev": true - }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -6603,15 +6232,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/sonic-boom": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.0.tgz", - "integrity": "sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA==", - "dev": true, - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, "node_modules/source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", @@ -6682,15 +6302,6 @@ "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", "dev": true }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dev": true, - "engines": { - "node": ">= 10.x" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -7151,15 +6762,6 @@ "node": ">=0.8" } }, - "node_modules/thread-stream": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", - "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", - "dev": true, - "dependencies": { - "real-require": "^0.2.0" - } - }, "node_modules/time-zone": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", diff --git a/package.json b/package.json index a999e03..91b4513 100644 --- a/package.json +++ b/package.json @@ -57,8 +57,6 @@ "lint": "eslint --ignore-path .gitignore .", "prelint": "prettier --check --ignore-path .gitignore .", "postversion": "git push --follow-tags", - "example": "tsx examples", - "example:inspect": "tsx --inspect examples", "format": "eslint --ignore-path .gitignore --fix .", "preformat": "prettier --write --ignore-path .gitignore .", "report": "c8 report" @@ -89,7 +87,6 @@ "eslint-config-standard-with-typescript": "^43.0.0", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^3.0.0", - "landlubber": "^1.0.0", "prettier": "^3.0.0", "seamapi-types": "^1.32.0", "tsc-alias": "^1.8.2", diff --git a/src/index.ts b/src/index.ts index 7d8715b..ea9e4aa 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,2 +1 @@ -export { default } from 'lib/index.js' export * from 'lib/index.js' diff --git a/src/lib/index.ts b/src/lib/index.ts index badc6f9..9092bf1 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,3 +1 @@ export * from './seam-webhook.js' -export { todo as default } from './todo.js' -export { todo } from './todo.js' diff --git a/src/lib/seam-webhook.test.ts b/src/lib/seam-webhook.test.ts new file mode 100644 index 0000000..6092b3f --- /dev/null +++ b/src/lib/seam-webhook.test.ts @@ -0,0 +1,7 @@ +import test from 'ava' + +import { SeamWebhook } from './seam-webhook.js' + +test('SeamWebhook: constructor', (t) => { + t.truthy(new SeamWebhook('1234')) +}) diff --git a/src/lib/todo.test.ts b/src/lib/todo.test.ts deleted file mode 100644 index 4f4b033..0000000 --- a/src/lib/todo.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import test from 'ava' - -import { todo } from './todo.js' - -test('todo: returns argument', (t) => { - t.is(todo('todo'), 'todo', 'returns input') -}) diff --git a/src/lib/todo.ts b/src/lib/todo.ts deleted file mode 100644 index 5633fe7..0000000 --- a/src/lib/todo.ts +++ /dev/null @@ -1 +0,0 @@ -export const todo = (x: string): string => x diff --git a/test/todo.test.ts b/test/todo.test.ts deleted file mode 100644 index 9139840..0000000 --- a/test/todo.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import test from 'ava' - -import { todo } from '@seamapi/webhook' - -test('todo: returns argument', (t) => { - t.is(todo('todo'), 'todo', 'returns input') -}) diff --git a/tsconfig.json b/tsconfig.json index 3916578..7ea5102 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -29,5 +29,5 @@ } }, "files": ["src/index.ts"], - "include": ["src/**/*", "test/**/*", "examples/**/*", "tsup.config.ts"] + "include": ["src/**/*", "test/**/*", "tsup.config.ts"] } From 451c0389177b7617f350370ad9cf21ac8405bed7 Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Wed, 10 Jan 2024 22:07:31 -0800 Subject: [PATCH 4/7] Fix note --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b238843..a482875 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ $ npm install -D seamapi-types First, create a webhook using the Seam API or Seam Console and obtain a Seam webhook secret. -_This example is for [Express], see the [Svix docs with more framework specific examples](https://docs.svix.com/receiving/verifying-payloads/how)._ +_This example is for [Express], see the [Svix docs for more examples in specific frameworks](https://docs.svix.com/receiving/verifying-payloads/how)._ ```js import { SeamWebhook } from '@seamapi/webhook' From 1522c285450b4ba8ee7d28c9e991deff02274899 Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Wed, 10 Jan 2024 22:08:28 -0800 Subject: [PATCH 5/7] Add early return in docs --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a482875..a5b1f62 100644 --- a/README.md +++ b/README.md @@ -97,13 +97,14 @@ app.post( try { data = webhook.verify(payload, headers) } catch { - res.status(400).send() + return res.status(400).send() + } storeEvent(data, (err) => { if (err != null) { - res.status(500).send() - return + return res.status(500).send() + } res.status(204).send() }) From e658d583ff25ef206eaecc0efd92a106e598415d Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Thu, 11 Jan 2024 06:09:00 +0000 Subject: [PATCH 6/7] ci: Format code --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index a5b1f62..e6abdbc 100644 --- a/README.md +++ b/README.md @@ -98,13 +98,11 @@ app.post( data = webhook.verify(payload, headers) } catch { return res.status(400).send() - } storeEvent(data, (err) => { if (err != null) { return res.status(500).send() - } res.status(204).send() }) From fd4f00adc5ddf67e249b6394c8f8ac9b862600e8 Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Wed, 10 Jan 2024 22:13:02 -0800 Subject: [PATCH 7/7] Add local import to docs --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e6abdbc..e0679c1 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,8 @@ import { SeamWebhook } from '@seamapi/webhook' import express from 'express' import bodyParser from 'body-parser' +import { storeEvent } from './store-event.js' + const app = express() const webhook = new SeamWebhook(process.env.SEAM_WEBHOOK_SECRET)