From f7ee9aaac5a959e82eff6b48ef115067f5abdf75 Mon Sep 17 00:00:00 2001 From: Mathias Vagni Date: Fri, 17 Nov 2023 16:42:49 +0100 Subject: [PATCH] Add prettier, dependencies and various other clean-up --- .github/workflows/lint.yaml | 48 + .gitignore | 1 + .perttierrc.json | 6 + _snippets/browser/upload-attachment.mdx | 11 +- _snippets/graphql/add-labels.mdx | 5 +- .../graphql/remove-customer-from-groups.mdx | 4 +- _snippets/node/upload-attachment.mdx | 10 +- .../add-customer-to-group-response.mdx | 60 +- .../typescript-sdk/add-customer-to-group.mdx | 10 +- _snippets/typescript-sdk/add-labels.mdx | 8 +- _snippets/typescript-sdk/assign-thread.mdx | 8 +- .../create-attachment-url-response.mdx | 6 +- .../typescript-sdk/create-attachment-url.mdx | 10 +- .../typescript-sdk/create-customer-event.mdx | 20 +- _snippets/typescript-sdk/create-thread.mdx | 10 +- _snippets/typescript-sdk/delete-customer.mdx | 6 +- _snippets/typescript-sdk/error-handling.mdx | 10 +- _snippets/typescript-sdk/first-api-call.mdx | 6 +- .../typescript-sdk/get-customer-by-email.mdx | 4 +- .../typescript-sdk/get-customer-by-id.mdx | 6 +- _snippets/typescript-sdk/get-customers.mdx | 2 +- .../typescript-sdk/mark-thread-as-done.mdx | 6 +- .../typescript-sdk/mark-thread-as-todo.mdx | 6 +- _snippets/typescript-sdk/page-info-after.mdx | 9 +- .../remove-customer-from-groups.mdx | 10 +- _snippets/typescript-sdk/remove-labels.mdx | 8 +- _snippets/typescript-sdk/reply-email.mdx | 12 +- _snippets/typescript-sdk/send-email.mdx | 14 +- _snippets/typescript-sdk/snooze-thread.mdx | 6 +- _snippets/typescript-sdk/ui-badge.mdx | 4 +- _snippets/typescript-sdk/ui-container.mdx | 4 +- _snippets/typescript-sdk/ui-copy-button.mdx | 6 +- _snippets/typescript-sdk/ui-divider.mdx | 8 +- _snippets/typescript-sdk/ui-link-button.mdx | 6 +- _snippets/typescript-sdk/ui-plain-text.mdx | 18 +- _snippets/typescript-sdk/ui-row.mdx | 6 +- _snippets/typescript-sdk/ui-spacer.mdx | 8 +- _snippets/typescript-sdk/ui-text.mdx | 20 +- _snippets/typescript-sdk/unassign-thread.mdx | 6 +- .../upsert-customer-response.mdx | 6 +- _snippets/typescript-sdk/upsert-customer.mdx | 24 +- package.json | 18 + pages/attachments.mdx | 67 +- pages/customer-cards/examples.mdx | 2 +- pages/email-setup.mdx | 16 +- pages/email-setup/receiving-emails.mdx | 12 +- pages/graphql.mdx | 10 +- pages/graphql/api-explorer.mdx | 2 +- pages/graphql/authentication.mdx | 5 +- pages/graphql/customers/customer-groups.mdx | 41 +- pages/graphql/customers/delete.mdx | 8 +- pages/graphql/customers/get.mdx | 6 + pages/graphql/customers/upsert.mdx | 43 +- pages/graphql/error-handling.mdx | 19 +- .../graphql/events/create-customer-event.mdx | 155 +- pages/graphql/labels/add.mdx | 7 +- pages/graphql/labels/remove.mdx | 2 + pages/graphql/messaging.mdx | 16 +- pages/graphql/messaging/reply-email.mdx | 26 +- pages/graphql/messaging/send-email.mdx | 1 + pages/graphql/pagination.mdx | 2 + pages/graphql/threads.mdx | 7 +- pages/graphql/threads/assignment.mdx | 123 +- pages/graphql/threads/create.mdx | 20 +- pages/graphql/threads/status-changes.mdx | 2 + pages/graphql/typescript-sdk.mdx | 2 +- pages/linear-integration-setup.mdx | 5 +- pages/migrate-to-threads.mdx | 9 +- pages/ui-components.mdx | 3 +- pages/ui-components/badge.mdx | 6 +- pages/ui-components/container.mdx | 6 +- pages/ui-components/copy-button.mdx | 2 + pages/ui-components/divider.mdx | 6 +- pages/ui-components/link-button.mdx | 2 + pages/ui-components/plain-text.mdx | 2 + pages/ui-components/row.mdx | 2 + pages/ui-components/spacer.mdx | 6 +- pages/ui-components/text.mdx | 2 + pages/webhooks.mdx | 10 +- pages/webhooks/customer-updated.mdx | 1 - pages/webhooks/email-received.mdx | 9 +- pages/webhooks/email-sent.mdx | 9 +- pages/webhooks/thread-created.mdx | 13 +- pnpm-lock.yaml | 3069 +++++++++++++++++ 84 files changed, 3732 insertions(+), 480 deletions(-) create mode 100644 .github/workflows/lint.yaml create mode 100644 .gitignore create mode 100644 .perttierrc.json create mode 100644 package.json create mode 100644 pnpm-lock.yaml diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml new file mode 100644 index 0000000..719bc8b --- /dev/null +++ b/.github/workflows/lint.yaml @@ -0,0 +1,48 @@ +name: Lint + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + lint: + name: Lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-node@v3 + with: + node-version: '18' + + - uses: pnpm/action-setup@v2 + name: Install pnpm + with: + version: 8 + run_install: false + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + - name: Install deps + run: pnpm i + + - name: Lint + run: pnpm run lint diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/.perttierrc.json b/.perttierrc.json new file mode 100644 index 0000000..f6ebd00 --- /dev/null +++ b/.perttierrc.json @@ -0,0 +1,6 @@ +{ + "printWidth": 100, + "trailingComma": "es5", + "singleQuote": true, + "tabWidth": 2 +} \ No newline at end of file diff --git a/_snippets/browser/upload-attachment.mdx b/_snippets/browser/upload-attachment.mdx index 5b40130..0a65940 100644 --- a/_snippets/browser/upload-attachment.mdx +++ b/_snippets/browser/upload-attachment.mdx @@ -12,13 +12,13 @@ function uploadAttachment(fileBlob, uploadFormUrl, uploadFormData) { form.append(key, value); }); - const file = new File([fileBlob], 'file'); - form.append('file', file); + const file = new File([fileBlob], "file"); + form.append("file", file); console.log(`Uploading attachment to ${uploadFormUrl}`); fetch(uploadFormUrl, { - method: 'POST', + method: "POST", body: form, }) .then((res) => { @@ -28,7 +28,10 @@ function uploadAttachment(fileBlob, uploadFormUrl, uploadFormData) { console.log(`File successfully uploaded! (code=${res.status})`); }) .catch((err) => { - console.log(`There was an error uploading the file: %s`, err.message ? err.message : err); + console.log( + `There was an error uploading the file: %s`, + err.message ? err.message : err, + ); }); } ``` diff --git a/_snippets/graphql/add-labels.mdx b/_snippets/graphql/add-labels.mdx index f80c013..9abd80f 100644 --- a/_snippets/graphql/add-labels.mdx +++ b/_snippets/graphql/add-labels.mdx @@ -14,7 +14,10 @@ mutation addLabels($input: AddLabelsInput!) { ```json filename="Variables" { "input": { - "labelTypeIds": ["lt_01HB8BTNTZ58730MX8H5VMKFD5", "lt_01HB8BTNKSCF1FK5ETFVRSDC6G"], + "labelTypeIds": [ + "lt_01HB8BTNTZ58730MX8H5VMKFD5", + "lt_01HB8BTNKSCF1FK5ETFVRSDC6G" + ], "threadId": "th_01H8H46YPB2S4MAJM382FG9423" } } diff --git a/_snippets/graphql/remove-customer-from-groups.mdx b/_snippets/graphql/remove-customer-from-groups.mdx index a14c6d5..e1e19b3 100644 --- a/_snippets/graphql/remove-customer-from-groups.mdx +++ b/_snippets/graphql/remove-customer-from-groups.mdx @@ -1,5 +1,7 @@ ```graphql filename="Mutation" -mutation removeCustomerFromCustomerGroup($input: RemoveCustomerFromCustomerGroupsInput!) { +mutation removeCustomerFromCustomerGroup( + $input: RemoveCustomerFromCustomerGroupsInput! +) { removeCustomerFromCustomerGroups(input: $input) { error { message diff --git a/_snippets/node/upload-attachment.mdx b/_snippets/node/upload-attachment.mdx index 084444a..9464b7c 100644 --- a/_snippets/node/upload-attachment.mdx +++ b/_snippets/node/upload-attachment.mdx @@ -1,6 +1,6 @@ ```js -const axios = require('axios'); -const FormData = require('form-data'); +const axios = require("axios"); +const FormData = require("form-data"); /** * Upload an attachment. @@ -15,7 +15,7 @@ function uploadAttachment(fileBuffer, uploadFormUrl, uploadFormData) { form.append(key, value); }); - form.append('file', fileBuffer, { filename: 'file' }); + form.append("file", fileBuffer, { filename: "file" }); console.log(`Uploading attachment to ${uploadFormUrl}`); @@ -23,7 +23,7 @@ function uploadAttachment(fileBuffer, uploadFormUrl, uploadFormData) { .post(uploadFormUrl, form, { headers: { ...form.getHeaders(), - 'Content-Length': form.getLengthSync(), + "Content-Length": form.getLengthSync(), }, }) .then((res) => { @@ -32,7 +32,7 @@ function uploadAttachment(fileBuffer, uploadFormUrl, uploadFormData) { .catch((err) => { console.log( `There was an error uploading the file: %s`, - err.response ? err.response.data : err + err.response ? err.response.data : err, ); }); } diff --git a/_snippets/typescript-sdk/add-customer-to-group-response.mdx b/_snippets/typescript-sdk/add-customer-to-group-response.mdx index 0a35628..878207a 100644 --- a/_snippets/typescript-sdk/add-customer-to-group-response.mdx +++ b/_snippets/typescript-sdk/add-customer-to-group-response.mdx @@ -1,57 +1,57 @@ ```js [ { - customerId: 'c_01GTC6ZHCMAGR06FMPN9VY5J95', + customerId: "c_01GTC6ZHCMAGR06FMPN9VY5J95", createdAt: { - __typename: 'DateTime', - iso8601: '2023-06-21T14:20:12.014Z', - unixTimestamp: '1687357212014', + __typename: "DateTime", + iso8601: "2023-06-21T14:20:12.014Z", + unixTimestamp: "1687357212014", }, createdBy: { - __typename: 'MachineUserActor', - machineUserId: 'mu_01H1P0P0PHA2BJRRS7EC02XKCF', + __typename: "MachineUserActor", + machineUserId: "mu_01H1P0P0PHA2BJRRS7EC02XKCF", }, updatedAt: { - __typename: 'DateTime', - iso8601: '2023-06-21T14:20:12.014Z', - unixTimestamp: '1687357212014', + __typename: "DateTime", + iso8601: "2023-06-21T14:20:12.014Z", + unixTimestamp: "1687357212014", }, updatedBy: { - __typename: 'MachineUserActor', - machineUserId: 'mu_01H1P0P0PHA2BJRRS7EC02XKCF', + __typename: "MachineUserActor", + machineUserId: "mu_01H1P0P0PHA2BJRRS7EC02XKCF", }, customerGroup: { - id: 'cg_01H1P1RK22WTVMFRY8BX6S6VJX', - name: 'free tier', - key: 'free-tier', - color: '#E78450', + id: "cg_01H1P1RK22WTVMFRY8BX6S6VJX", + name: "free tier", + key: "free-tier", + color: "#E78450", }, }, { - customerId: 'c_01GTC6ZHCMAGR06FMPN9VY5J95', + customerId: "c_01GTC6ZHCMAGR06FMPN9VY5J95", createdAt: { - __typename: 'DateTime', - iso8601: '2023-06-21T14:20:12.014Z', - unixTimestamp: '1687357212014', + __typename: "DateTime", + iso8601: "2023-06-21T14:20:12.014Z", + unixTimestamp: "1687357212014", }, createdBy: { - __typename: 'MachineUserActor', - machineUserId: 'mu_01H1P0P0PHA2BJRRS7EC02XKCF', + __typename: "MachineUserActor", + machineUserId: "mu_01H1P0P0PHA2BJRRS7EC02XKCF", }, updatedAt: { - __typename: 'DateTime', - iso8601: '2023-06-21T14:20:12.014Z', - unixTimestamp: '1687357212014', + __typename: "DateTime", + iso8601: "2023-06-21T14:20:12.014Z", + unixTimestamp: "1687357212014", }, updatedBy: { - __typename: 'MachineUserActor', - machineUserId: 'mu_01H1P0P0PHA2BJRRS7EC02XKCF', + __typename: "MachineUserActor", + machineUserId: "mu_01H1P0P0PHA2BJRRS7EC02XKCF", }, customerGroup: { - id: 'cg_01H1P1S2HD9PERNNS591ZT28ZZ', - name: 'design partner', - key: 'design-partner', - color: '#FBBF24', + id: "cg_01H1P1S2HD9PERNNS591ZT28ZZ", + name: "design partner", + key: "design-partner", + color: "#FBBF24", }, }, ]; diff --git a/_snippets/typescript-sdk/add-customer-to-group.mdx b/_snippets/typescript-sdk/add-customer-to-group.mdx index e53328f..59a6889 100644 --- a/_snippets/typescript-sdk/add-customer-to-group.mdx +++ b/_snippets/typescript-sdk/add-customer-to-group.mdx @@ -1,16 +1,16 @@ ```tsx -import { PlainClient } from '@team-plain/typescript-sdk'; +import { PlainClient } from "@team-plain/typescript-sdk"; -const client = new PlainClient({ apiKey: 'plainApiKey_xxx' }); +const client = new PlainClient({ apiKey: "plainApiKey_xxx" }); const res = await client.addCustomerToCustomerGroups({ - customerId: 'c_01GTC6ZHCMAGR06FMPN9VY5J95', + customerId: "c_01GTC6ZHCMAGR06FMPN9VY5J95", customerGroupIdentifiers: [ { - customerGroupKey: 'free-tier', + customerGroupKey: "free-tier", }, { - customerGroupKey: 'design-partner', + customerGroupKey: "design-partner", }, ], }); diff --git a/_snippets/typescript-sdk/add-labels.mdx b/_snippets/typescript-sdk/add-labels.mdx index 2e0899d..0ae8af5 100644 --- a/_snippets/typescript-sdk/add-labels.mdx +++ b/_snippets/typescript-sdk/add-labels.mdx @@ -1,11 +1,11 @@ ```tsx -import { PlainClient } from '@team-plain/typescript-sdk'; +import { PlainClient } from "@team-plain/typescript-sdk"; -const client = new PlainClient({ apiKey: 'plainApiKey_xxx' }); +const client = new PlainClient({ apiKey: "plainApiKey_xxx" }); const res = await client.addLabels({ - labelTypeIds: ['lt_01HB8BTNVM7GEBKBEDNC2K8ST7'], - threadId: 'th_01HD1G6649R1DK061W27VBT7QB', + labelTypeIds: ["lt_01HB8BTNVM7GEBKBEDNC2K8ST7"], + threadId: "th_01HD1G6649R1DK061W27VBT7QB", }); if (res.error) { diff --git a/_snippets/typescript-sdk/assign-thread.mdx b/_snippets/typescript-sdk/assign-thread.mdx index 41552b0..99e1ca7 100644 --- a/_snippets/typescript-sdk/assign-thread.mdx +++ b/_snippets/typescript-sdk/assign-thread.mdx @@ -1,13 +1,13 @@ ```tsx -import { PlainClient } from '@team-plain/typescript-sdk'; +import { PlainClient } from "@team-plain/typescript-sdk"; const client = new PlainClient({ - apiKey: 'XXX', + apiKey: "XXX", }); const res = await client.assignThread({ - threadId: 'th_01H8H46YPB2S4MAJM382FG9423', - userId: 'u_01FSVKMHFDHJ3H5XFM20EMCBQN', + threadId: "th_01H8H46YPB2S4MAJM382FG9423", + userId: "u_01FSVKMHFDHJ3H5XFM20EMCBQN", // You could instead assign to a machine user by doing: // machineUserId: 'XXX' diff --git a/_snippets/typescript-sdk/create-attachment-url-response.mdx b/_snippets/typescript-sdk/create-attachment-url-response.mdx index 06fb69c..5dd62db 100644 --- a/_snippets/typescript-sdk/create-attachment-url-response.mdx +++ b/_snippets/typescript-sdk/create-attachment-url-response.mdx @@ -5,7 +5,11 @@ "__typename": "Attachment", "id": "att_01H3970W7XG1716AVNGQ6FWYGD", "fileName": "the-filename.jpeg", - "fileSize": { "__typename": "FileSize", "kiloBytes": 32.32, "megaBytes": 0.03 }, + "fileSize": { + "__typename": "FileSize", + "kiloBytes": 32.32, + "megaBytes": 0.03 + }, "fileExtension": null, "updatedAt": { "__typename": "DateTime", diff --git a/_snippets/typescript-sdk/create-attachment-url.mdx b/_snippets/typescript-sdk/create-attachment-url.mdx index f89b496..3d8d277 100644 --- a/_snippets/typescript-sdk/create-attachment-url.mdx +++ b/_snippets/typescript-sdk/create-attachment-url.mdx @@ -1,11 +1,11 @@ ```ts /c_XXXXXXXXXXXXXXXXXXXXXXXXXX/ -import { AttachmentType, PlainClient } from '@team-plain/typescript-sdk'; +import { AttachmentType, PlainClient } from "@team-plain/typescript-sdk"; -const client = new PlainClient({ apiKey: 'XXX' }); +const client = new PlainClient({ apiKey: "XXX" }); const res = await client.createAttachmentUploadUrl({ - customerId: 'c_XXXXXXXXXXXXXXXXXXXXXXXXXX', - fileName: 'the-filename.jpeg', + customerId: "c_XXXXXXXXXXXXXXXXXXXXXXXXXX", + fileName: "the-filename.jpeg", fileSizeBytes: 32318, attachmentType: AttachmentType.CustomTimelineEntry, }); @@ -13,7 +13,7 @@ const res = await client.createAttachmentUploadUrl({ if (res.error) { console.error(res.error); } else { - console.log('Attachment upload url created'); + console.log("Attachment upload url created"); console.log(res.data); } ``` diff --git a/_snippets/typescript-sdk/create-customer-event.mdx b/_snippets/typescript-sdk/create-customer-event.mdx index da5c4cb..ec28252 100644 --- a/_snippets/typescript-sdk/create-customer-event.mdx +++ b/_snippets/typescript-sdk/create-customer-event.mdx @@ -1,17 +1,17 @@ ```tsx -import { PlainClient, uiComponent } from '@team-plain/typescript-sdk'; +import { PlainClient, uiComponent } from "@team-plain/typescript-sdk"; const client = new PlainClient({ - apiKey: 'XXX', + apiKey: "XXX", debug: true, }); const res = await client.createCustomerEvent({ - title: 'API key generated', + title: "API key generated", customerIdentifier: { // You can use the email: - email: 'jane@acme.com', + email: "jane@acme.com", // ...or if you set external id on customers: // externalId: 'YOUR_ID', @@ -22,14 +22,14 @@ const res = await client.createCustomerEvent({ components: [ uiComponent.text({ - text: 'New API key was added with the fingerprint **3b7896975ee9fd15eeb7** with 4 associated roles.', + text: "New API key was added with the fingerprint **3b7896975ee9fd15eeb7** with 4 associated roles.", }), uiComponent.spacer({ - size: 'M', + size: "M", }), uiComponent.linkButton({ - label: 'View in admin', - url: 'https://admin.your-app.com', + label: "View in admin", + url: "https://admin.your-app.com", }), ], @@ -37,11 +37,11 @@ const res = await client.createCustomerEvent({ // be created once and fail on the second time. This external id acts // as an idempotency key while also letting you correlate an event to // something your systems. - externalId: 'XXX', + externalId: "XXX", // Optional - if provided then the event will only be shown // in a single thread vs all threads from a customer - threadId: 'th_01HB924RWAW8H3Q8KZDFWYBJHZ', + threadId: "th_01HB924RWAW8H3Q8KZDFWYBJHZ", }); if (res.error) { diff --git a/_snippets/typescript-sdk/create-thread.mdx b/_snippets/typescript-sdk/create-thread.mdx index fb718e7..203a3d8 100644 --- a/_snippets/typescript-sdk/create-thread.mdx +++ b/_snippets/typescript-sdk/create-thread.mdx @@ -1,16 +1,16 @@ ```tsx -import { PlainClient } from '@team-plain/typescript-sdk'; +import { PlainClient } from "@team-plain/typescript-sdk"; const client = new PlainClient({ - apiKey: 'XXX', + apiKey: "XXX", debug: true, }); const res = await client.createThread({ - title: 'Bug Report', + title: "Bug Report", customerIdentifier: { // You can use the email: - email: 'jane@acme.com', + email: "jane@acme.com", // ...or if you set external id on customers: // externalId: '', @@ -27,7 +27,7 @@ const res = await client.createThread({ ], // Label types are created in settings where you can also copy // their ID. - labelTypeIds: ['lt_01HB924PME9C0YWKW1N4AK3BZA'], + labelTypeIds: ["lt_01HB924PME9C0YWKW1N4AK3BZA"], }); if (res.error) { diff --git a/_snippets/typescript-sdk/delete-customer.mdx b/_snippets/typescript-sdk/delete-customer.mdx index 8ead1e5..ffef4af 100644 --- a/_snippets/typescript-sdk/delete-customer.mdx +++ b/_snippets/typescript-sdk/delete-customer.mdx @@ -1,12 +1,12 @@ ```tsx -import { PlainClient } from '../client'; +import { PlainClient } from "../client"; const client = new PlainClient({ - apiKey: 'XXX', + apiKey: "XXX", }); const res = await client.deleteCustomer({ - customerId: 'c_01H1P4TE62AS5KZ4CZFC0578ED', + customerId: "c_01H1P4TE62AS5KZ4CZFC0578ED", }); if (res.error) { diff --git a/_snippets/typescript-sdk/error-handling.mdx b/_snippets/typescript-sdk/error-handling.mdx index cb95f34..33c69d3 100644 --- a/_snippets/typescript-sdk/error-handling.mdx +++ b/_snippets/typescript-sdk/error-handling.mdx @@ -1,17 +1,17 @@ ```tsx {21} -import { PlainClient } from '../client'; +import { PlainClient } from "../client"; export async function createCustomer() { - const client = new PlainClient({ apiKey: 'XXX' }); + const client = new PlainClient({ apiKey: "XXX" }); const res = await client.upsertCustomer({ identifier: { - emailAddress: 'jane@gmail.com', + emailAddress: "jane@gmail.com", }, onCreate: { - fullName: 'Jane Fargate', + fullName: "Jane Fargate", email: { - email: 'jane@gmail.com', + email: "jane@gmail.com", isVerified: true, }, }, diff --git a/_snippets/typescript-sdk/first-api-call.mdx b/_snippets/typescript-sdk/first-api-call.mdx index 30ff6be..cd102fa 100644 --- a/_snippets/typescript-sdk/first-api-call.mdx +++ b/_snippets/typescript-sdk/first-api-call.mdx @@ -1,8 +1,8 @@ ```ts filename="script.js" {3-4} -const { PlainClient } = require('@team-plain/typescript-sdk'); +const { PlainClient } = require("@team-plain/typescript-sdk"); -const apiKey = 'XXX'; -const email = 'XXX'; +const apiKey = "XXX"; +const email = "XXX"; const client = new PlainClient({ apiKey: apiKey, diff --git a/_snippets/typescript-sdk/get-customer-by-email.mdx b/_snippets/typescript-sdk/get-customer-by-email.mdx index 5253d73..e170ea5 100644 --- a/_snippets/typescript-sdk/get-customer-by-email.mdx +++ b/_snippets/typescript-sdk/get-customer-by-email.mdx @@ -1,9 +1,9 @@ ```tsx const client = new PlainClient({ - apiKey: 'XXX', + apiKey: "XXX", }); -const res = await client.getCustomerByEmail({ email: 'bob@example.com' }); +const res = await client.getCustomerByEmail({ email: "bob@example.com" }); if (res.error) { console.error(res.error); diff --git a/_snippets/typescript-sdk/get-customer-by-id.mdx b/_snippets/typescript-sdk/get-customer-by-id.mdx index 8de87c3..415e4f5 100644 --- a/_snippets/typescript-sdk/get-customer-by-id.mdx +++ b/_snippets/typescript-sdk/get-customer-by-id.mdx @@ -1,9 +1,11 @@ ```tsx const client = new PlainClient({ - apiKey: 'XXX', + apiKey: "XXX", }); -const res = await client.getCustomerById({ customerId: 'c_01H14DFQ4PDYBH398J1E99TWSS' }); +const res = await client.getCustomerById({ + customerId: "c_01H14DFQ4PDYBH398J1E99TWSS", +}); if (res.error) { console.error(res.error); diff --git a/_snippets/typescript-sdk/get-customers.mdx b/_snippets/typescript-sdk/get-customers.mdx index b6b8c65..bcca6f3 100644 --- a/_snippets/typescript-sdk/get-customers.mdx +++ b/_snippets/typescript-sdk/get-customers.mdx @@ -1,6 +1,6 @@ ```tsx const client = new PlainClient({ - apiKey: 'XXX', + apiKey: "XXX", }); const res = await client.getCustomers({ diff --git a/_snippets/typescript-sdk/mark-thread-as-done.mdx b/_snippets/typescript-sdk/mark-thread-as-done.mdx index b49caea..34a85ee 100644 --- a/_snippets/typescript-sdk/mark-thread-as-done.mdx +++ b/_snippets/typescript-sdk/mark-thread-as-done.mdx @@ -1,12 +1,12 @@ ```tsx -import { PlainClient } from '@team-plain/typescript-sdk'; +import { PlainClient } from "@team-plain/typescript-sdk"; const client = new PlainClient({ - apiKey: 'XXX', + apiKey: "XXX", }); const res = await client.markThreadAsDone({ - threadId: 'th_01HB924RWAW8H3Q8KZDFWYBJHZ', + threadId: "th_01HB924RWAW8H3Q8KZDFWYBJHZ", }); if (res.error) { diff --git a/_snippets/typescript-sdk/mark-thread-as-todo.mdx b/_snippets/typescript-sdk/mark-thread-as-todo.mdx index be8488f..aeda948 100644 --- a/_snippets/typescript-sdk/mark-thread-as-todo.mdx +++ b/_snippets/typescript-sdk/mark-thread-as-todo.mdx @@ -1,12 +1,12 @@ ```tsx -import { PlainClient } from '@team-plain/typescript-sdk'; +import { PlainClient } from "@team-plain/typescript-sdk"; const client = new PlainClient({ - apiKey: 'XXX', + apiKey: "XXX", }); const res = await client.markThreadAsTodo({ - threadId: 'th_01HB924RWAW8H3Q8KZDFWYBJHZ', + threadId: "th_01HB924RWAW8H3Q8KZDFWYBJHZ", }); if (res.error) { diff --git a/_snippets/typescript-sdk/page-info-after.mdx b/_snippets/typescript-sdk/page-info-after.mdx index 4e0951c..882aa12 100644 --- a/_snippets/typescript-sdk/page-info-after.mdx +++ b/_snippets/typescript-sdk/page-info-after.mdx @@ -1,8 +1,8 @@ ```tsx -import { PlainClient } from '../client'; +import { PlainClient } from "../client"; const client = new PlainClient({ - apiKey: 'XXX', + apiKey: "XXX", }); const firstPage = client.getCustomers({}); @@ -11,6 +11,9 @@ if (firstPage.error) { console.error(firstPage.error); } else { const { pageInfo } = firstPage.data; - const secondPage = await client.getCustomers({ after: pageInfo.endCursor, first: 50 }); + const secondPage = await client.getCustomers({ + after: pageInfo.endCursor, + first: 50, + }); } ``` diff --git a/_snippets/typescript-sdk/remove-customer-from-groups.mdx b/_snippets/typescript-sdk/remove-customer-from-groups.mdx index 3b1bbb4..c05dcce 100644 --- a/_snippets/typescript-sdk/remove-customer-from-groups.mdx +++ b/_snippets/typescript-sdk/remove-customer-from-groups.mdx @@ -1,18 +1,18 @@ ```tsx -import { PlainClient } from '@team-plain/typescript-sdk'; +import { PlainClient } from "@team-plain/typescript-sdk"; const client = new PlainClient({ - apiKey: 'plainApiKey_rO6tIKWU2w0gD_ek9HwjsHMiq1MHsgAn7mhVrcC7MGw', + apiKey: "plainApiKey_rO6tIKWU2w0gD_ek9HwjsHMiq1MHsgAn7mhVrcC7MGw", }); const res = await client.removeCustomerFromCustomerGroups({ - customerId: 'c_01H1P4TE62AS5KZ4CZFC0578ED', + customerId: "c_01H1P4TE62AS5KZ4CZFC0578ED", customerGroupIdentifiers: [ { - customerGroupKey: 'free-tier', + customerGroupKey: "free-tier", }, { - customerGroupKey: 'design-partner', + customerGroupKey: "design-partner", }, ], }); diff --git a/_snippets/typescript-sdk/remove-labels.mdx b/_snippets/typescript-sdk/remove-labels.mdx index f08eabc..f38d6b0 100644 --- a/_snippets/typescript-sdk/remove-labels.mdx +++ b/_snippets/typescript-sdk/remove-labels.mdx @@ -1,9 +1,11 @@ ```tsx -import { PlainClient } from '@team-plain/typescript-sdk'; +import { PlainClient } from "@team-plain/typescript-sdk"; -const client = new PlainClient({ apiKey: 'plainApiKey_xxx' }); +const client = new PlainClient({ apiKey: "plainApiKey_xxx" }); -const res = await client.removeLabels({ labelIds: ['l_01HD428Y1TREH5KTXP019K6FPK'] }); +const res = await client.removeLabels({ + labelIds: ["l_01HD428Y1TREH5KTXP019K6FPK"], +}); if (res.error) { console.error(res.error); diff --git a/_snippets/typescript-sdk/reply-email.mdx b/_snippets/typescript-sdk/reply-email.mdx index 855f905..bcab140 100644 --- a/_snippets/typescript-sdk/reply-email.mdx +++ b/_snippets/typescript-sdk/reply-email.mdx @@ -1,13 +1,13 @@ ```tsx -import { PlainClient } from '@team-plain/typescript-sdk'; +import { PlainClient } from "@team-plain/typescript-sdk"; -const client = new PlainClient({ apiKey: 'plainApiKey_xxx' }); +const client = new PlainClient({ apiKey: "plainApiKey_xxx" }); client.replyToEmail({ - customerId: 'c_01GTC6ZHCMAGR06FMPN9VY5J95', - inReplyToEmailId: 'em_01GM2X8K7D3RZ7ZFGHZ2AYG3SA', - textContent: 'The plain text version of your reply goes here.', - markdownContent: 'The markdown **version** of your _reply_ goes here.', + customerId: "c_01GTC6ZHCMAGR06FMPN9VY5J95", + inReplyToEmailId: "em_01GM2X8K7D3RZ7ZFGHZ2AYG3SA", + textContent: "The plain text version of your reply goes here.", + markdownContent: "The markdown **version** of your _reply_ goes here.", }); if (res.error) { diff --git a/_snippets/typescript-sdk/send-email.mdx b/_snippets/typescript-sdk/send-email.mdx index 84ee825..8a35966 100644 --- a/_snippets/typescript-sdk/send-email.mdx +++ b/_snippets/typescript-sdk/send-email.mdx @@ -1,14 +1,14 @@ ```tsx -import { PlainClient } from '@team-plain/typescript-sdk'; +import { PlainClient } from "@team-plain/typescript-sdk"; -const client = new PlainClient({ apiKey: 'plainApiKey_xxx' }); +const client = new PlainClient({ apiKey: "plainApiKey_xxx" }); client.sendNewEmail({ - customerId: 'c_01GTC6ZHCMAGR06FMPN9VY5J95', - threadId: 'th_01HD44FHMCDSSWE38N14FSYV6K', - subject: 'Your account has a problem', - textContent: 'The plain text version of your email goes here.', - markdownContent: 'The markdown **version** of your _email_ goes here.', + customerId: "c_01GTC6ZHCMAGR06FMPN9VY5J95", + threadId: "th_01HD44FHMCDSSWE38N14FSYV6K", + subject: "Your account has a problem", + textContent: "The plain text version of your email goes here.", + markdownContent: "The markdown **version** of your _email_ goes here.", }); if (res.error) { diff --git a/_snippets/typescript-sdk/snooze-thread.mdx b/_snippets/typescript-sdk/snooze-thread.mdx index 562c41d..ce4c1dd 100644 --- a/_snippets/typescript-sdk/snooze-thread.mdx +++ b/_snippets/typescript-sdk/snooze-thread.mdx @@ -1,12 +1,12 @@ ```tsx -import { PlainClient } from '@team-plain/typescript-sdk'; +import { PlainClient } from "@team-plain/typescript-sdk"; const client = new PlainClient({ - apiKey: 'XXX', + apiKey: "XXX", }); const res = await client.snoozeThread({ - threadId: 'th_01HB924RWAW8H3Q8KZDFWYBJHZ', + threadId: "th_01HB924RWAW8H3Q8KZDFWYBJHZ", durationSeconds: 5 * 24 * 60 * 60, // 5 days }); diff --git a/_snippets/typescript-sdk/ui-badge.mdx b/_snippets/typescript-sdk/ui-badge.mdx index 7a99f34..e9f5e25 100644 --- a/_snippets/typescript-sdk/ui-badge.mdx +++ b/_snippets/typescript-sdk/ui-badge.mdx @@ -1,5 +1,5 @@ ```tsx -import { uiComponent } from '@team-plain/typescript-sdk'; +import { uiComponent } from "@team-plain/typescript-sdk"; -uiComponent.badge({ label: 'Subscribed', color: 'GREEN' }); +uiComponent.badge({ label: "Subscribed", color: "GREEN" }); ``` diff --git a/_snippets/typescript-sdk/ui-container.mdx b/_snippets/typescript-sdk/ui-container.mdx index d11ca4f..6ca6cbe 100644 --- a/_snippets/typescript-sdk/ui-container.mdx +++ b/_snippets/typescript-sdk/ui-container.mdx @@ -1,7 +1,7 @@ ```tsx -import { uiComponent } from '@team-plain/typescript-sdk'; +import { uiComponent } from "@team-plain/typescript-sdk"; uiComponent.container({ - content: [uiComponent.text({ text: 'Container content' })], + content: [uiComponent.text({ text: "Container content" })], }); ``` diff --git a/_snippets/typescript-sdk/ui-copy-button.mdx b/_snippets/typescript-sdk/ui-copy-button.mdx index 60b36cb..36aeeec 100644 --- a/_snippets/typescript-sdk/ui-copy-button.mdx +++ b/_snippets/typescript-sdk/ui-copy-button.mdx @@ -1,8 +1,8 @@ ```tsx -import { uiComponent } from '@team-plain/typescript-sdk'; +import { uiComponent } from "@team-plain/typescript-sdk"; uiComponent.copyButton({ - value: '2a8f2dae-3580-402b-aa0a-243efae55e39', - tooltip: 'Order ID', + value: "2a8f2dae-3580-402b-aa0a-243efae55e39", + tooltip: "Order ID", }); ``` diff --git a/_snippets/typescript-sdk/ui-divider.mdx b/_snippets/typescript-sdk/ui-divider.mdx index f79ac81..5f65873 100644 --- a/_snippets/typescript-sdk/ui-divider.mdx +++ b/_snippets/typescript-sdk/ui-divider.mdx @@ -1,9 +1,9 @@ ```tsx -import { uiComponent } from '@team-plain/typescript-sdk'; +import { uiComponent } from "@team-plain/typescript-sdk"; [ - uiComponent.text({ text: 'Content before an XS divider' }), - uiComponent.divider({ spacingSize: 'XS' }), - uiComponent.text({ text: 'Content after divider' }), + uiComponent.text({ text: "Content before an XS divider" }), + uiComponent.divider({ spacingSize: "XS" }), + uiComponent.text({ text: "Content after divider" }), ]; ``` diff --git a/_snippets/typescript-sdk/ui-link-button.mdx b/_snippets/typescript-sdk/ui-link-button.mdx index 3a068bf..b427cbf 100644 --- a/_snippets/typescript-sdk/ui-link-button.mdx +++ b/_snippets/typescript-sdk/ui-link-button.mdx @@ -1,8 +1,8 @@ ```tsx -import { uiComponent } from '@team-plain/typescript-sdk'; +import { uiComponent } from "@team-plain/typescript-sdk"; uiComponent.linkButton({ - label: 'Open in Admin Portal', - url: 'https://example.com', + label: "Open in Admin Portal", + url: "https://example.com", }); ``` diff --git a/_snippets/typescript-sdk/ui-plain-text.mdx b/_snippets/typescript-sdk/ui-plain-text.mdx index 6e87106..bd191ba 100644 --- a/_snippets/typescript-sdk/ui-plain-text.mdx +++ b/_snippets/typescript-sdk/ui-plain-text.mdx @@ -1,21 +1,21 @@ ```tsx -import { uiComponent } from '@team-plain/typescript-sdk'; +import { uiComponent } from "@team-plain/typescript-sdk"; [ - uiComponent.plainText({ text: 'Small text', size: 'S' }), + uiComponent.plainText({ text: "Small text", size: "S" }), - uiComponent.plainText({ text: 'Medium text', size: 'M' }), + uiComponent.plainText({ text: "Medium text", size: "M" }), - uiComponent.plainText({ text: 'Large text', size: 'L' }), + uiComponent.plainText({ text: "Large text", size: "L" }), - uiComponent.plainText({ text: 'Normal text', color: 'NORMAL' }), + uiComponent.plainText({ text: "Normal text", color: "NORMAL" }), - uiComponent.plainText({ text: 'Muted text', color: 'MUTED' }), + uiComponent.plainText({ text: "Muted text", color: "MUTED" }), - uiComponent.plainText({ text: 'Success text', color: 'SUCCESS' }), + uiComponent.plainText({ text: "Success text", color: "SUCCESS" }), - uiComponent.plainText({ text: 'Warning text', color: 'WARNING' }), + uiComponent.plainText({ text: "Warning text", color: "WARNING" }), - uiComponent.plainText({ text: 'Error text', color: 'ERROR' }), + uiComponent.plainText({ text: "Error text", color: "ERROR" }), ]; ``` diff --git a/_snippets/typescript-sdk/ui-row.mdx b/_snippets/typescript-sdk/ui-row.mdx index d8b64f2..bf2cc29 100644 --- a/_snippets/typescript-sdk/ui-row.mdx +++ b/_snippets/typescript-sdk/ui-row.mdx @@ -1,8 +1,8 @@ ```tsx -import { uiComponent } from '@team-plain/typescript-sdk'; +import { uiComponent } from "@team-plain/typescript-sdk"; uiComponent.row({ - mainContent: [uiComponent.text({ text: 'Membership' })], - asideContent: [uiComponent.badge({ label: 'Premium plan', color: 'BLUE' })], + mainContent: [uiComponent.text({ text: "Membership" })], + asideContent: [uiComponent.badge({ label: "Premium plan", color: "BLUE" })], }); ``` diff --git a/_snippets/typescript-sdk/ui-spacer.mdx b/_snippets/typescript-sdk/ui-spacer.mdx index 59ba5dd..b125062 100644 --- a/_snippets/typescript-sdk/ui-spacer.mdx +++ b/_snippets/typescript-sdk/ui-spacer.mdx @@ -1,9 +1,9 @@ ```tsx -import { uiComponent } from '@team-plain/typescript-sdk'; +import { uiComponent } from "@team-plain/typescript-sdk"; [ - uiComponent.text({ text: 'Content before an XS spacer' }), - uiComponent.spacer({ spacingSize: 'XS' }), - uiComponent.text({ text: 'Content after spacer' }), + uiComponent.text({ text: "Content before an XS spacer" }), + uiComponent.spacer({ spacingSize: "XS" }), + uiComponent.text({ text: "Content after spacer" }), ]; ``` diff --git a/_snippets/typescript-sdk/ui-text.mdx b/_snippets/typescript-sdk/ui-text.mdx index 94fe86a..9f504ca 100644 --- a/_snippets/typescript-sdk/ui-text.mdx +++ b/_snippets/typescript-sdk/ui-text.mdx @@ -1,25 +1,25 @@ ```tsx -import { uiComponent } from '@team-plain/typescript-sdk'; +import { uiComponent } from "@team-plain/typescript-sdk"; [ uiComponent.text({ - text: 'The **quick** brown fox _jumps_ over the [lazy link](https://plain.com)', + text: "The **quick** brown fox _jumps_ over the [lazy link](https://plain.com)", }), - uiComponent.text({ text: 'Small text', size: 'S' }), + uiComponent.text({ text: "Small text", size: "S" }), - uiComponent.text({ text: 'Medium text', size: 'M' }), + uiComponent.text({ text: "Medium text", size: "M" }), - uiComponent.text({ text: 'Large text', size: 'L' }), + uiComponent.text({ text: "Large text", size: "L" }), - uiComponent.text({ text: 'Normal text', color: 'NORMAL' }), + uiComponent.text({ text: "Normal text", color: "NORMAL" }), - uiComponent.text({ text: 'Muted text', color: 'MUTED' }), + uiComponent.text({ text: "Muted text", color: "MUTED" }), - uiComponent.text({ text: 'Success text', color: 'SUCCESS' }), + uiComponent.text({ text: "Success text", color: "SUCCESS" }), - uiComponent.text({ text: 'Warning text', color: 'WARNING' }), + uiComponent.text({ text: "Warning text", color: "WARNING" }), - uiComponent.text({ text: 'Error text', color: 'ERROR' }), + uiComponent.text({ text: "Error text", color: "ERROR" }), ]; ``` diff --git a/_snippets/typescript-sdk/unassign-thread.mdx b/_snippets/typescript-sdk/unassign-thread.mdx index 28f0152..25db9a3 100644 --- a/_snippets/typescript-sdk/unassign-thread.mdx +++ b/_snippets/typescript-sdk/unassign-thread.mdx @@ -1,12 +1,12 @@ ```tsx -import { PlainClient } from '@team-plain/typescript-sdk'; +import { PlainClient } from "@team-plain/typescript-sdk"; const client = new PlainClient({ - apiKey: 'XXX', + apiKey: "XXX", }); const res = await client.unassignThread({ - threadId: 'th_01H8H46YPB2S4MAJM382FG9423', + threadId: "th_01H8H46YPB2S4MAJM382FG9423", }); if (res.error) { diff --git a/_snippets/typescript-sdk/upsert-customer-response.mdx b/_snippets/typescript-sdk/upsert-customer-response.mdx index 751273e..ac2620d 100644 --- a/_snippets/typescript-sdk/upsert-customer-response.mdx +++ b/_snippets/typescript-sdk/upsert-customer-response.mdx @@ -7,7 +7,11 @@ "fullName": "Donald Duck", "shortName": "Donald", "externalId": "c_123", - "email": { "email": "donald@example.com", "isVerified": false, "verifiedAt": null }, + "email": { + "email": "donald@example.com", + "isVerified": false, + "verifiedAt": null + }, "status": "IDLE", "statusChangedAt": { "__typename": "DateTime", diff --git a/_snippets/typescript-sdk/upsert-customer.mdx b/_snippets/typescript-sdk/upsert-customer.mdx index 5b4d7c9..6f56642 100644 --- a/_snippets/typescript-sdk/upsert-customer.mdx +++ b/_snippets/typescript-sdk/upsert-customer.mdx @@ -1,32 +1,32 @@ ```ts -import { PlainClient } from '@team-plain/typescript-sdk'; +import { PlainClient } from "@team-plain/typescript-sdk"; -const client = new PlainClient({ apiKey: 'plainApiKey_xxx' }); +const client = new PlainClient({ apiKey: "plainApiKey_xxx" }); const res = await client.upsertCustomer({ identifier: { - emailAddress: 'donald@example.com', + emailAddress: "donald@example.com", }, // If the customer is not found and should be created then // these details will be used: onCreate: { - fullName: 'Donald Duck', - shortName: 'Donald', + fullName: "Donald Duck", + shortName: "Donald", email: { - email: 'donald@example.com', + email: "donald@example.com", isVerified: true, }, // This is the id of the customer in your own backend. // Filling this out makes it easy to link customers in Plain // back to customer in your own systems. - externalId: 'c_123', + externalId: "c_123", // This is optional but if you want to put a customer into a group // on creation, this is how you do it. customerGroupIdentifiers: [ { - customerGroupKey: 'enterprise', + customerGroupKey: "enterprise", }, ], }, @@ -35,17 +35,17 @@ const res = await client.upsertCustomer({ // just providing some of the fields below. onUpdate: { fullName: { - value: 'Donald Duck', + value: "Donald Duck", }, shortName: { - value: 'Donald', + value: "Donald", }, email: { - email: 'donald@example.com', + email: "donald@example.com", isVerified: true, }, externalId: { - value: 'c_123', + value: "c_123", }, }, }); diff --git a/package.json b/package.json new file mode 100644 index 0000000..55287cc --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "@team-plain/docs-mintlify", + "version": "1.0.0", + "description": "Documentation for plain.com", + "main": "index.js", + "engines": { + "node": "18.x", + "pnpm": "8.x" + }, + "scripts": { + "dev": "mintlify dev", + "lint": "prettier --check './**/*.{js,ts,tsx,md,mdx}'" + }, + "dependencies": { + "mintlify": "^4.0.58", + "prettier": "^3.1.0" + } +} diff --git a/pages/attachments.mdx b/pages/attachments.mdx index 442df1d..c15ecfa 100644 --- a/pages/attachments.mdx +++ b/pages/attachments.mdx @@ -25,22 +25,23 @@ To try this, you will need an [API key](/graphql/authentication/) with the follo + ```typescript -import { AttachmentType, PlainClient } from '@team-plain/typescript-sdk'; - -const client = new PlainClient({ apiKey: 'XXX' }); - +import { AttachmentType, PlainClient } from "@team-plain/typescript-sdk"; + +const client = new PlainClient({ apiKey: "XXX" }); + const res = await client.createAttachmentUploadUrl({ - customerId: 'c_XXXXXXXXXXXXXXXXXXXXXXXXXX', - fileName: 'the-filename.jpeg', + customerId: "c_XXXXXXXXXXXXXXXXXXXXXXXXXX", + fileName: "the-filename.jpeg", fileSizeBytes: 32318, attachmentType: AttachmentType.CustomTimelineEntry, }); - + if (res.error) { console.error(res.error); } else { - console.log('Attachment upload url created'); + console.log("Attachment upload url created"); console.log(res.data); } ``` @@ -54,7 +55,11 @@ if (res.error) { "__typename": "Attachment", "id": "att_01H3970W7XG1716AVNGQ6FWYGD", "fileName": "the-filename.jpeg", - "fileSize": { "__typename": "FileSize", "kiloBytes": 32.32, "megaBytes": 0.03 }, + "fileSize": { + "__typename": "FileSize", + "kiloBytes": 32.32, + "megaBytes": 0.03 + }, "fileExtension": null, "updatedAt": { "__typename": "DateTime", @@ -101,6 +106,7 @@ if (res.error) { } } ``` + @@ -144,6 +150,7 @@ Variables } } ``` + ```json Response { "data": { @@ -193,6 +200,7 @@ Variables + In the `AttachmentUploadUrl` we created in the previous step we get back 2 fields which are needed to actually upload our attachment: @@ -206,6 +214,7 @@ Variables + ```typescript /** * Upload an attachment. @@ -219,14 +228,14 @@ function uploadAttachment(fileBlob, uploadFormUrl, uploadFormData) { uploadFormData.forEach(({ key, value }) => { form.append(key, value); }); - - const file = new File([fileBlob], 'file'); - form.append('file', file); - + + const file = new File([fileBlob], "file"); + form.append("file", file); + console.log(`Uploading attachment to ${uploadFormUrl}`); - + fetch(uploadFormUrl, { - method: 'POST', + method: "POST", body: form, }) .then((res) => { @@ -236,16 +245,21 @@ function uploadAttachment(fileBlob, uploadFormUrl, uploadFormData) { console.log(`File successfully uploaded! (code=${res.status})`); }) .catch((err) => { - console.log(`There was an error uploading the file: %s`, err.message ? err.message : err); + console.log( + `There was an error uploading the file: %s`, + err.message ? err.message : err, + ); }); } ``` + + ```typescript -const axios = require('axios'); -const FormData = require('form-data'); - +const axios = require("axios"); +const FormData = require("form-data"); + /** * Upload an attachment. * @@ -258,16 +272,16 @@ function uploadAttachment(fileBuffer, uploadFormUrl, uploadFormData) { uploadFormData.forEach(({ key, value }) => { form.append(key, value); }); - - form.append('file', fileBuffer, { filename: 'file' }); - + + form.append("file", fileBuffer, { filename: "file" }); + console.log(`Uploading attachment to ${uploadFormUrl}`); - + axios .post(uploadFormUrl, form, { headers: { ...form.getHeaders(), - 'Content-Length': form.getLengthSync(), + "Content-Length": form.getLengthSync(), }, }) .then((res) => { @@ -276,17 +290,18 @@ function uploadAttachment(fileBuffer, uploadFormUrl, uploadFormData) { .catch((err) => { console.log( `There was an error uploading the file: %s`, - err.response ? err.response.data : err + err.response ? err.response.data : err, ); }); } ``` + + - ## Limitations - On emails and custom timeline entries: diff --git a/pages/customer-cards/examples.mdx b/pages/customer-cards/examples.mdx index cbf6476..dc7044c 100644 --- a/pages/customer-cards/examples.mdx +++ b/pages/customer-cards/examples.mdx @@ -2,4 +2,4 @@ title: "Examples" icon: "link" url: "https://github.com/team-plain/example-customer-cards" ---- \ No newline at end of file +--- diff --git a/pages/email-setup.mdx b/pages/email-setup.mdx index 6b4ea3d..607348b 100644 --- a/pages/email-setup.mdx +++ b/pages/email-setup.mdx @@ -5,10 +5,18 @@ title: "Setting up email" Setting up email requires you to complete two steps: - - - - + + If you follow this guide, bear in mind that: diff --git a/pages/email-setup/receiving-emails.mdx b/pages/email-setup/receiving-emails.mdx index 0acb027..650b353 100644 --- a/pages/email-setup/receiving-emails.mdx +++ b/pages/email-setup/receiving-emails.mdx @@ -1,6 +1,6 @@ -import { Callout, Steps } from 'nextra-theme-docs'; +import { Callout, Steps } from "nextra-theme-docs"; -import { ImageContainer } from '../../components/imageContainer'; +import { ImageContainer } from "../../components/imageContainer"; # Receiving emails in Plain @@ -23,11 +23,13 @@ If your email provider is not Google, you can still set up email forwarding in d Under "Default routing" click on "CONFIGURE" or "ADD ANOTHER RULE" ![Add new rule](/public/images/email-setup/email-setup-0.png) + In the dropdown, select "Single recipient" and write your **support email address** under "Email address" ![Add your support email address](/public/images/email-setup/email-setup-1.png) + @@ -35,15 +37,17 @@ If your email provider is not Google, you can still set up email forwarding in d Choose "Replace recipient" and paste the inbound email address (`@inbound.postmarkapp.com`) ![Replace recipient](/public/images/email-setup/email-setup-2.png) + Scroll further down, and choose "Perform this action on non-recognised and recognised addresses" - ![Apply to all addresses](/public/images/email-setup/email-setup-3.png) +![Apply to all addresses](/public/images/email-setup/email-setup-3.png) + - + And That's it! 💅 diff --git a/pages/graphql.mdx b/pages/graphql.mdx index ba122cf..6f2f29b 100644 --- a/pages/graphql.mdx +++ b/pages/graphql.mdx @@ -58,18 +58,12 @@ You will need an API key with the `customer:read` permission. See [authenticatio - ```shell - npm install @team-plain/typescript-sdk - ``` + ```shell npm install @team-plain/typescript-sdk ``` Make sure to replace the api key and email in the code - - ```shell - node script.js - ``` - + ```shell node script.js ``` diff --git a/pages/graphql/api-explorer.mdx b/pages/graphql/api-explorer.mdx index 4bdd001..278ea5f 100644 --- a/pages/graphql/api-explorer.mdx +++ b/pages/graphql/api-explorer.mdx @@ -2,4 +2,4 @@ title: "API Explorer" icon: "link" url: "https://app.plain.com/developer/api-explorer/?workspaceId=w_01H3FZJ8MG74GFXA5WA3MPB446" ---- \ No newline at end of file +--- diff --git a/pages/graphql/authentication.mdx b/pages/graphql/authentication.mdx index 7bd1f32..919f584 100644 --- a/pages/graphql/authentication.mdx +++ b/pages/graphql/authentication.mdx @@ -13,6 +13,7 @@ Machine Users can have multiple API Keys to make it easy to rotate keys. Every A - **Name:** This is just visible to you and could indicate the usage e.g. "Autoresponder" - **Public name:** This is the name visible to customers (if the Machine User interacts with customers) e.g. "Mr Robot" + Click "Add API Key" and select the permissions you need. When making API calls, if you have insufficient permissions, the error should tell you which permissions you need. @@ -20,6 +21,7 @@ Click "Add API Key" and select the permissions you need. When making API calls, The relevant documentation will tell you which permissions are required for each feature. Once you've made an API key you should copy it and put it somewhere safe, as you will not be able to see it again once you navigate away. + That's it! Now that you have an API key you can use this with our SDKs or within any API call as a header: @@ -27,5 +29,6 @@ That's it! Now that you have an API key you can use this with our SDKs or within ```text Authorization: Bearer plainApiKey_xxx ``` + - \ No newline at end of file + diff --git a/pages/graphql/customers/customer-groups.mdx b/pages/graphql/customers/customer-groups.mdx index cbe5ba3..6544476 100644 --- a/pages/graphql/customers/customer-groups.mdx +++ b/pages/graphql/customers/customer-groups.mdx @@ -23,23 +23,24 @@ This operation requires the following permissions: + ```typescript -import { PlainClient } from '@team-plain/typescript-sdk'; - -const client = new PlainClient({ apiKey: 'plainApiKey_xxx' }); - +import { PlainClient } from "@team-plain/typescript-sdk"; + +const client = new PlainClient({ apiKey: "plainApiKey_xxx" }); + const res = await client.addCustomerToCustomerGroups({ - customerId: 'c_01GTC6ZHCMAGR06FMPN9VY5J95', + customerId: "c_01GTC6ZHCMAGR06FMPN9VY5J95", customerGroupIdentifiers: [ { - customerGroupKey: 'free-tier', + customerGroupKey: "free-tier", }, { - customerGroupKey: 'design-partner', + customerGroupKey: "design-partner", }, ], }); - + if (res.error) { console.error(res.error); } else { @@ -48,6 +49,7 @@ if (res.error) { ``` Running the above would console.log: + ```scheme [ { @@ -152,7 +154,6 @@ mutation addCustomerToCustomerGroup($input: AddCustomerToCustomerGroupsInput!) { } ``` - If you prefer you can also use the customer group id instead of the key. You can do this like so: ```json Variables @@ -205,25 +206,26 @@ A customer can be removed from a customer group by using the `removeCustomerFrom + ```typescript -import { PlainClient } from '@team-plain/typescript-sdk'; - +import { PlainClient } from "@team-plain/typescript-sdk"; + const client = new PlainClient({ - apiKey: 'plainApiKey_rO6tIKWU2w0gD_ek9HwjsHMiq1MHsgAn7mhVrcC7MGw', + apiKey: "plainApiKey_rO6tIKWU2w0gD_ek9HwjsHMiq1MHsgAn7mhVrcC7MGw", }); - + const res = await client.removeCustomerFromCustomerGroups({ - customerId: 'c_01H1P4TE62AS5KZ4CZFC0578ED', + customerId: "c_01H1P4TE62AS5KZ4CZFC0578ED", customerGroupIdentifiers: [ { - customerGroupKey: 'free-tier', + customerGroupKey: "free-tier", }, { - customerGroupKey: 'design-partner', + customerGroupKey: "design-partner", }, ], }); - + if (res.error) { console.error(res.error); } else { @@ -235,8 +237,11 @@ if (res.error) { + ```graphql Mutation -mutation removeCustomerFromCustomerGroup($input: RemoveCustomerFromCustomerGroupsInput!) { +mutation removeCustomerFromCustomerGroup( + $input: RemoveCustomerFromCustomerGroupsInput! +) { removeCustomerFromCustomerGroups(input: $input) { error { message diff --git a/pages/graphql/customers/delete.mdx b/pages/graphql/customers/delete.mdx index 1ea008e..24f715a 100644 --- a/pages/graphql/customers/delete.mdx +++ b/pages/graphql/customers/delete.mdx @@ -1,6 +1,6 @@ -import DeleteCustomerTypescriptSDK from '../../../snippets/typescript-sdk/delete-customer.mdx'; -import DeleteCustomerGraphQL from '../../../snippets/graphql/delete-customer.mdx'; -import { Tab, Tabs } from 'nextra-theme-docs'; +import DeleteCustomerTypescriptSDK from "../../../snippets/typescript-sdk/delete-customer.mdx"; +import DeleteCustomerGraphQL from "../../../snippets/graphql/delete-customer.mdx"; +import { Tab, Tabs } from "nextra-theme-docs"; # Delete customers @@ -36,6 +36,7 @@ if (res.error) { + ```grapql Mutation mutation deleteCustomer($input: DeleteCustomerInput!) { deleteCustomer(input: $input) { @@ -61,6 +62,7 @@ mutation deleteCustomer($input: DeleteCustomerInput!) { } } ``` + diff --git a/pages/graphql/customers/get.mdx b/pages/graphql/customers/get.mdx index 01e9183..01cf9b6 100644 --- a/pages/graphql/customers/get.mdx +++ b/pages/graphql/customers/get.mdx @@ -40,6 +40,7 @@ if (res.error) { + ```graphql Query query getCustomers($cursor: String!) { customers( @@ -79,6 +80,7 @@ query getCustomers($cursor: String!) { "cursor": "eyJjdXN0b21lcnMuZnVsbF9uYW1lIjoiQWlkYSBTY2hpbm5lciIsImN1c3RvbWVycy5pZCI6ImNfMDFHMThFU01TWkdUWTQwU1pITk03M0hBQkIifQ==" } ``` + @@ -105,6 +107,7 @@ if (res.error) { + ```graphql Query query getCustomerById($customerId: ID!) { customer(customerId: $customerId) { @@ -128,6 +131,7 @@ query getCustomerById($customerId: ID!) { "customerId": "c_01H14DFQ4PDYBH398J1E99TWSS" } ``` + @@ -154,6 +158,7 @@ if (res.error) { + ```graphql Query query getCustomerByEmail($email: String!) { customerByEmail(email: $email) { @@ -177,6 +182,7 @@ query getCustomerByEmail($email: String!) { "email": "bob@example.com" } ``` + diff --git a/pages/graphql/customers/upsert.mdx b/pages/graphql/customers/upsert.mdx index d62d95a..02662c2 100644 --- a/pages/graphql/customers/upsert.mdx +++ b/pages/graphql/customers/upsert.mdx @@ -30,35 +30,36 @@ This will: + ```typescript -import { PlainClient } from '@team-plain/typescript-sdk'; - -const client = new PlainClient({ apiKey: 'plainApiKey_xxx' }); - +import { PlainClient } from "@team-plain/typescript-sdk"; + +const client = new PlainClient({ apiKey: "plainApiKey_xxx" }); + const res = await client.upsertCustomer({ identifier: { - emailAddress: 'donald@example.com', + emailAddress: "donald@example.com", }, // If the customer is not found and should be created then // these details will be used: onCreate: { - fullName: 'Donald Duck', - shortName: 'Donald', + fullName: "Donald Duck", + shortName: "Donald", email: { - email: 'donald@example.com', + email: "donald@example.com", isVerified: true, }, - + // This is the id of the customer in your own backend. // Filling this out makes it easy to link customers in Plain // back to customer in your own systems. - externalId: 'c_123', - + externalId: "c_123", + // This is optional but if you want to put a customer into a group // on creation, this is how you do it. customerGroupIdentifiers: [ { - customerGroupKey: 'enterprise', + customerGroupKey: "enterprise", }, ], }, @@ -67,21 +68,21 @@ const res = await client.upsertCustomer({ // just providing some of the fields below. onUpdate: { fullName: { - value: 'Donald Duck', + value: "Donald Duck", }, shortName: { - value: 'Donald', + value: "Donald", }, email: { - email: 'donald@example.com', + email: "donald@example.com", isVerified: true, }, externalId: { - value: 'c_123', + value: "c_123", }, }, }); - + if (res.error) { console.error(res.error); } else { @@ -100,7 +101,11 @@ if (res.error) { "fullName": "Donald Duck", "shortName": "Donald", "externalId": "c_123", - "email": { "email": "donald@example.com", "isVerified": false, "verifiedAt": null }, + "email": { + "email": "donald@example.com", + "isVerified": false, + "verifiedAt": null + }, "status": "IDLE", "statusChangedAt": { "__typename": "DateTime", @@ -128,6 +133,7 @@ if (res.error) { } } ``` + @@ -244,6 +250,7 @@ mutation upsertCustomer($input: UpsertCustomerInput!) { } } ``` + diff --git a/pages/graphql/error-handling.mdx b/pages/graphql/error-handling.mdx index 1c54cdb..29e28a2 100644 --- a/pages/graphql/error-handling.mdx +++ b/pages/graphql/error-handling.mdx @@ -33,7 +33,7 @@ one for the result and one for the error. If the error is returned then the muta type Example { data: String! } - + type ExampleOutput { # example is the result of the mutation, is only returned if the mutation succeeded example: Example @@ -67,30 +67,29 @@ You can see the [full error types in the code of the Typescript SDK](https://git This is how you can access the error when using the SDK: ```typescript -import { PlainClient } from '../client'; - +import { PlainClient } from "../client"; + export async function createCustomer() { - const client = new PlainClient({ apiKey: 'XXX' }); - + const client = new PlainClient({ apiKey: "XXX" }); + const res = await client.upsertCustomer({ identifier: { - emailAddress: 'jane@gmail.com', + emailAddress: "jane@gmail.com", }, onCreate: { - fullName: 'Jane Fargate', + fullName: "Jane Fargate", email: { - email: 'jane@gmail.com', + email: "jane@gmail.com", isVerified: true, }, }, onUpdate: {}, }); - + if (res.error) { console.error(res.error); } else { console.log(`Created customer with id=${res.data.customer.id}`); } } - ``` diff --git a/pages/graphql/events/create-customer-event.mdx b/pages/graphql/events/create-customer-event.mdx index f8d5853..b0ff89f 100644 --- a/pages/graphql/events/create-customer-event.mdx +++ b/pages/graphql/events/create-customer-event.mdx @@ -3,7 +3,9 @@ title: "Create a customer event" --- - This API is being actively developed and is not yet ready for production usage. If you are interested in using events please get in touch with us at [help@plain.com](mailto:help@plain.com) + This API is being actively developed and is not yet ready for production + usage. If you are interested in using events please get in touch with us at + [help@plain.com](mailto:help@plain.com) To create an event you need a customer ID. @@ -12,9 +14,7 @@ You can get this by [upserting a customer](/pages/graphql/customers/upsert) in P In this example we'll be creating the following event: - - ![Example event](/public/images/events/events-example.png) - +![Example event](/public/images/events/events-example.png) @@ -25,26 +25,26 @@ In this example we'll be creating the following event: ```typescript import { PlainClient, uiComponent } from '@team-plain/typescript-sdk'; - + const client = new PlainClient({ apiKey: 'XXX', debug: true, }); - + const res = await client.createCustomerEvent({ title: 'API key generated', - + customerIdentifier: { // You can use the email: email: 'jane@acme.com', - + // ...or if you set external id on customers: // externalId: 'YOUR_ID', - + // ...or you can use the customer's id in Plain: // customerId: 'c_123' }, - + components: [ uiComponent.text({ text: 'New API key was added with the fingerprint **3b7896975ee9fd15eeb7** with 4 associated roles.', @@ -57,18 +57,18 @@ In this example we'll be creating the following event: url: 'https://admin.your-app.com', }), ], - + // Optional - if provided, this will ensure that this event can only // be created once and fail on the second time. This external id acts // as an idempotency key while also letting you correlate an event to // something your systems. externalId: 'XXX', - + // Optional - if provided then the event will only be shown // in a single thread vs all threads from a customer threadId: 'th_01HB924RWAW8H3Q8KZDFWYBJHZ', }); - + if (res.error) { console.error(res.error); } else { @@ -120,87 +120,88 @@ In this example we'll be creating the following event: } } ``` + For this you'll need an API key with the following permissions: - `customerEvent:create` - `customerEvent:read` - ```graphql Mutation - mutation createCustomerEvent($input: CreateCustomerEventInput!) { - createCustomerEvent(input: $input) { - customerEvent { +```graphql Mutation +mutation createCustomerEvent($input: CreateCustomerEventInput!) { + createCustomerEvent(input: $input) { + customerEvent { + __typename + id + title + createdAt { __typename - id - title - createdAt { - __typename - iso8601 - unixTimestamp - } + iso8601 + unixTimestamp } - error { - __typename + } + error { + __typename + message + type + code + fields { + field message type - code - fields { - field - message - type - } } } } - ``` +} +``` - ```json Variables - { - "input": { - "title": "API key generated", - - "customerIdentifier": { - // You can use the email: - "email": "jane@acme.com" - - // ...or if you set external id on customers: - // externalId: 'YOUR_ID', - - // ...or you can use the customer's id in Plain: - // customerId: 'c_123' +```json Variables +{ + "input": { + "title": "API key generated", + + "customerIdentifier": { + // You can use the email: + "email": "jane@acme.com" + + // ...or if you set external id on customers: + // externalId: 'YOUR_ID', + + // ...or you can use the customer's id in Plain: + // customerId: 'c_123' + }, + + "components": [ + { + "componentText": { + "text": "New API key was added with the fingerprint **3b7896975ee9fd15eeb7** with 4 associated roles." + } }, - - "components": [ - { - "componentText": { - "text": "New API key was added with the fingerprint **3b7896975ee9fd15eeb7** with 4 associated roles." - } - }, - { - "componentSpacer": { - "spacerSize": "M" - } - }, - { - "componentLinkButton": { - "linkButtonLabel": "View in admin", - "linkButtonUrl": "https://admin.your-app.com" - } + { + "componentSpacer": { + "spacerSize": "M" } - ], - - // Optional - if provided, this will ensure that this event can only - // be created once and fail on the second time. This external id acts - // as an idempotency key while also letting you correlate an event to - // something your systems. - "externalId": "XXX", - - // Optional - if provided then the event will only be shown - // in a single thread vs all threads from a customer - "threadId": "th_01HB924RWAW8H3Q8KZDFWYBJHZ" - } + }, + { + "componentLinkButton": { + "linkButtonLabel": "View in admin", + "linkButtonUrl": "https://admin.your-app.com" + } + } + ], + + // Optional - if provided, this will ensure that this event can only + // be created once and fail on the second time. This external id acts + // as an idempotency key while also letting you correlate an event to + // something your systems. + "externalId": "XXX", + + // Optional - if provided then the event will only be shown + // in a single thread vs all threads from a customer + "threadId": "th_01HB924RWAW8H3Q8KZDFWYBJHZ" } - ``` +} +``` diff --git a/pages/graphql/labels/add.mdx b/pages/graphql/labels/add.mdx index 259137a..f6cf7e4 100644 --- a/pages/graphql/labels/add.mdx +++ b/pages/graphql/labels/add.mdx @@ -96,6 +96,7 @@ if (res.error) { + ```graphql Mutation mutation addLabels($input: AddLabelsInput!) { addLabels(input: $input) { @@ -112,11 +113,15 @@ mutation addLabels($input: AddLabelsInput!) { ```json Variables { "input": { - "labelTypeIds": ["lt_01HB8BTNTZ58730MX8H5VMKFD5", "lt_01HB8BTNKSCF1FK5ETFVRSDC6G"], + "labelTypeIds": [ + "lt_01HB8BTNTZ58730MX8H5VMKFD5", + "lt_01HB8BTNKSCF1FK5ETFVRSDC6G" + ], "threadId": "th_01H8H46YPB2S4MAJM382FG9423" } } ``` + diff --git a/pages/graphql/labels/remove.mdx b/pages/graphql/labels/remove.mdx index 759c77c..555d802 100644 --- a/pages/graphql/labels/remove.mdx +++ b/pages/graphql/labels/remove.mdx @@ -27,6 +27,7 @@ if (res.error) { + ```graphql Mutation mutation removeLabels($input: RemoveLabelsInput!) { removeLabels(input: $input) { @@ -46,6 +47,7 @@ mutation removeLabels($input: RemoveLabelsInput!) { } } ``` + diff --git a/pages/graphql/messaging.mdx b/pages/graphql/messaging.mdx index c9db9c0..513070e 100644 --- a/pages/graphql/messaging.mdx +++ b/pages/graphql/messaging.mdx @@ -5,8 +5,16 @@ description: "We provide various methods to message your customers with the Plai --- - - - - + + diff --git a/pages/graphql/messaging/reply-email.mdx b/pages/graphql/messaging/reply-email.mdx index ca0169d..cf8f9f5 100644 --- a/pages/graphql/messaging/reply-email.mdx +++ b/pages/graphql/messaging/reply-email.mdx @@ -1,7 +1,7 @@ -import { Tab, Tabs } from 'nextra-theme-docs'; +import { Tab, Tabs } from "nextra-theme-docs"; -import ReplyEmailTypescriptSDK from '../../../snippets/typescript-sdk/reply-email.mdx'; -import ReplyEmailGraphQL from '../../../snippets/graphql/reply-email.mdx'; +import ReplyEmailTypescriptSDK from "../../../snippets/typescript-sdk/reply-email.mdx"; +import ReplyEmailGraphQL from "../../../snippets/graphql/reply-email.mdx"; # Reply to emails @@ -16,23 +16,24 @@ You can reply to an inbound email with the `replyToEmail` API. - `attachment:read` ```typescript -import { PlainClient } from '@team-plain/typescript-sdk'; - -const client = new PlainClient({ apiKey: 'plainApiKey_xxx' }); - +import { PlainClient } from "@team-plain/typescript-sdk"; + +const client = new PlainClient({ apiKey: "plainApiKey_xxx" }); + client.replyToEmail({ - customerId: 'c_01GTC6ZHCMAGR06FMPN9VY5J95', - inReplyToEmailId: 'em_01GM2X8K7D3RZ7ZFGHZ2AYG3SA', - textContent: 'The plain text version of your reply goes here.', - markdownContent: 'The markdown **version** of your _reply_ goes here.', + customerId: "c_01GTC6ZHCMAGR06FMPN9VY5J95", + inReplyToEmailId: "em_01GM2X8K7D3RZ7ZFGHZ2AYG3SA", + textContent: "The plain text version of your reply goes here.", + markdownContent: "The markdown **version** of your _reply_ goes here.", }); - + if (res.error) { console.error(res.error); } else { console.log(res.data); } ``` + @@ -66,6 +67,7 @@ mutation replyToEmail($input: ReplyToEmailInput!) { } } ``` + diff --git a/pages/graphql/messaging/send-email.mdx b/pages/graphql/messaging/send-email.mdx index 095fa94..2f443b0 100644 --- a/pages/graphql/messaging/send-email.mdx +++ b/pages/graphql/messaging/send-email.mdx @@ -28,6 +28,7 @@ if (res.error) { + ```graphql Mutation mutation sendNewEmail($input: SendNewEmailInput!) { sendNewEmail(input: $input) { diff --git a/pages/graphql/pagination.mdx b/pages/graphql/pagination.mdx index c633061..f5ce491 100644 --- a/pages/graphql/pagination.mdx +++ b/pages/graphql/pagination.mdx @@ -47,10 +47,12 @@ if (firstPage.error) { } } ``` + This will fetch a subsequent page of 50 entries by passing in the `endCursor` from an initial query. + ```grapql Second page query getCustomers($cursor: String!) { customers(after: $cursor, first: 50) { diff --git a/pages/graphql/threads.mdx b/pages/graphql/threads.mdx index f55a1ef..3b45f7f 100644 --- a/pages/graphql/threads.mdx +++ b/pages/graphql/threads.mdx @@ -13,9 +13,10 @@ Threads belong to one customer but can contain multiple email threads and custom An example thread looks like this: - The below is only showing a subset fields a thread has. Since our API is a GraphQL API you - decide which fields you need when you make API requests. Use our [API - explorer](https://app.plain.com/developer/api-explorer) to discover the full schema of threads. + The below is only showing a subset fields a thread has. Since our API is a + GraphQL API you decide which fields you need when you make API requests. Use + our [API explorer](https://app.plain.com/developer/api-explorer) to discover + the full schema of threads. diff --git a/pages/graphql/threads/assignment.mdx b/pages/graphql/threads/assignment.mdx index 2200251..dd72906 100644 --- a/pages/graphql/threads/assignment.mdx +++ b/pages/graphql/threads/assignment.mdx @@ -1,9 +1,9 @@ -import { Tabs, Tab } from 'nextra-theme-docs'; -import AssignThreadTypescriptSDK from '../../../snippets/typescript-sdk/assign-thread.mdx'; -import AssignThreadResponseTypescriptSDK from '../../../snippets/typescript-sdk/assign-thread-response.mdx'; -import AssignThreadGraphQL from '../../../snippets/graphql/assign-thread.mdx'; -import UnassignThreadTypescriptSDK from '../../../snippets/typescript-sdk/unassign-thread.mdx'; -import UnassignThreadGraphQL from '../../../snippets/graphql/unassign-thread.mdx'; +import { Tabs, Tab } from "nextra-theme-docs"; +import AssignThreadTypescriptSDK from "../../../snippets/typescript-sdk/assign-thread.mdx"; +import AssignThreadResponseTypescriptSDK from "../../../snippets/typescript-sdk/assign-thread-response.mdx"; +import AssignThreadGraphQL from "../../../snippets/graphql/assign-thread.mdx"; +import UnassignThreadTypescriptSDK from "../../../snippets/typescript-sdk/unassign-thread.mdx"; +import UnassignThreadGraphQL from "../../../snippets/graphql/unassign-thread.mdx"; # Assign threads @@ -63,59 +63,60 @@ if (res.error) { Where res.data is the full thread: { - "__typename": "Thread", - "id": "th_01H8H46YPB2S4MAJM382FG9423", - "externalId": null, - "customer": { - "id": "c_01H8H46Y7N69VTSF4WXCJTVATZ" - }, - "status": "TODO", - "statusChangedAt": { - "__typename": "DateTime", - "iso8601": "2023-08-23T11:59:22.315Z", - "unixTimestamp": "1692791962315" - }, - "title": "Support request", - "previewText": "Hello can you please...", - "priority": 2, - "labels": [], - "assignedAt": { - "__typename": "DateTime", - "iso8601": "2023-10-05T13:12:12.050Z", - "unixTimestamp": "1696511532050" - }, - "assignedTo": { - "__typename": "User", - "id": "u_01FSVKMHFDHJ3H5XFM20EMCBQN", - "fullName": "Matt Vagni", - "publicName": "Matt", - "email": "matt@plain.com", - "updatedAt": { - "__typename": "DateTime", - "iso8601": "2023-05-16T12:36:52.266Z", - "unixTimestamp": "1684240612266" - } - }, - "createdAt": { - "__typename": "DateTime", - "iso8601": "2023-08-23T11:59:22.315Z", - "unixTimestamp": "1692791962315" - }, - "createdBy": { - "__typename": "MachineUserActor", - "machineUserId": "mu_01H0J96X3KJ3C2S2W9T5S3CC1R" - }, - "updatedAt": { - "__typename": "DateTime", - "iso8601": "2023-10-05T13:12:12.050Z", - "unixTimestamp": "1696511532050" - }, - "updatedBy": { - "__typename": "MachineUserActor", - "machineUserId": "mu_01HBZM0TZAKAZPJ47NX7X7XMDY" - } +"**typename": "Thread", +"id": "th_01H8H46YPB2S4MAJM382FG9423", +"externalId": null, +"customer": { +"id": "c_01H8H46Y7N69VTSF4WXCJTVATZ" +}, +"status": "TODO", +"statusChangedAt": { +"**typename": "DateTime", +"iso8601": "2023-08-23T11:59:22.315Z", +"unixTimestamp": "1692791962315" +}, +"title": "Support request", +"previewText": "Hello can you please...", +"priority": 2, +"labels": [], +"assignedAt": { +"**typename": "DateTime", +"iso8601": "2023-10-05T13:12:12.050Z", +"unixTimestamp": "1696511532050" +}, +"assignedTo": { +"**typename": "User", +"id": "u_01FSVKMHFDHJ3H5XFM20EMCBQN", +"fullName": "Matt Vagni", +"publicName": "Matt", +"email": "matt@plain.com", +"updatedAt": { +"**typename": "DateTime", +"iso8601": "2023-05-16T12:36:52.266Z", +"unixTimestamp": "1684240612266" } -``` +}, +"createdAt": { +"**typename": "DateTime", +"iso8601": "2023-08-23T11:59:22.315Z", +"unixTimestamp": "1692791962315" +}, +"createdBy": { +"**typename": "MachineUserActor", +"machineUserId": "mu_01H0J96X3KJ3C2S2W9T5S3CC1R" +}, +"updatedAt": { +"**typename": "DateTime", +"iso8601": "2023-10-05T13:12:12.050Z", +"unixTimestamp": "1696511532050" +}, +"updatedBy": { +"\_\_typename": "MachineUserActor", +"machineUserId": "mu_01HBZM0TZAKAZPJ47NX7X7XMDY" +} +} + +```` ```graphql Mutation @@ -127,19 +128,20 @@ mutation assignThread($input: AssignThreadInput!) { } } } -``` +```` ```json Variables { "input": { "threadId": "th_01H8H46YPB2S4MAJM382FG9423", "userId": "u_01FSVKMHFDHJ3H5XFM20EMCBQN" - + // You could instead assign to a machine user by doing: // machineUserId: 'XXX' } } ``` + @@ -190,5 +192,6 @@ mutation unassignThread($input: UnassignThreadInput!) { } } ``` + diff --git a/pages/graphql/threads/create.mdx b/pages/graphql/threads/create.mdx index 73c268d..67d2e72 100644 --- a/pages/graphql/threads/create.mdx +++ b/pages/graphql/threads/create.mdx @@ -25,22 +25,22 @@ To create a thread you need a `customerId`. You can get a customer id by [creati - `user:read` ```typescript -import { PlainClient } from '@team-plain/typescript-sdk'; - +import { PlainClient } from "@team-plain/typescript-sdk"; + const client = new PlainClient({ - apiKey: 'XXX', + apiKey: "XXX", debug: true, }); - + const res = await client.createThread({ - title: 'Bug Report', + title: "Bug Report", customerIdentifier: { // You can use the email: - email: 'jane@acme.com', - + email: "jane@acme.com", + // ...or if you set external id on customers: // externalId: '', - + // ...or you can use the customer's id in Plain: // customerId: 'c_123' }, @@ -53,9 +53,9 @@ const res = await client.createThread({ ], // Label types are created in settings where you can also copy // their ID. - labelTypeIds: ['lt_01HB924PME9C0YWKW1N4AK3BZA'], + labelTypeIds: ["lt_01HB924PME9C0YWKW1N4AK3BZA"], }); - + if (res.error) { console.error(res.error); } else { diff --git a/pages/graphql/threads/status-changes.mdx b/pages/graphql/threads/status-changes.mdx index 0664668..500ff61 100644 --- a/pages/graphql/threads/status-changes.mdx +++ b/pages/graphql/threads/status-changes.mdx @@ -87,6 +87,7 @@ mutation markThreadAsDone($input: MarkThreadAsDoneInput!) { } } ``` + @@ -162,6 +163,7 @@ mutation snoozeThread($input: SnoozeThreadInput!) { } } ``` + diff --git a/pages/graphql/typescript-sdk.mdx b/pages/graphql/typescript-sdk.mdx index 10a08f9..fefbc36 100644 --- a/pages/graphql/typescript-sdk.mdx +++ b/pages/graphql/typescript-sdk.mdx @@ -2,4 +2,4 @@ title: "Typescript SDK" icon: "link" url: "https://github.com/team-plain/typescript-sdk/" ---- \ No newline at end of file +--- diff --git a/pages/linear-integration-setup.mdx b/pages/linear-integration-setup.mdx index 6020a37..0258e72 100644 --- a/pages/linear-integration-setup.mdx +++ b/pages/linear-integration-setup.mdx @@ -5,7 +5,10 @@ description: "To easily keep track of feature requests and bugs reported in Plai This lets you easily link a Linear issue to a thread. -![Screenshot of the floating contact form](/public/images/linear-integration/linear-integration.png) + + ![Screenshot of the floating contact + form](/public/images/linear-integration/linear-integration.png) + To do this, head to **Settings** → **Linear integration** and connect your workspace. diff --git a/pages/migrate-to-threads.mdx b/pages/migrate-to-threads.mdx index 4061cdc..d69e2c8 100644 --- a/pages/migrate-to-threads.mdx +++ b/pages/migrate-to-threads.mdx @@ -3,8 +3,8 @@ title: "Migrating to threads" --- - This only applies to you if you are using the Plain API or webhooks. If you are using neither, - feel free to ignore this! + This only applies to you if you are using the Plain API or webhooks. If you + are using neither, feel free to ignore this! Furthermore, this migration only applies to you if you use _any_ of the following Plain APIs: @@ -29,8 +29,9 @@ Or if you are using _any_ of the following webhooks : If you run into **any** issues, please reach out to us via the app (**⌘ + K** and then search for "Question") or email us at [help@plain.com](mailto:help@plain.com). - Once you have fully migrated across, please let us know and we will enable a feature flag for your - workspace giving you the full benefits of threads within Plain. + Once you have fully migrated across, please let us know and we will enable a + feature flag for your workspace giving you the full benefits of threads within + Plain. ## New data model diff --git a/pages/ui-components.mdx b/pages/ui-components.mdx index 38c19fa..8881660 100644 --- a/pages/ui-components.mdx +++ b/pages/ui-components.mdx @@ -18,7 +18,8 @@ For example - this is a button that links to Stripe. and it looks like this: - ![Example button linking to stripe](/public/images/ui-components/link-button-stripe.png) + ![Example button linking to + stripe](/public/images/ui-components/link-button-stripe.png) In the GraphQL API schema, we have two separate unions for Custom Timeline Entry Components and Customer Card diff --git a/pages/ui-components/badge.mdx b/pages/ui-components/badge.mdx index 01be65a..b9af334 100644 --- a/pages/ui-components/badge.mdx +++ b/pages/ui-components/badge.mdx @@ -3,9 +3,7 @@ title: "Badge" description: "Useful for statuses or when you need to attract attention to something." --- - - ![Example badges](/public/images/ui-components/badge.png) - +![Example badges](/public/images/ui-components/badge.png) A badge has the following properties: @@ -24,6 +22,7 @@ uiComponent.badge({ label: 'Subscribed', color: 'GREEN' }); + ```json { "componentBadge": { @@ -32,6 +31,7 @@ uiComponent.badge({ label: 'Subscribed', color: 'GREEN' }); } } ``` + diff --git a/pages/ui-components/container.mdx b/pages/ui-components/container.mdx index 6f8f062..b4ae097 100644 --- a/pages/ui-components/container.mdx +++ b/pages/ui-components/container.mdx @@ -3,9 +3,7 @@ title: "Container" description: "Useful when you need to create a bit of structure." --- - - ![Example container](/public//images/ui-components/container.png) - +![Example container](/public//images/ui-components/container.png) A container has the following properties: @@ -36,6 +34,7 @@ uiComponent.container({ + ```json { "componentContainer": { @@ -49,6 +48,7 @@ uiComponent.container({ } } ``` + diff --git a/pages/ui-components/copy-button.mdx b/pages/ui-components/copy-button.mdx index ea4aee6..8443a3d 100644 --- a/pages/ui-components/copy-button.mdx +++ b/pages/ui-components/copy-button.mdx @@ -28,6 +28,7 @@ uiComponent.copyButton({ + ```json { "componentCopyButton": { @@ -36,6 +37,7 @@ uiComponent.copyButton({ } } ``` + diff --git a/pages/ui-components/divider.mdx b/pages/ui-components/divider.mdx index 6162fb3..9b6043e 100644 --- a/pages/ui-components/divider.mdx +++ b/pages/ui-components/divider.mdx @@ -3,9 +3,7 @@ title: "Divider" description: "Useful when you need a bit of structure." --- - - ![Example divider](/public/images/ui-components/divider.png) - +![Example divider](/public/images/ui-components/divider.png) A divider has the following properties: @@ -28,6 +26,7 @@ import { uiComponent } from '@team-plain/typescript-sdk'; + ```json [ { @@ -46,6 +45,7 @@ import { uiComponent } from '@team-plain/typescript-sdk'; } } ``` + diff --git a/pages/ui-components/link-button.mdx b/pages/ui-components/link-button.mdx index ffd9aa2..2e9fa00 100644 --- a/pages/ui-components/link-button.mdx +++ b/pages/ui-components/link-button.mdx @@ -27,6 +27,7 @@ uiComponent.linkButton({ + ```json { "componentLinkButton": { @@ -35,6 +36,7 @@ uiComponent.linkButton({ } } ``` + diff --git a/pages/ui-components/plain-text.mdx b/pages/ui-components/plain-text.mdx index 91d529c..f8b57a5 100644 --- a/pages/ui-components/plain-text.mdx +++ b/pages/ui-components/plain-text.mdx @@ -41,6 +41,7 @@ import { uiComponent } from '@team-plain/typescript-sdk'; + ```json [ { @@ -93,6 +94,7 @@ import { uiComponent } from '@team-plain/typescript-sdk'; } ] ``` + diff --git a/pages/ui-components/row.mdx b/pages/ui-components/row.mdx index bcec938..b1bbd77 100644 --- a/pages/ui-components/row.mdx +++ b/pages/ui-components/row.mdx @@ -35,6 +35,7 @@ uiComponent.row({ + ```json { "componentRow": { @@ -56,6 +57,7 @@ uiComponent.row({ } } ``` + diff --git a/pages/ui-components/spacer.mdx b/pages/ui-components/spacer.mdx index 19aa38d..17e0f98 100644 --- a/pages/ui-components/spacer.mdx +++ b/pages/ui-components/spacer.mdx @@ -2,9 +2,7 @@ title: "Spacer" --- - - ![Example spacer](/public/images/ui-components/spacer.png) - +![Example spacer](/public/images/ui-components/spacer.png) A link button has the following properties: @@ -26,6 +24,7 @@ import { uiComponent } from '@team-plain/typescript-sdk'; + ```json [ { @@ -45,6 +44,7 @@ import { uiComponent } from '@team-plain/typescript-sdk'; } ] ``` + diff --git a/pages/ui-components/text.mdx b/pages/ui-components/text.mdx index 3732cc8..ccb99ca 100644 --- a/pages/ui-components/text.mdx +++ b/pages/ui-components/text.mdx @@ -42,6 +42,7 @@ import { uiComponent } from '@team-plain/typescript-sdk'; + ```json [ { @@ -99,6 +100,7 @@ import { uiComponent } from '@team-plain/typescript-sdk'; } ] ``` + diff --git a/pages/webhooks.mdx b/pages/webhooks.mdx index 2e767b4..a2a0fb2 100644 --- a/pages/webhooks.mdx +++ b/pages/webhooks.mdx @@ -28,14 +28,14 @@ to receive and whether you want to enable it straight away. You can create up to **25 webhook targets** per workspace. - Plain events may contain Personally Identifiable Information (PII). If you want to test webhooks - with a production workspace, take the necessary precautions to avoid leaking PII to untrusted - parties. + Plain events may contain Personally Identifiable Information (PII). If you + want to test webhooks with a production workspace, take the necessary + precautions to avoid leaking PII to untrusted parties. - We have created a repository where you will find instructions on how to create a webhook endpoint - using different programming languages. You can find it + We have created a repository where you will find instructions on how to create + a webhook endpoint using different programming languages. You can find it [here](https://github.com/team-plain/webhooks-resources/tree/main/servers). diff --git a/pages/webhooks/customer-updated.mdx b/pages/webhooks/customer-updated.mdx index c9730e6..d0ded95 100644 --- a/pages/webhooks/customer-updated.mdx +++ b/pages/webhooks/customer-updated.mdx @@ -88,5 +88,4 @@ Example: }, "type": "customer.customer_updated" } - ``` diff --git a/pages/webhooks/email-received.mdx b/pages/webhooks/email-received.mdx index 8c4e0cb..ab540cc 100644 --- a/pages/webhooks/email-received.mdx +++ b/pages/webhooks/email-received.mdx @@ -4,10 +4,11 @@ description: "This event is fired when an email is received in your workspace." --- - An important field that might go unnoticed is `isStartOfThread`. This will tell you if this email - is the first message of a thread or not, which is useful if you want to build some auto-reply - logic. If you want to build an auto-responder that *only replies* to the first message of a - thread, please check [`thread.thread_created`](/webhooks/thread-created) instead. + An important field that might go unnoticed is `isStartOfThread`. This will + tell you if this email is the first message of a thread or not, which is + useful if you want to build some auto-reply logic. If you want to build an + auto-responder that *only replies* to the first message of a thread, please + check [`thread.thread_created`](/webhooks/thread-created) instead. ## Schema diff --git a/pages/webhooks/email-sent.mdx b/pages/webhooks/email-sent.mdx index e353dac..7422032 100644 --- a/pages/webhooks/email-sent.mdx +++ b/pages/webhooks/email-sent.mdx @@ -4,10 +4,11 @@ description: "This event is fired when an email is received in your workspace." --- - An important field that might go unnoticed is `isStartOfThread`. This will tell you if this email - is the first message of a thread or not, which is useful if you want to build some auto-reply - logic. If you want to build an auto-responder that *only replies* to the first message of a - thread, please check [`thread.thread_created`](/webhooks/thread-created) instead. + An important field that might go unnoticed is `isStartOfThread`. This will + tell you if this email is the first message of a thread or not, which is + useful if you want to build some auto-reply logic. If you want to build an + auto-responder that *only replies* to the first message of a thread, please + check [`thread.thread_created`](/webhooks/thread-created) instead. ## Schema diff --git a/pages/webhooks/thread-created.mdx b/pages/webhooks/thread-created.mdx index 3f2cf2f..ff35fdf 100644 --- a/pages/webhooks/thread-created.mdx +++ b/pages/webhooks/thread-created.mdx @@ -6,12 +6,13 @@ description: "This event is fired when a new thread is created in your workspace You can subscribe to this event **if you want to build an auto-responder**. To do so, when you receive this event, use the `replyToThread` mutation to send a reply back to the customer. - Every email you receive in your workspace is linked to a thread. If we cannot find a matching - thread for an email, we will create one. When this happens, you may receive two events: - `thread.thread_created` and [`thread.email_received`](/webhooks/email-received) (depending on your - webhook target event subscriptions). If you do, and you only care about emails which are not the - first message of the thread, please check the `isStartOfThread` in the - [`thread.email_received`](/webhooks/email-received) payload. + Every email you receive in your workspace is linked to a thread. If we cannot + find a matching thread for an email, we will create one. When this happens, + you may receive two events: `thread.thread_created` and + [`thread.email_received`](/webhooks/email-received) (depending on your webhook + target event subscriptions). If you do, and you only care about emails which + are not the first message of the thread, please check the `isStartOfThread` in + the [`thread.email_received`](/webhooks/email-received) payload. ## Schema diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..0e9bfe1 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,3069 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + mintlify: + specifier: ^4.0.58 + version: 4.0.58(axios@1.6.2)(openapi-types@12.1.3) + prettier: + specifier: ^3.1.0 + version: 3.1.0 + +packages: + + /@apidevtools/json-schema-ref-parser@9.0.6: + resolution: {integrity: sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==} + dependencies: + '@jsdevtools/ono': 7.1.3 + call-me-maybe: 1.0.2 + js-yaml: 3.14.1 + dev: false + + /@apidevtools/openapi-schemas@2.1.0: + resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} + engines: {node: '>=10'} + dev: false + + /@apidevtools/swagger-methods@3.0.2: + resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==} + dev: false + + /@apidevtools/swagger-parser@10.1.0(openapi-types@12.1.3): + resolution: {integrity: sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw==} + peerDependencies: + openapi-types: '>=7' + dependencies: + '@apidevtools/json-schema-ref-parser': 9.0.6 + '@apidevtools/openapi-schemas': 2.1.0 + '@apidevtools/swagger-methods': 3.0.2 + '@jsdevtools/ono': 7.1.3 + ajv: 8.12.0 + ajv-draft-04: 1.0.0(ajv@8.12.0) + call-me-maybe: 1.0.2 + openapi-types: 12.1.3 + dev: false + + /@jsdevtools/ono@7.1.3: + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + dev: false + + /@leichtgewicht/ip-codec@2.0.4: + resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} + dev: false + + /@mintlify/cli@4.0.58(axios@1.6.2)(openapi-types@12.1.3): + resolution: {integrity: sha512-bWXn5OpG9YIY6p8Gacks9/nTQAZndxhdqHroewV0faMHt47OeuLU/IiGUF32hyE8NwWWziHOOpk3CVcKm9er6Q==} + engines: {node: '>=18.0.0'} + hasBin: true + dependencies: + '@apidevtools/swagger-parser': 10.1.0(openapi-types@12.1.3) + '@mintlify/link-rot': 3.0.80(@mintlify/models@0.0.54)(@mintlify/validation@0.1.101)(axios@1.6.2) + '@mintlify/models': 0.0.54(axios@1.6.2)(openapi-types@12.1.3) + '@mintlify/prebuild': 1.0.80(@apidevtools/swagger-parser@10.1.0)(@mintlify/models@0.0.54)(@mintlify/validation@0.1.101)(axios@1.6.2)(fs-extra@11.1.1)(gray-matter@4.0.3)(openapi-types@12.1.3)(unist-util-visit@4.1.2) + '@mintlify/previewing': 4.0.57(@mintlify/models@0.0.54)(@mintlify/validation@0.1.101)(axios@1.6.2) + '@mintlify/validation': 0.1.101(@mintlify/models@0.0.54)(openapi-types@12.1.3) + chalk: 5.3.0 + detect-port: 1.5.1 + fs-extra: 11.1.1 + gray-matter: 4.0.3 + unist-util-visit: 4.1.2 + yargs: 17.7.2 + transitivePeerDependencies: + - axios + - bufferutil + - encoding + - openapi-types + - supports-color + - utf-8-validate + dev: false + + /@mintlify/common@1.0.15(axios@1.6.2)(openapi-types@12.1.3): + resolution: {integrity: sha512-9w5Km3UqdZXxzSgntab9vzuDW1vqWatk1xY2soc5e0fxVl4075JshSKBejm66SW8KABGyT00CLvQ7toNAWjO2Q==} + dependencies: + '@mintlify/models': 0.0.54(axios@1.6.2)(openapi-types@12.1.3) + remark: 14.0.3 + remark-frontmatter: 4.0.1 + remark-gfm: 3.0.1 + remark-math: 5.1.1 + remark-mdx: 2.3.0 + transitivePeerDependencies: + - axios + - openapi-types + - supports-color + dev: false + + /@mintlify/link-rot@3.0.80(@mintlify/models@0.0.54)(@mintlify/validation@0.1.101)(axios@1.6.2): + resolution: {integrity: sha512-ds49vEdhJIJdMZf5H/kf/0i2SuR4Ejpw3UdpEJIxgP1oPkal74nsTwsYYB1ldkrjtgLT8g7xdBM86+V+gsMszA==} + engines: {node: '>=18.0.0'} + dependencies: + '@apidevtools/swagger-parser': 10.1.0(openapi-types@12.1.3) + '@mintlify/common': 1.0.15(axios@1.6.2)(openapi-types@12.1.3) + '@mintlify/prebuild': 1.0.80(@apidevtools/swagger-parser@10.1.0)(@mintlify/models@0.0.54)(@mintlify/validation@0.1.101)(axios@1.6.2)(fs-extra@11.1.1)(gray-matter@4.0.3)(openapi-types@12.1.3)(unist-util-visit@4.1.2) + chalk: 5.3.0 + fs-extra: 11.1.1 + gray-matter: 4.0.3 + is-absolute-url: 4.0.1 + openapi-types: 12.1.3 + unist-util-visit: 4.1.2 + transitivePeerDependencies: + - '@mintlify/models' + - '@mintlify/validation' + - axios + - supports-color + dev: false + + /@mintlify/models@0.0.54(axios@1.6.2)(openapi-types@12.1.3): + resolution: {integrity: sha512-iMIxGKqD8VT4rxYFcD7RlOlKrjkbtwERRSk0T7FURvWh+vi8iTCLoLphHyp+ML5h3JMOH3m/FcHtCcvHklmmQw==} + engines: {node: '>=18.0.0'} + peerDependencies: + axios: ^1.4.0 + openapi-types: 12.x + dependencies: + axios: 1.6.2 + openapi-types: 12.1.3 + dev: false + + /@mintlify/prebuild@1.0.80(@apidevtools/swagger-parser@10.1.0)(@mintlify/models@0.0.54)(@mintlify/validation@0.1.101)(axios@1.6.2)(fs-extra@11.1.1)(gray-matter@4.0.3)(openapi-types@12.1.3)(unist-util-visit@4.1.2): + resolution: {integrity: sha512-d6MvLKNmMst3tvZ5cU4FYWmHnWmG6+NLt7VPpXfvZmLsAZDwmSLRhqn7O8/f+LDH1xj2Fq+yBzMPj6h2Z8Rtaw==} + peerDependencies: + '@apidevtools/swagger-parser': 10.x + '@mintlify/models': '>= 0.0.15 < 1' + '@mintlify/validation': '>= 0.1.57 < 1' + fs-extra: 11.x + gray-matter: ^4.0.3 + openapi-types: 12.x + unist-util-visit: ^4.1.1 + dependencies: + '@apidevtools/swagger-parser': 10.1.0(openapi-types@12.1.3) + '@mintlify/common': 1.0.15(axios@1.6.2)(openapi-types@12.1.3) + '@mintlify/models': 0.0.54(axios@1.6.2)(openapi-types@12.1.3) + '@mintlify/validation': 0.1.101(@mintlify/models@0.0.54)(openapi-types@12.1.3) + favicons: 7.1.4 + fs-extra: 11.1.1 + gray-matter: 4.0.3 + openapi-types: 12.1.3 + unist-util-visit: 4.1.2 + transitivePeerDependencies: + - axios + - supports-color + dev: false + + /@mintlify/previewing@4.0.57(@mintlify/models@0.0.54)(@mintlify/validation@0.1.101)(axios@1.6.2): + resolution: {integrity: sha512-EduErRmmFnWYsBqzwoBhSa4yYXnwaqfOvXaZZIhCoQKYQOhdCg7fZkOpojHcQ0caVV8hSE8Qv4YRQsAGiuHMjw==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@mintlify/validation': '>= 0.1.48 < 1' + dependencies: + '@apidevtools/swagger-parser': 10.1.0(openapi-types@12.1.3) + '@mintlify/prebuild': 1.0.80(@apidevtools/swagger-parser@10.1.0)(@mintlify/models@0.0.54)(@mintlify/validation@0.1.101)(axios@1.6.2)(fs-extra@11.1.1)(gray-matter@4.0.3)(openapi-types@12.1.3)(unist-util-visit@4.1.2) + '@mintlify/validation': 0.1.101(@mintlify/models@0.0.54)(openapi-types@12.1.3) + '@octokit/rest': 19.0.13 + chalk: 5.3.0 + chokidar: 3.5.3 + express: 4.18.2 + fs-extra: 11.1.1 + got: 13.0.0 + gray-matter: 4.0.3 + is-absolute-url: 4.0.1 + is-online: 10.0.0 + open: 8.4.2 + openapi-types: 12.1.3 + ora: 6.3.1 + socket.io: 4.7.2 + tar: 6.2.0 + unist-util-visit: 4.1.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@mintlify/models' + - axios + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /@mintlify/validation@0.1.101(@mintlify/models@0.0.54)(openapi-types@12.1.3): + resolution: {integrity: sha512-ylrL881NmjewoX9mos1PAujmrD3mWiBjZuO4ffJ6cvoQMFvDbJgyNFttvdCqA4jIl4A2SkZ0JW3RlcaFeJ7Gzg==} + peerDependencies: + '@mintlify/models': '>= 0.0.36 < 1' + openapi-types: 12.x + dependencies: + '@mintlify/models': 0.0.54(axios@1.6.2)(openapi-types@12.1.3) + lcm: 0.0.3 + lodash: 4.17.21 + openapi-types: 12.1.3 + zod: 3.22.4 + zod-to-json-schema: 3.21.4(zod@3.22.4) + dev: false + + /@octokit/auth-token@3.0.4: + resolution: {integrity: sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==} + engines: {node: '>= 14'} + dev: false + + /@octokit/core@4.2.4: + resolution: {integrity: sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==} + engines: {node: '>= 14'} + dependencies: + '@octokit/auth-token': 3.0.4 + '@octokit/graphql': 5.0.6 + '@octokit/request': 6.2.8 + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.3.2 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + dev: false + + /@octokit/endpoint@7.0.6: + resolution: {integrity: sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==} + engines: {node: '>= 14'} + dependencies: + '@octokit/types': 9.3.2 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.1 + dev: false + + /@octokit/graphql@5.0.6: + resolution: {integrity: sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==} + engines: {node: '>= 14'} + dependencies: + '@octokit/request': 6.2.8 + '@octokit/types': 9.3.2 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + dev: false + + /@octokit/openapi-types@18.1.1: + resolution: {integrity: sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==} + dev: false + + /@octokit/plugin-paginate-rest@6.1.2(@octokit/core@4.2.4): + resolution: {integrity: sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==} + engines: {node: '>= 14'} + peerDependencies: + '@octokit/core': '>=4' + dependencies: + '@octokit/core': 4.2.4 + '@octokit/tsconfig': 1.0.2 + '@octokit/types': 9.3.2 + dev: false + + /@octokit/plugin-request-log@1.0.4(@octokit/core@4.2.4): + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + peerDependencies: + '@octokit/core': '>=3' + dependencies: + '@octokit/core': 4.2.4 + dev: false + + /@octokit/plugin-rest-endpoint-methods@7.2.3(@octokit/core@4.2.4): + resolution: {integrity: sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==} + engines: {node: '>= 14'} + peerDependencies: + '@octokit/core': '>=3' + dependencies: + '@octokit/core': 4.2.4 + '@octokit/types': 10.0.0 + dev: false + + /@octokit/request-error@3.0.3: + resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==} + engines: {node: '>= 14'} + dependencies: + '@octokit/types': 9.3.2 + deprecation: 2.3.1 + once: 1.4.0 + dev: false + + /@octokit/request@6.2.8: + resolution: {integrity: sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==} + engines: {node: '>= 14'} + dependencies: + '@octokit/endpoint': 7.0.6 + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.3.2 + is-plain-object: 5.0.0 + node-fetch: 2.7.0 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + dev: false + + /@octokit/rest@19.0.13: + resolution: {integrity: sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA==} + engines: {node: '>= 14'} + dependencies: + '@octokit/core': 4.2.4 + '@octokit/plugin-paginate-rest': 6.1.2(@octokit/core@4.2.4) + '@octokit/plugin-request-log': 1.0.4(@octokit/core@4.2.4) + '@octokit/plugin-rest-endpoint-methods': 7.2.3(@octokit/core@4.2.4) + transitivePeerDependencies: + - encoding + dev: false + + /@octokit/tsconfig@1.0.2: + resolution: {integrity: sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==} + dev: false + + /@octokit/types@10.0.0: + resolution: {integrity: sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==} + dependencies: + '@octokit/openapi-types': 18.1.1 + dev: false + + /@octokit/types@9.3.2: + resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==} + dependencies: + '@octokit/openapi-types': 18.1.1 + dev: false + + /@sindresorhus/is@5.6.0: + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + dev: false + + /@socket.io/component-emitter@3.1.0: + resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} + dev: false + + /@szmarczak/http-timer@5.0.1: + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + dependencies: + defer-to-connect: 2.0.1 + dev: false + + /@types/acorn@4.0.6: + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + dependencies: + '@types/estree': 1.0.5 + dev: false + + /@types/cookie@0.4.1: + resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + dev: false + + /@types/cors@2.8.16: + resolution: {integrity: sha512-Trx5or1Nyg1Fq138PCuWqoApzvoSLWzZ25ORBiHMbbUT42g578lH1GT4TwYDbiUOLFuDsCkfLneT2105fsFWGg==} + dependencies: + '@types/node': 20.9.1 + dev: false + + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + dependencies: + '@types/ms': 0.7.34 + dev: false + + /@types/estree-jsx@1.0.3: + resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==} + dependencies: + '@types/estree': 1.0.5 + dev: false + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: false + + /@types/hast@2.3.8: + resolution: {integrity: sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==} + dependencies: + '@types/unist': 2.0.10 + dev: false + + /@types/http-cache-semantics@4.0.4: + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + dev: false + + /@types/katex@0.16.6: + resolution: {integrity: sha512-rZYO1HInM99rAFYNwGqbYPxHZHxu2IwZYKj4bJ4oh6edVrm1UId8mmbHIZLBtG253qU6y3piag0XYe/joNnwzQ==} + dev: false + + /@types/mdast@3.0.15: + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + dependencies: + '@types/unist': 2.0.10 + dev: false + + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + dev: false + + /@types/node@20.9.1: + resolution: {integrity: sha512-HhmzZh5LSJNS5O8jQKpJ/3ZcrrlG6L70hpGqMIAoM9YVD0YBRNWYsfwcXq8VnSjlNpCpgLzMXdiPo+dxcvSmiA==} + dependencies: + undici-types: 5.26.5 + dev: false + + /@types/unist@2.0.10: + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + dev: false + + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: false + + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.2 + dev: false + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} + dev: false + + /aggregate-error@4.0.1: + resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} + engines: {node: '>=12'} + dependencies: + clean-stack: 4.2.0 + indent-string: 5.0.0 + dev: false + + /ajv-draft-04@1.0.0(ajv@8.12.0): + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.12.0 + dev: false + + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: false + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: false + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: false + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: false + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: false + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: false + + /array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: false + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /axios@1.6.2: + resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} + dependencies: + follow-redirects: 1.15.3 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + + /b4a@1.6.4: + resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} + dev: false + + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + dev: false + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false + + /base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + dev: false + + /before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + dev: false + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: false + + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + + /bl@5.1.0: + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + dependencies: + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + + /body-parser@1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: false + + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false + + /cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + dev: false + + /cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.0 + responselike: 3.0.0 + dev: false + + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 + dev: false + + /call-me-maybe@1.0.2: + resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} + dev: false + + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + dev: false + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: false + + /character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + dev: false + + /character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + dev: false + + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + dev: false + + /character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + dev: false + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: false + + /chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + dev: false + + /clean-stack@4.2.0: + resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} + engines: {node: '>=12'} + dependencies: + escape-string-regexp: 5.0.0 + dev: false + + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + restore-cursor: 4.0.0 + dev: false + + /cli-spinners@2.9.1: + resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} + engines: {node: '>=6'} + dev: false + + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: false + + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: false + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: false + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: false + + /color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: false + + /color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + dev: false + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: false + + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: false + + /cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: false + + /cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + dev: false + + /cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + dev: false + + /cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + dev: false + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: false + + /decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 + dev: false + + /decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + dev: false + + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: false + + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + dev: false + + /defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + dev: false + + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: false + + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: false + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + dev: false + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: false + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + + /detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} + dev: false + + /detect-port@1.5.1: + resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} + hasBin: true + dependencies: + address: 1.2.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /diff@5.1.0: + resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + engines: {node: '>=0.3.1'} + dev: false + + /dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} + dependencies: + '@leichtgewicht/ip-codec': 2.0.4 + dev: false + + /dns-socket@4.2.2: + resolution: {integrity: sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==} + engines: {node: '>=6'} + dependencies: + dns-packet: 5.6.1 + dev: false + + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: false + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: false + + /engine.io-parser@5.2.1: + resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==} + engines: {node: '>=10.0.0'} + dev: false + + /engine.io@6.5.4: + resolution: {integrity: sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==} + engines: {node: '>=10.2.0'} + dependencies: + '@types/cookie': 0.4.1 + '@types/cors': 2.8.16 + '@types/node': 20.9.1 + accepts: 1.3.8 + base64id: 2.0.0 + cookie: 0.4.2 + cors: 2.8.5 + debug: 4.3.4 + engine.io-parser: 5.2.1 + ws: 8.11.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: false + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: false + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /estree-util-is-identifier-name@2.1.0: + resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + dev: false + + /estree-util-visit@1.2.1: + resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} + dependencies: + '@types/estree-jsx': 1.0.3 + '@types/unist': 2.0.10 + dev: false + + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false + + /expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + dev: false + + /express@4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: false + + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: false + + /fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + dev: false + + /fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + dependencies: + format: 0.2.2 + dev: false + + /favicons@7.1.4: + resolution: {integrity: sha512-lnZpVgT7Fzz+DUjioKF1dMwLYlpqWCaB4gIksIfIKwtlhHO1Q7w23hERwHQjEsec+43iENwbTAPRDW3XvpLhbg==} + engines: {node: '>=14.0.0'} + dependencies: + escape-html: 1.0.3 + sharp: 0.32.6 + xml2js: 0.6.2 + dev: false + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: false + + /finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /follow-redirects@1.15.3: + resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + dev: false + + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + dev: false + + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: false + + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false + + /fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: false + + /fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: false + + /fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: false + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: false + + /gcd@0.0.1: + resolution: {integrity: sha512-VNx3UEGr+ILJTiMs1+xc5SX1cMgJCrXezKPa003APUWNqQqaF6n25W8VcR7nHN6yRWbvvUTwCpZCFJeWC2kXlw==} + dev: false + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: false + + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: false + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: false + + /github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + dev: false + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: false + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + dev: false + + /got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + dev: false + + /got@13.0.0: + resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} + engines: {node: '>=16'} + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + dev: false + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: false + + /gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + dependencies: + js-yaml: 3.14.1 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + dev: false + + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 + dev: false + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: false + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: false + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: false + + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: false + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + dev: false + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false + + /indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + dev: false + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: false + + /ip-regex@4.3.0: + resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} + engines: {node: '>=8'} + dev: false + + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: false + + /is-absolute-url@4.0.1: + resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + + /is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + dev: false + + /is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + dev: false + + /is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: false + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: false + + /is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + dev: false + + /is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + dev: false + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: false + + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: false + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: false + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: false + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: false + + /is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + dev: false + + /is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + dev: false + + /is-ip@3.1.0: + resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} + engines: {node: '>=8'} + dependencies: + ip-regex: 4.3.0 + dev: false + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: false + + /is-online@10.0.0: + resolution: {integrity: sha512-WCPdKwNDjXJJmUubf2VHLMDBkUZEtuOvpXUfUnUFbEnM6In9ByiScL4f4jKACz/fsb2qDkesFerW3snf/AYz3A==} + engines: {node: '>=14.16'} + dependencies: + got: 12.6.1 + p-any: 4.0.0 + p-timeout: 5.1.0 + public-ip: 5.0.0 + dev: false + + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: false + + /is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: false + + /is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + dev: false + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: false + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: false + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: false + + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: false + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: false + + /katex@0.16.9: + resolution: {integrity: sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==} + hasBin: true + dependencies: + commander: 8.3.0 + dev: false + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: false + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: false + + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: false + + /lcm@0.0.3: + resolution: {integrity: sha512-TB+ZjoillV6B26Vspf9l2L/vKaRY/4ep3hahcyVkCGFgsTNRUQdc24bQeNFiZeoxH0vr5+7SfNRMQuPHv/1IrQ==} + dependencies: + gcd: 0.0.1 + dev: false + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + + /log-symbols@5.1.0: + resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} + engines: {node: '>=12'} + dependencies: + chalk: 5.3.0 + is-unicode-supported: 1.3.0 + dev: false + + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + dev: false + + /lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: false + + /markdown-table@3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + dev: false + + /mdast-util-find-and-replace@2.2.2: + resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} + dependencies: + '@types/mdast': 3.0.15 + escape-string-regexp: 5.0.0 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + dev: false + + /mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 + decode-named-character-reference: 1.0.2 + mdast-util-to-string: 3.2.0 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-stringify-position: 3.0.3 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-frontmatter@1.0.1: + resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + micromark-extension-frontmatter: 1.1.1 + dev: false + + /mdast-util-gfm-autolink-literal@1.0.3: + resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} + dependencies: + '@types/mdast': 3.0.15 + ccount: 2.0.1 + mdast-util-find-and-replace: 2.2.2 + micromark-util-character: 1.2.0 + dev: false + + /mdast-util-gfm-footnote@1.0.2: + resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + micromark-util-normalize-identifier: 1.1.0 + dev: false + + /mdast-util-gfm-strikethrough@1.0.3: + resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + dev: false + + /mdast-util-gfm-table@1.0.7: + resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} + dependencies: + '@types/mdast': 3.0.15 + markdown-table: 3.0.3 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-task-list-item@1.0.2: + resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + dev: false + + /mdast-util-gfm@2.0.2: + resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} + dependencies: + mdast-util-from-markdown: 1.3.1 + mdast-util-gfm-autolink-literal: 1.0.3 + mdast-util-gfm-footnote: 1.0.2 + mdast-util-gfm-strikethrough: 1.0.3 + mdast-util-gfm-table: 1.0.7 + mdast-util-gfm-task-list-item: 1.0.2 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-math@2.0.2: + resolution: {integrity: sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==} + dependencies: + '@types/mdast': 3.0.15 + longest-streak: 3.1.0 + mdast-util-to-markdown: 1.5.0 + dev: false + + /mdast-util-mdx-expression@1.3.2: + resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + dependencies: + '@types/estree-jsx': 1.0.3 + '@types/hast': 2.3.8 + '@types/mdast': 3.0.15 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx-jsx@2.1.4: + resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + dependencies: + '@types/estree-jsx': 1.0.3 + '@types/hast': 2.3.8 + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 + ccount: 2.0.1 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + parse-entities: 4.0.1 + stringify-entities: 4.0.3 + unist-util-remove-position: 4.0.2 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx@2.0.1: + resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + dependencies: + mdast-util-from-markdown: 1.3.1 + mdast-util-mdx-expression: 1.3.2 + mdast-util-mdx-jsx: 2.1.4 + mdast-util-mdxjs-esm: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdxjs-esm@1.3.1: + resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + dependencies: + '@types/estree-jsx': 1.0.3 + '@types/hast': 2.3.8 + '@types/mdast': 3.0.15 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + dependencies: + '@types/mdast': 3.0.15 + unist-util-is: 5.2.1 + dev: false + + /mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 + longest-streak: 3.1.0 + mdast-util-phrasing: 3.0.1 + mdast-util-to-string: 3.2.0 + micromark-util-decode-string: 1.1.0 + unist-util-visit: 4.1.2 + zwitch: 2.0.4 + dev: false + + /mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + dependencies: + '@types/mdast': 3.0.15 + dev: false + + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: false + + /merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + dev: false + + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: false + + /micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-extension-frontmatter@1.1.1: + resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} + dependencies: + fault: 2.0.1 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-extension-gfm-autolink-literal@1.0.5: + resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-extension-gfm-footnote@1.1.2: + resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} + dependencies: + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm-strikethrough@1.0.7: + resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm-table@1.0.7: + resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm-tagfilter@1.0.2: + resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} + dependencies: + micromark-util-types: 1.1.0 + dev: false + + /micromark-extension-gfm-task-list-item@1.0.5: + resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-extension-gfm@2.0.3: + resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} + dependencies: + micromark-extension-gfm-autolink-literal: 1.0.5 + micromark-extension-gfm-footnote: 1.1.2 + micromark-extension-gfm-strikethrough: 1.0.7 + micromark-extension-gfm-table: 1.0.7 + micromark-extension-gfm-tagfilter: 1.0.2 + micromark-extension-gfm-task-list-item: 1.0.5 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-extension-math@2.1.2: + resolution: {integrity: sha512-es0CcOV89VNS9wFmyn+wyFTKweXGW4CEvdaAca6SWRWPyYCbBisnjaHLjWO4Nszuiud84jCpkHsqAJoa768Pvg==} + dependencies: + '@types/katex': 0.16.6 + katex: 0.16.9 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-extension-mdx-expression@1.0.8: + resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} + dependencies: + '@types/estree': 1.0.5 + micromark-factory-mdx-expression: 1.0.9 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-extension-mdx-jsx@1.0.5: + resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.5 + estree-util-is-identifier-name: 2.1.0 + micromark-factory-mdx-expression: 1.0.9 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + vfile-message: 3.1.4 + dev: false + + /micromark-extension-mdx-md@1.0.1: + resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} + dependencies: + micromark-util-types: 1.1.0 + dev: false + + /micromark-extension-mdxjs-esm@1.0.5: + resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} + dependencies: + '@types/estree': 1.0.5 + micromark-core-commonmark: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-position-from-estree: 1.1.2 + uvu: 0.5.6 + vfile-message: 3.1.4 + dev: false + + /micromark-extension-mdxjs@1.0.1: + resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + micromark-extension-mdx-expression: 1.0.8 + micromark-extension-mdx-jsx: 1.0.5 + micromark-extension-mdx-md: 1.0.1 + micromark-extension-mdxjs-esm: 1.0.5 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-factory-mdx-expression@1.0.9: + resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} + dependencies: + '@types/estree': 1.0.5 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-position-from-estree: 1.1.2 + uvu: 0.5.6 + vfile-message: 3.1.4 + dev: false + + /micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + dev: false + + /micromark-util-events-to-acorn@1.2.3: + resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.5 + '@types/unist': 2.0.10 + estree-util-visit: 1.2.1 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + vfile-message: 3.1.4 + dev: false + + /micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + dev: false + + /micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + dependencies: + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + dev: false + + /micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + dev: false + + /micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: false + + /mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + dev: false + + /mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: false + + /minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + dev: false + + /minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + dev: false + + /minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + dev: false + + /mintlify@4.0.58(axios@1.6.2)(openapi-types@12.1.3): + resolution: {integrity: sha512-gY8NeU0Vrx30q0WLkN77oMEd99inVoa6xQeSeg8yCJwN4oNEr60PaDwygOxB9g1ev16CSh4au5XLhj7KZFi1+g==} + engines: {node: '>=18.0.0'} + hasBin: true + dependencies: + '@mintlify/cli': 4.0.58(axios@1.6.2)(openapi-types@12.1.3) + transitivePeerDependencies: + - axios + - bufferutil + - encoding + - openapi-types + - supports-color + - utf-8-validate + dev: false + + /mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: false + + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: false + + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: false + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: false + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: false + + /napi-build-utils@1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + dev: false + + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + + /node-abi@3.51.0: + resolution: {integrity: sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: false + + /node-addon-api@6.1.0: + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + dev: false + + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize-url@8.0.0: + resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} + engines: {node: '>=14.16'} + dev: false + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: false + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: false + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: false + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: false + + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + + /openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + dev: false + + /ora@6.3.1: + resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + chalk: 5.3.0 + cli-cursor: 4.0.0 + cli-spinners: 2.9.1 + is-interactive: 2.0.0 + is-unicode-supported: 1.3.0 + log-symbols: 5.1.0 + stdin-discarder: 0.1.0 + strip-ansi: 7.1.0 + wcwidth: 1.0.1 + dev: false + + /p-any@4.0.0: + resolution: {integrity: sha512-S/B50s+pAVe0wmEZHmBs/9yJXeZ5KhHzOsgKzt0hRdgkoR3DxW9ts46fcsWi/r3VnzsnkKS7q4uimze+zjdryw==} + engines: {node: '>=12.20'} + dependencies: + p-cancelable: 3.0.0 + p-some: 6.0.0 + dev: false + + /p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + dev: false + + /p-some@6.0.0: + resolution: {integrity: sha512-CJbQCKdfSX3fIh8/QKgS+9rjm7OBNUTmwWswAFQAhc8j1NR1dsEDETUEuVUtQHZpV+J03LqWBEwvu0g1Yn+TYg==} + engines: {node: '>=12.20'} + dependencies: + aggregate-error: 4.0.1 + p-cancelable: 3.0.0 + dev: false + + /p-timeout@5.1.0: + resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} + engines: {node: '>=12'} + dev: false + + /parse-entities@4.0.1: + resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + dependencies: + '@types/unist': 2.0.10 + character-entities: 2.0.2 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.0.2 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + dev: false + + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + + /path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: false + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: false + + /prebuild-install@7.1.1: + resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + detect-libc: 2.0.2 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.51.0 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: false + + /prettier@3.1.0: + resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} + engines: {node: '>=14'} + hasBin: true + dev: false + + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: false + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + + /public-ip@5.0.0: + resolution: {integrity: sha512-xaH3pZMni/R2BG7ZXXaWS9Wc9wFlhyDVJF47IJ+3ali0TGv+2PsckKxbmo+rnx3ZxiV2wblVhtdS3bohAP6GGw==} + engines: {node: ^14.13.1 || >=16.0.0} + dependencies: + dns-socket: 4.2.2 + got: 12.6.1 + is-ip: 3.1.0 + dev: false + + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: false + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: false + + /qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + + /queue-tick@1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + dev: false + + /quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: false + + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /raw-body@2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + dev: false + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: false + + /remark-frontmatter@4.0.1: + resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} + dependencies: + '@types/mdast': 3.0.15 + mdast-util-frontmatter: 1.0.1 + micromark-extension-frontmatter: 1.1.1 + unified: 10.1.2 + dev: false + + /remark-gfm@3.0.1: + resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} + dependencies: + '@types/mdast': 3.0.15 + mdast-util-gfm: 2.0.2 + micromark-extension-gfm: 2.0.3 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-math@5.1.1: + resolution: {integrity: sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==} + dependencies: + '@types/mdast': 3.0.15 + mdast-util-math: 2.0.2 + micromark-extension-math: 2.1.2 + unified: 10.1.2 + dev: false + + /remark-mdx@2.3.0: + resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} + dependencies: + mdast-util-mdx: 2.0.1 + micromark-extension-mdxjs: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + dependencies: + '@types/mdast': 3.0.15 + mdast-util-from-markdown: 1.3.1 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-stringify@10.0.3: + resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==} + dependencies: + '@types/mdast': 3.0.15 + mdast-util-to-markdown: 1.5.0 + unified: 10.1.2 + dev: false + + /remark@14.0.3: + resolution: {integrity: sha512-bfmJW1dmR2LvaMJuAnE88pZP9DktIFYXazkTfOIKZzi3Knk9lT0roItIA24ydOucI3bV/g/tXBA6hzqq3FV9Ew==} + dependencies: + '@types/mdast': 3.0.15 + remark-parse: 10.0.2 + remark-stringify: 10.0.3 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: false + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: false + + /resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + dev: false + + /responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + dependencies: + lowercase-keys: 3.0.0 + dev: false + + /restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: false + + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: false + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: false + + /sax@1.3.0: + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + dev: false + + /section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + dev: false + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: false + + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: false + + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: false + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /sharp@0.32.6: + resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} + engines: {node: '>=14.15.0'} + requiresBuild: true + dependencies: + color: 4.2.3 + detect-libc: 2.0.2 + node-addon-api: 6.1.0 + prebuild-install: 7.1.1 + semver: 7.5.4 + simple-get: 4.0.1 + tar-fs: 3.0.4 + tunnel-agent: 0.6.0 + dev: false + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 + dev: false + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: false + + /simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + dev: false + + /simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + dev: false + + /simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + dependencies: + is-arrayish: 0.3.2 + dev: false + + /socket.io-adapter@2.5.2: + resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==} + dependencies: + ws: 8.11.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /socket.io@4.7.2: + resolution: {integrity: sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==} + engines: {node: '>=10.2.0'} + dependencies: + accepts: 1.3.8 + base64id: 2.0.0 + cors: 2.8.5 + debug: 4.3.4 + engine.io: 6.5.4 + socket.io-adapter: 2.5.2 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: false + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + + /stdin-discarder@0.1.0: + resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + bl: 5.1.0 + dev: false + + /streamx@2.15.5: + resolution: {integrity: sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==} + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + dev: false + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: false + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /stringify-entities@4.0.3: + resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + dev: false + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: false + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: false + + /strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + dev: false + + /strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: false + + /tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: false + + /tar-fs@3.0.4: + resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==} + dependencies: + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 3.1.6 + dev: false + + /tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + + /tar-stream@3.1.6: + resolution: {integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==} + dependencies: + b4a: 1.6.4 + fast-fifo: 1.3.2 + streamx: 2.15.5 + dev: false + + /tar@6.2.0: + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + engines: {node: '>=10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: false + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: false + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: false + + /trough@2.1.0: + resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + dev: false + + /tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: false + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: false + + /unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + dependencies: + '@types/unist': 2.0.10 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.1.0 + vfile: 5.3.7 + dev: false + + /unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + dependencies: + '@types/unist': 2.0.10 + dev: false + + /unist-util-position-from-estree@1.1.2: + resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} + dependencies: + '@types/unist': 2.0.10 + dev: false + + /unist-util-remove-position@4.0.2: + resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} + dependencies: + '@types/unist': 2.0.10 + unist-util-visit: 4.1.2 + dev: false + + /unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + dependencies: + '@types/unist': 2.0.10 + dev: false + + /unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + dependencies: + '@types/unist': 2.0.10 + unist-util-is: 5.2.1 + dev: false + + /unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + dependencies: + '@types/unist': 2.0.10 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + dev: false + + /universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + dev: false + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: false + + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: false + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false + + /uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.3 + diff: 5.1.0 + kleur: 4.1.5 + sade: 1.8.1 + dev: false + + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false + + /vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + dependencies: + '@types/unist': 2.0.10 + unist-util-stringify-position: 3.0.3 + dev: false + + /vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + dependencies: + '@types/unist': 2.0.10 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + dev: false + + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + dev: false + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: false + + /ws@8.11.0: + resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /xml2js@0.6.2: + resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} + engines: {node: '>=4.0.0'} + dependencies: + sax: 1.3.0 + xmlbuilder: 11.0.1 + dev: false + + /xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + dev: false + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: false + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: false + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: false + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: false + + /zod-to-json-schema@3.21.4(zod@3.22.4): + resolution: {integrity: sha512-fjUZh4nQ1s6HMccgIeE0VP4QG/YRGPmyjO9sAh890aQKPEk3nqbfUXhMFaC+Dr5KvYBm8BCyvfpZf2jY9aGSsw==} + peerDependencies: + zod: ^3.21.4 + dependencies: + zod: 3.22.4 + dev: false + + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: false + + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: false