diff --git a/.github/workflows/deploy-docs.yaml b/.github/workflows/deploy-docs.yaml index c7ced14e..0b53326c 100644 --- a/.github/workflows/deploy-docs.yaml +++ b/.github/workflows/deploy-docs.yaml @@ -16,18 +16,35 @@ permissions: jobs: build: + name: Deploy documentation runs-on: ubuntu-latest steps: - name: Checkout your repository using git uses: actions/checkout@v3 - - name: Install, build, and upload your site output - uses: withastro/action@v0 + - name: Install Node.js + uses: actions/setup-node@v3 with: - path: ./docs # The root location of your Astro project inside the repository. (optional) - node-version: 18 # The specific version of Node that should be used to build your site. Defaults to 16. (optional) - package-manager: pnpm # The Node package manager that should be used to install dependencies and build your site. Automatically detected based on your lockfile. (optional) - pnpm-version: 8.x.x # If `package-manager` is set to `pnpm`, use this specific version. Defaults to `7.x.x`. (optional) - # resolve-dep-from-path: false # If the dependency file should be resolved from the root location of your Astro project. Defaults to `true`. (optional) + node-version: 18 + + - uses: pnpm/action-setup@v2 + name: Install pnpm + with: + version: 8 + run_install: false + + - name: Install dependencies + run: pnpm install + - run: pnpm dlx playwright install --with-deps chromium + + - name: Build website + run: | + cd docs + pnpm build + + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: ./docs/dist deploy: needs: build diff --git a/.github/workflows/test-docs-build.yml b/.github/workflows/test-docs-build.yml index 8a9059df..044efd52 100644 --- a/.github/workflows/test-docs-build.yml +++ b/.github/workflows/test-docs-build.yml @@ -28,6 +28,7 @@ jobs: - name: Install dependencies run: pnpm install + - run: pnpm dlx playwright install --with-deps chromium - name: Test build website run: | diff --git a/docs/README.md b/docs/README.md index 37dfc32b..468f8882 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,51 +1,131 @@ -# Starlight Starter Kit: Basics +# OpenPayments API documentation +This repo is the code behind [openpayments.guide](https://openpayments.guide), the documentation website for the OpenPayments API. + +## Contribute + +This website is built with [Starlight](https://starlight.astro.build/), a documentation framework based on [Astro](https://astro.build/). + +### Local Development + +- Make sure all the dependencies for the website are installed. Because this is a monorepo, you should run the following command in the root of the project folder: + +```sh +$ pnpm i +``` + +- Run the dev server from the /docs folder: + +```sh +$ pnpm start +``` + +This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. + +- Build the site, again, this must be run from the /docs folder: + +```sh +$ pnpm build ``` -npm create astro@latest -- --template starlight + +This command generates static content into the build directory and can be served using any static contents hosting service. + +## Editing Content + +Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory. Each file is exposed as a route based on its file name. Due to the nature of how Starlight deals with content and their generated URLs, all docs content lives in `/src/content/docs/`. For example, the home page of the documentation lives within the `/src/content/docs/` folder and is rendered at openpayments.guide, not openpayments.guide/docs. + +Static assets, like favicons or images, can be placed in the `public/` directory. When referencing these assets in your markdown, you do not have to include `public/` in the file path, so an image would have a path like: + +```md +![A lovely description of your beautiful image](/img/YOUR_BEAUTIFUL_IMAGE.png) ``` -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/starlight/tree/main/examples/basics) -[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/starlight/tree/main/examples/basics) +### Editing an existing docs page -> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun! +Edit docs by navigating to `/src/content/docs` and editing the corresponding document: -## 🚀 Project Structure +`/src/content/docs/RELEVANT_FOLDER/doc-to-be-edited.md` -Inside of your Astro + Starlight project, you'll see the following folders and files: +```markdown +--- +title: This Doc Needs To Be Edited +--- +Edit me... ``` -. -├── public/ -├── src/ -│ ├── assets/ -│ ├── content/ -│ │ ├── docs/ -│ │ └── config.ts -│ └── env.d.ts -├── astro.config.mjs -├── package.json -└── tsconfig.json + +Refer to the Starlight documentation on [authoring content](https://starlight.astro.build/guides/authoring-content/) for more detailed guidance. + +### Docs components + +We have extracted some of the commonly repeated patterns within the documentation pages into custom docs components that can be reused. There are components which are shared across all our Starlight documentation sites and those which are specific to this project only. This will determine what the import path is. + +- CodeBlock (Shared) +- Disclosure (Shared) +- Hidden (Shared) +- LargeImg (Shared) +- LinkOut (Shared) +- MermaidWrapper (Shared) +- StylishHeader (Shared) +- Tooltip (Shared) + +- [Snippet](#snippet-component) (Project-specific) + +For the shared components, if you are using both `CodeBlock` and `Disclosure` on the same page, you can import them both like so: + +```jsx +import { CodeBlock, Disclosure } from '@interledger/docs-design-system' ``` -Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory. Each file is exposed as a route based on its file name. +For more information about importing things in Javascript, please refer to [import on MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import). + +The available shared components are documented at our [documentation style guide](https://interledger.tech). + +1. #### `Snippet` component + + Use this component if you wish pull an entire file from a public Github repository to be displayed as code. It takes a `source` attribute, which will be displayed above the code. To use it, your docs page must be in `.mdx` format. Please change the format from `.md` to `.mdx` if necessary. All your existing markdown will still be supported without issue. Import the `Snippet` component like so: -Images can be added to `src/assets/` and embedded in Markdown with a relative link. + ```jsx + import Snippet from '/src/components/Snippet.astro' + ``` -Static assets, like favicons, can be placed in the `public/` directory. + Use the `` component within your content like so: -## 🧞 Commands + ``` + + ``` -All commands are run from the root of the project, from a terminal: +## Adding Content -| Command | Action | -| :------------------------ | :----------------------------------------------- | -| `npm install` | Installs dependencies | -| `npm run dev` | Starts local dev server at `localhost:4321` | -| `npm run build` | Build your production site to `./dist/` | -| `npm run preview` | Preview your build locally, before deploying | -| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | -| `npm run astro -- --help` | Get help using the Astro CLI | +### Adding a new docs page to an existing sidebar -## 👀 Want to learn more? +1. Create the doc as a new markdown file in `/src/content/docs/docs/RELEVANT_FOLDER`, example + `/src/content/docs/docs/RELEVANT_FOLDER/newly-created-doc.md`: + +```md +--- +title: This Doc Needs To Be Written +--- + +My new content here.. +``` + +The sidebar of the documentation site is configured in the `astro.config.mjs`. Refer to the Starlight documentation on [sidebar configuration](https://starlight.astro.build/reference/configuration/#sidebar/) for more detailed guidance. + +### Adding custom pages + +Astro is a content-focused web framework that integrates with a lot of existing framework libraries, making it relatively flexible for building customised sites. + +Pages exist in the `/src/pages` directory, and out-of-the-box come with absolutely nothing. For the web monetization website, we have created custom layout components that form the frame of a basic HTML web page, and allow you to add content that would populate the `main` element of the page via a concept known as [slots](https://docs.astro.build/en/core-concepts/astro-components/#slots). A `` allows you to specify where individual page content should be injected. + +```jsx +--- +import i18next, { t, changeLanguage } from "i18next"; +import Base from '../layouts/Base.astro'; +--- + + /* Page content goes here */ + +``` -Check out [Starlight’s docs](https://starlight.astro.build/), read [the Astro documentation](https://docs.astro.build), or jump into the [Astro Discord server](https://astro.build/chat). +Refer to the Astro documentation on [pages](https://docs.astro.build/en/core-concepts/astro-pages/) for more detailed guidance. diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs index 7d30321b..ed922287 100644 --- a/docs/astro.config.mjs +++ b/docs/astro.config.mjs @@ -1,8 +1,7 @@ import { defineConfig } from 'astro/config' import starlight from '@astrojs/starlight' import { generateAPI } from 'starlight-openapi' -// import overrideIntegration from './src/overrideIntegration.mjs' -import react from '@astrojs/react' +import remarkMermaid from 'remark-mermaidjs' // Generate the documentation and get the associated sidebar groups. const { openAPISidebarGroups, starlightOpenAPI } = await generateAPI([ @@ -20,11 +19,15 @@ const { openAPISidebarGroups, starlightOpenAPI } = await generateAPI([ // https://astro.build/config export default defineConfig({ + site: 'https://openpayments.guide', + markdown: { + remarkPlugins: [remarkMermaid] + }, integrations: [ - // overrideIntegration(), - react(), starlight({ - title: 'OpenPayments', + title: 'Open Payments', + description: + 'An API for open access to financial accounts to send and receive payments.', customCss: [ './node_modules/@interledger/docs-design-system/src/styles/green-theme.css', './node_modules/@interledger/docs-design-system/src/styles/ilf-docs.css', @@ -33,34 +36,186 @@ export default defineConfig({ logo: { src: './public/favicon.svg' }, + components: { + Header: './src/components/Header.astro' + }, + social: { + github: 'https://github.com/interledger/open-payments' + }, sidebar: [ { label: 'Intro to Open Payments', - autogenerate: { - directory: 'introduction' - } - }, - { - label: 'Security', - autogenerate: { - directory: 'security' - } + items: [ + { label: 'Overview', link: '/introduction/overview/' }, + // { + // label: 'Open Payments concepts', + // link: '/introduction/op-concepts' + // }, + { label: 'Open Payments flow', link: '/introduction/op-flow/' }, + { + label: 'Wallet addresses', + link: '/introduction/wallet-addresses/' + }, + { + label: 'Grant negotiation and authorization', + link: '/introduction/grants/' + }, + { + label: 'Client keys', + link: '/introduction/client-keys/' + }, + { + label: 'HTTP message signatures', + link: '/introduction/http-signatures/' + } + ] }, { - label: 'Guides', - autogenerate: { - directory: 'guides' - } + label: 'Code snippets', + collapsed: true, + items: [ + { + label: 'Payment pointers', + collapsed: true, + items: [ + { + label: 'Get payment pointer info', + link: '/snippets/pp-get-info' + }, + { + label: 'Get keys bound to a payment pointer', + link: '/snippets/pp-get-keys' + } + ] + }, + { + label: 'Grants', + collapsed: true, + items: [ + { + label: 'Create a grant request', + link: '/snippets/grant-create' + }, + { + label: 'Continue a grant request', + link: '/snippets/grant-continue' + }, + { + label: 'Revoke a grant request', + link: '/snippets/grant-revoke' + } + ] + }, + { + label: 'Incoming payments', + collapsed: true, + items: [ + { + label: 'Create an incoming payment', + link: '/snippets/incoming-create/' + }, + { + label: 'List incoming payments', + link: '/snippets/incoming-list/' + }, + { + label: 'Get an incoming payment', + link: '/snippets/incoming-get/' + }, + { + label: 'Complete an incoming payment', + link: '/snippets/incoming-complete/' + } + ] + }, + { + label: 'Quotes', + collapsed: true, + items: [ + { + label: 'Create a quote', + link: '/snippets/quote-create/' + }, + { + label: 'Get a quote', + link: '/snippets/quote-get/' + } + ] + }, + { + label: 'Outgoing payments', + collapsed: true, + items: [ + { + label: 'Create an outgoing payment', + link: '/snippets/outgoing-create/' + }, + { + label: 'List outgoing payments', + link: '/snippets/outgoing-list/' + }, + { + label: 'Get an outgoing payment', + link: '/snippets/outgoing-get/' + } + ] + }, + { + label: 'Tokens', + collapsed: true, + items: [ + { + label: 'Rotate an access token', + link: '/snippets/token-rotate/' + }, + { + label: 'Revoke an access token', + link: '/snippets/token-revoke/' + } + ] + } + ] }, + // { + // label: 'Guides', + // collapsed: true, + // items: [ + // { + // label: 'Create an interactive grant request', + // link: '/guides/create-interactive-grant/' + // }, + // { + // label: 'Make a one-time payment', + // link: '/guides/make-onetime-payment/' + // }, + // { + // label: 'Make a recurring payment', + // link: '/guides/make-recurring-payment/' + // } + // ] + // }, { - label: 'API references', - autogenerate: { - directory: 'api_references' - } + label: 'Resources', + collapsed: true, + items: [ + // { + // label: 'Glossary', + // link: '/resources/glossary/' + // }, + { + label: 'Open Payments-enabled wallets', + link: '/resources/op-wallets/' + }, + { + label: 'Supported payment methods', + link: '/resources/payment-methods/' + } + ] }, // Add the generated sidebar groups to the sidebar. { - label: 'API specifications', + label: 'API specification', + collapsed: true, items: openAPISidebarGroups } ] diff --git a/docs/package.json b/docs/package.json index 771c4a96..eafae0ac 100644 --- a/docs/package.json +++ b/docs/package.json @@ -4,21 +4,21 @@ "private": "true", "version": "0.0.1", "scripts": { - "dev": "astro dev", "start": "astro dev", "build": "astro build", "preview": "astro preview", "astro": "astro" }, "dependencies": { - "@astrojs/react": "^3.0.2", - "@astrojs/starlight": "0.10.1", - "@interledger/docs-design-system": "^0.0.12", - "astro": "3.1.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "@astrojs/starlight": "^0.11.2", + "@interledger/docs-design-system": "^0.1.1", + "astro": "3.3.4", + "remark-mermaidjs": "^6.0.0", "sharp": "^0.32.6", - "shiki": "0.14.4", - "starlight-openapi": "^0.2.0" + "shiki": "0.14.5", + "starlight-openapi": "^0.3.1" + }, + "devDependencies": { + "prettier": "3.0.3" } } diff --git a/docs/public/img/snippets/generate-keys.png b/docs/public/img/snippets/generate-keys.png new file mode 100644 index 00000000..1302d9b0 Binary files /dev/null and b/docs/public/img/snippets/generate-keys.png differ diff --git a/docs/public/img/snippets/rafiki-money-step10.png b/docs/public/img/snippets/rafiki-money-step10.png new file mode 100644 index 00000000..ef4374c1 Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step10.png differ diff --git a/docs/public/img/snippets/rafiki-money-step11.png b/docs/public/img/snippets/rafiki-money-step11.png new file mode 100644 index 00000000..6580886b Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step11.png differ diff --git a/docs/public/img/snippets/rafiki-money-step12.png b/docs/public/img/snippets/rafiki-money-step12.png new file mode 100644 index 00000000..30811cb2 Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step12.png differ diff --git a/docs/public/img/snippets/rafiki-money-step13.png b/docs/public/img/snippets/rafiki-money-step13.png new file mode 100644 index 00000000..46d5bdee Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step13.png differ diff --git a/docs/public/img/snippets/rafiki-money-step14.png b/docs/public/img/snippets/rafiki-money-step14.png new file mode 100644 index 00000000..126d5a15 Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step14.png differ diff --git a/docs/public/img/snippets/rafiki-money-step15.png b/docs/public/img/snippets/rafiki-money-step15.png new file mode 100644 index 00000000..f53dc2ab Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step15.png differ diff --git a/docs/public/img/snippets/rafiki-money-step16.png b/docs/public/img/snippets/rafiki-money-step16.png new file mode 100644 index 00000000..363ea575 Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step16.png differ diff --git a/docs/public/img/snippets/rafiki-money-step17.png b/docs/public/img/snippets/rafiki-money-step17.png new file mode 100644 index 00000000..b2cf7ab1 Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step17.png differ diff --git a/docs/public/img/snippets/rafiki-money-step19.png b/docs/public/img/snippets/rafiki-money-step19.png new file mode 100644 index 00000000..c5543a79 Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step19.png differ diff --git a/docs/public/img/snippets/rafiki-money-step2.png b/docs/public/img/snippets/rafiki-money-step2.png new file mode 100644 index 00000000..a2bea757 Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step2.png differ diff --git a/docs/public/img/snippets/rafiki-money-step20.png b/docs/public/img/snippets/rafiki-money-step20.png new file mode 100644 index 00000000..b18d47f8 Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step20.png differ diff --git a/docs/public/img/snippets/rafiki-money-step21.png b/docs/public/img/snippets/rafiki-money-step21.png new file mode 100644 index 00000000..82f2766b Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step21.png differ diff --git a/docs/public/img/snippets/rafiki-money-step4.png b/docs/public/img/snippets/rafiki-money-step4.png new file mode 100644 index 00000000..211462d6 Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step4.png differ diff --git a/docs/public/img/snippets/rafiki-money-step5.png b/docs/public/img/snippets/rafiki-money-step5.png new file mode 100644 index 00000000..de823d5e Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step5.png differ diff --git a/docs/public/img/snippets/rafiki-money-step8.png b/docs/public/img/snippets/rafiki-money-step8.png new file mode 100644 index 00000000..cbcca206 Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step8.png differ diff --git a/docs/public/img/snippets/rafiki-money-step9.png b/docs/public/img/snippets/rafiki-money-step9.png new file mode 100644 index 00000000..8ed11c60 Binary files /dev/null and b/docs/public/img/snippets/rafiki-money-step9.png differ diff --git a/docs/public/img/snippets/rafiki_money.png b/docs/public/img/snippets/rafiki_money.png new file mode 100644 index 00000000..d74f78f3 Binary files /dev/null and b/docs/public/img/snippets/rafiki_money.png differ diff --git a/docs/public/img/snippets/view-keys.png b/docs/public/img/snippets/view-keys.png new file mode 100644 index 00000000..d964e090 Binary files /dev/null and b/docs/public/img/snippets/view-keys.png differ diff --git a/docs/src/components/ChunkedSnippet.astro b/docs/src/components/ChunkedSnippet.astro new file mode 100644 index 00000000..ff62a74f --- /dev/null +++ b/docs/src/components/ChunkedSnippet.astro @@ -0,0 +1,80 @@ +--- +import prettier from 'prettier'; +import { Code } from 'astro:components'; +import { CodeBlock } from '@interledger/docs-design-system' +const {source, chunk} = Astro.props; + +// Retrieve code snippet from GitHub as text +const getApiData = async () => { + const data = await fetch(source).then((response) => response.text()); + return data; +}; +const code = await getApiData(); + +// Split the text into an array of lines +const lines = code.split('\n'); + +// Initialize an array to store the delimiter objects +const delimiterArray = []; + +// Iterate through the lines, extract "//@!" lines and format them into objects +let startLine = null; +for (let i = 0; i < lines.length; i++) { + if (lines[i].trim().startsWith("//@!")) { + if (startLine !== null) { + // Extract the entire "start_line" and the "title" + const startLineMatch = startLine.match(/\/\/@!(.*?)\s+\|\s+title=(.*)/); + if (startLineMatch) { + const entireStartLine = startLineMatch[0]; + const title = startLineMatch[2]; + + // Create an object with "start_line," "title," and "end_line" keys + const delimiterObject = { + start_line: entireStartLine, + title: title, + end_line: lines[i] + }; + delimiterArray.push(delimiterObject); + } + startLine = null; + } else { + startLine = lines[i]; + } + } +} + +// Initialize an array to store the extracted chunks +const codeChunkArray = []; + +// Iterate through the delimiterArray and extract code chunks and titles +for (const delimiter of delimiterArray) { + const startLine = delimiter.start_line; + const endLine = delimiter.end_line; + + // Find the indices of the start and end lines in your longer text file + const startIndex = code.indexOf(startLine); + const endIndex = code.indexOf(endLine); + + if (startIndex !== -1 && endIndex !== -1) { + const codeChunk = code.slice(startIndex + startLine.length, endIndex).trim(); + + codeChunkArray.push({ + code_chunk: codeChunk, + title: delimiter.title + }); + } +} + +// Handle zero-index situation and format code nicely +const chunkNumber = parseInt(chunk) - 1; +const rawOutput = codeChunkArray[chunkNumber].code_chunk; +const output = await prettier.format(rawOutput, { + parser: 'typescript', + tabWidth: 2, +}); +const codeBlockTitle = codeChunkArray[chunkNumber].title; +--- + + + + diff --git a/docs/src/components/FullSnippet.astro b/docs/src/components/FullSnippet.astro new file mode 100644 index 00000000..7c70f852 --- /dev/null +++ b/docs/src/components/FullSnippet.astro @@ -0,0 +1,18 @@ +--- +import prettier from 'prettier'; +import { Code } from 'astro:components'; +const {source} = Astro.props; + +const getApiData = async () => { + const data = await fetch(source).then((response) => response.text()); + return data; +}; +const code = await getApiData(); + +const output = await prettier.format(code, { + parser: 'typescript', + tabWidth: 2, +}); +--- + + diff --git a/docs/src/overrides/Header.astro b/docs/src/components/Header.astro similarity index 71% rename from docs/src/overrides/Header.astro rename to docs/src/components/Header.astro index d477aa4c..e0ba4bf7 100644 --- a/docs/src/overrides/Header.astro +++ b/docs/src/components/Header.astro @@ -1,20 +1,19 @@ --- +import type { Props } from '@astrojs/starlight/props'; import Search from "@astrojs/starlight/components/Search.astro"; import ThemeSelect from "@astrojs/starlight/components/ThemeSelect.astro"; import SocialIcons from "@astrojs/starlight/components/SocialIcons.astro"; import OpenPaymentsLogo from "../components/OpenPaymentsLogo.astro"; - -const { locale } = Astro.props; --- -
- +
+
- - -
@@ -27,14 +26,15 @@ const { locale } = Astro.props; height: 100%; } - .site-title { + .site-logo { display: flex; align-items: center; gap: var(--space-xs); + font-size: larger; } - .site-title svg { - width: 11em; + .site-logo svg { + width: 9.5em; flex: none; } @@ -49,5 +49,5 @@ const { locale } = Astro.props; .secondary-wrap :global(.divider) { border-inline-end-color: transparent; } - } + } diff --git a/docs/src/components/OpenPaymentsLogo.astro b/docs/src/components/OpenPaymentsLogo.astro index e82e3df5..243e81f1 100644 --- a/docs/src/components/OpenPaymentsLogo.astro +++ b/docs/src/components/OpenPaymentsLogo.astro @@ -1,4 +1,4 @@ --- const { class: className } = Astro.props; --- - +Open Payments logo diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx index 06858ca9..d6a72386 100644 --- a/docs/src/content/docs/index.mdx +++ b/docs/src/content/docs/index.mdx @@ -1,12 +1,12 @@ --- title: Open Payments -description: Open Payments is an API standard that can be implemented by any digital wallet provider. +description: Open Payments is an open API standard for implementation by account servicing entities. template: splash hero: - tagline: Open Payments is an API standard that can be implemented by any digital wallet provider. + tagline: Open Payments is an open API standard for implementation by account servicing entities. actions: - - text: Read OpenPayment docs - link: https://docs.openpayments.guide/ + - text: Read the Open Payments docs + link: introduction/overview/ icon: open-book variant: primary - text: View on GitHub @@ -16,8 +16,7 @@ hero: import { Card, CardGrid } from '@astrojs/starlight/components' -{/* prettier-ignore */} -{/* + @@ -34,4 +33,4 @@ import { Card, CardGrid } from '@astrojs/starlight/components' Join the community - */} + diff --git a/docs/src/content/docs/introduction/client-keys.mdx b/docs/src/content/docs/introduction/client-keys.mdx new file mode 100644 index 00000000..49aeeedf --- /dev/null +++ b/docs/src/content/docs/introduction/client-keys.mdx @@ -0,0 +1,89 @@ +--- +title: Client keys +--- + +import { CodeBlock, LinkOut } from '@interledger/docs-design-system' + +All client requests in Open Payments are signed using a unique key that identifies the client to the authorization and resource servers. All requests, except for new grant requests, also carry an access token that is bound to the key. + +## Key registry + +A key registry is a registry of all keys stored by an ASE for their users. A key is [generated](#key-structure) and added to the registry by the client that requires access to Open Payments resources that are protected by an authorization server. + +The client is represented by a wallet address. The keys specifically for the client are contained within a `jwks.json` and exposed publicly at `WALLET_ADDRESS/jwks.json`. For example, `https://wallet.example.com/alice/jwks.json`. + +The key registry and public `jwks.json` allows servers to verify that a client is who they say they are. + +## Acquisition of a client's key set + +Because a grant request is completed over multiple signed HTTP requests, it’s important for a client to provide a way to consistently identify itself across these requests. + +The client generates an asymmetric key pair and the ASE assigns a key ID identifying the pair. When the client makes a grant request to the authorization server, the client must include a: + +- signature in the header that's signed by the private key +- `signature-input` header that includes the key ID of the public key associated with the private key used to sign the signature. + +Review the [HTTP message signatures](/introduction/http-signatures) page for more information about signature headers. + +When the authorization server receives a signed grant request, the server makes a `GET` request to the client’s `jwks.json` endpoint to acquire the key set. The wallet address of the client is acquired by the authorization server during this initial grant request, after which the server binds the wallet address to the grant and uses it to acquire the key set for subsequent grant requests. + +After the authorization server acquires the client’s key set, the server searches for the public key with a key ID that matches the one included in the `signature-input` header. Once the server finds the public key, the key will be used to verify the signature, allowing the server to proceed with the grant request. + +## Key structure + +In Open Payments, the key registry must expose public keys in the form of a JWK. Keys must be generated using the ed25519 algorithm, and the resulting JWK must have fields with the following values: + +``` +{ + alg: 'EdDSA', + kty: 'OKP', + crv: 'Ed25519' +} +``` + +Additionally, the JWK must contain the `x` field and the public key `kid` field to identify it in a signature. + +The key material must be available within a JSON Web Key Set (JWKS) document located at `WALLET_ADDRESS/jwks.json`. + + +```json +{ + "keys": [ + { + "kid": "3724c845-829d-425a-9a0d-194d6f12c336", + "x": "_Eg6UcC8G-O4TY2cxGnZyG_lMn0aWF1rVV-Bqn9NmhE", + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519" + } + ] +} +``` + + +## Key proofing method + +The security of client requests follows a profile of the mechanism defined in the GNAP specification. + +:::note +Open Payments **does not** support bearer tokens. +::: + +Open Payments uses the HTTP message signatures key proofing method. Clients typically secure their requests to the authorization and resource servers by presenting an access token and proof of a key it possesses. The exception is for calls to the authorization server to initiate a grant. In this case, a key proof is used with no access token and is a non-authorized signed request. + +The `httpsig` proofing method must be declared as part of the key material when directly using a key to request a grant. The key material below is for illustrative purposes. In Open Payments, it's expected that the wallet address be used in the grant request. + +```json +"key": { + "proof": "httpsig", + "jwk": { + "kid": "3724c845-829d-425a-9a0d-194d6f12c336", + "x": "_Eg6UcC8G-O4TY2cxGnZyG_lMn0aWF1rVV-Bqn9NmhE", + "alg": "EdDSA", + "kty": "OKP", + "crv": "Ed25519" + } +} +``` + +When using `httpsig`, the signer creates an HTTP Message Signature as described in the HTTP Message Signatures specification. Review the [HTTP message signatures](/introduction/http-signatures) page for more information about signatures as they relate to Open Payments. diff --git a/docs/src/content/docs/introduction/grants.mdx b/docs/src/content/docs/introduction/grants.mdx new file mode 100644 index 00000000..9d6cfc31 --- /dev/null +++ b/docs/src/content/docs/introduction/grants.mdx @@ -0,0 +1,40 @@ +--- +title: Grant negotiation and authorization +--- + +import { CodeBlock, LinkOut } from '@interledger/docs-design-system' + +Before a client can issue payment instructions for incoming payments, quotes, or outgoing payments, it must obtain a grant. Open Payments leverages the Grant Negotiation and Authorization Protocol (GNAP) to define a standard mechanism for clients to obtain grants. GNAP is a protocol being developed by the Internet Engineering Task Force (IETF) as the successor to OAuth 2.0, designed to fill many of the gaps discovered through the use of OAuth in Open Banking and other financial use cases. + +## Grants + +GNAP allows a client instance to request delegated authorization to protected resources from a party other than the end user. This delegation is facilitated by an authorization server, which exposes APIs compliant with the GNAP standard. The process by which the delegation occurs is known as a grant. + +### Grant requests + +An authorization server is uniquely identified by its grant endpoint URI, which is an absolute URI that a client calls to initiate a grant request. + +In Open Payments, the grant for an [incoming payment](/apis/resource-server/operations/create-incoming-payment) is requested from the receiver’s wallet. The grant(s) for a [quote](/apis/resource-server/operations/create-quote) and [outgoing payment](/apis/resource-server/operations/create-outgoing-payment) are requested from the sender’s wallet. Review the [HTTP message signatures](/introduction/http-signatures) page for additional information. + +The grant request flow can take one of the paths below, with the first being the most common. + +- Grant -> incoming payment -> grant -> quote -> grant -> outgoing payment +- Grant -> incoming payment -> grant -> quote -> outgoing payment + +A client can request one grant to create multiple incoming payments for different wallet accounts as long as each wallet account is with the same ASE. The same is true for quotes. However, an outgoing payment is specific to a wallet account and requires user interaction. This means each outgoing payment needs its own grant. + +A successfully issued grant results in the client receiving an access token. The access token: + +- Represents the rights granted to the client +- Acts as credentials when calling a resource server’s Open Payments API +- Allows the client to access protected resources (primarily OP-enabled accounts) on an ASE’s resource server and perform operations on these resources + +:::note +An open-source implementation of an Open Payments resource server, called Rafiki, is currently in development. +::: + +The authorization of access to an OP-enabled account can be separated from the ASE if desired. The authorization service can even be fulfilled by multiple federated providers if a use case requires this in the future. + +### Grant continuation and cancellation + +The client can issue a [grant continuation request](/apis/auth-server/operations/post-continue) if a grant needs to be modified or continued. For example, a client may initially need read access to a resource, but later require write access. The client can request to [cancel a grant](/apis/auth-server/operations/delete-continue) if it no longer needs access to protected resources on the resource server. diff --git a/docs/src/content/docs/introduction/http-signatures.mdx b/docs/src/content/docs/introduction/http-signatures.mdx new file mode 100644 index 00000000..a4a7cdf3 --- /dev/null +++ b/docs/src/content/docs/introduction/http-signatures.mdx @@ -0,0 +1,61 @@ +--- +title: HTTP message signatures +--- + +import { CodeBlock, LinkOut } from '@interledger/docs-design-system' + +HTTP message signatures are cryptographic digital signatures used by the Open Payments API to secure the HTTP messages transferred between sender, receiver, and third-party initiating payment systems. + +The creation and verification of these digital signatures enables an authorization server to control access to protected resources in the process of orchestrating transactions. + +## Purpose + +When exchanging HTTP messages, Open Payments-enabled systems verify the following aspects of message security: + +- **Authenticity** of the system requesting permissions to access specific resources. +- **Integrity** of some or all of the message fields to guard against the risk of message tampering. + +## Understanding HTTP signatures + +### Specification + +The Open Payments API adheres to the HTTP Message Signature specification which has been drafted by the HTTP Workgroup of the Internet Engineering Task Force (IETF). + +{/* prettier-ignore */} +{/* ### Cryptography and keys + +:::caution +This section is WIP +::: \*/} + +### Signature algorithms + +Various digital signature algorithms can be used to generate HTTP message signatures. The Open Payments API implements the **Ed25519** variant of the EdDSA (Edwards-curve Digital Signature Algorithm), an elliptic curve cryptographic algorithm that offers advantages over earlier generations of public key cryptography algorithms. + +The benefits of using Ed25519 include: + +- Relatively efficient security offered with smaller key sizes. Earlier generation public-key cryptographic algorithms, such as RSA, offer comparable security with notably larger key sizes. +- Good hash function collision resilience. +- Speed and efficiency for signature generation and verification. +- Guarding against the risk of an encryption key downgrade attack. + +For more information about the EdDSA and its variants, refer to RFC8032. + +{/* prettier-ignore */} +{/* ### Message signature creation + +:::caution +This section is WIP +::: + +### Bringing it all together + +:::caution +This section is WIP +::: + +## Use the HTTP signature Lambda function + +:::caution +This section is WIP +::: \*/} diff --git a/docs/src/content/docs/introduction/op-flow.mdx b/docs/src/content/docs/introduction/op-flow.mdx new file mode 100644 index 00000000..55d9a8c6 --- /dev/null +++ b/docs/src/content/docs/introduction/op-flow.mdx @@ -0,0 +1,55 @@ +--- +title: Open Payments flow +--- + +import { LinkOut, MermaidWrapper } from '@interledger/docs-design-system' + + + +```mermaid +sequenceDiagram + +participant Cu as Customer +participant A2 as Auth Server B +participant R2 as Backend B +participant R1 as Backend A +participant A1 as Auth Server A +participant Cl as Merchant + +activate Cl +Cl->>+A1: incoming payment grant request +A1->>-Cl: grant + access token +Cl->>+R1: incoming payment creation request +R1->>+A1: token introspection +A1->>-R1: token valid + grant details +R1->>-Cl: incoming payment +rect rgba(0, 0, 255, .1) +Cl->>+Cu: request payment pointer +Cu->>Cl: payment pointer +end +Cl->>+R2: query customer's payment pointer +R2->>-Cl: payment pointer details including auth server endpoint +Cl->>+A2: quote grant request +A2->>-Cl: grant + access token +Cl->>+R2: quote creation request +R2->>+A2: token introspection +A2->>-R2: token valid + grant details +R2->>-Cl: quote +Cl->>+A2: outgoing payment grant request +A2->>-Cl: IdP redirect info +rect rgba(0, 0, 255, .1) +Cl->>Cu: redirect to IdP +Cu->>Cu: consent to grant request +Cu->>-Cl: interaction finished +end +Cl->>+A2: continue grant request +A2->>-Cl: grant + access token +Cl->>+R2: outgoing payment creation request +R2->>+A2: token introspection +A2->>-R2: token valid + grant details +R2->>R2: grant accounting +R2->>-Cl: outgoing payment +deactivate Cl +``` + + diff --git a/docs/src/content/docs/introduction/overview.mdx b/docs/src/content/docs/introduction/overview.mdx new file mode 100644 index 00000000..3e634685 --- /dev/null +++ b/docs/src/content/docs/introduction/overview.mdx @@ -0,0 +1,53 @@ +--- +title: Overview +--- + +import { LinkOut } from '@interledger/docs-design-system' + +Open Payments is an open RESTful API and API standard that enables clients to interface with Open Payments-enabled accounts. In the context of Open Payments (OP), a client is an application, such as a mobile or web app, that consumes one or more OP resources, typically requiring access privileges from one or several authorization servers. + +The Open Payments standard is meant to be implemented by account servicing entities (ASEs). ASEs provide and maintain payment accounts for payers and payees, and are regulated entities within the countries they operate. Examples of ASEs include banks, digital wallet providers, and mobile money providers. + +When an ASE implements Open Payments, their customers’ financial accounts become OP-enabled. Clients can then call the Open Payments API to view an OP-enabled account’s transaction history and certain account details, as well as issue instructions for receiving payments into and sending payments from the account. + +For example, an application developer can build payments functionality into their app such that a user with an OP-enabled account can use the app to send funds to another OP-enabled account regardless of whether the recipient uses the same ASE. The app should be able to connect to any ASE that implements the Open Payments standard without the need for custom integrations. + +## Payments + +Open Payments does not execute payments or touch funds in any way. Instead, the API allows clients to issue payment instructions to ASEs. + +For example, a client can instruct an ASE to send a payment of $20.00 USD from its customer’s account to another OP-enabled account at a different ASE. The sending ASE is responsible for executing and settling the payment with the receiving ASE outside of Open Payments. The ability to execute payments between OP-enabled ASEs is predicated on the availability of a common payment rail between the ASEs. + +By separating payment instructions from execution/settlement, client developers can include payment functionality within their feature sets without, for example, also registering as a licensed money transfer business. + +## Open Payments account identification + +Every OP-enabled account is identified by one or more URLs. These URLs not only identify the account, but are also OP service endpoints that provide the entry point for the API. These URLs are called [wallet addresses](/introduction/wallet-addresses). + +## Grant Negotiation and Authorization + +Clients must receive grants before issuing payment instructions. Grants give clients the authorization, via access tokens, to perform one or more operations. Grants represent the rights that are given to the client, such as the right to create an incoming payment request. + +Open Payments leverages the Grant Negotiation and Authorization Protocol (GNAP) to define a standard mechanism for clients to request and receive the grants necessary to use the Open Payments API. All requests require signatures, which protect the integrity of the requests. Signatures are generated according to the HTTP Signatures specification. + +GNAP makes it possible to give account holders specific and fine-grained control over the permissions they grant to the clients that connect to their accounts, including control over the amounts of transactions with time-based and velocity-based limits. This enables powerful use cases such as third-party payment initiation and delegated authorization without compromising the security of the underlying financial accounts and payment instruments. + +Review the [Grant negotiation and authorization](/introduction/grants) page for more information. + +## Relation to Open Banking + +Open Payments attempts to improve upon existing Open Banking standards as defined in the UK, EU, and other jurisdictions. + +Existing Open Banking ecosystems are dominated by aggregators and intermediaries, making it impossible for independent third-parties, such as small merchants, to use payment initiation APIs directly against their customers’ payment accounts. OP allows for scenarios where clients can dynamically register and engage with the API without needing to pre-register with the ASE. This allows for a truly distributed and federated payment ecosystem with global reach and no dependence on any particular underlying account type or settlement system. + +OP is also a significantly simpler standard with a small number of resource types and a more secure and powerful authorization protocol. + +## Goals + +The goal of Open Payments is to define a standard that's adopted by all ASEs. The standard doesn't rely on any singular payment method, currency, or programming language, encouraging interoperability between ASEs and other parties. + +When an ASE adopts the Open Payments standard, clients (applications and other parties) will know how to interact with the ASE and can integrate payments directly into their products without requiring: + +- End-users to create a new payment account for every application and/or website they use +- Developers to build clients in any one programming language +- ASEs and clients to create and deploy custom integrations to communicate with one another diff --git a/docs/src/content/docs/introduction/wallet-addresses.mdx b/docs/src/content/docs/introduction/wallet-addresses.mdx new file mode 100644 index 00000000..40a32c45 --- /dev/null +++ b/docs/src/content/docs/introduction/wallet-addresses.mdx @@ -0,0 +1,51 @@ +--- +title: Wallet addresses +--- + +At the heart of all interactions in Open Payments (OP) is an OP-enabled account. Every OP-enabled account is identified by one or more URLs. These URLs are not only account identifiers, but also service endpoints for gaining access to the OP API. These URLs are called **wallet addresses**. Not all URLs are wallet addresses, but all wallet addresses are URLs. + +A URL is only a wallet address if the: + +- Server handling the HTTP requests to the URL supports the OP protocol +- URL uses the `https` protocol and has no `user-info`, `port`, `query string`, or `fragment` parts + +The quickest way to test if a URL is a wallet address is to make an HTTP `GET` request to the URL with an `Accept` header value of `application/json`. + +```http +curl --request GET \ + --url https://wallet.example.com/alice \ + --header 'accept: application/json' +``` + +If the URL is a wallet address, the response will provide details about the underlying OP-enabled account, including the URL of the grant request endpoint. The grant request endpoint can be used to get access tokens to connect to the account via the OP APIs. + +```http +HTTP/1.1 200 Success +Content-Type: application/json + +{ + "id": "https://wallet.example.com/alice", + "publicName": "Alice", + "assetCode": "USD", + "assetScale": 2, + "authServer": "https://auth.wallet.example.com" +} +``` + +## Privacy and security + +A wallet address acts as a proxy identifier (alias) for an underlying financial account. If permitted by an account servicing entity (ASE), a single account can have multiple wallet addresses. Allowing account holders to generate unique wallet addresses for every client they interact with can help prevent a single address from becoming a tracking vector. + +In addition to the one account-to-one wallet address and one account-to-multiple wallet addresses models, an ASE could allow a single wallet address to represent all of a user’s accounts. For example, imagine a user has three accounts with a digital wallet provider. The provider issues the user a single wallet address. When a payment is sent to the wallet address, the provider determines which one of the three accounts should receive the payment based on any number of criteria. + +Ultimately, it’s up to the ASE to define the supported configuration of relationships between wallet addresses and user accounts. This loose coupling allows wallet addresses to be disabled or even linked to a new account (although there are considerations that must be made before allowing this) without affecting the underlying account. + +For any client, a wallet address is as good as an account. Any two distinct wallet addresses should be treated as distinct accounts by clients even if the client is aware that they are proxies for the same underlying account. Permissions granted to a client for access to an account via one wallet address are not automatically usable for accessing the same account via another wallet address. + +## Discovery and interaction + +Using URLs as payment instruments solves two of the biggest issues with existing payments UX: discoverability and interaction. + +URLs (universal resource locators) have been used on the web for decades to allow clients to directly locate a resource and begin interacting with it via HTTP. A wallet address is both a proxy identifier and a resource locator for the underlying account, used to access the account via OP APIs and begin interactions with the account’s ASE. + +Using URLs as proxies is also preferable to overloading other identifiers, such as email addresses and Mobile Station International Subscriber Directory Numbers (MSISDNs), as these proxies have no standard for interaction. As a result, identifiers like an MSISDN or email require a registry that maps the identifier to an account provider and a mechanism for governing this mapping securely. diff --git a/docs/src/content/docs/resources/op-wallets.mdx b/docs/src/content/docs/resources/op-wallets.mdx new file mode 100644 index 00000000..1e9dfcd8 --- /dev/null +++ b/docs/src/content/docs/resources/op-wallets.mdx @@ -0,0 +1,23 @@ +--- +title: Open Payments-enabled wallets +--- + +import { LinkOut } from '@interledger/docs-design-system' + +The following providers supply Open Payments-enabled wallet accounts. + +## Open Payments-enabled wallets + +### Interledger testnet wallet + +The Interledger testnet wallet is an ILP-enabled demo wallet application that developers can use to test their Open Payments integrations. + +Sign up for an account at rafiki.money. + +### Fynbos + +Coming soon! + +### GateHub + +Coming soon! diff --git a/docs/src/content/docs/resources/payment-methods.mdx b/docs/src/content/docs/resources/payment-methods.mdx new file mode 100644 index 00000000..82aba004 --- /dev/null +++ b/docs/src/content/docs/resources/payment-methods.mdx @@ -0,0 +1,19 @@ +--- +title: Supported payment methods +--- + +import { LinkOut } from '@interledger/docs-design-system' + +Open Payments supports the payment methods listed below. The payment method determines how funds are moved out of one OP-enabled wallet account and into another. + +## Supported payment methods + +### Interledger Protocol (ILP) + +ILP is an open protocol suite for transferring packets of value between peers and across different payment networks or ledgers. The open architecture and minimal protocol enable interoperability for any value transfer system and is optimized for routing large volumes of low-value packets. + +Review the ILP developer documentation for more information. + +### Mojaloop + +Coming soon! diff --git a/docs/src/content/docs/snippets/grant-continue.mdx b/docs/src/content/docs/snippets/grant-continue.mdx new file mode 100644 index 00000000..bfe2535a --- /dev/null +++ b/docs/src/content/docs/snippets/grant-continue.mdx @@ -0,0 +1,52 @@ +--- +title: Continue a grant request +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +An authorization server will place a grant request into a pending state if the server requires additional communication from the client to facilitate interaction. When interaction is complete, the authorization server responds to the client with an interaction reference. + +The client must include the reference (as the `interact_ref`) in a grant continuation request to indicate the grant request should be moved from pending to processing for reevaluation by the auth server. + +These code snippets enable an authorized client to issue a grant continuation request to the authorization server after a completed interaction. + +## Before you begin + + + +## Issue grant continuation request + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/auth-server/operations/post-continue) diff --git a/docs/src/content/docs/snippets/grant-create.mdx b/docs/src/content/docs/snippets/grant-create.mdx new file mode 100644 index 00000000..a58ee86a --- /dev/null +++ b/docs/src/content/docs/snippets/grant-create.mdx @@ -0,0 +1,126 @@ +--- +title: Create a grant request +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +Before a client can call the Open Payments API, it must request/receive a grant from the appropriate authorization server. The request must indicate the resource the client intends to work with and the actions the client wants to take at the resource server. + +These code snippets enable a client to request a grant for each supported resource (incoming-payment, quote, and outgoing-payment). Each grant request includes all valid actions the client can take for the resource at the resource server. + +:::note +When constructing a transaction, the client requests a grant to create an incoming-payment resource from the recipient’s (payee) authorization server. The client requests grants for quote and outgoing-payment resources from the sender’s (payer) auth server. +::: + +## Before you begin + + + +## Request an incoming payment grant + + + + + + + + + + + + + + + + + + + + +## Request a quote grant + + + + + + + + + + + + + + + + + + + + +## Request an outgoing payment grant + + + + + + + + + + + + + + + + + + + + +## References + +- [Grant negotiation and authorization](/introduction/grants) +- [API specification](/apis/auth-server/operations/post-request) diff --git a/docs/src/content/docs/snippets/grant-revoke.mdx b/docs/src/content/docs/snippets/grant-revoke.mdx new file mode 100644 index 00000000..03f6dc98 --- /dev/null +++ b/docs/src/content/docs/snippets/grant-revoke.mdx @@ -0,0 +1,52 @@ +--- +title: Revoke a grant request +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +If an authorized client no longer needs access to protected resources, the client can revoke the corresponding grant request. These code snippets enable a client to revoke (cancel) a grant that it was previously issued. When a grant request is revoked, the request is placed into a finalized state and no further updates to the grant are allowed. + +## Before you begin + + + + + + + +## Revoke a grant request + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/auth-server/operations/delete-continue) diff --git a/docs/src/content/docs/snippets/incoming-complete.mdx b/docs/src/content/docs/snippets/incoming-complete.mdx new file mode 100644 index 00000000..c2c19dae --- /dev/null +++ b/docs/src/content/docs/snippets/incoming-complete.mdx @@ -0,0 +1,50 @@ +--- +title: Complete an incoming payment +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +An authorized client can complete an unexpired incoming payment to indicate it will not send any additional payments to the payment pointer. + +These code snippets pass the payment pointer and incoming payment URL to the resource server and mark the payment as completed. + +## Before you begin + + + +## Mark an incoming payment as complete + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/resource-server/operations/complete-incoming-payment) diff --git a/docs/src/content/docs/snippets/incoming-create.mdx b/docs/src/content/docs/snippets/incoming-create.mdx new file mode 100644 index 00000000..674e8445 --- /dev/null +++ b/docs/src/content/docs/snippets/incoming-create.mdx @@ -0,0 +1,50 @@ +--- +title: Create an incoming payment +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +Once an authorized client obtains the requisite grant from the recipient’s authentication server, the client must create an incoming payment resource before any payments can be sent to the recipient’s payment pointer. + +These code snippets create an incoming payment of $10 USD at a given payment pointer, allowing subsequent payments to be sent to that payment pointer up to $10 USD. + +## Before you begin + + + +## Create an incoming payment resource + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/resource-server/operations/create-incoming-payment) diff --git a/docs/src/content/docs/snippets/incoming-get.mdx b/docs/src/content/docs/snippets/incoming-get.mdx new file mode 100644 index 00000000..9dc511f9 --- /dev/null +++ b/docs/src/content/docs/snippets/incoming-get.mdx @@ -0,0 +1,50 @@ +--- +title: Get an incoming payment +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +An authorized client can look up the state of an incoming payment on a payment pointer. This is useful when a client must determine if an incoming payment is still active and pending payment. + +These code snippets return the state and details of a specific incoming payment, if found. + +## Before you begin + + + +## Get the state of an incoming payment + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/resource-server/operations/get-incoming-payment) diff --git a/docs/src/content/docs/snippets/incoming-list.mdx b/docs/src/content/docs/snippets/incoming-list.mdx new file mode 100644 index 00000000..376d30fa --- /dev/null +++ b/docs/src/content/docs/snippets/incoming-list.mdx @@ -0,0 +1,50 @@ +--- +title: List incoming payments +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +After one or more incoming payments have been created on a payment pointer, an authorized client can look up active and pending incoming payments on that payment pointer. + +These code snippets retrieve the first ten incoming payments on the given payment pointer. + +## Before you begin + + + +## List all incoming payments on a payment pointer + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/resource-server/operations/list-incoming-payments) diff --git a/docs/src/content/docs/snippets/outgoing-create.mdx b/docs/src/content/docs/snippets/outgoing-create.mdx new file mode 100644 index 00000000..052e0cff --- /dev/null +++ b/docs/src/content/docs/snippets/outgoing-create.mdx @@ -0,0 +1,50 @@ +--- +title: Create an outgoing payment +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +After a quote is accepted and the authorized client obtains the requisite grant from the payer’s authorization server, the client can create an outgoing payment resource against the payer’s payment pointer. + +These code snippets create an outgoing payment to a given payment pointer. The amount of the outgoing payment is based on the amounts in the associated quote. + +## Before you begin + + + +## Create an outgoing payment resource + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/resource-server/operations/create-outgoing-payment) diff --git a/docs/src/content/docs/snippets/outgoing-get.mdx b/docs/src/content/docs/snippets/outgoing-get.mdx new file mode 100644 index 00000000..196d526d --- /dev/null +++ b/docs/src/content/docs/snippets/outgoing-get.mdx @@ -0,0 +1,50 @@ +--- +title: Get an outgoing payment +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +An authorized client can look up the state of an outgoing payment on a payment pointer. This is useful when a client must determine if an outgoing payment is still active and pending payment. + +These code snippets return the state and details of a specific outgoing payment, if found. + +## Before you begin + + + +## Get the state of an outgoing payment + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/resource-server/operations/get-outgoing-payment) diff --git a/docs/src/content/docs/snippets/outgoing-list.mdx b/docs/src/content/docs/snippets/outgoing-list.mdx new file mode 100644 index 00000000..26d31afc --- /dev/null +++ b/docs/src/content/docs/snippets/outgoing-list.mdx @@ -0,0 +1,50 @@ +--- +title: List outgoing payments +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +After one or more outgoing payments have been created on a payment pointer, an authorized client can look up active and pending outgoing payments on that payment pointer. + +These code snippets retrieve the first ten outgoing payments on the given payment pointer. + +## Before you begin + + + +## List all outgoing payments on a payment pointer + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/resource-server/operations/list-outgoing-payments) diff --git a/docs/src/content/docs/snippets/pp-get-info.mdx b/docs/src/content/docs/snippets/pp-get-info.mdx new file mode 100644 index 00000000..da31c4b2 --- /dev/null +++ b/docs/src/content/docs/snippets/pp-get-info.mdx @@ -0,0 +1,50 @@ +--- +title: Get a payment pointer's information +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +For a client to request a grant from an authorization server, the client must verify the validity of a payment pointer and get the auth server’s URL. + +These code snippets enable an authenticated or unauthenticated client to verify a payment pointer, get the basic information required to construct a new transaction, and discover the auth server’s URL. + +## Before you begin + + + +## Retrieve a payment pointer's public information + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/resource-server/operations/get-wallet-address) diff --git a/docs/src/content/docs/snippets/pp-get-keys.mdx b/docs/src/content/docs/snippets/pp-get-keys.mdx new file mode 100644 index 00000000..11c0a811 --- /dev/null +++ b/docs/src/content/docs/snippets/pp-get-keys.mdx @@ -0,0 +1,52 @@ +--- +title: Get keys bound to a payment pointer +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +While most Open Payments code snippets are intended for clients, getting the keys bound to a payment pointer is primarily a function of account servicing entities. + +When an authorization server receives a signed grant request, the auth server makes a call to acquire the keys. When a client makes a request to a resource server, the resource server calls the auth server to ensure the signature of the request corresponds to the public JWK of the payment pointer. + +These code snippets get the keys associated with a specified payment pointer. + +## Before you begin + + + +## Retrieve a payment pointer's public keys + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/resource-server/operations/get-wallet-address-keys) diff --git a/docs/src/content/docs/snippets/quote-create.mdx b/docs/src/content/docs/snippets/quote-create.mdx new file mode 100644 index 00000000..828d373a --- /dev/null +++ b/docs/src/content/docs/snippets/quote-create.mdx @@ -0,0 +1,50 @@ +--- +title: Create a quote +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +A quote is a commitment from an account servicing entity to deliver a particular amount to a payee when sending a particular amount from a payer. Once an authorized client obtains the requisite grant from the payer’s authorization server, the client can create a quote resource against the payer’s payment pointer. The quote indicates how much it will cost the payer to proceed with the transaction. + +These code snippets create a quote with a fixed receive amount of $10 USD, meaning the payee (recipient) should receive $10 USD after any applicable fees. The debit amount, which is the amount to be deducted from the payer’s account, is also $10 USD, indicating there are no fees associated with this quote. + +## Before you begin + + + +## Create a fixed-send amount quote + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/resource-server/operations/create-quote) diff --git a/docs/src/content/docs/snippets/quote-get.mdx b/docs/src/content/docs/snippets/quote-get.mdx new file mode 100644 index 00000000..a2a4800a --- /dev/null +++ b/docs/src/content/docs/snippets/quote-get.mdx @@ -0,0 +1,52 @@ +--- +title: Get a quote +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +A quote is a commitment from an account servicing entity to deliver a particular amount to a payee when sending a particular amount from a payer. The quote is only valid for a limited time. + +An authorized client can get a quote to check the quote’s state (e.g., is the quote valid or expired), as well as other payment details, such as the total amount that should be received by the payee and the total amount that should be sent by the payer. + +These code snippets return the state and details of a specific quote, if found. + +## Before you begin + + + +## Get the state of a quote + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/resource-server/operations/get-quote) diff --git a/docs/src/content/docs/snippets/template.mdx b/docs/src/content/docs/snippets/template.mdx new file mode 100644 index 00000000..43679300 --- /dev/null +++ b/docs/src/content/docs/snippets/template.mdx @@ -0,0 +1,49 @@ +--- +title: Change this title +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +

+ Overview paragraph(s) +

+ +## Before you begin + + + +## H2 + + + + + +```html + +``` + + + + + + +Delete the contents of this disclosure and replace it with a link to the raw source +file like so: + +```html + +``` + + + +## References + +- [Link to concept page(s)]() +- [API specification]() diff --git a/docs/src/content/docs/snippets/token-revoke.mdx b/docs/src/content/docs/snippets/token-revoke.mdx new file mode 100644 index 00000000..d7e5b342 --- /dev/null +++ b/docs/src/content/docs/snippets/token-revoke.mdx @@ -0,0 +1,50 @@ +--- +title: Revoke an access token +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +Revoking an access token consists of the authorization server invalidating the token for all purposes. If, for example, a user indicates to a client that they no longer want the client to have access to something, the client can request the associated token be revoked. + +These code snippets enable the client to call a management endpoint to revoke the specified access token. + +## Before you begin + + + +## Revoke an access token + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/auth-server/operations/delete-token) diff --git a/docs/src/content/docs/snippets/token-rotate.mdx b/docs/src/content/docs/snippets/token-rotate.mdx new file mode 100644 index 00000000..f8b84dd8 --- /dev/null +++ b/docs/src/content/docs/snippets/token-rotate.mdx @@ -0,0 +1,52 @@ +--- +title: Rotate an access token +--- + +import { Disclosure, CodeBlock } from '@interledger/docs-design-system' +import { Tabs, TabItem } from '@astrojs/starlight/components' +import FullSnippet from '/src/components/FullSnippet.astro' +import ChunkedSnippet from '/src/components/ChunkedSnippet.astro' +import Global from '/src/partials/global-prerequisites.mdx' +import Ts from '/src/partials/ts-prerequisites.mdx' + +Rotating an access token consists of the authorization server issuing a new token in place of the existing token, with the same rights and properties as the original token. If, for example, an access token expires, an authorized client can request the token be rotated. + +All access tokens in Open Payments have a 10-minute lifespan by default. This includes new access tokens issued as a result of a rotate request. + +These code snippets enable the client to call a management endpoint to rotate the specified access token. + +## Before you begin + + + +## Rotate an access token + + + + + + + + + + + + + + + + + + +## References + +- [API specification](/apis/auth-server/operations/post-token) diff --git a/docs/src/content/i18n/.keepme b/docs/src/content/i18n/.keepme new file mode 100644 index 00000000..e69de29b diff --git a/docs/src/drafts/guides/create-interactive-grant.mdx b/docs/src/drafts/guides/create-interactive-grant.mdx new file mode 100644 index 00000000..57dffd41 --- /dev/null +++ b/docs/src/drafts/guides/create-interactive-grant.mdx @@ -0,0 +1,8 @@ +--- +title: Create an interactive grant request +draft: true +--- + +:::caution +This section is WIP +::: diff --git a/docs/src/drafts/guides/make-onetime-payment.mdx b/docs/src/drafts/guides/make-onetime-payment.mdx new file mode 100644 index 00000000..e7a86238 --- /dev/null +++ b/docs/src/drafts/guides/make-onetime-payment.mdx @@ -0,0 +1,8 @@ +--- +title: Make a one-time payment +draft: true +--- + +:::caution +This section is WIP +::: diff --git a/docs/src/drafts/guides/make-recurring-payment.mdx b/docs/src/drafts/guides/make-recurring-payment.mdx new file mode 100644 index 00000000..793dcc41 --- /dev/null +++ b/docs/src/drafts/guides/make-recurring-payment.mdx @@ -0,0 +1,8 @@ +--- +title: Make a recurring payment +draft: true +--- + +:::caution +This section is WIP +::: diff --git a/docs/src/drafts/introduction/op-concepts.mdx b/docs/src/drafts/introduction/op-concepts.mdx new file mode 100644 index 00000000..f34aed95 --- /dev/null +++ b/docs/src/drafts/introduction/op-concepts.mdx @@ -0,0 +1,16 @@ +--- +title: Open Payments concepts +draft: true +--- + +:::caution +This section is WIP +::: + +- Resources/payments + - Incoming + - Quote + - Outgoing +- Wallet addresses - link out +- Payment methods + - ILP diff --git a/docs/src/drafts/resources/glossary.mdx b/docs/src/drafts/resources/glossary.mdx new file mode 100644 index 00000000..a7bd7dea --- /dev/null +++ b/docs/src/drafts/resources/glossary.mdx @@ -0,0 +1,20 @@ +--- +title: Glossary +draft: true +--- + +import { LinkOut } from '@interledger/docs-design-system' + +:::caution +This section is WIP +::: + +## Authorization server (AS) + +## Client + +## Grant Negotiation and Authorization Protocol (GNAP) + +## Open Payments (OP) + +## Resource server (RS) diff --git a/docs/src/overrideIntegration.mjs b/docs/src/overrideIntegration.mjs deleted file mode 100644 index db66518a..00000000 --- a/docs/src/overrideIntegration.mjs +++ /dev/null @@ -1,48 +0,0 @@ -import fs from 'fs' -import path from 'path' - -const LOCAL_COMPONENT_DIR = 'src/overrides' - -export default function overrideIntegration() { - return { - name: 'overrides', - hooks: { - 'astro:config:setup'({ updateConfig, config }) { - const components = fs - .readdirSync('./' + LOCAL_COMPONENT_DIR) - .filter((x) => x.endsWith('.astro')) - - updateConfig({ - vite: { - plugins: [ - { - enforce: 'pre', - name: 'override', - async resolveId(source, importer) { - for (const component of components) { - if ( - source.endsWith(component) && - !source.includes(LOCAL_COMPONENT_DIR) && - !source.includes('node_modules') - ) { - if (importer.includes(LOCAL_COMPONENT_DIR)) { - return path.resolve( - './node_modules/@astrojs/starlight/components/' + - component - ) - } else { - return path.resolve( - './' + LOCAL_COMPONENT_DIR + '/' + component - ) - } - } - } - } - } - ] - } - }) - } - } - } -} diff --git a/docs/src/overrides/Search.astro b/docs/src/overrides/Search.astro deleted file mode 100644 index 10e8828e..00000000 --- a/docs/src/overrides/Search.astro +++ /dev/null @@ -1,8 +0,0 @@ ---- -import Search from "@astrojs/starlight/components/Search.astro"; - -const { locale } = Astro.props; ---- -<> - - diff --git a/docs/src/overrides/SocialIcons.astro b/docs/src/overrides/SocialIcons.astro deleted file mode 100644 index 90e5eaea..00000000 --- a/docs/src/overrides/SocialIcons.astro +++ /dev/null @@ -1,6 +0,0 @@ ---- -import SocialIcons from "@astrojs/starlight/components/SocialIcons.astro"; ---- -<> - - diff --git a/docs/src/overrides/ThemeSelect.astro b/docs/src/overrides/ThemeSelect.astro deleted file mode 100644 index d6323bda..00000000 --- a/docs/src/overrides/ThemeSelect.astro +++ /dev/null @@ -1,8 +0,0 @@ ---- -import ThemeSelect from "@astrojs/starlight/components/ThemeSelect.astro"; - -const { locale } = Astro.props; ---- -<> - - diff --git a/docs/src/partials/global-prerequisites.mdx b/docs/src/partials/global-prerequisites.mdx new file mode 100644 index 00000000..19a4a213 --- /dev/null +++ b/docs/src/partials/global-prerequisites.mdx @@ -0,0 +1,20 @@ +import { Disclosure } from '@interledger/docs-design-system' +import Account from '/src/partials/testnet-account.mdx' +import Wallet from '/src/partials/testnet-wallet-account.mdx' +import Keys from '/src/partials/testnet-wallet-keys.mdx' + + + +Before you begin, we recommend setting yourself up on the Interledger testnet. Doing so provides you with developer keys and test wallets funded with play money. Use the test wallets to make Interledger transactions via the Open Payments API. + + + + + + + + + + + + diff --git a/docs/src/partials/testnet-account.mdx b/docs/src/partials/testnet-account.mdx new file mode 100644 index 00000000..6f11d792 --- /dev/null +++ b/docs/src/partials/testnet-account.mdx @@ -0,0 +1,17 @@ +import { LinkOut } from '@interledger/docs-design-system' + +You can create an Interledger testnet wallet account via https://rafiki.money. + +1. Click **Create an account** at the bottom right of the screen. +2. Enter your e-mail address, a password, confirm the password and click the arrowhead.
Create account at rafiki.money +3. Go to your inbox and look for an e-mail sent by tech@interledger.org with the subject "[Rafiki.Money] Verify your account" and click **Confirm my email address.**
Confirm email address +4. Click **Login to your account** at the email verification screen.
Log in with new account at rafiki.money +5. Log in with your credentials. +6. Enter your First and Last name on the Complete KYC screen and click **Get Wallet Account.**
Get wallet account at rafiki.money +7. Click **Verify your identity** on the pop-up window.
Identity verification at rafiki.money +8. Click **Verify Account** at the Complete KYC screen.
Verify account at rafiki.money +9. Click **Go to your account overview** on the pop-up window.
Account overview dashboard on rafiki.money + +You're now ready to create a wallet and add money to it! + +

diff --git a/docs/src/partials/testnet-wallet-account.mdx b/docs/src/partials/testnet-wallet-account.mdx new file mode 100644 index 00000000..d4222f10 --- /dev/null +++ b/docs/src/partials/testnet-wallet-account.mdx @@ -0,0 +1,14 @@ +import { LinkOut } from '@interledger/docs-design-system' + +1. Log in to your Interledger testnet account at https://rafiki.money that you previously created. +2. Click **New Account.**
Set up new account at rafiki.money +3. Enter a name for the account, choose an asset code from the drop-down menu and click **Create account.**
Enter name and create account on rafiki.money +4. Click **View Account.**
Click to view account created on rafiki.money +5. Click **Add payment pointer.**
Add a payment pointer for the new account on rafiki.money +6. Enter a Payment Pointer name and a Public name and then click **Create.**
Create payment pointer on rafiki.money +7. Click **Add money.**
Add money to payment pointer on rafiki.money +8. Enter an amount and then click **Add money.**
Enter amount and add money to the payment pointer on rafiki.money + +Congratulations, you now have a funded wallet on the Interledger testnet! + +

diff --git a/docs/src/partials/testnet-wallet-keys.mdx b/docs/src/partials/testnet-wallet-keys.mdx new file mode 100644 index 00000000..60920195 --- /dev/null +++ b/docs/src/partials/testnet-wallet-keys.mdx @@ -0,0 +1,8 @@ +import { LinkOut } from '@interledger/docs-design-system' + +1. Access the Interledger testnet. +2. Select **Settings > Developer Keys**. +3. Expand the drop-down menu for your account.
Expanded account showing payment pointer and Generate public & private key button +4. Click **Generate public & private key**. Your key ID and public key appear on the site. A private key file, `private.key` automatically downloads to your machine. Expanded account showing key ID, option to show public key, and button to revoke public/private keys + +You can now use your public and private keys, key ID, and payment pointer to initialize an authenticated Open Payments client. diff --git a/docs/src/partials/ts-prerequisites.mdx b/docs/src/partials/ts-prerequisites.mdx new file mode 100644 index 00000000..3bb6784f --- /dev/null +++ b/docs/src/partials/ts-prerequisites.mdx @@ -0,0 +1,9 @@ +import { LinkOut } from '@interledger/docs-design-system' + +#### Prerequisites + +- Node 18 +- A package manager such as NPM or PNPM +- + Open Payments SDK + diff --git a/docs/src/styles/openpayments.css b/docs/src/styles/openpayments.css index a6865320..fdc09cae 100644 --- a/docs/src/styles/openpayments.css +++ b/docs/src/styles/openpayments.css @@ -1,9 +1,6 @@ -/* Site title styling */ -.site-title { - font-size: larger; - font-weight: normal; - color: var(--sl-color-text); - gap: var(--space-xs); +/* Site logo on dark mode */ +[data-theme='dark'] .logo-text { + fill: white; } /* Splash page styling */ @@ -11,6 +8,11 @@ text-decoration: none; } +/* Weird issues with long code comments not breaking */ +.codeblock { + max-width: 48rem; +} + /* OpenAPI specification styling */ div.panel { background-color: var(--sl-color-gray-7); @@ -74,3 +76,8 @@ div > span.type { .description details { border-inline-start-color: var(--sl-color-gray-5); } + +/* To remove after re-upgrade of Starlight */ +.site-title { + gap: var(--space-xs); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3092f904..62cf07b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,33 +53,31 @@ importers: docs: dependencies: - '@astrojs/react': - specifier: ^3.0.2 - version: 3.0.2(@types/react-dom@18.2.7)(@types/react@18.2.22)(react-dom@18.2.0)(react@18.2.0)(vite@4.4.9) '@astrojs/starlight': - specifier: 0.10.1 - version: 0.10.1(astro@3.1.1) + specifier: ^0.11.2 + version: 0.11.2(astro@3.3.4) '@interledger/docs-design-system': - specifier: ^0.0.12 - version: 0.0.12 + specifier: ^0.1.1 + version: 0.1.1 astro: - specifier: 3.1.1 - version: 3.1.1 - react: - specifier: ^18.2.0 - version: 18.2.0 - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) + specifier: 3.3.4 + version: 3.3.4(@types/node@18.15.3)(typescript@4.9.5) + remark-mermaidjs: + specifier: ^6.0.0 + version: 6.0.0 sharp: specifier: ^0.32.6 version: 0.32.6 shiki: - specifier: 0.14.4 - version: 0.14.4 + specifier: 0.14.5 + version: 0.14.5 starlight-openapi: - specifier: ^0.2.0 - version: 0.2.0(@astrojs/starlight@0.10.1)(astro@3.1.1)(openapi-types@12.1.0) + specifier: ^0.3.1 + version: 0.3.1(@astrojs/markdown-remark@3.3.0)(@astrojs/starlight@0.11.2)(astro@3.3.4)(openapi-types@12.1.0) + devDependencies: + prettier: + specifier: 3.0.3 + version: 3.0.3 packages/http-signature-utils: dependencies: @@ -228,17 +226,17 @@ packages: resolution: {integrity: sha512-Mp+qrNhly+27bL/Zq8lGeUY+YrdoU0eDfIlAeGIPrzt0PnI/jGpvPUdCaugv4zbCrDkOUScFfcbeEiYumrdJnw==} dev: false - /@astrojs/internal-helpers@0.2.0: - resolution: {integrity: sha512-NQ4ppp1CM0HNkKbJNM4saVSfmUYzGlRalF6wx7F6T/MYHYSWGuojY89/oFTy4t8VlOGUCUijlsVNNeziWaUo5g==} + /@astrojs/internal-helpers@0.2.1: + resolution: {integrity: sha512-06DD2ZnItMwUnH81LBLco3tWjcZ1lGU9rLCCBaeUCGYe9cI0wKyY2W3kDyoW1I6GmcWgt1fu+D1CTvz+FIKf8A==} dev: false - /@astrojs/markdown-remark@3.2.0(astro@3.1.1): + /@astrojs/markdown-remark@3.2.0(astro@3.3.4): resolution: {integrity: sha512-jigyLfefUZPKgVmmraCkVpdUuFH1R3SrpgQO13axsgwLDBgkggaQpNR5Ag4O9PDualeBtbdt30aYSfvnBKx9Hg==} peerDependencies: astro: ^3.1.0 dependencies: '@astrojs/prism': 3.0.0 - astro: 3.1.1 + astro: 3.3.4(@types/node@18.15.3)(typescript@4.9.5) github-slugger: 2.0.0 import-meta-resolve: 3.0.0 mdast-util-definitions: 6.0.0 @@ -248,7 +246,7 @@ packages: remark-parse: 10.0.2 remark-rehype: 10.1.0 remark-smartypants: 2.0.0 - shiki: 0.14.4 + shiki: 0.14.5 unified: 10.1.2 unist-util-visit: 4.1.2 vfile: 5.3.7 @@ -256,16 +254,40 @@ packages: - supports-color dev: false - /@astrojs/mdx@1.1.0(astro@3.1.1): + /@astrojs/markdown-remark@3.3.0(astro@3.3.4): + resolution: {integrity: sha512-ezFzEiZygc/ASe2Eul9v1yrTbNGqSbR348UGNXQ4Dtkx8MYRwfiBfmPm6VnEdfIGkW+bi5qIUReKfc7mPVUkIg==} + peerDependencies: + astro: ^3.3.0 + dependencies: + '@astrojs/prism': 3.0.0 + astro: 3.3.4(@types/node@18.15.3)(typescript@4.9.5) + github-slugger: 2.0.0 + import-meta-resolve: 3.0.0 + mdast-util-definitions: 6.0.0 + rehype-raw: 6.1.1 + rehype-stringify: 9.0.4 + remark-gfm: 3.0.1 + remark-parse: 10.0.2 + remark-rehype: 10.1.0 + remark-smartypants: 2.0.0 + shikiji: 0.6.10 + unified: 10.1.2 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@astrojs/mdx@1.1.0(astro@3.3.4): resolution: {integrity: sha512-rmLZBw3CUCkp+5blBJloV2EqJGRaJTraJygWMfCvrLcCA3vzhwzACnVQKdUDlts8EEr6V6+HXYVqi46AVEfobg==} engines: {node: '>=18.14.1'} peerDependencies: astro: ^3.1.0 dependencies: - '@astrojs/markdown-remark': 3.2.0(astro@3.1.1) + '@astrojs/markdown-remark': 3.2.0(astro@3.3.4) '@mdx-js/mdx': 2.3.0 acorn: 8.10.0 - astro: 3.1.1 + astro: 3.3.4(@types/node@18.15.3)(typescript@4.9.5) es-module-lexer: 1.3.1 estree-util-visit: 1.2.1 github-slugger: 2.0.0 @@ -289,26 +311,6 @@ packages: prismjs: 1.29.0 dev: false - /@astrojs/react@3.0.2(@types/react-dom@18.2.7)(@types/react@18.2.22)(react-dom@18.2.0)(react@18.2.0)(vite@4.4.9): - resolution: {integrity: sha512-aooNIuQxTg+IWGMZPuIEwBeBi4/TCPCMsr3714zuLjAjukVd5ZrX/bCNxJqDWU4HNwUm4XFU1OhcEvYOHa5uMQ==} - engines: {node: '>=18.14.1'} - peerDependencies: - '@types/react': ^17.0.50 || ^18.0.21 - '@types/react-dom': ^17.0.17 || ^18.0.6 - react: ^17.0.2 || ^18.0.0 - react-dom: ^17.0.2 || ^18.0.0 - dependencies: - '@types/react': 18.2.22 - '@types/react-dom': 18.2.7 - '@vitejs/plugin-react': 4.0.4(vite@4.4.9) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - ultrahtml: 1.5.2 - transitivePeerDependencies: - - supports-color - - vite - dev: false - /@astrojs/sitemap@3.0.0: resolution: {integrity: sha512-qm7npHuUW4q3OOmulqhJ1g69jEQu0Sdc6P8NbOzqIoosj/L+3v4i8dtKBnp6n1UQ4Sx8H8Vdi3Z/On7i9/ZJhw==} dependencies: @@ -316,18 +318,18 @@ packages: zod: 3.21.1 dev: false - /@astrojs/starlight@0.10.1(astro@3.1.1): - resolution: {integrity: sha512-2Li88ysd2ZD5p6MzmhGuL8JDd5tEWylUNGgTIWFqWhov64KmBKB2JrS07GQ1zkpV3FXF6IXm34v+lKU3sxe/Rg==} + /@astrojs/starlight@0.11.2(astro@3.3.4): + resolution: {integrity: sha512-bwKYgU70SP1AItFJqdQ1k+cC9cVEvQ849+9pg5Ms3PF1BlN/f0H3bj6SPqRkZnNEwYGREqjbtempJRTnpTaJnA==} peerDependencies: - astro: ^3.0.0 + astro: ^3.2.0 dependencies: - '@astrojs/mdx': 1.1.0(astro@3.1.1) + '@astrojs/mdx': 1.1.0(astro@3.3.4) '@astrojs/sitemap': 3.0.0 '@pagefind/default-ui': 1.0.3 '@types/mdast': 3.0.12 - astro: 3.1.1 + astro: 3.3.4(@types/node@18.15.3)(typescript@4.9.5) bcp-47: 2.1.0 - execa: 7.2.0 + execa: 8.0.1 hast-util-select: 5.0.5 hastscript: 7.2.0 pagefind: 1.0.3 @@ -341,8 +343,8 @@ packages: - supports-color dev: false - /@astrojs/telemetry@3.0.1: - resolution: {integrity: sha512-7zJMuikRDQ0LLLivteu0+y4pqdgznrChFiRrY3qmKlOEkLWD1T3u1a5M970lvpErP7Vgh4P298JBPjv8LTj+sw==} + /@astrojs/telemetry@3.0.4: + resolution: {integrity: sha512-A+0c7k/Xy293xx6odsYZuXiaHO0PL+bnDoXOc47sGDF5ffIKdKQGRPFl2NMlCF4L0NqN4Ynbgnaip+pPF0s7pQ==} engines: {node: '>=18.14.1'} dependencies: ci-info: 3.8.0 @@ -351,7 +353,6 @@ packages: dset: 3.1.2 is-docker: 3.0.0 is-wsl: 3.0.0 - undici: 5.24.0 which-pm-runs: 1.1.0 transitivePeerDependencies: - supports-color @@ -824,26 +825,6 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.20): - resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.20): - resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - /@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.22.20): resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==} engines: {node: '>=6.9.0'} @@ -939,6 +920,10 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true + /@braintree/sanitize-url@6.0.4: + resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} + dev: false + /@changesets/apply-release-plan@6.1.3: resolution: {integrity: sha512-ECDNeoc3nfeAe1jqJb5aFQX7CqzQhD2klXRez2JDb/aVpGUbX673HgKrnrgJRuQR/9f2TtLoYIzrGB9qwD77mg==} dependencies: @@ -954,7 +939,7 @@ packages: outdent: 0.5.0 prettier: 2.8.5 resolve-from: 5.0.0 - semver: 5.7.2 + semver: 5.7.1 dev: true /@changesets/assemble-release-plan@5.2.3: @@ -965,7 +950,7 @@ packages: '@changesets/get-dependents-graph': 1.3.5 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 - semver: 5.7.2 + semver: 5.7.1 dev: true /@changesets/changelog-git@0.1.14: @@ -1007,7 +992,7 @@ packages: p-limit: 2.3.0 preferred-pm: 3.0.3 resolve-from: 5.0.0 - semver: 5.7.2 + semver: 5.7.1 spawndamnit: 2.0.0 term-size: 2.2.1 tty-table: 4.2.1 @@ -1038,7 +1023,7 @@ packages: '@manypkg/get-packages': 1.1.3 chalk: 2.4.2 fs-extra: 7.0.1 - semver: 5.7.2 + semver: 5.7.1 dev: true /@changesets/get-release-plan@3.0.16: @@ -1731,6 +1716,12 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@fortawesome/fontawesome-free@6.4.2: + resolution: {integrity: sha512-m5cPn3e2+FDCOgi1mz0RexTUvvQibBebOUlUlW0+YrMjDTPkiJ6VTKukA1GRsvRw+12KyJndNjj0O4AgTxm2Pg==} + engines: {node: '>=6'} + requiresBuild: true + dev: false + /@humanwhocodes/config-array@0.11.8: resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} engines: {node: '>=10.10.0'} @@ -1756,10 +1747,8 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@interledger/docs-design-system@0.0.12: - resolution: {integrity: sha512-1TimDemLFV1Ere6lvW/DtHGqtZLEtGsOUwHqbsEq3VnXLRb/3Rk9qJpgy/kJ/8kAIqG63K+0Z38Y97kIwz4fvQ==} - dependencies: - react: 18.2.0 + /@interledger/docs-design-system@0.1.1: + resolution: {integrity: sha512-hbp6YrS348c2VlpbLOj0oaPKrg+8nMU0a/xjnCQ3KruTFnqtJJPXr2CM9V17oYI4CLTcEh6mvP3AHpldXOmTHQ==} dev: false /@istanbuljs/load-nyc-config@1.1.0: @@ -2428,6 +2417,20 @@ packages: '@types/node': 18.15.3 dev: true + /@types/d3-scale-chromatic@3.0.1: + resolution: {integrity: sha512-Ob7OrwiTeQXY/WBBbRHGZBOn6rH1h7y3jjpTSKYqDEeqFjktql6k2XSgNwLrLDmAsXhEn8P9NHDY4VTuo0ZY1w==} + dev: false + + /@types/d3-scale@4.0.6: + resolution: {integrity: sha512-lo3oMLSiqsQUovv8j15X4BNEDOsnHuGjeVg7GRbAuB2PUa1prK5BNSOu6xixgNf3nqxPl4I1BqJWrPvFGlQoGQ==} + dependencies: + '@types/d3-time': 3.0.2 + dev: false + + /@types/d3-time@3.0.2: + resolution: {integrity: sha512-kbdRXTmUgNfw5OTE3KZnFQn6XdIc4QGroN5UixgdrXATmYsdlPQS6pEut9tVlIojtzuFD4txs/L+Rq41AHtLpg==} + dev: false + /@types/debug@4.1.8: resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} dependencies: @@ -2473,6 +2476,12 @@ packages: '@types/unist': 2.0.8 dev: false + /@types/hast@3.0.1: + resolution: {integrity: sha512-hs/iBJx2aydugBQx5ETV3ZgeSS0oIreQrFJ4bjBl0XvM4wAmDjFEALY7p0rTSLt2eL+ibjRAAs9dTPiCLtmbqQ==} + dependencies: + '@types/unist': 3.0.0 + dev: false + /@types/http-assert@1.5.3: resolution: {integrity: sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==} dev: true @@ -2513,10 +2522,6 @@ packages: /@types/json-schema@7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} - /@types/json5@0.0.30: - resolution: {integrity: sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA==} - dev: false - /@types/keygrip@1.0.2: resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} dev: true @@ -2606,10 +2611,6 @@ packages: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} dev: true - /@types/prop-types@15.7.6: - resolution: {integrity: sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg==} - dev: false - /@types/qs@6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} dev: true @@ -2618,34 +2619,12 @@ packages: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: true - /@types/react-dom@18.2.7: - resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} - dependencies: - '@types/react': 18.2.22 - dev: false - - /@types/react@18.2.22: - resolution: {integrity: sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA==} - dependencies: - '@types/prop-types': 15.7.6 - '@types/scheduler': 0.16.3 - csstype: 3.1.2 - dev: false - - /@types/resolve@1.20.2: - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - dev: false - /@types/sax@1.2.4: resolution: {integrity: sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==} dependencies: '@types/node': 18.15.3 dev: false - /@types/scheduler@0.16.3: - resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} - dev: false - /@types/semver@6.2.3: resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} dev: true @@ -2831,19 +2810,8 @@ packages: eslint-visitor-keys: 3.3.0 dev: true - /@vitejs/plugin-react@4.0.4(vite@4.4.9): - resolution: {integrity: sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 - dependencies: - '@babel/core': 7.22.20 - '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.20) - '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.20) - react-refresh: 0.14.0 - vite: 4.4.9 - transitivePeerDependencies: - - supports-color + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: false /JSONStream@1.3.5: @@ -3056,23 +3024,15 @@ packages: hasBin: true dev: false - /astro-remote@0.2.4: - resolution: {integrity: sha512-iMFOuEVaLPWixNhx4acQc7h9ODMsLElb8itVpyREC/xPsUVf+124Nt80LIdFGV93lmYhIiFu2yf87cdsOxoubg==} - dependencies: - entities: 4.5.0 - marked: 4.3.0 - ultrahtml: 0.1.3 - dev: false - - /astro@3.1.1: - resolution: {integrity: sha512-KLtzCcLiQEsoWHJO0vQ5QZ/9/80P3cUuBeIkl87YezRkzs3Am0kuzfeGLumb6OOcrR2W0AZGlVlS0ub+q/yiaA==} + /astro@3.3.4(@types/node@18.15.3)(typescript@4.9.5): + resolution: {integrity: sha512-1yy1p8/QpACpToK2bYFxbbPug7+HeUW+IGvkIss2KQDv4pwDk19UbfQrS8aMHtW3nvR7PpBYL/H/Dprcqxy40A==} engines: {node: '>=18.14.1', npm: '>=6.14.0'} hasBin: true dependencies: '@astrojs/compiler': 2.1.0 - '@astrojs/internal-helpers': 0.2.0 - '@astrojs/markdown-remark': 3.2.0(astro@3.1.1) - '@astrojs/telemetry': 3.0.1 + '@astrojs/internal-helpers': 0.2.1 + '@astrojs/markdown-remark': 3.3.0(astro@3.3.4) + '@astrojs/telemetry': 3.0.4 '@babel/core': 7.22.20 '@babel/generator': 7.22.15 '@babel/parser': 7.22.16 @@ -3088,6 +3048,7 @@ packages: common-ancestor-path: 1.0.1 cookie: 0.5.0 debug: 4.3.4 + deterministic-object-hash: 1.3.1 devalue: 4.3.2 diff: 5.1.0 es-module-lexer: 1.3.1 @@ -3113,14 +3074,13 @@ packages: resolve: 1.22.6 semver: 7.5.4 server-destroy: 1.0.1 - shiki: 0.14.4 + shikiji: 0.6.10 string-width: 6.1.0 strip-ansi: 7.1.0 - tsconfig-resolver: 3.0.1 - undici: 5.24.0 + tsconfck: 3.0.0(typescript@4.9.5) unist-util-visit: 4.1.2 vfile: 5.3.7 - vite: 4.4.9 + vite: 4.4.9(@types/node@18.15.3) vitefu: 0.2.4(vite@4.4.9) which-pm: 2.1.1 yargs-parser: 21.1.1 @@ -3136,6 +3096,7 @@ packages: - sugarss - supports-color - terser + - typescript dev: false /asynckit@0.4.0: @@ -3377,13 +3338,6 @@ packages: ieee754: 1.2.1 dev: false - /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} - dependencies: - streamsearch: 1.1.0 - dev: false - /cache-content-type@1.0.1: resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} engines: {node: '>= 6.0.0'} @@ -3615,6 +3569,11 @@ packages: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: false + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: false + /common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} dev: false @@ -3691,6 +3650,18 @@ packages: keygrip: 1.1.0 dev: false + /cose-base@1.0.3: + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + dependencies: + layout-base: 1.0.2 + dev: false + + /cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + dependencies: + layout-base: 2.0.1 + dev: false + /cosmiconfig-typescript-loader@4.3.0(@types/node@18.15.3)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@4.9.5): resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} @@ -3740,10 +3711,6 @@ packages: resolution: {integrity: sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==} dev: false - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - dev: false - /csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} dev: true @@ -3766,11 +3733,319 @@ packages: stream-transform: 2.1.3 dev: true + /cytoscape-cose-bilkent@4.1.0(cytoscape@3.26.0): + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + peerDependencies: + cytoscape: ^3.2.0 + dependencies: + cose-base: 1.0.3 + cytoscape: 3.26.0 + dev: false + + /cytoscape-fcose@2.2.0(cytoscape@3.26.0): + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + peerDependencies: + cytoscape: ^3.2.0 + dependencies: + cose-base: 2.2.0 + cytoscape: 3.26.0 + dev: false + + /cytoscape@3.26.0: + resolution: {integrity: sha512-IV+crL+KBcrCnVVUCZW+zRRRFUZQcrtdOPXki+o4CFUWLdAEYvuZLcBSJC9EBK++suamERKzeY7roq2hdovV3w==} + engines: {node: '>=0.10'} + dependencies: + heap: 0.2.7 + lodash: 4.17.21 + dev: false + + /d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + dependencies: + internmap: 1.0.1 + dev: false + + /d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + dependencies: + internmap: 2.0.3 + dev: false + + /d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + dev: false + + /d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + dev: false + + /d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + dependencies: + d3-path: 3.1.0 + dev: false + + /d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + dev: false + + /d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + dev: false + + /d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + dependencies: + delaunator: 5.0.0 + dev: false + + /d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + dev: false + + /d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + dev: false + + /d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + dev: false + + /d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + dev: false + + /d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + dependencies: + d3-dsv: 3.0.1 + dev: false + + /d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + dev: false + + /d3-format@3.1.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + engines: {node: '>=12'} + dev: false + + /d3-geo@3.1.0: + resolution: {integrity: sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + dev: false + + /d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + dev: false + + /d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + dev: false + + /d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + dev: false + + /d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + dev: false + + /d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + dev: false + + /d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + dev: false + + /d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + dev: false + + /d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + dev: false + + /d3-scale-chromatic@3.0.0: + resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + dev: false + + /d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.0 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + dev: false + + /d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + dev: false + + /d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + dependencies: + d3-path: 1.0.9 + dev: false + + /d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + dependencies: + d3-path: 3.1.0 + dev: false + + /d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + dependencies: + d3-time: 3.1.0 + dev: false + + /d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + dev: false + + /d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + dev: false + + /d3-transition@3.0.1(d3-selection@3.0.0): + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + dev: false + + /d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + dev: false + + /d3@7.8.5: + resolution: {integrity: sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.0 + d3-geo: 3.1.0 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.0.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + dev: false + + /dagre-d3-es@7.0.10: + resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} + dependencies: + d3: 7.8.5 + lodash-es: 4.17.21 + dev: false + /dargs@7.0.0: resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} engines: {node: '>=8'} dev: true + /dayjs@1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + dev: false + /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -3866,6 +4141,12 @@ packages: object-keys: 1.1.1 dev: true + /delaunator@5.0.0: + resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==} + dependencies: + robust-predicates: 3.0.2 + dev: false + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -3909,10 +4190,20 @@ packages: engines: {node: '>=8'} dev: true + /deterministic-object-hash@1.3.1: + resolution: {integrity: sha512-kQDIieBUreEgY+akq0N7o4FzZCr27dPG1xr3wq267vPwDlSXQ3UMcBXHqTGUBaM/5WDS1jwTYjxRhUzHeuiAvw==} + dev: false + /devalue@4.3.2: resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} dev: false + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dependencies: + dequal: 2.0.3 + dev: false + /diff-sequences@29.4.3: resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3951,6 +4242,10 @@ packages: esutils: 2.0.3 dev: true + /dompurify@3.0.6: + resolution: {integrity: sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==} + dev: false + /dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -3985,6 +4280,10 @@ packages: resolution: {integrity: sha512-GIZ620hDK4YmIqAWkscG4W6RwY6gOx1y5J6f4JUQwctiJrqH2oxZYU4mXHi35oV32tr630UcepBzSBGJ/WYcZA==} dev: false + /elkjs@0.8.2: + resolution: {integrity: sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==} + dev: false + /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} @@ -4371,21 +4670,6 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - dev: false - /execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -4657,6 +4941,7 @@ packages: /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + dev: true /get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} @@ -4826,6 +5111,34 @@ packages: dependencies: function-bind: 1.1.1 + /hast-util-from-dom@5.0.0: + resolution: {integrity: sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==} + dependencies: + '@types/hast': 3.0.1 + hastscript: 8.0.0 + web-namespaces: 2.0.1 + dev: false + + /hast-util-from-html-isomorphic@2.0.0: + resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + dependencies: + '@types/hast': 3.0.1 + hast-util-from-dom: 5.0.0 + hast-util-from-html: 2.0.1 + unist-util-remove-position: 5.0.0 + dev: false + + /hast-util-from-html@2.0.1: + resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} + dependencies: + '@types/hast': 3.0.1 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.1 + parse5: 7.1.2 + vfile: 6.0.1 + vfile-message: 4.0.2 + dev: false + /hast-util-from-parse5@7.1.2: resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} dependencies: @@ -4838,6 +5151,19 @@ packages: web-namespaces: 2.0.1 dev: false + /hast-util-from-parse5@8.0.1: + resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} + dependencies: + '@types/hast': 3.0.1 + '@types/unist': 3.0.0 + devlop: 1.1.0 + hastscript: 8.0.0 + property-information: 6.3.0 + vfile: 6.0.1 + vfile-location: 5.0.2 + web-namespaces: 2.0.1 + dev: false + /hast-util-has-property@2.0.1: resolution: {integrity: sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg==} dev: false @@ -4848,6 +5174,12 @@ packages: '@types/hast': 2.3.6 dev: false + /hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + dependencies: + '@types/hast': 3.0.1 + dev: false + /hast-util-raw@7.2.3: resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} dependencies: @@ -4864,6 +5196,24 @@ packages: zwitch: 2.0.4 dev: false + /hast-util-raw@9.0.1: + resolution: {integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==} + dependencies: + '@types/hast': 3.0.1 + '@types/unist': 3.0.0 + '@ungap/structured-clone': 1.2.0 + hast-util-from-parse5: 8.0.1 + hast-util-to-parse5: 8.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.0.2 + parse5: 7.1.2 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + dev: false + /hast-util-select@5.0.5: resolution: {integrity: sha512-QQhWMhgTFRhCaQdgTKzZ5g31GLQ9qRb1hZtDPMqQaOhpLBziWcshUS0uCR5IJ0U1jrK/mxg35fmcq+Dp/Cy2Aw==} dependencies: @@ -4922,6 +5272,23 @@ packages: zwitch: 2.0.4 dev: false + /hast-util-to-html@9.0.0: + resolution: {integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==} + dependencies: + '@types/hast': 3.0.1 + '@types/unist': 3.0.0 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-raw: 9.0.1 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.0.2 + property-information: 6.3.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.3 + zwitch: 2.0.4 + dev: false + /hast-util-to-parse5@7.1.0: resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} dependencies: @@ -4933,6 +5300,18 @@ packages: zwitch: 2.0.4 dev: false + /hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + dependencies: + '@types/hast': 3.0.1 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 6.3.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + dev: false + /hast-util-to-string@2.0.0: resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==} dependencies: @@ -4943,6 +5322,12 @@ packages: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} dev: false + /hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + dependencies: + '@types/hast': 3.0.1 + dev: false + /hastscript@7.2.0: resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} dependencies: @@ -4953,6 +5338,20 @@ packages: space-separated-tokens: 2.0.2 dev: false + /hastscript@8.0.0: + resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + dependencies: + '@types/hast': 3.0.1 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 6.3.0 + space-separated-tokens: 2.0.2 + dev: false + + /heap@0.2.7: + resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} + dev: false + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -4983,6 +5382,10 @@ packages: resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} dev: false + /html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + dev: false + /http-assert@1.5.0: resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} engines: {node: '>= 0.8'} @@ -5025,11 +5428,6 @@ packages: engines: {node: '>=10.17.0'} dev: true - /human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - dev: false - /human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -5047,6 +5445,13 @@ packages: dependencies: safer-buffer: 2.1.2 + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + 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 @@ -5113,6 +5518,15 @@ packages: side-channel: 1.0.4 dev: true + /internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + dev: false + + /internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + dev: false + /is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} dev: false @@ -5968,6 +6382,10 @@ packages: tsscmp: 1.0.6 dev: false + /khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + dev: false + /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -6023,6 +6441,14 @@ packages: - supports-color dev: false + /layout-base@1.0.2: + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + dev: false + + /layout-base@2.0.1: + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + dev: false + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -6060,6 +6486,10 @@ packages: dependencies: p-locate: 5.0.0 + /lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: false + /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true @@ -6105,7 +6535,6 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true /log-symbols@5.1.0: resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} @@ -6119,13 +6548,6 @@ packages: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} dev: false - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: false - /lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: @@ -6187,12 +6609,6 @@ packages: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} dev: false - /marked@4.3.0: - resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} - engines: {node: '>= 12'} - hasBin: true - dev: false - /mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} dependencies: @@ -6382,6 +6798,19 @@ packages: unist-util-visit: 4.1.2 dev: false + /mdast-util-to-hast@13.0.2: + resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==} + dependencies: + '@types/hast': 3.0.1 + '@types/mdast': 4.0.0 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + dev: false + /mdast-util-to-markdown@1.5.0: resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} dependencies: @@ -6468,6 +6897,43 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + /mermaid-isomorphic@2.1.1: + resolution: {integrity: sha512-iShQaYYfGYakKs6fbwVjaTAaTVYm02aIvq8QZJFZMEJ18it2YMhW7QF23jLc1SgXHfVLbeWVoQ27jar2X8KP9g==} + dependencies: + '@fortawesome/fontawesome-free': 6.4.2 + mermaid: 10.6.0 + playwright-core: 1.39.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mermaid@10.6.0: + resolution: {integrity: sha512-Hcti+Q2NiWnb2ZCijSX89Bn2i7TCUwosBdIn/d+u63Sz7y40XU6EKMctT4UX4qZuZGfKGZpfOeim2/KTrdR7aQ==} + dependencies: + '@braintree/sanitize-url': 6.0.4 + '@types/d3-scale': 4.0.6 + '@types/d3-scale-chromatic': 3.0.1 + cytoscape: 3.26.0 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.26.0) + cytoscape-fcose: 2.2.0(cytoscape@3.26.0) + d3: 7.8.5 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.10 + dayjs: 1.11.10 + dompurify: 3.0.6 + elkjs: 0.8.2 + khroma: 2.1.0 + lodash-es: 4.17.21 + mdast-util-from-markdown: 1.3.1 + non-layered-tidy-tree-layout: 2.0.2 + stylis: 4.3.0 + ts-dedent: 2.2.0 + uuid: 9.0.0 + web-worker: 1.2.0 + transitivePeerDependencies: + - supports-color + dev: false + /methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} @@ -6701,6 +7167,13 @@ packages: micromark-util-types: 1.1.0 dev: false + /micromark-util-character@2.0.1: + resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==} + dependencies: + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + /micromark-util-chunked@1.1.0: resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} dependencies: @@ -6741,6 +7214,10 @@ packages: resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} dev: false + /micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + dev: false + /micromark-util-events-to-acorn@1.2.3: resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} dependencies: @@ -6778,6 +7255,14 @@ packages: micromark-util-symbol: 1.1.0 dev: false + /micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + dependencies: + micromark-util-character: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 + dev: false + /micromark-util-subtokenize@1.1.0: resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} dependencies: @@ -6791,10 +7276,18 @@ packages: resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} dev: false + /micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + dev: false + /micromark-util-types@1.1.0: resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} dev: false + /micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + dev: false + /micromark@3.2.0: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: @@ -7014,12 +7507,16 @@ packages: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} dev: false + /non-layered-tidy-tree-layout@2.0.2: + resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} + dev: false + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 resolve: 1.22.1 - semver: 5.7.2 + semver: 5.7.1 validate-npm-package-license: 3.0.4 dev: true @@ -7308,6 +7805,12 @@ packages: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: false + /parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + dependencies: + entities: 4.5.0 + dev: false + /parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -7400,6 +7903,12 @@ packages: dependencies: find-up: 4.1.0 + /playwright-core@1.39.0: + resolution: {integrity: sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==} + engines: {node: '>=16'} + hasBin: true + dev: false + /postcss@8.4.30: resolution: {integrity: sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==} engines: {node: ^10 || ^12 || >=14} @@ -7459,6 +7968,12 @@ packages: hasBin: true dev: true + /prettier@3.0.3: + resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + engines: {node: '>=14'} + hasBin: true + dev: true + /pretty-format@29.5.0: resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -7567,32 +8082,10 @@ packages: strip-json-comments: 2.0.1 dev: false - /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 - dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 - dev: false - /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true - /react-refresh@0.14.0: - resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} - engines: {node: '>=0.10.0'} - dev: false - - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - dev: false - /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -7736,6 +8229,19 @@ packages: - supports-color dev: false + /remark-mermaidjs@6.0.0: + resolution: {integrity: sha512-U7nJ8oJGhLPHfMvlmE+8bw57qp++hEygwSdANOHGmqg3V4uGUz8nnOwa1oWf6kwOrG7jf9gXllD+rWvf5mHzBw==} + dependencies: + '@types/mdast': 4.0.0 + hast-util-from-html-isomorphic: 2.0.0 + mermaid-isomorphic: 2.1.1 + unified: 11.0.3 + unist-util-visit-parents: 6.0.1 + vfile: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: false + /remark-parse@10.0.2: resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} dependencies: @@ -7885,6 +8391,10 @@ packages: glob: 7.2.3 dev: true + /robust-predicates@3.0.2: + resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + dev: false + /rollup@3.29.2: resolution: {integrity: sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -7898,6 +8408,10 @@ packages: dependencies: queue-microtask: 1.2.3 + /rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + dev: false + /sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -7928,12 +8442,6 @@ packages: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} dev: false - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - dependencies: - loose-envify: 1.4.0 - dev: false - /section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -7942,8 +8450,8 @@ packages: kind-of: 6.0.3 dev: false - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + /semver@5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true dev: true @@ -8015,8 +8523,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /shiki@0.14.4: - resolution: {integrity: sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==} + /shiki@0.14.5: + resolution: {integrity: sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==} dependencies: ansi-sequence-parser: 1.1.1 jsonc-parser: 3.2.0 @@ -8024,6 +8532,12 @@ packages: vscode-textmate: 8.0.0 dev: false + /shikiji@0.6.10: + resolution: {integrity: sha512-WE+A5Y2ntM5hL3iJQujk97qr5Uj7PSIRXpQfrZ6h+JWPXZ8KBEDhFXc4lqNriaRq1WGOVPUT83XMOzmHiH3W8A==} + dependencies: + hast-util-to-html: 9.0.0 + dev: false + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -8179,20 +8693,21 @@ packages: escape-string-regexp: 2.0.0 dev: true - /starlight-openapi@0.2.0(@astrojs/starlight@0.10.1)(astro@3.1.1)(openapi-types@12.1.0): - resolution: {integrity: sha512-enYXvUs416AOUKFaY3He4stqoxIpWWyeyQCAYLQC7Ge+ovk6W3NZekQDqWvwLELp9rjKpz4RCKuHEJLk0YXRUA==} + /starlight-openapi@0.3.1(@astrojs/markdown-remark@3.3.0)(@astrojs/starlight@0.11.2)(astro@3.3.4)(openapi-types@12.1.0): + resolution: {integrity: sha512-meGeXB+nTgB+hGGaRdaJfqhkCpr9kMjcg0AZmo78gi2OejzIU4Cb8liw/F/BOUwG/GkW0oaKEML0VYgjzZ/3+Q==} engines: {node: '>=18.14.1'} peerDependencies: - '@astrojs/starlight': '>=0.9.0' - astro: '>=3.0.0' + '@astrojs/starlight': '>=0.11.0' + astro: '>=3.2.0' dependencies: - '@astrojs/starlight': 0.10.1(astro@3.1.1) + '@astrojs/starlight': 0.11.2(astro@3.3.4) + '@astropub/md': '@gitpkg.now.sh/astro-community/md/packages/md?124d0f2f4301836d94dfcd5ae77c8f03bbb20c1c(@astrojs/markdown-remark@3.3.0)' '@readme/openapi-parser': 2.5.0(openapi-types@12.1.0) - astro: 3.1.1 - astro-remote: 0.2.4 + astro: 3.3.4(@types/node@18.15.3)(typescript@4.9.5) github-slugger: 2.0.0 kleur: 4.1.5 transitivePeerDependencies: + - '@astrojs/markdown-remark' - openapi-types dev: false @@ -8222,11 +8737,6 @@ packages: mixme: 0.5.9 dev: true - /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: false - /streamx@2.15.1: resolution: {integrity: sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==} dependencies: @@ -8330,6 +8840,7 @@ packages: /strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} + dev: true /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} @@ -8367,6 +8878,10 @@ packages: inline-style-parser: 0.1.1 dev: false + /stylis@4.3.0: + resolution: {integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==} + dev: false + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -8520,6 +9035,11 @@ packages: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} dev: false + /ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + dev: false + /ts-log@2.2.5: resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==} dev: false @@ -8584,15 +9104,17 @@ packages: yn: 3.1.1 dev: true - /tsconfig-resolver@3.0.1: - resolution: {integrity: sha512-ZHqlstlQF449v8glscGRXzL6l2dZvASPCdXJRWG4gHEZlUVx2Jtmr+a2zeVG4LCsKhDXKRj5R3h0C/98UcVAQg==} + /tsconfck@3.0.0(typescript@4.9.5): + resolution: {integrity: sha512-w3wnsIrJNi7avf4Zb0VjOoodoO0woEqGgZGQm+LHH9przdUI+XDKsWAXwxHA1DaRTjeuZNcregSzr7RaA8zG9A==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@types/json5': 0.0.30 - '@types/resolve': 1.20.2 - json5: 2.2.3 - resolve: 1.22.6 - strip-bom: 4.0.0 - type-fest: 0.13.1 + typescript: 4.9.5 dev: false /tsconfig@7.0.0: @@ -8658,6 +9180,7 @@ packages: /type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} + dev: true /type-fest@0.18.1: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} @@ -8708,15 +9231,6 @@ packages: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true - dev: true - - /ultrahtml@0.1.3: - resolution: {integrity: sha512-P24ulZdT9UKyQuKA1IApdAZ+F9lwruGvmKb4pG3+sMvR3CjN0pjawPnxuSABHQFB+XqnB35TVXzJPOBYjCv6Kw==} - dev: false - - /ultrahtml@1.5.2: - resolution: {integrity: sha512-qh4mBffhlkiXwDAOxvSGxhL0QEQsTbnP9BozOK3OYPEGvPvdWzvAUaXNtUSMdNsKDtuyjEbyVUPFZ52SSLhLqw==} - dev: false /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -8727,13 +9241,6 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undici@5.24.0: - resolution: {integrity: sha512-OKlckxBjFl0oXxcj9FU6oB8fDAaiRUq+D8jrFWGmOfI/gIyjk/IeS75LMzgYKUaeHzLUcYvf9bbJGSrUwTfwwQ==} - engines: {node: '>=14.0'} - dependencies: - busboy: 1.6.0 - dev: false - /unherit@3.0.1: resolution: {integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==} dev: false @@ -8750,6 +9257,18 @@ packages: vfile: 5.3.7 dev: false + /unified@11.0.3: + resolution: {integrity: sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==} + dependencies: + '@types/unist': 3.0.0 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.1.0 + vfile: 6.0.1 + dev: false + /unist-util-generated@2.0.1: resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} dev: false @@ -8785,6 +9304,12 @@ packages: '@types/unist': 2.0.8 dev: false + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + dependencies: + '@types/unist': 3.0.0 + dev: false + /unist-util-remove-position@4.0.2: resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} dependencies: @@ -8792,6 +9317,13 @@ packages: unist-util-visit: 4.1.2 dev: false + /unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + dependencies: + '@types/unist': 3.0.0 + unist-util-visit: 5.0.0 + dev: false + /unist-util-remove@3.1.1: resolution: {integrity: sha512-kfCqZK5YVY5yEa89tvpl7KnBBHu2c6CzMkqHUrlOqaRgGOMp0sMvwWOVrbAtj03KhovQB7i96Gda72v/EFE0vw==} dependencies: @@ -8806,6 +9338,12 @@ packages: '@types/unist': 2.0.8 dev: false + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + dependencies: + '@types/unist': 3.0.0 + dev: false + /unist-util-visit-children@2.0.2: resolution: {integrity: sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==} dependencies: @@ -8929,6 +9467,13 @@ packages: vfile: 5.3.7 dev: false + /vfile-location@5.0.2: + resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} + dependencies: + '@types/unist': 3.0.0 + vfile: 6.0.1 + dev: false + /vfile-message@3.1.4: resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} dependencies: @@ -8936,6 +9481,13 @@ packages: unist-util-stringify-position: 3.0.3 dev: false + /vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + dependencies: + '@types/unist': 3.0.0 + unist-util-stringify-position: 4.0.0 + dev: false + /vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} dependencies: @@ -8945,7 +9497,15 @@ packages: vfile-message: 3.1.4 dev: false - /vite@4.4.9: + /vfile@6.0.1: + resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + dependencies: + '@types/unist': 3.0.0 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + dev: false + + /vite@4.4.9(@types/node@18.15.3): resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -8973,6 +9533,7 @@ packages: terser: optional: true dependencies: + '@types/node': 18.15.3 esbuild: 0.18.20 postcss: 8.4.30 rollup: 3.29.2 @@ -8988,7 +9549,7 @@ packages: vite: optional: true dependencies: - vite: 4.4.9 + vite: 4.4.9(@types/node@18.15.3) dev: false /vscode-oniguruma@1.7.0: @@ -9015,6 +9576,10 @@ packages: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} dev: false + /web-worker@1.2.0: + resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==} + dev: false + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true @@ -9233,3 +9798,14 @@ packages: /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false + + '@gitpkg.now.sh/astro-community/md/packages/md?124d0f2f4301836d94dfcd5ae77c8f03bbb20c1c(@astrojs/markdown-remark@3.3.0)': + resolution: {tarball: https://gitpkg.now.sh/astro-community/md/packages/md?124d0f2f4301836d94dfcd5ae77c8f03bbb20c1c} + id: '@gitpkg.now.sh/astro-community/md/packages/md?124d0f2f4301836d94dfcd5ae77c8f03bbb20c1c' + name: '@astropub/md' + version: 0.3.0 + peerDependencies: + '@astrojs/markdown-remark': ^3 + dependencies: + '@astrojs/markdown-remark': 3.3.0(astro@3.3.4) + dev: false