From b9abe98d196ab5798a55df61e3aec51612676585 Mon Sep 17 00:00:00 2001 From: Jennifer Hasegawa <5481259+jhaaaa@users.noreply.github.com> Date: Fri, 1 Nov 2024 16:21:56 -0700 Subject: [PATCH 1/3] first pass --- docs/pages/inboxes/build-inbox.md | 172 +++++++++++++++++++++++ docs/pages/inboxes/create-client.md | 68 +++++++++ docs/pages/inboxes/push-notifications.md | 99 +++++++++++++ docs/pages/inboxes/support-consent.md | 58 ++++++++ docs/pages/index.mdx | 10 +- vocs.config.tsx | 24 +++- 6 files changed, 428 insertions(+), 3 deletions(-) create mode 100644 docs/pages/inboxes/build-inbox.md create mode 100644 docs/pages/inboxes/create-client.md create mode 100644 docs/pages/inboxes/push-notifications.md create mode 100644 docs/pages/inboxes/support-consent.md diff --git a/docs/pages/inboxes/build-inbox.md b/docs/pages/inboxes/build-inbox.md new file mode 100644 index 0000000..67f22cd --- /dev/null +++ b/docs/pages/inboxes/build-inbox.md @@ -0,0 +1,172 @@ +## Build the inbox + +:::warning[🚧 XMTP V3 Alpha] + +The XMTP V3 SDKs are in **alpha** status and ready for you to start experimenting with. +However, we do **not** recommend using alpha software in production apps. Software in this status will change as we add features and iterate based on feedback. + + +XMTP V3 includes breaking changes from V2, most of which will be mitigated by the SDKs. Guidance about the migration path from V2 to V3 will be delivered in forthcoming XMTP V3 release notes. + +Join the [XMTP Devs 💪 group chat](https://converse.xyz/group-invite/e-KZyw77m-7sjUmEk5lgu) in Converse to keep up with the latest updates. + +::: + +### Check if an address is reachable on V3 + +The first step to creating a conversation is to verify that participants’ addresses are reachable on XMTP V3. The `canGroupMessage` method checks each address’ compatibility with V3, returning a response indicating whether each address can receive V3 messages. + +Once you have the verified V3 addresses, you can create a new conversation, whether it is a group chat or direct message (DM). + +```tsx [React Native] +// Request +const canMessageV3 = await alix.canGroupMessage([ + '0xcaroAddress', + '0xboAddress', + '0xV2OnlyAddress', + '0xBadAddress', +]) + +// Response +{ + "0xcaroAddress": true, + "0xboAddress": true, + "0xV2OnlyAddress": false, + "0xBadAddress": false, +} +``` + +:::tip + +Regarding how to handle addresses that aren’t reachable on V3, the migration documentation in the XMTP V3 release notes will outline the next steps for addressing compatibility issues, ensuring smooth onboarding to V3 for all participants. +::: + +### Create a new group chat + +Once you have the verified V3 addresses, create a new group chat: + +```tsx [React Native] +// New Group +const group = await alix.conversations.newGroup([bo.address, caro.address]) + +// New Group with Metadata +const group = await alix.conversations.newGroup([bo.address, caro.address], { + name: 'The Group Name', + imageUrlSquare: 'www.groupImage.com', + description: 'The description of the group', + permissionLevel: 'admin_only' // 'all_members' | 'admin_only' + }) +``` + +### Create a new DM + +Once you have the verified V3 addresses, create a new DM: + +```tsx [React Native] +const dm = await alix.conversations.findOrCreateDm(bo.address) +``` + +*Replaces V2 functionality `client.conversations.newConversation(address)`* + +### List new group chats or DMs + +Get any new group chats or DMs from the network: + +```tsx [React Native] +await alix.conversations.syncConversations() +``` + +*Does not refetch existing conversations* + +### List new messages + +Get new messages from the network for all existing group chats and DMs in the local database: + +```tsx [React Native] +await alix.conversations.syncAllConversations() +``` + +*Does not refetch existing messages or messages for inactive group chat conversations* + +### List existing group chats or DMs + +Get a list of existing group chats or DMs in the local database, ordered either by `createdAt` date or `lastMessage`. + +```tsx [React Native] +// List ConversationContainer items by createdAt date +await alix.conversations.listConversations() + +// List ConversationContainer items by lastMessage but only return specified fields +await alix.conversations.listConversations({ + members: false, + consentState: false, + description: false, + creatorInboxId: false, + addedByInboxId: false, + isActive: false, + lastMessage: true, + }, + 'lastMessage') // 'createdAt' | 'lastMessage' +``` + +*Replaces V2 functionality `client.conversations.list()`* + +### Stream all group chats and DMs + +Listens to the network for new group chats and DMs. Whenever a new conversation starts, it triggers the provided callback function with a [`ConversationContainer` object](#conversationcontainer-interface). This allows the client to immediately respond to any new group chats or DMs initiated by other users. + +```tsx [React Native] + await alix.conversations.streamConversations( + async (conversation: ConversationContainer) => { + // Received a conversation + } + ) +``` + +*Replaces V2 `client.conversations.stream()`* + +### Stream all group chat and DM messages + +Listens to the network for new messages within all active group chats and DMs. Whenever a new message is sent to any of these conversations, the callback is triggered with a `DecodedMessage` object. This keeps the inbox up to date by streaming in messages as they arrive. + +```tsx [React Native] + await alix.conversations.streamAllConversationMessages( + async (message: DecodedMessage) => { + // Received a message + } + ) +``` + +*Replaces V2 `client.conversations.streamAllMessages()`* + +### Conversation helper methods + +Use these helper methods to quickly locate and access specific conversations—whether by ID, topic, group ID, or DM address—returning the appropriate ConversationContainer, group, or DM object. + +```tsx [React Native] +// Returns a ConversationContainer +await alix.conversations.findConversation(conversation.id) +await alix.conversations.findConversationByTopic(conversation.topic) +// Returns a Group +await alix.conversations.findGroup(group.id) +// Returns a DM +await alix.conversations.findDm(bo.address) +``` + +### ConversationContainer interface + +Serves as a unified structure for managing both group chats and DMs. It provides a consistent set of properties and methods to seamlessly handle various conversation types. + +https://github.com/xmtp/xmtp-react-native/blob/main/src/lib/ConversationContainer.ts + +### Group class + +Represents a group chat conversation, providing methods to manage group-specific functionalities such as sending messages, synchronizing state, and handling group membership. + +https://github.com/xmtp/xmtp-react-native/blob/main/src/lib/Group.ts + +### Dm class + +Represents a DM conversation, providing methods to manage one-on-one communications, such as sending messages, synchronizing state, and handling message streams. + +https://github.com/xmtp/xmtp-react-native/blob/main/src/lib/Dm.ts diff --git a/docs/pages/inboxes/create-client.md b/docs/pages/inboxes/create-client.md new file mode 100644 index 0000000..3a3d88a --- /dev/null +++ b/docs/pages/inboxes/create-client.md @@ -0,0 +1,68 @@ +## Create or build a client + +:::warning[🚧 XMTP V3 Alpha] + +The XMTP V3 SDKs are in **alpha** status and ready for you to start experimenting with. +However, we do **not** recommend using alpha software in production apps. Software in this status will change as we add features and iterate based on feedback. + + +XMTP V3 includes breaking changes from V2, most of which will be mitigated by the SDKs. Guidance about the migration path from V2 to V3 will be delivered in forthcoming XMTP V3 release notes. + +Join the [XMTP Devs 💪 group chat](https://converse.xyz/group-invite/e-KZyw77m-7sjUmEk5lgu) in Converse to keep up with the latest updates. + +::: + +### Create an account SigningKey + +This code defines two functions that convert different types of Ethereum accounts—Externally Owned Accounts (EOAs) and Smart Contract Wallets (SCWs)—into a unified `Signer` interface. This ensures that both account types conform to a common interface for message signing and deriving shared secrets as per MLS (Message Layer Security) requirements. + +- For an EOA, the `convertEOAToSigner` function creates a signer that can get the account address and sign messages and has placeholder methods for wallet type, chain ID, and block number. + + ```tsx [React Native] + // Example EOA + export function convertEOAToSigner(eoaAccount: EOAAccount): Signer { + return { + getAddress: async () => eoaAccount.address, + signMessage: async (message: string | Uint8Array) => + eoaAccount.signMessage({ + message: typeof message === 'string' ? message : { raw: message }, + }), + walletType: () => undefined, // Default: 'EOA' + getChainId: () => undefined, + getBlockNumber: () => undefined, + } + } + ``` + +- For an SCW, the `convertSCWToSigner` function similarly creates a signer but includes specific implementations for wallet type and chain ID, and an optional block number computation. + + ```tsx [React Native] + // Example SCW + export function convertSCWToSigner(scwAccount: SCWAccount): Signer { + return { + getAddress: async () => scwAccount.address, + signMessage: async (message: string) => { + const byteArray = await scwAccount.signMessage(message) + return ethers.utils.hexlify(byteArray) // Convert to hex string + }, + walletType: () => 'SCW', + getChainId: async () => 8453, // https://chainlist.org/ + getBlockNumber: async () => undefined, // Optional: will be computed at run + }; + } + ``` + + +### **Create an XMTP client** + +Create an XMTP MLS client that can use the signing capabilities provided by the `SigningKey` parameter. This `SigningKey` links the client to the appropriate EOA or SCW. + +```tsx [React Native] +Client.createV3(SigningKey, { + env: 'production', // 'local' | 'dev' | 'production' + enableV3: true, + dbEncryptionKey: keyBytes, // 32 bytes + }) +``` + +*Should work the same as it does in V2 `Client.create(SigningKey, ClientOptions)`* diff --git a/docs/pages/inboxes/push-notifications.md b/docs/pages/inboxes/push-notifications.md new file mode 100644 index 0000000..9b01d66 --- /dev/null +++ b/docs/pages/inboxes/push-notifications.md @@ -0,0 +1,99 @@ +## Support push notifications + +:::warning[🚧 XMTP V3 Alpha] + +The XMTP V3 SDKs are in **alpha** status and ready for you to start experimenting with. +However, we do **not** recommend using alpha software in production apps. Software in this status will change as we add features and iterate based on feedback. + + +XMTP V3 includes breaking changes from V2, most of which will be mitigated by the SDKs. Guidance about the migration path from V2 to V3 will be delivered in forthcoming XMTP V3 release notes. + +Join the [XMTP Devs 💪 group chat](https://converse.xyz/group-invite/e-KZyw77m-7sjUmEk5lgu) in Converse to keep up with the latest updates. + +::: + +With XMTP, you can enable real-time push notifications to keep users updated on new conversations and messages. + +For best practices, see [Best practices for push notifications](/notifications/notif-best-practices). + +### **Get a Welcome message topic ID** + +Get the topic identifier for a new group chat or DM conversation. This topic ID tells your app where to listen on the network for push notifications about the start of a new group chat or DM. + +```tsx [React Native] +// Request +alix.welcomeTopic() + +// Response +/xmtp/mls/1/w-$installationId/proto +``` + +*Replaces V2 `/xmtp/0/invite-$address/proto`* + +### **Get a V3 message topic ID** + +Get the topic identifier for a group chat or DM conversation that’s already in progress. This topic ID tells your app where to listen on the network for push notifications about any new messages in a specific group chat or DM conversation. + +```tsx [React Native] +// Request +conversation.topic + +// Response +/xmtp/mls/1/g-$conversationId/proto +``` + +*Replaces V2 `/xmtp/0/m-$addresses/proto`* + +### Subscribe to topics + +Subscribe to all relevant topics, allowing your app to monitor for push notifications about both new and ongoing conversations. + +This code sample retrieves all topics associated with `alix`’s conversations, for example, enabling the app to receive push notifications only for conversations in which `alix` is a part of. + +```tsx [React Native] +const conversations = await alix.conversations.listConversations() +const topics = conversations.map((conv: any) => conv.topic) + +await subscribeAll([alix.welcomeTopic(), ...topics]) +``` + +### Receive push notifications + +On receipt of a push notification, decode it: + +```tsx [React Native] +const receivedBytes = Buffer.from(received.message, 'base64').toString('utf-8') +``` + +Then determine whether it’s for a new conversation or an existing one. + +- **If it’s a Welcome message** (`alix.welcomeTopic() == received.topic`), initiate the conversation with `conversationFromWelcome`: + + ```tsx [React Native] + const conversation = await alix.conversations.conversationFromWelcome(receivedBytes) + ``` + +- **If it’s a V3 message**, find the corresponding topic, sync the conversation, and process the new message: + + ```tsx [React Native] + const conversation = await alix.findConversationByTopic(received.topic) + await conversation.sync() + const message = await conversation.processMessage(receivedBytes) + ``` + + +### Run a push notification server + +To implement push notifications in your app, you must run a push notification server. This server acts as an intermediary between the XMTP network and your app’s push notification service, ensuring that users receive timely and relevant notifications. + +**Why is a push notification server required?** + +- **Continuous monitoring**: The XMTP network operates on a decentralized protocol, where messages are exchanged directly between clients. However, for push notifications, your app needs a dedicated server to continuously listen for new messages or events on the XMTP network, even when the user’s device is offline or the app is not running. +- **Message processing**: Upon detecting new messages or events, the server processes them to determine their relevance and formats them appropriately for push notifications. This includes extracting necessary information, such as the sender’s identity and message content, to craft meaningful notifications. +- **Integration with push notification services**: The server interfaces with platform-specific push notification services, like [Apple Push Notification Service](/notifications/build-notifications#understand-apple-entitlements-for-ios-apps) (APNs) for iOS or Firebase Cloud Messaging (FCM) for Android. It sends the processed notifications to these services, which then deliver them to the user’s device. + +To learn more about running a push notification server, see: + +- Go: [Set up a push notification server](/notifications/notif-server) +- Android: [Try push notifications with the Android example XMTP app](/notifications/notifs-android) +- iOS: [Try push notifications with the iOS example XMTP app](/notifications/notifs-ios) diff --git a/docs/pages/inboxes/support-consent.md b/docs/pages/inboxes/support-consent.md new file mode 100644 index 0000000..1d48615 --- /dev/null +++ b/docs/pages/inboxes/support-consent.md @@ -0,0 +1,58 @@ +## Support user consent preferences and spam-free inboxes + +:::warning[🚧 XMTP V3 Alpha] + +The XMTP V3 SDKs are in **alpha** status and ready for you to start experimenting with. +However, we do **not** recommend using alpha software in production apps. Software in this status will change as we add features and iterate based on feedback. + + +XMTP V3 includes breaking changes from V2, most of which will be mitigated by the SDKs. Guidance about the migration path from V2 to V3 will be delivered in forthcoming XMTP V3 release notes. + +Join the [XMTP Devs 💪 group chat](https://converse.xyz/group-invite/e-KZyw77m-7sjUmEk5lgu) in Converse to keep up with the latest updates. + +::: + +In any open and permissionless messaging ecosystem, spam is an inevitable reality, and XMTP is no exception. + +However, with XMTP, you can give your users inboxes that are **spam-free spaces for chosen contacts only** by supporting user consent preferences. + +To learn more, see [Understand how user consent preferences enable spam-free inboxes](/consent/user-consent). + +Use the following methods to provide users with control over their messaging experience, ensuring their inboxes are tailored to their preferences and free from spam. + +### Get new consent records from the network - coming soon + +Get the latest consent records from the network: + +```tsx [React Native] +await alix.syncConsent() +``` + +### Get the consent state of a conversation + +Check the current consent state of a specific conversation: + +```tsx [React Native] +await conversation.consentState() +``` + +*Replaces V2 `client.contact.isGroupAllowed(groupId)`* + +### Update the conversation consent state + +Update the consent state of a conversation to allow or deny messages: + +```tsx [React Native] +await conversation.updateConsent('allowed') // 'allowed' | 'denied' +``` + +*Replaces V2 `client.contact.allowGroups([groupIds])`* + +### Stream consent records in real-time - coming soon + +Listen for real-time updates to consent records: + +```tsx [React Native] +await alix.streamConsent() +``` + diff --git a/docs/pages/index.mdx b/docs/pages/index.mdx index 14d468d..4b3919a 100644 --- a/docs/pages/index.mdx +++ b/docs/pages/index.mdx @@ -33,10 +33,16 @@ import "../styles.css"; description="Build subscriber lists and broadcast notifications to them" icon="🔔" /> + Date: Fri, 1 Nov 2024 19:17:09 -0700 Subject: [PATCH 2/3] v3 docs only approach --- docs/pages/client/create-client.mdx | 896 -------- docs/pages/consent/broadcast.md | 4 +- docs/pages/consent/build-engagement.mdx | 6 +- docs/pages/consent/consent-methods.md | 323 --- docs/pages/consent/consent-quickstarts.md | 18 - docs/pages/consent/filter-spam.mdx | 66 - docs/pages/consent/user-consent.mdx | 75 - docs/pages/content-types/content-types.md | 114 - docs/pages/content-types/custom.md | 647 ------ docs/pages/content-types/reaction.mdx | 259 --- docs/pages/content-types/read-receipt.mdx | 161 -- .../pages/content-types/remote-attachment.mdx | 556 ----- docs/pages/content-types/reply.mdx | 256 --- docs/pages/content-types/transaction-ref.mdx | 161 -- docs/pages/dms/conversations.mdx | 335 --- docs/pages/dms/messages.mdx | 356 --- docs/pages/dms/overview.md | 299 --- docs/pages/dms/streams.mdx | 308 --- docs/pages/dms/troubleshoot.md | 36 - docs/pages/get-started/awesome.md | 43 - .../get-started/developer-quickstart.mdx | 295 --- docs/pages/get-started/examples.mdx | 312 --- docs/pages/get-started/faq.md | 596 ----- docs/pages/get-started/intro.md | 83 - docs/pages/get-started/references.md | 17 - docs/pages/groups/build-group-chat.mdx | 672 ------ docs/pages/groups/group-consent.md | 222 -- docs/pages/groups/group-metadata.md | 99 - docs/pages/groups/group-permissions.md | 439 ---- docs/pages/inboxes/content-types.md | 88 + docs/pages/inboxes/push-notifications.md | 10 +- docs/pages/inboxes/support-consent.md | 134 +- docs/pages/index.mdx | 10 +- .../notifications/build-notifications.md | 175 -- .../notifications/notif-best-practices.mdx | 31 - docs/pages/notifications/notif-server.md | 127 -- docs/pages/notifications/notifs-android.md | 120 - docs/pages/notifications/notifs-ios.md | 51 - docs/pages/open-frames/open-frames.md | 185 -- .../open-frames/subscription-open-frames.md | 103 - .../open-frames/transactional-open-frames.md | 123 - docs/pages/perf-ux/debug-and-test.md | 93 - docs/pages/perf-ux/get-featured.md | 73 - docs/pages/perf-ux/identity-resolution.md | 44 - docs/pages/perf-ux/local-first.md | 32 - docs/pages/perf-ux/optimistic-sending.md | 61 - docs/pages/perf-ux/xmtp-metamask-snap.md | 72 - docs/pages/protocol/portable-inbox.md | 6 +- docs/pages/protocol/signatures.mdx | 2 +- docs/pages/protocol/v2/algorithms-in-use.md | 22 - .../protocol/v2/architectural-overview.md | 229 -- .../v2/invitation-and-message-encryption.md | 70 - .../protocol/v2/key-generation-and-usage.md | 58 - docs/pages/protocol/xmtp-versions.md | 50 - docs/pages/z_archive/changelog.md | 2 +- package-lock.json | 1986 +++++++++-------- vocs.config.tsx | 240 +- yarn.lock | 1743 +++++++-------- 58 files changed, 2156 insertions(+), 11438 deletions(-) delete mode 100644 docs/pages/client/create-client.mdx delete mode 100644 docs/pages/consent/consent-methods.md delete mode 100644 docs/pages/consent/consent-quickstarts.md delete mode 100644 docs/pages/consent/filter-spam.mdx delete mode 100644 docs/pages/consent/user-consent.mdx delete mode 100644 docs/pages/content-types/content-types.md delete mode 100644 docs/pages/content-types/custom.md delete mode 100644 docs/pages/content-types/reaction.mdx delete mode 100644 docs/pages/content-types/read-receipt.mdx delete mode 100644 docs/pages/content-types/remote-attachment.mdx delete mode 100644 docs/pages/content-types/reply.mdx delete mode 100644 docs/pages/content-types/transaction-ref.mdx delete mode 100644 docs/pages/dms/conversations.mdx delete mode 100644 docs/pages/dms/messages.mdx delete mode 100644 docs/pages/dms/overview.md delete mode 100644 docs/pages/dms/streams.mdx delete mode 100644 docs/pages/dms/troubleshoot.md delete mode 100644 docs/pages/get-started/awesome.md delete mode 100644 docs/pages/get-started/developer-quickstart.mdx delete mode 100644 docs/pages/get-started/examples.mdx delete mode 100644 docs/pages/get-started/faq.md delete mode 100644 docs/pages/get-started/intro.md delete mode 100644 docs/pages/get-started/references.md delete mode 100644 docs/pages/groups/build-group-chat.mdx delete mode 100644 docs/pages/groups/group-consent.md delete mode 100644 docs/pages/groups/group-metadata.md delete mode 100644 docs/pages/groups/group-permissions.md create mode 100644 docs/pages/inboxes/content-types.md delete mode 100644 docs/pages/notifications/build-notifications.md delete mode 100644 docs/pages/notifications/notif-best-practices.mdx delete mode 100644 docs/pages/notifications/notif-server.md delete mode 100644 docs/pages/notifications/notifs-android.md delete mode 100644 docs/pages/notifications/notifs-ios.md delete mode 100644 docs/pages/open-frames/open-frames.md delete mode 100644 docs/pages/open-frames/subscription-open-frames.md delete mode 100644 docs/pages/open-frames/transactional-open-frames.md delete mode 100644 docs/pages/perf-ux/debug-and-test.md delete mode 100644 docs/pages/perf-ux/get-featured.md delete mode 100644 docs/pages/perf-ux/identity-resolution.md delete mode 100644 docs/pages/perf-ux/local-first.md delete mode 100644 docs/pages/perf-ux/optimistic-sending.md delete mode 100644 docs/pages/perf-ux/xmtp-metamask-snap.md delete mode 100644 docs/pages/protocol/v2/algorithms-in-use.md delete mode 100644 docs/pages/protocol/v2/architectural-overview.md delete mode 100644 docs/pages/protocol/v2/invitation-and-message-encryption.md delete mode 100644 docs/pages/protocol/v2/key-generation-and-usage.md delete mode 100644 docs/pages/protocol/xmtp-versions.md diff --git a/docs/pages/client/create-client.mdx b/docs/pages/client/create-client.mdx deleted file mode 100644 index 0931697..0000000 --- a/docs/pages/client/create-client.mdx +++ /dev/null @@ -1,896 +0,0 @@ ---- -description: Learn how to create and configure an XMTP client ---- - -# Create and configure an XMTP client - -The XMTP message API revolves around a network client that allows retrieving and sending messages to other network participants. - -## Create a client - -To create an XMTP client, it must be connected to a wallet on startup. You must pass in a connected wallet that implements the Signer interface. This wallet is required for authentication and encryption purposes. - -For more information about wallet signature requests, see [Account signatures](/protocol/signatures). - -Clients created by XMTP v3 SDKs can also support XMTP v2 messages if the wallet is an EOA. At a high-level, XMTP v3 is used to support group chat and XMTP v2 is used to support 1:1 chat. - -In the near future, XMTP v3 will support both group and 1:1 chat with Messaging Layer Security (MLS). Have questions or feedback? Post to the [XMTP Community Forums](https://community.xmtp.org/c/development/58). - -Group chat is currently supported in Kotlin, Swift, React Native, and Node.js. - -In the near future, XMTP v3 will also support group chat for the web. - -For more information about the work being done to support group chat for the web, see this [SQLite, WebAssembly, and Diesel](https://www.youtube.com/watch?v=qnCeXsqqKcY&t=240s) talk in the XMTP Developer Community Call. - -If your mobile app provides group chat, you must explicitly configure your client to enable this functionality by setting the `enableV3` client option to `true`. - -:::tip[Best practice for mobile apps] - -Regardless of whether your mobile app provides group chat, set the `enableV3` client option to `true` to benefit from other aspects of the upgraded XMTP v3 protocol. Enabling v3 doesn't stop your app's support for XMTP v2 functionality. - -::: - -For more information about client options, including how to set your client's network environment, see [client configuration options](#configure-the-client). - -:::code-group - -```ts [JavaScript] -import { Client } from "@xmtp/xmtp-js"; - -// Create the client with a `Signer` from your application -const xmtp = await Client.create(signer, { - env: "production", -}); -``` - -```ts [React] -import { XMTPProvider } from "@xmtp/react-sdk"; -import { useClient } from "@xmtp/react-sdk"; - -// Wrap your app with XMTPProvider -createRoot(document.getElementById("root") as HTMLElement).render( - - - - - -); - -// Inside your component -export const CreateClient: React.FC<{ signer: Signer }> = ({ signer }) => { - const { client, error, isLoading, initialize } = useClient(); - - const handleConnect = useCallback(async () => { - const options = { - persistConversations: false, - env: "production", - }; - await initialize({ keys, options, signer }); - }, [initialize]); - - // ... rest of the component code -}; -``` - -```kotlin [Kotlin] -val client = Client().create( - account = wallet, // wallet that implements SigningKey - options = ClientOptions( - api = ClientOptions.Api(XMTPEnvironment.PRODUCTION, isSecure = true), - enableV3 = true, // Enable group chat support - appContext = context, // Required if enableV3 is true - dbEncryptionKey = ByteArray(32), // Required 32-byte array for database encryption if enableV3 is true - dbDirectory = "mydbdir", // Optional. Specify a database directory. If no directory is specified, the value is set to xmtp_db by default. - ) -) -``` - -```swift [Swift] -import XMTP - -let client = try await Client.create( - account: account, // account that implements SigningKey - options: .init( - api: .init(env: .production, isSecure: true), - enableV3: true, // Enable group chat support - dbEncryptionKey: key, // Required 32-byte array for database encryption if enableV3 is true - dbDirectory: "mydir", // Specify a database directory. If no directory is specified, the value is set to xmtp_db by default. - ) -) -``` - -```tsx [React Native] -import { Client } from "@xmtp/xmtp-react-native"; - -const xmtp = await Client.create(signer, { - env: "production", - enableV3: true, // Enable group chat support - dbEncryptionKey: new Uint8Array(32), // Required: 32-byte array for database encryption - dbDirectory: "mydbdir", // Specify a database directory. If no directory is specified, the value is set to xmtp_db by default. -}); -``` - -```tsx [Node] -import { createWalletClient, http, toBytes } from "viem"; -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; -import { mainnet } from "viem/chains"; -import { Client } from "@xmtp/mls-client"; - -// Create a wallet for signing -const key = generatePrivateKey(); -const account = privateKeyToAccount(key); -const wallet = createWalletClient({ - account, - chain: mainnet, - transport: http(), -}); - -// Create client -const client = Client.create(account.address, { - env: "production", - enableV3: true, // Enable group chat support - dbPath: "path/to/local/db/file.db3", // Specify database path -}); - -// Sign the provided message -const signature = await wallet.signMessage({ - message: client.signatureText ?? "", -}); -const signatureBytes = toBytes(signature); - -// Add the signature to the client -client.addEcdsaSignature(signatureBytes); - -// Register client identity -await client.registerIdentity(); -``` - -::: - -## Saving keys - -You can export the unencrypted key bundle using the static method `getKeys`, save it somewhere secure, and then provide those keys at a later time to initialize a new client using the exported XMTP identity. - -:::code-group - -
-```jsx [JavaScript] -// Get the keys using a valid Signer. Save them somewhere secure. -import { loadKeys, storeKeys } from "./helpers"; -const clientOptions = { - env: "production", -}; - -let keys = loadKeys(address); -if (!keys) { -keys = await Client.getKeys(signer, { -...clientOptions, -// we don't need to publish the contact here since it -// will happen when we create the client later -skipContactPublishing: true, -// we can skip persistence on the keystore for this short-lived -// instance -persistConversations: false, -}); -storeKeys(address, keys); -} -const client = await Client.create(null, { -...clientOptions, -privateKeyOverride: keys, -}); - -```` - -We are using the following helper functions to store and retrieve the keys - -```ts [TypeScript] -// Create a client using keys returned from getKeys -const ENCODING = "binary"; - -export const getEnv = (): "dev" | "production" | "local" => { - return "production"; -}; - -export const buildLocalStorageKey = (walletAddress: string) => - walletAddress ? `xmtp:${getEnv()}:keys:${walletAddress}` : ""; - -export const loadKeys = (walletAddress: string): Uint8Array | null => { - const val = localStorage.getItem(buildLocalStorageKey(walletAddress)); - return val ? Buffer.from(val, ENCODING) : null; -}; - -export const storeKeys = (walletAddress: string, keys: Uint8Array) => { - localStorage.setItem( - buildLocalStorageKey(walletAddress), - Buffer.from(keys).toString(ENCODING), - ); -}; - -export const wipeKeys = (walletAddress: string) => { - // This will clear the conversation cache + the private keys - localStorage.removeItem(buildLocalStorageKey(walletAddress)); -}; -```` - -
- -
-```jsx [JavaScript] -import { Client, useClient } from "@xmtp/react-sdk"; -import type { Signer } from "@xmtp/react-sdk"; - -export const CreateClientWithKeys: React.FC<{ signer: Signer }> = ({ signer }) => { - const { initialize } = useClient(); - -const initXmtpWithKeys = async () => { -const options = { -env: "dev" -}; -const address = await getAddress(signer); -let keys = loadKeys(address); -if (!keys) { -keys = await Client.getKeys(signer, { -...options, -skipContactPublishing: true, -persistConversations: false, -}); -storeKeys(address, keys); -} -await initialize({ keys, options, signer }); -}; - -// initialize client on mount -useEffect(() => { -void initXmtpWithKeys(); -}, []); - -return ( -... -); -}; - -```` - -We are using the following helper functions to store and retrieve the keys - -```ts [TypeScript] -// Create a client using keys returned from getKeys -const ENCODING = "binary"; - -export const getEnv = (): "dev" | "production" | "local" => { - return "production"; -}; - -export const buildLocalStorageKey = (walletAddress: string) => - walletAddress ? `xmtp:${getEnv()}:keys:${walletAddress}` : ""; - -export const loadKeys = (walletAddress: string): Uint8Array | null => { - const val = localStorage.getItem(buildLocalStorageKey(walletAddress)); - return val ? Buffer.from(val, ENCODING) : null; -}; - -export const storeKeys = (walletAddress: string, keys: Uint8Array) => { - localStorage.setItem( - buildLocalStorageKey(walletAddress), - Buffer.from(keys).toString(ENCODING), - ); -}; - -export const wipeKeys = (walletAddress: string) => { - // This will clear the conversation cache + the private keys - localStorage.removeItem(buildLocalStorageKey(walletAddress)); -}; -```` - -
- -
-```kotlin [Kotlin] -// Create the client with a `SigningKey` from your app -val options = - ClientOptions( - api = ClientOptions.Api(env = XMTPEnvironment.PRODUCTION, isSecure = true) - ) -val client = Client().create(account = account, options = options) - -// Get the key bundle -val keys = client.privateKeyBundleV1 - -// Serialize the key bundle and store it somewhere safe -val serializedKeys = PrivateKeyBundleV1Builder.encodeData(v1) - -```` - -Once you have those keys, you can create a new client with `Client().buildFrom()`: - -```kotlin [Kotlin] -val keys = PrivateKeyBundleV1Builder.fromEncodedData(serializedKeys) -val client = Client().buildFrom(bundle = keys, options = options) -```` - -
- -
-```swift [Swift] -// Create the client with a `SigningKey` from your app -let client = try await Client.create( - account: account, options: .init(api: .init(env: .production))) - -// Get the key bundle -let keys = client.privateKeyBundle - -// Serialize the key bundle and store it somewhere safe -let keysData = try keys.serializedData() - -```` - -Once you have those keys, you can create a new client with `Client.from`: - -```swift [Swift] -let keys = try PrivateKeyBundle(serializedData: keysData) -let client = try Client.from(bundle: keys, options: .init(api: .init(env: .production))) -```` - -
- -
-You can export the unencrypted key bundle using the static method `Client.exportKeyBundle`, save it somewhere secure, and then provide those keys at a later time to initialize a new client using the exported XMTP identity. - -```js [JavaScript] -import { Client } from "@xmtp/xmtp-react-native"; -// Get the keys using a valid Signer. Save them somewhere secure. -const keys = await Client.exportKeyBundle(xmtp.address); -//Save the keys -storeKeyBundle(xmtp.address, keys); -//Load the keys -let keys = await loadKeyBundle(address); -// Create a client using keys returned from getKeys -const xmtp = await Client.createFromKeyBundle(keys, clientOptions); -``` - -In this example we are using `AsyncStorage` external library to save the key bundle - -```js [JavaScript] -export const buildLocalStorageKey = (walletAddress) => { - return walletAddress ? `xmtp:${getEnv()}:keys:${walletAddress}` : ""; -}; - -export const loadKeyBundle = async (address) => { - const keyBundle = await AsyncStorage.getItem(buildLocalStorageKey(address)); - return keyBundle; -}; -export const storeKeyBundle = async (address, keyBundle) => { - await AsyncStorage.setItem(buildLocalStorageKey(address), keyBundle); -}; -export const wipeKeyBundle = async (address) => { - await AsyncStorage.removeItem(buildLocalStorageKey(address)); -}; -``` - -The keys returned by `exportKeyBundle` should be treated with the utmost care as compromise of these keys will allow an attacker to impersonate the user on the XMTP network. Ensure these keys are stored somewhere secure and encrypted. - -
- -::: - -## Create a client with a private key - -You can create a client with a private key using a compatible client library. - -:::code-group - -```ts [TypeScript] -import { Client } from "@xmtp/xmtp-js"; - -const privateKey = "your_private_key"; - -//ethers -import { Wallet } from "ethers"; -const signer = new Wallet(); - -//viem -import { privateKeyToAccount } from "viem/accounts"; -const hexPrivateKey = `0x${privateKey}`; -let account = privateKeyToAccount(privateKey); -let signer = createWalletClient({ - account, - chain: mainnet, - transport: http(), -}); - -// Create the client with a `Signer` from your application -const xmtp = await Client.create(signer, { env: "dev" }); -``` - -```tsx [React] -import { useClient } from "@xmtp/react-sdk"; - -const privateKey = "your_private_key"; - -//ethers -import { Wallet } from "ethers"; -const signer = new Wallet(privateKey); - -//viem -import { privateKeyToAccount } from "viem/accounts"; -const hexPrivateKey = `0x${privateKey}`; -let account = privateKeyToAccount(privateKey); -let signer = createWalletClient({ - account, - chain: mainnet, - transport: http(), -}); - -//Using react hooks -const { client, error, isLoading, initialize } = useClient(); -await initialize({ keys, options, signer }); -``` - -```kotlin [Kotlin] -// Create the client with a `SigningKey` from your app -val options = - ClientOptions( - api = ClientOptions.Api(env = XMTPEnvironment.PRODUCTION, isSecure = true) - ) -val client = Client().create(account = account, options = options) -``` - -```swift [Swift] -func dataFromHexString(_ hex: String) -> Data? { - var data = Data(capacity: hex.count / 2) - var buffer = 0 - var index = 0 - for char in hex { - if let value = char.hexDigitValue { - if index % 2 == 0 { - buffer = value << 4 - } else { - buffer |= value - data.append(UInt8(buffer)) - } - index += 1 - } else { - return nil - } - } - return data -} - -let privateKeyString = "your_private_key" -if let privateKeyData = dataFromHexString(privateKeyString) { -let privateKey = try PrivateKey(privateKeyData) -let client = try await Client.create(account: privateKey, options: ClientOptions(api: .init(env: .production))) -``` - -```tsx [React Native] -import { Client } from "@xmtp/xmtp-react-native"; -import { Wallet } from "ethers"; - -const privateKey = "your_key"; -const provider = new ethers.InfuraProvider("mainnet", "your_infura_token"); -const signer = new ethers.Wallet(privateKey, provider); -const xmtp = await Client.create(signer); -``` - -::: - -## Configure the client - -Configure a client's network connection and other options using these client creation parameters: - -Set the `env` client option to `dev` while developing. Set it to `production` before you launch. - -:::code-group - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterDefaultDescription
env`dev` - Connect to the specified XMTP network environment. Valid values include - `dev`, `production`, or `local`. For important details about working - with these environments, see [XMTP production and dev network - environments](#xmtp-network-environments). -
appVersion`undefined` - Add a client app version identifier that's included with API requests. - **Production apps are strongly encouraged to set this value.** -
- For example, you can use the following format: `appVersion: APP_NAME + - '/' + APP_VERSION`. -
- Setting this value provides telemetry that shows which apps are using - the XMTP client SDK. This information can help XMTP developers provide - app support, especially around communicating important SDK updates, - including deprecations and required upgrades. -
apiUrl`undefined` - Manually specify an API URL to use. If specified, value of `env` will be - ignored. -
keystoreProviders - `[StaticKeystoreProvider, NetworkKeystoreProvider, - KeyGeneratorKeystore Provider]` - - Override the default behavior of how the Client creates a Keystore with - a custom provider. This can be used to get the user's private keys from - a different storage mechanism. -
persistConversations`true` - Maintain a cache of previously seen V2 conversations in the storage - provider (defaults to `LocalStorage`). -
skipContactPublishing`false` - Do not publish the user's contact bundle to the network on Client - creation. Designed to be used in cases where the Client session is - short-lived (for example, decrypting a push notification), and where it - is known that a Client instance has been instantiated with this flag set - to false at some point in the past. -
codecs`[TextCodec]`Add codecs to support additional content types.
maxContentSize`100M`Maximum message content size in bytes.
preCreateIdentityCallback`undefined` - `preCreateIdentityCallback` is a function that will be called - immediately before a [Create - Identity](/protocol/signatures#sign-to-create-an-xmtp-identity) wallet - signature is requested from the user. -
preEnableIdentityCallback`undefined` - `preEnableIdentityCallback` is a function that will be called - immediately before an [Enable - Identity](/protocol/signatures#sign-to-enable-an-xmtp-identity) wallet - signature is requested from the user. -
useSnaps`false` - Enabling the `useSnaps` flag will allow the client to attempt to connect - to the "Sign in with XMTP" MetaMask Snap as part of client creation. It - is safe to enable this flag even if you do not know whether the user has - an appropriate MetaMask version enabled. If no compatible version of - MetaMask is found, client creation will proceed as if this flag was set - to `false`. To learn more, see [Build with the - Snap](/perf-ux/xmtp-metamask-snap#as-a-developer-who-wants-my-app-to-use-sign-in-with-xmtp-how-do-i-get-started). -
basePersistence - `InMemoryPersistence` (Node.js) or `LocalStoragePersistence` (browser) - - A persistence provider used by the Keystore to persist its cache of - conversations and metadata. Ignored in cases where the `useSnaps` is - enabled and the user has a Snaps-compatible browser. To learn more, see - [Keystore](https://github.com/xmtp/xmtp-js/blob/962259d7cfbbeb7995208f01eb5c5243c51f0b8e/packages/js-sdk/src/keystore/README.md?plain=1) - and [Pluggable - persistence](https://github.com/xmtp/xmtp-js/releases/tag/v11.0.0). -
apiClientFactory`HttpApiClient` - Override the function used to create an API client for the XMTP network. - If you are running `xmtp-js` on a server, you will want to import - [`@xmtp/grpc-api-client`](https://github.com/xmtp/xmtp-node-js-tools/tree/main/packages/grpc-api-client) - and set this option to `GrpcApiClient.fromOptions` for better - performance and reliability. To learn more, see [Pluggable gRPC API - client](https://github.com/xmtp/xmtp-js/releases/tag/v11.0.0). -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterDefaultDescription
env`dev` - Connect to the specified XMTP network environment. Valid values include - dev, production, or local. For important details about working with - these environments, see [XMTP production and dev network - environments](#xmtp-network-environments). -
appVersion`undefined` - Add a client app version identifier that's included with API requests. -
- For example, you can use the following format: appVersion: APP_NAME + - '/' + APP_VERSION. -
- Setting this value provides telemetry that shows which apps are using - the XMTP client SDK. This information can help XMTP developers provide - app support, especially around communicating important SDK updates, - including deprecations and required upgrades. -
apiUrl`undefined` - Manually specify an API URL to use. If specified, value of env will be - ignored. -
keystoreProviders - `[StaticKeystoreProvider, NetworkKeystoreProvider, - KeyGeneratorKeystoreProvider]` - - Override the default behavior of how the client creates a Keystore with - a custom provider. This can be used to get the user's private keys from - a different storage mechanism. -
persistConversations`true` - Maintain a cache of previously seen V2 conversations in the storage - provider (defaults to LocalStorage). -
skipContactPublishing`false` - Do not publish the user's contact bundle to the network on client - creation. Designed to be used in cases where the client session is - short-lived (for example, decrypting a push notification), and where it - is known that a client instance has been instantiated with this flag set - to false at some point in the past. -
codecs`[TextCodec]`Add codecs to support additional content types.
maxContentSize`100M`Maximum message content size in bytes.
preCreateIdentityCallback`undefined` - preCreateIdentityCallback is a function that will be called immediately - before a [Create Identity wallet - signature](/protocol/signatures#sign-to-create-an-xmtp-identity) is - requested from the user. -
preEnableIdentityCallback`undefined` - preEnableIdentityCallback is a function that will be called immediately - before an [Enable Identity wallet - signature](/protocol/signatures#sign-to-enable-an-xmtp-identity) is - requested from the user. -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterDefaultDescription
env`DEV`Connect to the specified XMTP network environment. Valid values include `DEV`, `.PRODUCTION`, or `LOCAL`. For important details about working with these environments, see [XMTP production and dev network environments](#xmtp-network-environments).
enableV3`false`To support group chat (a feature of XMTP v3), set to `true`. As a best practice, regardless of whether your mobile app provides group chat, set `enableV3` to `true` to benefit from other aspects of the upgraded XMTP v3 protocol. Enabling v3 doesn't stop your app's support for XMTP v2 functionality.
appContextnullRequired if `enableV3` is set to `true`.
dbEncryptionKeynullRequired 32-byte array for database encryption if `enableV3` is `true`. For information about recommended key storage for Kotlin, [Android Keystore system](https://developer.android.com/privacy-and-security/keystore).
dbDirectoryxmtp_dbOptional. Specify a database directory. If no directory is specified, the value is set to `xmtp_db` by default.
appVersion`undefined`Add a client app version identifier that's included with API requests. Production apps are strongly encouraged to set this value.
For example, you can use the following format: `appVersion: APP_NAME + '/' + APP_VERSION`.
Setting this value provides telemetry that shows which apps are using the XMTP client SDK. This information can help XMTP developers provide app support, especially around communicating important SDK updates, including deprecations and required upgrades.
- -Configure `env` - -```kotlin [Kotlin] -// Configure the client to use the `production` network -val options = - ClientOptions( - api = ClientOptions.Api(env = XMTPEnvironment.PRODUCTION, isSecure = true) - ) -val client = Client().create(account = account, options = options) -``` - -**Note**: The `apiUrl`, `keyStoreType`, `codecs`, and `maxContentSize` parameters from the XMTP client SDK for JavaScript (xmtp-js) are not yet supported. - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterDefaultDescription
env`dev`Connect to the specified XMTP network environment. Valid values include `.dev`, `.production`, or `.local`. For important details about working with these environments, see [XMTP production and dev network environments](#xmtp-network-environments).
enableV3`false`To support group chat (a feature of XMTP v3), set to `true`. As a best practice, regardless of whether your app provides group chat, set `enableV3` to `true` to benefit from other aspects of the upgraded XMTP v3 protocol. Enabling v3 doesn't stop your app's support for XMTP v2 functionality.
dbEncryptionKeynullRequired 32-byte array for database encryption if `enableV3` is `true`. For information about recommended key storage for Swift, see [Protecting keys with the Secure Enclave](https://developer.apple.com/documentation/security/protecting-keys-with-the-secure-enclave).
dbDirectoryxmtp_dbOptional. Specify a database directory. If no directory is specified, the value is set to `xmtp_db` by default.
appVersion`undefined`Add a client app version identifier that's included with API requests. Production apps are strongly encouraged to set this value.
For example, you can use the following format: `appVersion: APP_NAME + '/' + APP_VERSION`.
Setting this value provides telemetry that shows which apps are using the XMTP client SDK. This information can help XMTP developers provide app support, especially around communicating important SDK updates, including deprecations and required upgrades.
- -Configure `env` - -```swift [Swift] -// Configure the client to use the `production` network -let clientOptions = ClientOptions(api: .init(env: .production)) -let client = try await Client.create(account: account, options: clientOptions) -``` - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterDefaultDescription
env`dev` - Connect to the specified XMTP network environment. Valid values include - `dev`, `production`, or `local`. For important details about working - with these environments, see [XMTP production and dev network - environments](#xmtp-network-environments). -
enableV3`false`To support group chat (a feature of XMTP v3), set to `true`. As a best practice, regardless of whether your app provides group chat, set `enableV3` to `true` to benefit from other aspects of the upgraded XMTP v3 protocol. Enabling v3 doesn't stop your app's support for XMTP v2 functionality.
dbEncryptionKeynullRequired. For secure key storage in React Native, consider using libraries like `react-native-keychain` or `expo-secure-store`. These provide cross-platform solutions for securely storing sensitive data on both iOS and Android devices.
dbDirectoryxmtp_dbOptional. Specify a database directory. If no directory is specified, the value is set to `xmtp_db` by default.
appVersion`undefined` - Add a client app version identifier that's included with API requests. - **Production apps are strongly encouraged to set this value.** -
- For example, you can use the following format: `appVersion: APP_NAME + - '/' + APP_VERSION`. -
- Setting this value provides telemetry that shows which apps are using - the XMTP client SDK. This information can help XMTP developers provide - app support, especially around communicating important SDK updates, - including deprecations and required upgrades. -
-
- -::: - -## XMTP network environments - -An XMTP identity on the `dev` network is completely distinct from its XMTP identity on the `production` network, as are the messages associated with these identities. - -- `production`: Use this network for production messages. - - - To send and receive messages on the `production` network, you can use the open source Converse web app connected to the `production` network: [https://app.converse.xyz](https://app.converse.xyz). - -- `dev`: Use this network for development. - - - To send and receive messages on the `dev` network, you can use the open source Converse web app connected to the `dev` network: [https://app-preview.converse.xyz](https://app-preview.converse.xyz). - -- `local`: Use this network to have a client communicate with an XMTP node you are running locally. For example, an XMTP node developer can set `env` to `local` to generate client traffic to test a node running locally. diff --git a/docs/pages/consent/broadcast.md b/docs/pages/consent/broadcast.md index 8d836f7..7247757 100644 --- a/docs/pages/consent/broadcast.md +++ b/docs/pages/consent/broadcast.md @@ -5,9 +5,9 @@ Broadcasting with XMTP allows you to send a single message to multiple recipient ## Prerequisites - Wallet is XMTP-enabled -Before sending a broadcast message, [use `canMessage`](/get-started/developer-quickstart#check-if-the-recipient-address-is-xmtp-enabled) to verify that each recipient's wallet is enabled on the XMTP network. Only XMTP-enabled wallets can receive and view messages. +Before sending a broadcast message, [use `canMessage`](https://docs.xmtp.org/get-started/developer-quickstart#check-if-the-recipient-address-is-xmtp-enabled) to verify that each recipient's wallet is enabled on the XMTP network. Only XMTP-enabled wallets can receive and view messages. - User consent -In accordance with data privacy laws, [obtain explicit consent](/consent/user-consent) from users before sending them broadcast messages. +In accordance with data privacy laws, [obtain explicit consent](/inboxes/support-consent) from users before sending them broadcast messages. :::warning Broadcast messages delivered to users who haven't provided explicit consent to receive them are more likely to be treated as spam, which significantly reduces the chances that recipients will see them. diff --git a/docs/pages/consent/build-engagement.mdx b/docs/pages/consent/build-engagement.mdx index 101e7e3..741b3a7 100644 --- a/docs/pages/consent/build-engagement.mdx +++ b/docs/pages/consent/build-engagement.mdx @@ -10,7 +10,7 @@ Here are examples of these features at work in real-world scenarios, delivering ## Engage and reengage your audience with subscriptions -Put a **Subscribe** button built with XMTP on your site, in your app, or anywhere you want to invite people to receive your newsletters, alerts, and any other [content type](/content-types/content-types) that can be delivered in a message. +Put a **Subscribe** button built with XMTP on your site, in your app, or anywhere you want to invite people to receive your newsletters, alerts, and any other [content type](https://docs.xmtp.org/content-types/content-types) that can be delivered in a message. When a user clicks Subscribe, they’re signed up to receive your messages in the inbox associated with their connected wallet address. @@ -76,10 +76,10 @@ Your inbox for the sending wallet address provides access to secure, private, an With these use cases for subscriptions, user consent, and broadcasts in mind, it’s time to build and start fostering quality engagement with your audience through trusted and scalable messaging. - To learn to build a subscribe button with user consent, see [Enable subscriptions using consent proofs](/consent/subscribe). -- To learn more about how user consent works, see [Understand user consent preferences](/consent/user-consent). +- To learn more about how user consent works, see [Understand user consent preferences](/inboxes/support-consent). - To learn how to send broadcast messages, see [Broadcast messages](/consent/broadcast). -Want to explore code in consent, subscribe, and broadcast quickstart repos? See [Quickstart repos for building audience engagement](/consent/consent-quickstarts) +Want to explore code in consent, subscribe, and broadcast quickstart repos? See [Quickstart repos for building audience engagement](#TODO) Prefer to use a ready-made solution? Consider using a third-party service, such as: diff --git a/docs/pages/consent/consent-methods.md b/docs/pages/consent/consent-methods.md deleted file mode 100644 index 8cf2c44..0000000 --- a/docs/pages/consent/consent-methods.md +++ /dev/null @@ -1,323 +0,0 @@ -# Support spam-free inboxes with XMTP user consent methods - -Use the following user consent methods to [support spam-free inboxes](/consent/user-consent) in your app built with XMTP. - -## Deny or allow a contact - -To enable your user to deny or allow a contact, call the following methods. Note that these functions accept lists, so you can do batch requests. - -:::code-group - -```jsx [JavaScript] -// from the client -await client.contacts.allow([address1, address2]); -await client.contacts.deny([address1, address2]); - -// from a conversation -await conversation.allow(); -await conversation.deny(); -``` - -```jsx [React] -import { useConsent } from "@xmtp/react-sdk"; - -function ConsentControl({ conversation }) { - const { allow, deny } = useConsent(); - - const handleAllow = async () => { - await allow([conversation.peerAddress]); - // Additional UI logic or state updates after allowing - }; - - const handleDeny = async () => { - await deny([conversation.peerAddress]); - // Additional UI logic or state updates after denying - }; - - return ( - // ... UI elements that call handleAllow and handleDeny - ); -} -``` - -```kotlin [Kotlin] -client.contacts.allow([wantedConvo.peerAddress, wantedConvo.peerAddress]) -client.contacts.deny([spamConvo.peerAddress, unwantedConvo.peerAddress]) -``` - -```swift [Swift] -try await client.contacts.allow(addresses: [wantedConvo.peerAddress, wantedConvo.peerAddress]) -try await client.contacts.deny(addresses: [spamConvo.peerAddress, unwantedConvo.peerAddress]) -``` - -```tsx [React Native] -await client.contacts.allow([wantedConvo.peerAddress, wantedConvo.peerAddress]); -await client.contacts.deny([spamConvo.peerAddress, unwantedConvo.peerAddress]); -``` - -::: - -## Refresh the consent list - -To ensure that you’re using the latest consent preferences, make sure to refresh the consent list from the network. Perform the refresh just in case the consent preference has changed on a different device, for example. - -`refreshConsentList()` returns the history of all consent entries. - -:::code-group - -```js [JavaScript] -await client.contacts.refreshConsentList(); -``` - -```jsx [React] -import { useEffect } from "react"; -import { useConsent } from "@xmtp/react-sdk"; - -function ConsentList() { - const { refreshConsentList } = useConsent(); - - useEffect(() => { - void refreshConsentList(); - }, []); - - // ... UI rendering -} -``` - -```kotlin [Kotlin] -client.contacts.refreshConsentList() -``` - -```swift [Swift] -try await client.contacts.refreshConsentList() -``` - -```tsx [React Native] -await client.contacts.refreshConsentList(); -``` - -::: - -## Get the consent list - -Load the consent list from a specific time. If no time is specified, it loads the consent list from the last time the refresh was made. - -:::code-group - -```js [JavaScript] -await client.contacts.loadConsentList(/* Optional: lastSyncedDate */); -``` - -```jsx [React] -import { useEffect } from "react"; -import { useConsent } from "@xmtp/react-sdk"; - -function LoadConsentList() { - const { loadConsentList } = useConsent(); - - useEffect(() => { - void (loadConsentList(/* Optional: lastSyncedDate */)); - }, []); - - // ... UI rendering -} -``` - -```kotlin [Kotlin] -client.contacts.consentList -``` - -```swift [Swift] -try await client.contacts.consentList -``` - -```tsx [React Native] -await client.contacts.consentList(); -``` - -::: - -## Check if a contact is denied or allowed - -Call the following methods to check if a contact is denied or allowed. - -:::code-group - -```js [JavaScript] -// from the client -const isAllowed = client.contacts.isAllowed(address); -const isDenied = client.contacts.isDenied(address); - -// from a conversation -const isAllowed = conversation.isAllowed; -const isDenied = conversation.isDenied; -``` - -```jsx [React] -import { useConsent } from "@xmtp/react-sdk"; - -function CheckConsent({ conversation }) { - const { isAllowed, isDenied } = useConsent(); - - useEffect(() => { - const checkConsent = async () => { - const allowed = await isAllowed(conversation.peerAddress); - const blocked = await isDenied(conversation.peerAddress); - // Use `allowed` and `blocked` for UI updates or logic - }; - - checkConsent(); - }, [conversation.peerAddress]); - - // ... UI rendering based on consent status -} -``` - -```kotlin [Kotlin] -client.contacts.isAllowed(wantedConvo.peerAddress) -client.contacts.isDenied(spamConvo.peerAddress) -``` - -```swift [Swift] -await client.contacts.isAllowed(wantedConvo.peerAddress) -await client.contacts.isDenied(spamConvo.peerAddress) -``` - -```tsx [React Native] -await client.contacts.isAllowed(wantedConvo.peerAddress); -await client.contacts.isDenied(spamConvo.peerAddress); -``` - -::: - -## Get a conversation’s consent preference - -When loading a list of conversations, take into account its consent preference. You can get the `consentState` directly from the conversation. - -:::code-group - -```js [JavaScript] -// from the client -const consentState = client.contacts.consentState(peerAddress); - -// from a conversation -const consentState = conversation.consentState; - -// consentState can be 'allowed', 'denied', or 'unknown' -``` - -```jsx [React] -import { useConsent } from "@xmtp/react-sdk"; - -function ConversationConsent({ conversation }) { - const { consentState } = useConsent(); - - const state = consentState(conversation.peerAddress); - // state can be 'allowed', 'denied', or 'unknown' - - // ... UI rendering based on the state -} -``` - -```kotlin [Kotlin] -val state = conversation.consentState() -if (state == ConsentState.DENIED) { - // hide the conversation -} -``` - -```swift [Swift] -let state = await conversation.consentState() -if (state == .denied) { - // hide the conversation -} -``` - -```tsx [React Native] -const state = await conversation.consentState(); -if (state === "denied") { - // hide the conversation -} -``` - -::: - -## Stream the consent list - -This section provides an example of how to stream the consent list. The code snippet below demonstrates how to create a new conversation and then stream the consent list, logging each action to the console. - -:::code-group - -```js [JavaScript] -const aliceStream = await aliceClient.contacts.streamConsentList(); -for await (const action of aliceStream) { - // Each action indicates the address and if it's allowed or denied -} -await aliceStream.return(); -``` - -```jsx [React] -import { useStreamConsentList } from "@xmtp/react-sdk"; - -function ConsentListStreamer() { - const handleAction = (action) => { - console.log("New action received:", action); - // You can update your UI or state based on the action here - }; - - const handleError = (error) => { - console.error("Error in streaming consent list:", error); - // Handle error state in UI - }; - - const { error } = useStreamConsentList(handleAction, handleError); - - return ( -
-

Consent List Stream

- {error &&

Error: {error.message}

} - {/* Additional UI for showing streaming status or actions */} -
- ); -} - -export default ConsentListStreamer; -``` - -```txt [Kotlin] -Code sample coming soon -``` - -```txt [Swift] -Code sample coming soon -``` - -```txt [React Native] -Code sample coming soon -``` - -::: - -## Synchronize user consent preferences - -All apps that use the user consent feature must adhere to the logic described in this section to keep the consent list on the network synchronized with local app user consent preferences, and vice versa. - -:::caution - -Do not update the consent list on the network except in the scenarios described below. - -::: - -Update a consent preference in the consent list on the network in the following scenarios only: - -- A user explicitly denies a contact. For example, the user blocks, unsubscribes from, or disables notifications for the contact. The app should update the consent preference in the consent list to `denied`. - -- A user explicitly allows a contact. For example, the user allows, subscribes to, or enables notifications for the contact. The app should update the consent preference in the consent list to `allowed`. - -- An existing conversation has an `unknown` consent preference, but a legacy consent preference in the local database exists. The app should update the consent preference in the consent list to match the legacy local content preference. - -- An existing conversation has an `unknown` consent preference, but has an existing response from the user. The app should update the consent preference in the consent list to `allowed`. - -The following diagram illustrates the detailed logic for how user consent preferences are set in an app and in the consent list on the XMTP network. - -![](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/consent-state-logic.png) diff --git a/docs/pages/consent/consent-quickstarts.md b/docs/pages/consent/consent-quickstarts.md deleted file mode 100644 index 05f3e47..0000000 --- a/docs/pages/consent/consent-quickstarts.md +++ /dev/null @@ -1,18 +0,0 @@ -# Quickstart repos for building audience engagement with XMTP - -Here are some consent, subscribe, and broadcast quickstart repos to help you get started with building audience engagement solutions: - -- [Add consent to an existing JavaScript app](https://github.com/xmtp/xmtp-quickstart-request-inbox) -Learn how to integrate consent management into an existing JavaScript app. - -- [Add consent to an existing React Native app](https://github.com/xmtp/xmtp-react-native-quickstart-request-inbox) -Learn how to implement consent features in a React Native app. - -- [Build a consent management system](https://github.com/xmtp/allow-list-management.git) -Learn how to create a simple system that enables users to manage their consent preferences. - -- [Build a subscribe-broadcast system](https://github.com/xmtp/subscribe-broadcast) -Learn how to implement a subscribe and broadcast system using XMTP. - -- [Set up a broadcast API backend](https://github.com/xmtp/broadcast-example-api) -Learn how to create a backend API to handle broadcast messages using XMTP. \ No newline at end of file diff --git a/docs/pages/consent/filter-spam.mdx b/docs/pages/consent/filter-spam.mdx deleted file mode 100644 index ffc2076..0000000 --- a/docs/pages/consent/filter-spam.mdx +++ /dev/null @@ -1,66 +0,0 @@ ---- -description: "Learn about handling unknown contacts in apps built with XMTP." ---- - -# Handle unknown contacts in apps built with XMTP - -With user consent preferences, a wallet address registered on the XMTP network can have one of three user consent preference values in relation to another user's wallet address: - -- Unknown -- Allowed -- Denied - -You can implement [user consent preferences](/consent/user-consent) to give your users inboxes that are **spam-free spaces for allowed contacts only**. - -You can then handle message requests from unknown contacts in a separate UI. - -These message requests from unknown contacts could be from: - -- Contacts the user might know -- Contacts the user might not know -- Spammy or scammy contacts - -You can filter these unknown contacts to: - -- Identify contacts the user might know or want to know and display them on a **You might know** tab, for example. -- Identify contacts the user might not know and not want to know, which might include spam, and display them on a **Hidden requests** tab, for example. - -## Identify contacts the user might know - -To identify contacts the user might know or want to know, you can look for signals in onchain data that imply an affinity between addresses. You can then display appropriate messages on a **You might know** tab, for example. - -
- -
- -## Identify contacts the user might not know, including spammy or scammy requests - -To identify contacts the user might not know or not want to know, which might include spam, you can consciously decide to scan messages in an unencrypted state to find messages that might contain spammy or scammy content. You can also look for an absence of onchain interaction data between the addresses, which might indicate that there is no affinity between addresses. You can then filter the appropriate messages to display on a **Hidden requests** tab, for example. - -
- -
- -The decision to scan unencrypted messages is yours as the app developer. If you take this approach: - -- Handle unencrypted messages with extreme care, and don't store unencrypted messages beyond the time necessary to scan them. -- Consider telling users that your app scans unencrypted messages for spammy or scammy content. -- Consider making spam and scam message detection optional for users who prefer not to have their messages scanned. - -## Why is content moderation handled by apps and not XMTP? - -XMTP is a decentralized, open protocol built to ensure private, secure, and censorship-resistant communication. As such, XMTP can't read unencrypted messages, and therefore, it also can't scan or filter message contents for spammy or scammy material. - -The protocol can analyze onchain data signals, such as shared activity between wallet addresses, to infer potential affinities between addresses. However, because all XMTP repositories are open source, malicious actors could inspect these methods and develop workarounds to bypass them. - -Additionally, applying spam filtering or content moderation directly at the protocol level would introduce centralization, which goes against the decentralized, permissionless, and open ethos of XMTP and web3. A protocol-driven approach could limit interoperability and trust by imposing subjective rules about content across all apps. - -Instead, content filtering and moderation should be implemented at the app layer. Apps can decide how opinionated or lenient they want to be, tailoring their filtering approach to the needs of their users. For example, one app may choose to aggressively scan and block spam to provide a highly curated experience, attracting users who value more protection. Another app may opt for minimal or no filtering, appealing to users who prioritize full control and unfiltered communication. - -This flexibility enables different apps to serve different user preferences, fostering an ecosystem where users can choose the experience that best suits them. Whether an app scans messages or not, XMTP ensures that developers remain free to build in line with their own values, without imposing restrictions at the infrastructure level. This separation between the protocol and app layers is crucial to maintaining XMTP’s commitment to openness, interoperability, and user choice. - -:::tip - -Is your app using a great third-party or public good tool to help with spam and keep inboxes safe? Open an [issue](https://github.com/xmtp/docs-xmtp-org/issues) to share information about it. - -::: diff --git a/docs/pages/consent/user-consent.mdx b/docs/pages/consent/user-consent.mdx deleted file mode 100644 index 67847f7..0000000 --- a/docs/pages/consent/user-consent.mdx +++ /dev/null @@ -1,75 +0,0 @@ -# Understand how user consent preferences enable spam-free inboxes - -In any open and permissionless messaging ecosystem, spam is an inevitable reality, and XMTP is no exception. - -However, with XMTP, you can give your users inboxes that are **spam-free spaces for chosen contacts only** by supporting user consent preferences. - -## Here's how it works - -With user consent preferences, a wallet address registered on the XMTP network can have one of three user consent preference values in relation to another user's wallet address: - -- Unknown -- Allowed -- Denied - -For example: - -1. `alix.eth` starts a conversation with `bo.eth`. At this time, `alix.eth` is unknown to `bo.eth` and the conversation displays in a message requests UI. - -2. When `bo.eth` views the message request, they express their user consent preference to **Block** or **Accept** `alix.eth` as a contact. - - - If `bo.eth` accepts `alix.eth` as a contact, their conversation displays in `bo.eth`'s main inbox. Because only contacts `bo.eth` accepts display in their main inbox, their inbox remains spam-free. - - - If `bo.eth` blocks contact with `alix.eth`, remove the conversation from `bo.eth`'s view. In an appropriate location in your app, give the user the option to unblock the contact. - -These user consent preferences are stored privately in an encrypted consent list on the XMTP network. The consent list is accessible by all apps that a user has authorized. This means a user can accept, or block, a contact once and have that consent respected across all other XMTP apps they use. - -## How user consent preferences are set - -Here are some of the ways user consent preferences are set: - -### Unknown - -Conversation created in an app on an SDK version **with** user consent support: - -- For a new conversation that a peer contact wants to start with a user, the consent preference is set to `unknown`. - -Conversation created in an app on an SDK version **without** user consent support: - -- For all conversations with any peer contact, the consent preference is set to `unknown`. - -### Allowed - -Conversation created in an app on an SDK version **with** user consent support: - -- For a new conversation that a user created with a peer contact, the SDK sets the consent preference to `allowed`. - - The user’s creation of the conversation with the contact is considered consent. - -- For an existing conversation created by a peer contact that hasn’t had its consent preference updated on the network (`unknown`) and that the user responds to, the SDK will update the consent preference to `allowed`. - - The user's response to the conversation is considered consent. - -- For a peer contact that a user has taken the action to allow, subscribe to, or enable notifications from, for example, the app must update the consent preference to `allowed`. - -Conversation created in an app on an SDK version **without** user consent support: - -- There are no scenarios in which a user consent preference will be set to `allowed`. - -### Denied - -Conversation created in an app on an SDK version **with** user consent support: - -- For a peer contact that a user has taken the action to block, unsubscribe from, or disable notifications from, for example, the app must update the consent preference to `denied`. - -Conversation created in an app on an SDK version **without** user consent support: - -- There are no scenarios in which a user consent preference will be set to `denied`. - -## Use consent preferences to respect user intent - -Your app should aim to handle consent preferences appropriately because they are an expression of user intent. - -For example, if a user blocked a contact, your app should respect the user's intent to not see messages from the blocked contact. Handling the consent preference incorrectly and showing the user messages from the blocked contact may cause the user to lose trust in your app. - -Be sure to load the latest consent list from the network at appropriate steps in your app flow to ensure that your app can operate using the latest data. diff --git a/docs/pages/content-types/content-types.md b/docs/pages/content-types/content-types.md deleted file mode 100644 index ed13615..0000000 --- a/docs/pages/content-types/content-types.md +++ /dev/null @@ -1,114 +0,0 @@ -# Understand content types with XMTP - -When you build an app with XMTP, all messages are encoded with a content type to ensure that an XMTP client knows how to encode and decode messages, ensuring interoperability and consistent display of messages across apps. - -In addition, message payloads are transported as a set of bytes. This means that payloads can carry any content type that a client supports, such as plain text, JSON, or even non-text binary or media content. - -At a high level, there are three categories of content types with XMTP: - -- Standard -- Standards-track -- Custom - -## Standard content types - -A standard content type is one that has undergone the XMTP Request for Comment (XRC) process and has been adopted as an [XMTP Improvement Proposal](https://github.com/xmtp/XIPs#readme) (XIP). - -Once adopted, a standard content type is bundled in XMTP client SDKs. A developer can then import the standard content type from an SDK for use in their app. - -Here is the current standard content type: - -### Text content type - -An app built with XMTP uses the `TextCodec` (plain text) standard content type by default. This means that if your app is sending plain text messages only, you don’t need to perform any additional steps related to content types. - -:::code-group - -```jsx [JavaScript] -await conversation.send("gm"); -``` - -```jsx [React] -await sendMessage(conversation, "gm"); -``` - -```swift [Swift] -try await conversation.send(content: "gm") -``` - -```kotlin [Kotlin] -conversation.send(text = "gm") -``` - -```jsx [React Native] -await conversation.send("gm"); -``` - -::: - -## Standards-track content types - -A standards-track content type is one that is being actively reviewed for adoption as a standard content type through the XIP process. - -Here are standards-track content types that you can review, test, and adopt in your app today: - -### Remote attachment content type - -Use to send a remote attachment of any size using the `RemoteAttachmentCodec` and a storage provider. - -- [Read the doc](/content-types/remote-attachment) -- SDK support: [React](https://github.com/xmtp/xmtp-web/tree/8a248eab168eba494909d7215cffba9d50c1f87c/packages/react-sdk/src/helpers/caching/contentTypes), [JavaScript](https://github.com/xmtp/xmtp-js-content-types/tree/363e82c894f5a4436c5617b1c0424bab574b27c0/packages), [Kotlin](https://github.com/xmtp/xmtp-android/tree/main/library/src/main/java/org/xmtp/android/library/codecs), [Swift](https://github.com/xmtp/xmtp-ios/tree/main/Sources/XMTP/Codecs) -- Implemented in: Converse, Lenster - -### Read receipt content type - -Use to send a read receipt, which is a `timestamp` that indicates when a message was read. The read receipt is sent as a message and you can use it to calculate the time since the last message was read. - -- [Read the doc](/content-types/read-receipt) -- SDK support: [React](https://github.com/xmtp/xmtp-web/tree/8a248eab168eba494909d7215cffba9d50c1f87c/packages/react-sdk/src/helpers/caching/contentTypes), [JavaScript](https://github.com/xmtp/xmtp-js-content-types/tree/363e82c894f5a4436c5617b1c0424bab574b27c0/packages), [Kotlin](https://github.com/xmtp/xmtp-android/tree/main/library/src/main/java/org/xmtp/android/library/codecs), [Swift](https://github.com/xmtp/xmtp-ios/tree/main/Sources/XMTP/Codecs) - -### Reaction content type - -Use a reaction to send a quick and often emoji-based way to respond to a message. Reactions are usually limited to a predefined set of emojis or symbols provided by the messaging app. - -- [Read the doc](/content-types/reaction) -- SDK support: [React](https://github.com/xmtp/xmtp-web/tree/8a248eab168eba494909d7215cffba9d50c1f87c/packages/react-sdk/src/helpers/caching/contentTypes), [JavaScript](https://github.com/xmtp/xmtp-js-content-types/tree/363e82c894f5a4436c5617b1c0424bab574b27c0/packages), [Kotlin](https://github.com/xmtp/xmtp-android/tree/main/library/src/main/java/org/xmtp/android/library/codecs), [Swift](https://github.com/xmtp/xmtp-ios/tree/main/Sources/XMTP/Codecs) -- Implemented in: Converse - -### Reply content type - -Use a reply to send a direct response to a specific message in a conversation. Users can select and reply to a particular message instead of sending a new one. - -- [Read the doc](/content-types/reply) -- SDK support: [React](https://github.com/xmtp/xmtp-web/tree/8a248eab168eba494909d7215cffba9d50c1f87c/packages/react-sdk/src/helpers/caching/contentTypes), [JavaScript](https://github.com/xmtp/xmtp-js-content-types/tree/363e82c894f5a4436c5617b1c0424bab574b27c0/packages), [Kotlin](https://github.com/xmtp/xmtp-android/tree/main/library/src/main/java/org/xmtp/android/library/codecs), [Swift](https://github.com/xmtp/xmtp-ios/tree/main/Sources/XMTP/Codecs) -- Implemented in: Converse - -### On-chain transaction reference content type - -Use to send references to on-chain transactions, such as crypto payments. - -- [Read the doc](/content-types/transaction-ref) -- Implemented in: Coinbase Wallet - -## Create a custom content type - -Any developer building with XMTP can create a custom content type and immediately start using it in their app. Unlike a standard content type, use of a custom content type doesn't require prerequisite formal adoption through the XRC and XIP processes. - -For example, if you need a content type that isn't covered by a standard or standards-track content type, you can create a custom content type and begin using it immediately in your app. - -:::caution - -Be aware that your custom content type may not be automatically recognized or supported by other applications, which could result in it being overlooked or only its fallback text being displayed. - -::: - -If another app wants to display your custom content type, they must implement your custom content type in their code exactly as it's defined in your code. - -Fallback plain text is "alt text"-like description text that you can associate with a custom content type if you are concerned that a receiving app might not be able to handle the content. If the receiving app is unable to handle the custom content, it displays the fallback plain text instead. - -Here are tutorials you can use to learn how to create custom content types: - -- [Basic: Multiply numbers](/content-types/custom) -Create a custom content type used to multiply numbers. -- [Advanced: Send a Polygon transaction](/content-types/custom) -Create a custom content type used to send transaction hashes on the Polygon blockchain. diff --git a/docs/pages/content-types/custom.md b/docs/pages/content-types/custom.md deleted file mode 100644 index 9f6e5db..0000000 --- a/docs/pages/content-types/custom.md +++ /dev/null @@ -1,647 +0,0 @@ ---- -description: Learn how to build custom content types ---- - -# Build custom content types - -Building a custom content type enables you to manage data in a way that is more personalized or specialized to the needs of your app. - -:::warning[warning] - -Be aware that your custom content type may not be automatically recognized or supported by other apps, which could result in the other apps overlooking or only displaying the fallback text for your custom content type. - -::: - -For more common content types, you can usually find a [standard](/content-types/content-types#standard-content-types) or [standards-track](/content-types/content-types#standards-track-content-types) content type to serve your needs. - -If your custom content type generates interest within the developer community, consider proposing it as a standard content type through the [XIP process](/protocol/xips). - -This document describes how to build custom content types using two examples: - -- Build a basic custom content type that multiplies numbers -- Build an advanced custom content type that sends a transaction hash - -## Basic: Build a custom content type that multiplies numbers - -### Create the content type - -Create the custom content type by creating a new file - -:::code-group - -```jsx [JavaScript] -// A test of this content type can be found in the following PR: https://github.com/xmtp/xmtp-js/pull/509/files -import { ContentTypeId } from "@xmtp/content-type-primitives"; -import type { ContentCodec, EncodedContent } from "@xmtp/content-type-primitives"; - -// Create a unique identifier for your content type -export const ContentTypeMultiplyNumbers = new ContentTypeId({ - authorityId: 'your.domain', - typeId: 'multiply-number', - versionMajor: 1, - versionMinor: 0, -}) - -// Define the MultiplyNumbers class -export class MultiplyNumbers { - public num1: number - public num2: number - public result: number | undefined - - constructor(num1: number, num2: number, result?: number) { - this.num1 = num1 - this.num2 = num2 - this.result = result - } -} - -// Define the MultiplyCodec class -export class ContentTypeMultiplyNumberCodec - implements ContentCodec -{ - get contentType(): ContentTypeId { - return ContentTypeMultiplyNumbers - } - - // The encode method accepts an object of MultiplyNumbers and encodes it as a byte array - encode(numbers: MultiplyNumbers): EncodedContent { - const { num1, num2 } = numbers - return { - type: ContentTypeMultiplyNumbers, - parameters: {}, - content: new TextEncoder().encode(JSON.stringify({ num1, num2 })), - } - } - - // The decode method decodes the byte array, parses the string into numbers (num1, num2), and returns their product - decode(encodedContent: EncodedContent): MultiplyNumbers { - const decodedContent = new TextDecoder().decode(encodedContent.content) - const { num1, num2 } = JSON.parse(decodedContent) - return new MultiplyNumbers(num1, num2, num1 * num2) - } - - fallback(content: MultiplyNumbers): string | undefined { - return `Can’t display number content types. Number was ${JSON.stringify( - content - )}` - // return undefined to indicate that this content type should not be displayed if it's not supported by a client - } - - // Set to true to enable push notifications for interoperable content types. - // Receiving clients must handle this field appropriately. - shouldPush(): boolean { - return true; - } -} -``` - -```jsx [React] -// A test of this content type can be found in the following PR: https://github.com/xmtp/xmtp-web/pull/141/files -import { ContentTypeId } from "@xmtp/content-type-primitives"; -import type { ContentCodec, EncodedContent } from "@xmtp/content-type-primitives"; - -// Create a unique identifier for your content type -export const ContentTypeMultiplyNumbers = new ContentTypeId({ - authorityId: 'your.domain', - typeId: 'multiply-number', - versionMajor: 1, - versionMinor: 0, -}) - -// Define the MultiplyNumbers class -export class MultiplyNumbers { - public num1: number - public num2: number - public result: number | undefined - - constructor(num1: number, num2: number, result?: number) { - this.num1 = num1 - this.num2 = num2 - this.result = result - } -} - -// Define the MultiplyCodec class -export class ContentTypeMultiplyNumberCodec - implements ContentCodec -{ - get contentType(): ContentTypeId { - return ContentTypeMultiplyNumbers - } - - // The encode method accepts an object of MultiplyNumbers and encodes it as a byte array - encode(numbers: MultiplyNumbers): EncodedContent { - const { num1, num2 } = numbers - return { - type: ContentTypeMultiplyNumbers, - parameters: {}, - content: new TextEncoder().encode(JSON.stringify({ num1, num2 })), - } - } - - // The decode method decodes the byte array, parses the string into numbers (num1, num2), and returns their product - decode(encodedContent: EncodedContent): MultiplyNumbers { - const decodedContent = new TextDecoder().decode(encodedContent.content) - const { num1, num2 } = JSON.parse(decodedContent) - return new MultiplyNumbers(num1, num2, num1 * num2) - } - - fallback(content: MultiplyNumbers): string | undefined { - return `Can’t display number content types. Number was ${JSON.stringify( - content - )}` - // return undefined to indicate that this content type should not be displayed if it's not supported by a client - } - - // This method is optional and can be used to determine if the content type should have a push notification - shouldPush() { - return true; - } -} - -export const multiplyNumbersContentTypeConfig: ContentTypeConfiguration = { - codecs: [new ContentTypeMultiplyNumberCodec()], - contentTypes: [ContentTypeMultiplyNumbers.toString()], - namespace: NAMESPACE, // Replace with the actual namespace you are using - processors: { - [ContentTypeMultiplyNumbers.toString()]: [processMultiplyNumbers], - }, - validators: { - [ContentTypeMultiplyNumbers.toString()]: isValidMultiplyNumbersContent, - }, -}; - -// You'll need to define the processMultiplyNumbers and isValidMultiplyNumbersContent functions -// These should be tailored to handle the specific logic of processing and validating -// the content type for multiplying numbers. - -function processMultiplyNumbers(content) { - // Define how to process the multiply numbers content - // Example: logging, storing, or manipulating the data -} - -function isValidMultiplyNumbersContent(content) { - // Define validation logic for multiply numbers content - // Example: checking if the numbers are valid, not null, etc. -} -``` - -```kotlin [Kotlin] -import org.json.JSONObject -import org.xmtp.android.library.codecs.ContentTypeId -import org.xmtp.android.library.codecs.ContentTypeIdBuilder -import org.xmtp.android.library.codecs.ContentCodec -import org.xmtp.android.library.codecs.EncodedContent - -data class NumberPair(val a: Double, val b: Double, var result: Double = 0.0) - -data class MultiplyNumberCodec( - override var contentType: ContentTypeId = ContentTypeIdBuilder.builderFromAuthorityId( - authorityId = "your.domain", - typeId = "multiply-number", - versionMajor = 1, - versionMinor = 0 - ) -) : ContentCodec { - override fun encode(content: NumberPair): EncodedContent { - val jsonObject = JSONObject() - jsonObject.put("a", content.a) - jsonObject.put("b", content.b) - return EncodedContent.newBuilder().also { - it.type = contentType - it.content = jsonObject.toString().toByteStringUtf8() - }.build() - } - - override fun decode(content: EncodedContent): NumberPair { - val jsonObject = JSONObject(content.content.toStringUtf8()) - val a = jsonObject.getDouble("a") - val b = jsonObject.getDouble("b") - val numberPair = NumberPair(a, b, a * b) - return numberPair - } - - override fun fallback(content: NumberPair): String? { - return "Error: This app does not support numbers." - } - - // This method is optional and can be used to determine if the content type should have a push notification - override fun shouldPush(): Boolean { - return true; - } -} -``` - -```swift [Swift] -// A test of this content type can be found in the following PR: https://github.com/xmtp/xmtp-ios/pull/211 -import XMTP - -public struct MultiplyNumbers { - public var num1: Double - public var num2: Double - public var result: Double? - - public init(num1: Double, num2: Double, result: Double? = nil) { - self.num1 = num1 - self.num2 = num2 - self.result = result - } -} - -public struct MultiplyNumbersCodec: ContentCodec { - public typealias T = MultiplyNumbers - - public var contentType: ContentTypeID { - ContentTypeID(authorityID: "example.com", typeID: "number", versionMajor: 1, versionMinor: 1) - } - - public func encode(content: MultiplyNumbers, client: Client) throws -> EncodedContent { - var encodedContent = EncodedContent() - encodedContent.type = contentType - encodedContent.parameters["num1"] = String(content.num1) - encodedContent.parameters["num2"] = String(content.num2) - return encodedContent - } - - public func decode(content: EncodedContent, client _: Client) throws -> MultiplyNumbers { - guard let num1Str = content.parameters["num1"], let num1 = Double(num1Str), - let num2Str = content.parameters["num2"], let num2 = Double(num2Str) else { - throw CodecError.invalidContent - } - return MultiplyNumbers(num1: num1, num2: num2, result: num1 * num2) - } - - public func fallback(content: MultiplyNumbers) throws -> String? { - return "MultiplyNumbersCodec is not supported" - } - - - // This method is optional and can be used to determine if the content type should have a push notification - public func shouldPush() -> Bool { - return true; - } -} -``` - -```jsx [React Native] -import { content } from '@xmtp/proto' - -import {JSContentCodec, Client, Conversation, DecodedMessage } from '@xmtp/react-native-sdk'; - -type EncodedContent = content.EncodedContent -type ContentTypeId = content.ContentTypeId - -const ContentTypeMultiplyNumbers: ContentTypeId = { - authorityId: 'com.example', - typeId: 'multiplyNumbers', - versionMajor: 1, - versionMinor: 1, -} -class MultiplyNumbers { - public readonly num1: number - public readonly num2: number - public readonly result: number - - constructor(num1: number, num2: number, result: number) { - this.num1 = num1 - this.num2 = num2 - this.result = result - } -} - -class ContentTypeMultiplyNumberCodec - implements JSContentCodec -{ - get contentType() { - return ContentTypeMultiplyNumbers - } - - encode(decoded: MultiplyNumbers): EncodedContent { - return { - type: ContentTypeMultiplyNumbers, - parameters: { - num1: decoded.num1.toString(), - num2: decoded.num2.toString(), - }, - content: new Uint8Array(), - } - } - - decode(encoded: EncodedContent): MultiplyNumbers { - const num1 = parseFloat(encoded.parameters['num1'] ?? '0') - const num2 = parseFloat(encoded.parameters['num2'] ?? '0') - return new MultiplyNumbers(num1, num2, num1 * num2) - } - - fallback(content: MultiplyNumbers): string { - return `MultiplyNumbersCodec is not supported` - } - - // This method is optional and can be used to determine if the content type should trigger a push notification - shouldPush(): boolean { - return true; - } -} -``` - -::: - -### Configure the content type - -Import and register the custom content type. - -:::code-group - -```jsx [JavaScript] -import { ContentTypeMultiplyNumberCodec } from "./xmtp-content-type-multiply-number"; - -const client = await Client.create({ - env: "production", - codecs: [new ContentTypeMultiplyNumberCodec()], -}); -//or -client.registerCodec(new ContentTypeMultiplyNumberCodec()); -``` - -```jsx [React] -import { - XMTPProvider, -} from "@xmtp/react-sdk"; - -import {multiplyNumbersContentTypeConfig} from "./xmtp-content-type-multiply-number"; - -const contentTypeConfigs = [ - multiplyNumbersContentTypeConfig, -]; - -createRoot(document.getElementById("root") as HTMLElement).render( - - - - - , -); -``` - -```kotlin [Kotlin] -import org.xmtp.android.library.codecs.ContentTypeMultiplyNumberCodec - -Client.register(codec = ContentTypeMultiplyNumberCodec()) -``` - -```swift [Swift] -Client.register(codec: ContentTypeMultiplyNumberCodec()) -``` - -```jsx [React Native] -import { ContentTypeMultiplyNumberCodec } from "./xmtp-content-type-number"; - -const client = await Client.create({ - env: "production", - codecs: [new ContentTypeMultiplyNumberCodec()], -}); -``` - -::: - -### Send the content - -Send a message using the custom content type. This code sample demonstrates how to use the `MultiplyCodec` custom content type to perform multiplication operations. - -:::code-group - -```jsx [JavaScript] -const numbersToMultiply = new MultiplyNumbers(2, 3); - -conversation.send(numbersToMultiply, { - contentType: ContentTypeMultiplyNumbers, -}); -``` - -```jsx [React] -const numbersToMultiply = { a: 3, b: 7 }; - -conversation.send(numbersToMultiply, { - contentType: ContentTypeMultiplyNumbers, -}); -``` - -```kotlin [Kotlin] -import org.xmtp.android.library.codecs.ContentTypeMultiplyNumberCodec - -val numbers = NumberPair( - a = 3, - b = 7, -) - -conversation.send( - content = numbers, - options = SendOptions(contentType = ContentTypeMultiplyNumberCodec().contentType), -) -``` - -```swift [Swift] -let multiplyNumbers = MultiplyNumbers(num1: 3, num2: 2) -try await aliceConversation.send(content: multiplyNumbers, options: .init(contentType: ContentTypeMultiplyNumberCodec().contentType)) -``` - -```jsx [React Native] -const multiplyNumbers = new MultiplyNumbers(3, 7); -await bobConvo.send(multiplyNumbers, { - contentType: ContentTypeMultiplyNumbers, -}); -``` - -::: - -### Receive the content - -To use the result of the multiplication operation, add a renderer for the custom content type. - -To handle unsupported content types, see the [fallback](/dms/messages#handle-unsupported-content-types) section. - -:::code-group - -```jsx [JavaScript] -if (message.contentType.sameAs(ContentTypeMultiplyNumber)) { - return message.content; // 21 -} -``` - -```jsx [React] -if (message.contentType.sameAs(ContentTypeMultiplyNumber)) { - return message.content; // 21 -} -``` - -```swift [Swift] -if let content: MultiplyNumbers = try? messages[0].content() { - //content.result -} -``` - -```kotlin [Kotlin] -Code sample coming soon -``` - -```jsx [React Native] -// Because of this message content is now a function which returns the actual content. -// You can get that content by call `message.content()` now instead of message.content. -// This may involve more filtering on the message side to make sure you are handling different contentTypes appropriately. - -if (message.contentTypeId === "com.example/multiplyNumbers:1.1") { - return message.content(); // 21 -} -``` - -::: - -## Advanced: Build a custom content type to send a transaction hash - -This tutorial covers how to build a custom content type that sends transaction hashes on the Polygon blockchain. This example also describes how to use the custom content type to render the transaction hash. - -:::warning - -Be aware that a custom content type may not be automatically recognized or supported by other applications, which could result in it being overlooked or only its fallback text being displayed. - -::: - -### Create the custom content type - -Create a new file, `xmtp-content-type-transaction-hash.tsx`. This file hosts the `TransactionHash` class for encoding and decoding the custom content type. - -```jsx [JavaScript] -import { ContentTypeId } from "@xmtp/xmtp-js"; - -export const ContentTypeTransactionHash = new ContentTypeId({ - authorityId: "your.domain", - typeId: "transaction-hash", - versionMajor: 1, - versionMinor: 0, -}); - -export class ContentTypeTransactionHashCodec { - get contentType() { - return ContentTypeTransactionHash; - } - - encode(hash) { - return { - type: ContentTypeTransactionHash, - parameters: {}, - content: new TextEncoder().encode(hash), - }; - } - - decode(content: { content: any }) { - const uint8Array = content.content; - const hash = new TextDecoder().decode(uint8Array); - return hash; - } -} -``` - -### Import and register the custom content type - -```jsx [JavaScript] -import { - ContentTypeTransactionHash, - ContentTypeTransactionHashCodec, -} from "./xmtp-content-type-transaction-hash"; - -const xmtp = await Client.create(signer, { - env: "dev", -}); -xmtp.registerCodec(new ContentTypeTransactionHashCodec()); -``` - -### Send a message using the custom content type - -This code sample demonstrates how to use the `TransactionHash` content type to send a transaction. - -```jsx [JavaScript] -// Create a wallet from a known private key -const wallet = new ethers.Wallet(privateKey); -console.log(`Wallet address: ${wallet.address}`); - -//im using a burner wallet with MATIC from a faucet -//https://faucet.polygon.technology/ - -// Set up provider for Polygon Testnet (Mumbai) -const provider = new ethers.providers.JsonRpcProvider( - "https://rpc-mumbai.maticvigil.com", -); - -// Connect the wallet to the provider -const signer = wallet.connect(provider); - -// Define the recipient address and amount -const amount = ethers.utils.parseEther("0.01"); // Amount in ETH (0.01 in this case) - -// Create a transaction -const transaction = { - to: recipientAddress, - value: amount, -}; - -// Sign and send the transaction -const tx = await signer.sendTransaction(transaction); -console.log(`Transaction hash: ${tx.hash}`); - -const conversation = await xmtp.conversations.newConversation(WALLET_TO); -await conversation - .send(tx.hash, { - contentType: ContentTypeTransactionHash, - }) - .then(() => { - console.log("Transaction data sent", tx.hash); - }) - .catch((error) => { - console.log("Error sending transaction data: ", error); - }); -``` - -### Use the result of the hash - -Add an async renderer for the custom content type. - -```jsx {JavaScript} -if (message.contentType.sameAs(ContentTypeTransactionHash)) { - // Handle ContentTypeAttachment - return ( - - ); -} - -const TransactionMonitor = ({ encodedContent }) => { - const [retryCount, setRetryCount] = useState(0); - - const [transactionValue, setTransactionValue] = useState(null); - - useEffect(() => { - const fetchTransactionReceipt = async () => { - console.log(encodedContent); - const provider = new ethers.providers.JsonRpcProvider( - "https://rpc-mumbai.maticvigil.com", - ); - const receipt = await provider.getTransactionReceipt(encodedContent); - const tx = await provider.getTransaction(encodedContent); - if (tx && tx.value) { - setTransactionValue(ethers.utils.formatEther(tx.value)); - } - }; - fetchTransactionReceipt(); - }, [encodedContent, retryCount]); - - return transactionValue ? ( -
Transaction value: {transactionValue} ETH
- ) : ( -
- Waiting for transaction to be mined... - -
- ); -}; -``` diff --git a/docs/pages/content-types/reaction.mdx b/docs/pages/content-types/reaction.mdx deleted file mode 100644 index 94d558d..0000000 --- a/docs/pages/content-types/reaction.mdx +++ /dev/null @@ -1,259 +0,0 @@ ---- -description: Learn how to use the reaction content type to support reactions in your app built with XMTP ---- - -# Support reactions in your app built with XMTP - -Use the reaction content type to support reactions in your app. A reaction is a quick and often emoji-based way to respond to a message. Reactions are usually limited to a predefined set of emojis or symbols provided by the messaging app. - -## Use a local database for performance - -Use a local database to store reactions. This will enable your app to performantly display a reaction with its [referenced message](#send-a-reaction) when rendering message lists. - -To learn more about using a local database, see [Use local-first architecture](/perf-ux/local-first). - -## Configure the content type - -In some SDKs, the `ReactionCodec` is already included in the SDK. If not, you can install the package using the following command: - -:::code-group - -
-In the JavaScript SDK, you need to import this package first. - -```bash [Bash] -npm i @xmtp/content-type-reaction -``` - -After importing the package, you can register the codec. - -```jsx [JavaScript] -import { - ContentTypeReaction, - ReactionCodec, -} from "@xmtp/content-type-reaction"; -// Create the XMTP client -const xmtp = await Client.create(signer, { env: "dev" }); -xmtp.registerCodec(new ReactionCodec()); -``` -
- -
-The React SDK supports all current standards-track content types, but only text messages are enabled out of the box. Adding support for other standards-track content types requires a bit of configuration. - -```jsx [JavaScript] -import { - XMTPProvider, - reactionContentTypeConfig, -} from "@xmtp/react-sdk"; - -const contentTypeConfigs = [ - reactionContentTypeConfig, -]; - -createRoot(document.getElementById("root") as HTMLElement).render( - - - - - , -); -``` -
- -```kotlin [Kotlin] -import org.xmtp.android.library.codecs.ReactionCodec - -Client.register(codec = ReactionCodec()) -``` - -```swift [Swift] -Client.register(ReactionCodec()); -``` - -```jsx [React Native] -const client = await Client.create(signer, { - env: "production", - codecs: [new ReactionCodec()], -}); -``` - -::: - -## Send a reaction - -With XMTP, reactions are represented as objects with the following keys: - -- `reference`: ID of the message being reacted to - -- `action`: Action of the reaction (added or removed) - -- `content`: String representation of the reaction (smile, for example) to be interpreted by clients - -- `schema`: Schema of the reaction (Unicode, shortcode, or custom) - -:::code-group - -```tsx [JavaScript] -const reaction = { - reference: someMessageID, - action: "added", - content: "smile", -}; - -await conversation.send(reaction, { - contentType: ContentTypeReaction, -}); -``` - -```jsx [React] - const { sendMessage } = useSendMessage(); - const handleClick = useCallback( - (emoji: string) => { - void sendMessage( - conversation, - { - content: emoji, - schema: "unicode", - reference: message.xmtpID, - action: "added", - }, - ContentTypeReaction, - ); - }, - [conversation, message.xmtpID, sendMessage], - ); -``` - -```kotlin [Kotlin] -import org.xmtp.android.library.codecs.Reaction -import org.xmtp.android.library.codecs.ReactionAction -import org.xmtp.android.library.codecs.ReactionSchema -import org.xmtp.android.library.codecs.ContentTypeReaction -import org.xmtp.android.library.SendOptions - -val reaction = Reaction( - reference = messageToReact.id, // the ID of the message you're reacting to - action = ReactionAction.Added, // the action of the reaction - content = "U+1F603", // the content of the reaction - schema = ReactionSchema.Unicode // the schema of the reaction -) -conversation.send( - content = reaction, - options = SendOptions(contentType = ContentTypeReaction) -) - -``` - -```swift [Swift] -let reaction = Reaction( - reference: messageToReact.id, - action: .added, - content: "U+1F603", - schema: .unicode -) - -try await conversation.send( - content: reaction, - options: .init(contentType: ContentTypeReaction) -) -``` - -```jsx [React Native] -// Assuming you have a conversation object and the ID of the message you're reacting to -const reactionContent = { - reaction: { - reference: messageId, // ID of the message you're reacting to - action: "added", // Action can be 'added' or 'removed' - schema: "unicode", // Schema can be 'unicode', 'shortcode', or 'custom' - content: "👍", // Content of the reaction - }, -}; - -await conversation.send(reactionContent); -``` - -::: - -## Receive a reaction - -Now that you can send a reaction, you need a way to receive a reaction. For example: - -:::code-group - -```tsx [JavaScript] -if (message.contentType.sameAs(ContentTypeReaction)) { - // We've got a reaction. - const reaction: Reaction = message.content; -} -``` - -
- -```jsx [JavaScript] -if (message.contentType === ContentTypeReaction.toString()) { - const reactionContent = message.content as Reaction; - // Use reactionContent... -} -``` - -**useReactions** - -Use to fetch all reactions for a specific message. It takes a `CachedMessage` as a parameter and returns an array of `CachedReaction` objects. - -```jsx [JavaScript] -import { useReactions } from "@xmtp/react-sdk"; -const reactions = useReactions(message); -``` - -**getReactionsByXmtpID** - -Use to retrieve all reactions associated with a specific XMTP ID from the database. - -```jsx [JavaScript] -import { getReactionsByXmtpID } from "@xmtp/react-sdk"; -const reactions = await getReactionsByXmtpID("testXmtpId1", db); -``` - -**hasReaction** - -Use to check if a message has any reactions. It takes a `CachedMessage` as a parameter and returns a boolean indicating whether the message has reactions. - -```jsx [JavaScript] -import { hasReaction } from "@xmtp/react-sdk"; -const messageHasReaction = hasReaction(originalMessage!); -``` -
- -```kotlin [Kotlin] -if (message.contentType == ContentTypeReaction) { - // The message is a reaction - val reactionCodec = ReactionCodec() - val reaction: Reaction = reactionCodec.decode(message.content) -} -``` - -```swift [Swift] -let content: Reaction = try message.content() -``` - -```jsx [React Native] -if (message.contentTypeId === "xmtp.org/reaction:1.0") { - const reaction = message.content(); - return reaction; - //reaction.reference = id of the message being reacted to, - //reaction.action = 'added', - //reaction.schema = 'unicode', - //reaction.content = '💖', -} -``` - -To handle unsupported content types, refer to the [fallback](/dms/messages#handle-an-unsupported-content-type-error) section. - -## Display the reaction - -Generally, reactions should be interpreted as emoji. So, "smile" would translate to 😄 in UI clients. That being said, how you ultimately choose to render a reaction in your app is up to you. - -## Notifications and reactions - -Reactions have `shouldPush` set to `false`, which means that reactions do not trigger push notifications as long as the notification server respects this flag. diff --git a/docs/pages/content-types/read-receipt.mdx b/docs/pages/content-types/read-receipt.mdx deleted file mode 100644 index 22b7f7e..0000000 --- a/docs/pages/content-types/read-receipt.mdx +++ /dev/null @@ -1,161 +0,0 @@ ---- -description: Learn how to use the read receipt content type to support read receipts in your app built with XMTP ---- - -# Support read receipts in your app built with XMTP - -Use the read receipt content type to support read receipts in your app. A read receipt is a `timestamp` that indicates when a message was read. It is sent as a message and can be used to calculate the time since the last message was read. - -:::warning - -This standards-track content type is in **Alpha** status because this implementation doesn't work efficiently with the current protocol architecture. This inefficiency will be addressed in a future protocol release. - -Until then, if you must support read receipts, we recommend that you use this implementation and **not build your own custom content type.** - -::: - -:::tip[Open for feedback] - -You're welcome to provide feedback on the [Proposal for read receipts content type](https://github.com/orgs/xmtp/discussions/43) XIP idea. - -::: - -## Provide an opt-out option - -While this is a per-app decision, the best practice is to provide users with the option to opt out of sending read receipts. If a user opts out, when they read a message, a read receipt will not be sent to the sender of the message. - -## Configure the content type - -:::code-group - -
-```bash [Bash] -npm i @xmtp/content-type-read-receipt -``` - -**Import and register** - -```tsx [TypeScript] -import { - ContentTypeReadReceipt, - ReadReceiptCodec, -} from "@xmtp/content-type-read-receipt"; -// Create the XMTP client -const xmtp = await Client.create(signer, { env: "dev" }); -xmtp.registerCodec(new ReadReceiptCodec()); -``` -
- -```kotlin [Kotlin] -import org.xmtp.android.library.Client -import org.xmtp.android.library.codecs.ReadReceiptCodec - -Client.register(codec = ReadReceiptCodec()) -``` - -```swift [Swift] - Client.register(codec: ReadReceiptCodec()) -``` - -```jsx [React Native] -const client = await Client.create(signer, { - env: "production", - codecs: [new ReadReceiptCodec()], -}); -``` - -::: - -## Send a read receipt - -:::code-group - - -```tsx [TypeScript] -// The content of a read receipt message must be an empty object. - -await conversation.messages.send({}, ContentTypeReadReceipt); -``` - -```kotlin [Kotlin] -import org.xmtp.android.library.Client -import org.xmtp.android.library.codecs.ReadReceipt -import org.xmtp.android.library.codecs.ContentTypeReadReceipt -import org.xmtp.android.library.messages.SendOptions - -// Create a ReadReceipt instance -val readReceipt = ReadReceipt - -// Send the read receipt -aliceConversation.send( - content = readReceipt, - options = SendOptions(contentType = ContentTypeReadReceipt), -) -``` - -```swift [Swift] -let read = ReadReceipt(timestamp: "2019-09-26T07:58:30.996+0200") - -try await conversation.send( - content: read, - options: .init(contentType: ContentTypeReadReceipt) -) -``` - -```jsx [React Native] -await bobConversation.send({ readReceipt: {} }); -``` - -::: - -## Receive a read receipt - -Here's how you can receive a read receipt: - -:::code-group - -```tsx [JavaScript] -if (message.contentType.sameAs(ContentTypeReadReceipt)) { - // The message is a read receipt - const timestamp = message.sent; -} -``` - -```kotlin [Kotlin] -val message: DecodedMessage = conversation.messages().first() -if (message.encodedContent.type == ContentTypeReadReceipt) { - // The message is a ReadReceipt - val readReceipt: ReadReceipt? = message.content() - if (readReceipt != null) { - println("Message read at: ${message.sent}") - } -} -``` - -```swift [Swift] -let content: ReadReceipt = try message.content() -content.timestamp // "2019-09-26T07:58:30.996+0200" -``` - -```jsx [React Native] -if (message.contentTypeId === "xmtp.org/readReceipt:1.0") { - return message.sent; //Date received -} -``` -::: - -## Display a read receipt - -`ReadReceipts` have an `undefined` or `nil` fallback, indicating the message is not expected to be displayed. To learn more, see [Handle unsupported content types](/dms/messages#handle-unsupported-content-types) section. - -## Notifications and read receipts - -Read receipts have `shouldPush` set to `false`, which means that read receipts do not trigger push notifications as long as the notification server respects this flag. - -## Use a read receipt - -Generally, a read receipt indicator should be displayed under the message it's associated with. The indicator can include a timestamp. Ultimately, how you choose to display a read receipt indicator is completely up to you. - -The read receipt is provided as an **empty message** whose timestamp provides the data needed for the indicators. **Be sure to filter out read receipt empty messages and not display them to users.** - -You can use a read receipt timestamp to calculate the time since the last message was read. While iterating through messages, you can be sure that the last message was read at the timestamp of the read receipt if the string of the timestamp is lower. diff --git a/docs/pages/content-types/remote-attachment.mdx b/docs/pages/content-types/remote-attachment.mdx deleted file mode 100644 index e506f14..0000000 --- a/docs/pages/content-types/remote-attachment.mdx +++ /dev/null @@ -1,556 +0,0 @@ ---- -description: Learn how to use the attachment and remote attachment content types to support attachments in your app built with XMTP ---- - -# Support attachments in your app built with XMTP - -Use the attachment and remote attachment content types to support attachments in your app. Remote attachments of any size can be sent using the `RemoteAttachmentCodec` and a storage provider. - -## Configure the content type - -In some SDKs, the `AttachmentCodec` is already included in the SDK. If not, you can install the package using the following command: - -:::code-group - -
- -In the JavaScript SDK, you need to import this package first. - -```bash [Bash] -npm i @xmtp/content-type-remote-attachment -``` - -After importing the package, you can register the codec. - -```jsx [JavaScript] -import { - ContentTypeAttachment, - AttachmentCodec, - RemoteAttachmentCodec, - ContentTypeRemoteAttachment, -} from "@xmtp/content-type-remote-attachment"; -// Create the XMTP client -const xmtp = await Client.create(signer, { env: "dev" }); -xmtp.registerCodec(new AttachmentCodec()); -xmtp.registerCodec(new RemoteAttachmentCodec()); -``` - -
- -
- -The React SDK supports all current standards-track content types, but only text messages are enabled out of the box. Adding support for other standards-track content types requires a bit of configuration. - -```jsx [JavaScript] -import { - XMTPProvider, - attachmentContentTypeConfig, -} from "@xmtp/react-sdk"; - -const contentTypeConfigs = [ - attachmentContentTypeConfig, -]; - -createRoot(document.getElementById("root") as HTMLElement).render( - - - - - , -); -``` -
- -```kotlin [Kotlin] -import org.xmtp.android.library.codecs.Attachment -import org.xmtp.android.library.codecs.AttachmentCodec -import org.xmtp.android.library.codecs.ContentTypeAttachment - -Client.register(codec = AttachmentCodec()) -Client.register(codec = RemoteAttachmentCodec()) -``` - -```swift [Swift] -Client.register(AttachmentCodec()); -Client.register(RemoteAttachmentCodec()); -``` - -```jsx [React Native] -const client = await Client.create(signer, { - env: "production", - codecs: [new RemoteAttachmentCodec(), new StaticAttachmentCodec()], -}); -``` - -::: - -## Send a remote attachment - -:::code-group - -
-Load the file. This example uses a web browser to load the file: - -```jsx [JavaScript] -//image is the uploaded event.target.files[0]; -const data = await new Promise((resolve, reject) => { - const reader = new FileReader(); - reader.onload = () => { - if (reader.result instanceof ArrayBuffer) { - resolve(reader.result); - } else { - reject(new Error("Not an ArrayBuffer")); - } - }; - reader.readAsArrayBuffer(image); -}); -``` - -Create an attachment object: - -```tsx [TypeScript] -// Local file details -const attachment = { - filename: image?.name, - mimeType: image?.type, - data: new Uint8Array(data), -}; -``` - -Use `RemoteAttachmentCodec.encodeEncrypted` to encrypt an attachment: - -```tsx [TypeScript] -const encryptedEncoded = await RemoteAttachmentCodec.encodeEncrypted( - attachment, - new AttachmentCodec(), -); -``` - -Upload an encrypted attachment to a location where it will be accessible via an HTTPS GET request. This location will depend on which storage provider you use based on your needs. For example, the [xmtp.chat](https://xmtp.chat/) example app uses web3.storage. (This information is shared for educational purposes only and is not an endorsement.) - -

Now that you have a `url`, you can create a `RemoteAttachment`:

- -```jsx [JavaScript] -const remoteAttachment = { - url: url, - contentDigest: encryptedEncoded.digest, - salt: encryptedEncoded.salt, - nonce: encryptedEncoded.nonce, - secret: encryptedEncoded.secret, - scheme: "https://", - filename: attachment.filename, - contentLength: attachment.data.byteLength, -}; -``` - -Now that you have a remote attachment, you can send it: - -```tsx [TypeScript] -await conversation.send(remoteAttachment, { - contentType: ContentTypeRemoteAttachment, -}); -``` -
- -
-Load the hooks and components you need: - -```jsx [JavaScript] -import { useSendMessage } from "@xmtp/react-sdk"; -import { - RemoteAttachmentCodec, - ContentTypeRemoteAttachment, -} from "@xmtp/content-type-remote-attachment"; - -// Inside your component... -const { sendMessage } = useSendMessage(); -``` - -Load the file. This example uses a web browser to load the file: - -```jsx [JavaScript] -//image is the uploaded event.target.files[0]; -const data = await new Promise((resolve, reject) => { - const reader = new FileReader(); - reader.onload = () => { - if (reader.result instanceof ArrayBuffer) { - resolve(reader.result); - } else { - reject(new Error("Not an ArrayBuffer")); - } - }; - reader.readAsArrayBuffer(image); -}); -``` - -Create an attachment object: - -```tsx [TypeScript] -// Local file details -const attachment = { - filename: image?.name, - mimeType: image?.type, - data: new Uint8Array(data), -}; -``` - -Use `RemoteAttachmentCodec.encodeEncrypted` to encrypt an attachment: - -```tsx [TypeScript] -const encryptedEncoded = await RemoteAttachmentCodec.encodeEncrypted( - attachment, - new AttachmentCodec(), -); -``` - -Upload an encrypted attachment anywhere where it will be accessible via an HTTPS GET request. For example, you can use web3.storage or Thirdweb. - -**Web3 Storage** - -```tsx [TypeScript] -const { Web3Storage } = require("web3.storage"); - -class Upload { - constructor(name, data) { - this.name = name; - this.data = data; - } - - stream() { - const self = this; - return new ReadableStream({ - start(controller) { - controller.enqueue(Buffer.from(self.data)); - controller.close(); - }, - }); - } -} - -const upload = new Upload("uploadIdOfYourChoice", encryptedEncoded.payload); - -const web3Storage = new Web3Storage({ - token: "YOUR-TOKEN-HERE", -}); - -const cid = await web3Storage.put([upload]); -const url = `https://${cid}.ipfs.w3s.link/uploadIdOfYourChoice`; -``` - -**Thirdweb** - -```tsx [TypeScript] -import { useStorageUpload } from "@thirdweb-dev/react"; -const { mutateAsync: upload } = useStorageUpload(); -const uploadUrl = await upload({ - //encryptedEncoded.payload.buffer is a Uint8Array - //We need to convert it to a File to upload it to the IPFS network - data: [new File([encryptedEncoded.payload.buffer], file.name)], // Convert Uint8Array back to File - options: { uploadWithGatewayUrl: true, uploadWithoutDirectory: true }, -}); -const url = uploadUrl[0]; -``` - -Now that you have a `url`, you can create a `RemoteAttachment`: - -```jsx [JavaScript] -const remoteAttachment = { - url: url, - contentDigest: encryptedEncoded.digest, - salt: encryptedEncoded.salt, - nonce: encryptedEncoded.nonce, - secret: encryptedEncoded.secret, - scheme: "https://", - filename: attachment.filename, - contentLength: attachment.data.byteLength, -}; -``` - -Now that you have a remote attachment, you can send it: - -```tsx [TypeScript] -await sendMessage(conversation, remoteAttachment, ContentTypeRemoteAttachment); -``` - -
- -
- -Create an attachment object: - -```kotlin [Kotlin] -val attachment = Attachment( -filename = "test.txt", -mimeType = "text/plain", -data = "hello world".toByteStringUtf8(), -) -``` - -Encode and encrypt an attachment for transport: - -```kotlin [Kotlin] -val encodedEncryptedContent = RemoteAttachment.encodeEncrypted( -content = attachment, -codec = AttachmentCodec(), -) -``` - -Create a remote attachment from an attachment: - -```kotlin [Kotlin] -val remoteAttachment = RemoteAttachment.from( - encryptedEncodedContent = encodedEncryptedContent -) -remoteAttachment.contentLength = attachment.data.size() -remoteAttachment.filename = attachment.filename -``` - -Send a remote attachment and set the `contentType`: - -```kotlin [Kotlin] -val newConversation = client.conversations.newConversation(walletAddress) - -newConversation.send( -content = remoteAttachment, -options = SendOptions(contentType = ContentTypeRemoteAttachment), -) -``` - -
- -
- -Create an attachment object: - -```swift [Swift] -let attachment = Attachment( - filename: "screenshot.png", - mimeType: "image/png", - data: Data(somePNGData) -) -``` - -Encode and encrypt an attachment for transport: - -```swift [Swift] -// Encode an attachment and encrypt the encoded content -const encryptedAttachment = try RemoteAttachment.encodeEncrypted( - content: attachment, - codec: AttachmentCodec() -) -``` - -Upload an encrypted attachment anywhere where it will be accessible via an HTTPS GET request. For example, you can use web3.storage: - -```swift [Swift] -func upload(data: Data, token: String): String { - let url = URL(string: "https://api.web3.storage/upload")! - var request = URLRequest(url: url) - request.addValue("Bearer \(token)", forHTTPHeaderField: "Authorization") - request.addValue("XMTP", forHTTPHeaderField: "X-NAME") - request.httpMethod = "POST" - - let responseData = try await URLSession.shared.upload(for: request, from: data).0 - let response = try JSONDecoder().decode(Web3Storage.Response.self, from: responseData) - - return "https://\(response.cid).ipfs.w3s.link" -} - -let url = upload(data: encryptedAttachment.payload, token: YOUR_WEB3_STORAGE_TOKEN) -``` - -Create a remote attachment from an attachment: - -```swift [Swift] -let remoteAttachment = try RemoteAttachment( - url: url, - encryptedEncodedContent: encryptedEncodedContent -) -``` - -Send a remote attachment and set the `contentType`: - -```swift [Swift] -try await conversation.send( - content: remoteAttachment, - options: .init( - contentType: ContentTypeRemoteAttachment, - contentFallback: "a description of the image" - ) -) -``` -
- -
- -This method takes a `DecryptedLocalAttachment` object as an argument: - -```jsx [JavaScript] -const { encryptedLocalFileUri, metadata } = await alice.encryptAttachment({ - fileUri: `file://${file}`, - mimeType: "text/plain", -}); -``` - -Upload an encrypted file to a remote server: - -```jsx [JavaScript] -let url = await uploadFile(encryptedLocalFileUri); -``` - -Send a remote attachment message: - -```jsx [JavaScript] -await convo.send({ - remoteAttachment: { - ...metadata, - scheme: "https://", - url, - }, -}); -``` -
- -::: - -## Receive, decode, and decrypt a remote attachment - -Now that you can receive a remote attachment, you need a way to receive a remote attachment. For example: - -:::code-group - -
- -```tsx [TypeScript] -import { ContentTypeRemoteAttachment } from "@xmtp/content-type-remote-attachment"; - -if (message.contentType.sameAs(RemoteAttachmentContentType)) { - const attachment = await RemoteAttachmentCodec.load(message.content, client); -} -``` - -You now have the original attachment: - -```bash [Bash] -attachment.filename // => "screenshot.png" -attachment.mimeType // => "image/png", -attachment.data // => [the PNG data] -``` - -Once you've created the attachment object, you can create a preview to show in the message input field before sending: - -```tsx [TypeScript] -const objectURL = URL.createObjectURL( - new Blob([Buffer.from(attachment.data)], { - type: attachment.mimeType, - }), -); - -const img = document.createElement("img"); -img.src = objectURL; -img.title = attachment.filename; -``` -
- -
- -```jsx [JavaScript] -import { ContentTypeRemoteAttachment } from "@xmtp/content-type-remote-attachment"; - -const contentType = ContentTypeId.fromString(message.contentType); -if (contentType.sameAs(ContentTypeRemoteAttachment)) { - // The message is a RemoteAttachment - const attachment = await RemoteAttachmentCodec.load(message.content, client); -} -``` - -You now have the original attachment: - -```bash [Bash] -attachment.filename // => "screenshot.png" -attachment.mimeType // => "image/png", -attachment.data // => [the PNG data] -``` - -Once you've created the attachment object, you can create a preview to show in the message input field before sending: - -```tsx [TypeScript] -const objectURL = URL.createObjectURL( - new Blob([Buffer.from(attachment.data)], { - type: attachment.mimeType, - }), -); - -const img = document.createElement("img"); -img.src = objectURL; -img.title = attachment.filename; -``` -
- - -```kotlin [Kotlin] -val message = newConversation.messages().first() -val loadedRemoteAttachment: RemoteAttachment = messages.content() -loadedRemoteAttachment.fetcher = Fetcher() -runBlocking { - val attachment: Attachment = loadedRemoteAttachment.load() -} -``` - -
- -```swift [Swift] -let attachment: Attachment = try await remoteAttachment.content() -``` - -You now have the original attachment: - -```swift [Swift] -attachment.filename // => "screenshot.png" -attachment.mimeType // => "image/png", -attachment.data // => [the PNG data] -``` - -Once you've created the attachment object, you can create a preview to show in the message input field before sending: - -```swift [Swift] -import UIKIt -import SwiftUI - -struct ContentView: View { - var body: some View { - Image(uiImage: UIImage(data: attachment.data)) - } -} -``` - -
- -
- -On the receiving end, you can use the `decryptAttachment` method to decrypt the downloaded file. This method takes an `EncryptedLocalAttachment` object as an argument and returns a `DecryptedLocalAttachment` object. - -```jsx [JavaScript] -if (message.contentTypeId === "xmtp.org/remoteStaticAttachment:1.0") { - // Now we can decrypt the downloaded file using the message metadata. - const attached = await xmtp_client.decryptAttachment({ - encryptedLocalFileUri: downloadedFileUri, - metadata: message.content() as RemoteAttachmentContent, - }) - - //attached.filename - //attached.mimeType - //attached.fileUri -} -``` - -Display the attachment: - -```jsx [JavaScript] - -``` -
- -::: - -To handle unsupported content types, refer to the [fallback](/dms/messages#handle-an-unsupported-content-type-error) section. diff --git a/docs/pages/content-types/reply.mdx b/docs/pages/content-types/reply.mdx deleted file mode 100644 index 6e3e1c9..0000000 --- a/docs/pages/content-types/reply.mdx +++ /dev/null @@ -1,256 +0,0 @@ ---- -description: Learn how to use the reply content type to support quote replies in your app built with XMTP ---- - -# Support replies in your app built with XMTP - -Use the reply content type to support quote replies in your app. A reply is a method to directly respond to a specific message in a conversation. Users can select and reply to a particular message instead of sending a new one. - -## Use a local database for performance - -Use a local database to store replies. This will enable your app to performantly display a reply with its [referenced message](#send-a-reply) when rendering message lists. - -To learn more about using a local database, see [Use local-first architecture](/perf-ux/local-first). - -## Configure the content type - -In some SDKs, the `ReplyCodec` is already included in the SDK. If not, you can install the package using the following command: - -:::code-group - -
-In the JavaScript SDK, you need to import this package first. - -```bash [Bash] -npm i @xmtp/content-type-reply -``` - -After importing the package, you can register the codec. - -```jsx [JavaScript] -import { ContentTypeReply, ReplyCodec } from "@xmtp/content-type-reply"; -// Create the XMTP client -const xmtp = await Client.create(signer, { env: "dev" }); -xmtp.registerCodec(new ReplyCodec()); -``` -
- -
-The React SDK supports all current standards-track content types, but only text messages are enabled out of the box. Adding support for other standards-track content types requires a bit of configuration. - -```jsx [JavaScript] -import { - XMTPProvider, - replyContentTypeConfig, -} from "@xmtp/react-sdk"; - -const contentTypeConfigs = [ - replyContentTypeConfig, -]; - -createRoot(document.getElementById("root") as HTMLElement).render( - - - - - , -); -``` -
- -```kotlin [Kotlin] -import org.xmtp.android.library.codecs.ReplyCodec - -Client.register(codec = ReplyCodec()) -``` - -```swift [Swift] -Client.register(codec: ReplyCodec()) -``` - -```jsx [React Native] -const client = await Client.create(signer, { - env: "production", - codecs: [new ReplyCodec()], -}); -``` - -::: - -## Send a reply - -Once you've created a reply, you can send it. Replies are represented as objects with two keys: - -- `reference`: ID of the message being replied to - -- `content`: String representation of the reply - -:::code-group - -```tsx [JavaScript] -import { ContentTypeText } from "@xmtp/content-type-text"; -import { ContentTypeReply } from "@xmtp/content-type-reply"; -import type { Reply } from "@xmtp/content-type-reply"; - -const reply: Reply = { - reference: someMessageID, - contentType: ContentTypeText - content: "I concur", -}; - -await conversation.send(reply, { - contentType: ContentTypeReply, -}); -``` - -```tsx [React] -import { useSendMessage } from "@xmtp/react-sdk"; -import { ContentTypeReply } from "@xmtp/content-type-reply"; - -const { sendMessage } = useSendMessage(); - -const replyContent = { - content: "Your reply content here", - contentType: ContentTypeText, - reference: "originalMessageXmtpId", -}; - -sendMessage(conversation, replyContent, ContentTypeReply); -``` - -```kotlin [Kotlin] -import org.xmtp.android.library.codecs.ContentTypeReply -import org.xmtp.android.library.codecs.ContentTypeText -import org.xmtp.android.library.codecs.Reply - -// Assuming aliceConversation and messageToReact are already defined -val reply = Reply( - reference = messageToReact.id, - content = "Hello", - contentType = ContentTypeText -) - -aliceConversation.send( - content = reply, - options = SendOptions(contentType = ContentTypeReply), -) -``` - -```swift [Swift] -let reply = Reply( - reference: messageToReply.id, - content: "Hello", - contentType: ContentTypeText -) - -try await conversation.send( - content: reply, - options: .init(contentType: ContentTypeReply) -) -``` - -```jsx [React Native] -// Assuming you have a conversation object and the ID of the message you're replying to -const replyContent = { - reply: { - reference: messageId, // ID of the message you're replying to - content: { - text: "This is a reply", // Content of the reply - }, - }, -}; - -await conversation.send(replyContent); -``` - -::: - -## Receive the content type - -:::code-group - -```tsx [JavaScript] -if (message.contentType.sameAs(ContentTypeReply)) { - // We've got a reply. - const reply: Reply = message.content; -} -``` - -
- -```jsx [JavaScript] -import { ContentTypeId } from "@xmtp/react-sdk"; -import { ContentTypeReply } from "@xmtp/content-type-reply"; - -const contentType = ContentTypeId.fromString(message.contentType); - -if (ContentTypeReply.sameAs(contentType)) { - // We've got a reply. - const reply = message.content as Reply; - // Use reply... -} -``` - -**getReplies** - -Use to retrieve all replies for a given message. It takes a message object and returns an array of reply IDs. - -```jsx [JavaScript] -import { getReplies } from "@xmtp/react-sdk"; -const replies = getReplies(message); -``` - -**hasReply** - -Use to check if a given message has any replies. It takes a message object and returns a boolean indicating whether the message has replies. - -```jsx [JavaScript] -import { hasReply } from "@xmtp/react-sdk"; -const messageHasReply = hasReply(message); -``` - -**getOriginalMessageFromReply** - -Use to retrieve the original message the reply is responding to. It takes a reply message object and returns the original message object. - -```jsx [JavaScript] -import { getOriginalMessageFromReply } from "@xmtp/react-sdk"; -const originalMessage = await getOriginalMessageFromReply(replyMessage, db); -``` -
- -```kotlin [Kotlin] -if (encodedContent.type == ContentTypeReply) { - // The message is a reply - val reply: Reply? = message.content() - println("Reply to: ${reply?.reference}") - println("Content: ${reply?.content}") -} -``` - -```swift [Swift] -let content: Reply = try message.content() -``` - -```jsx [React Native] -if (message.contentTypeId === "xmtp.org/reply:1.0") { - const reply = message.content(); - if (reply) { - const replyContent: ReplyContent = reply; - const replyContentType = replyContent.contentType; - const codec = client.codecRegistry[replyContentType]; - const actualReplyContent = codec.decode(replyContent.content); - } -} -``` - -::: - -To handle unsupported content types, refer to the [fallback](/dms/messages#handle-an-unsupported-content-type-error) section. - -## Display the reply - -How you choose to display replies in your app is up to you. It might be useful to look at the user experience for replies in popular apps such as Telegram and Discord. -For example, in Discord, users can reply to individual messages, and the reply provides a link to the original message. - -Note that the user experience of replies in iMessage and Slack follows more of a threaded pattern, where messages display in logical groupings, or threads. This reply content type doesn't support the threaded pattern. If you'd like to request support for a threaded reply pattern, [post an XIP idea](https://community.xmtp.org/c/development/ideas/54). diff --git a/docs/pages/content-types/transaction-ref.mdx b/docs/pages/content-types/transaction-ref.mdx deleted file mode 100644 index 9a7d485..0000000 --- a/docs/pages/content-types/transaction-ref.mdx +++ /dev/null @@ -1,161 +0,0 @@ ---- -description: Learn how to implement an onchain transaction reference content type ---- - -# Support onchain transaction references in your app built with XMTP - -This package provides an XMTP content type to support on-chain transaction references. It is a reference to an on-chain transaction sent as a message. This content type facilitates sharing transaction hashes or IDs, thereby providing a direct link to on-chain activities. Transaction references serve to display transaction details, facilitating the sharing of on-chain activities, such as token transfers, between users. - -:::tip[Open for feedback] - -You're welcome to provide feedback by commenting on [XIP-21: On-chain transaction reference content type](https://community.xmtp.org/t/xip-21-on-chain-transaction-reference-content-type/532). - -::: - -## Configure the content type - -:::code-group - -
-

In the JavaScript SDK, you need to import this package first.

- -```bash [Bash] -npm i @xmtp/content-type-transaction-reference -``` - -

After importing the package, you can register the codec.

- -```jsx [JavaScript] -import { - ContentTypeTransactionReference, - TransactionReferenceCodec, -} from "@xmtp/content-type-transaction-reference"; -// Create the XMTP client -const xmtp = await Client.create(signer, { env: "dev" }); -xmtp.registerCodec(new TransactionReferenceCodec()); -``` -
- -```text [React] -Code sample coming soon -``` - -```text [Kotlin] -Code sample coming soon -``` - -```text [Swift] -Code sample coming soon -``` - -```text [React Native] -Code sample coming soon -``` - -::: - -## Send a transaction reference - -With XMTP, a transaction reference is represented as an object with the following keys: - -:::code-group - -
- -```tsx [JavaScript] -const transactionReference: TransactionReference = { - /** - * Optional namespace for the networkId - */ - namespace: "eip155"; - /** - * The networkId for the transaction, in decimal or hexadecimal format - */ - networkId: 1; - /** - * The transaction hash - */ - reference: "0x123...abc"; - /** - * Optional metadata object - */ - metadata: { - transactionType: "transfer", - currency: "USDC", - amount: 100000, // In integer format, this represents 1 USDC (100000/10^6) - decimals: 6, // Specifies that the currency uses 6 decimal places - fromAddress: "0x456...def", - toAddress: "0x789...ghi" - }; -}; -``` - -

Once you have a transaction reference, you can send it as part of your conversation:

- -```jsx [JavaScript] -await conversation.messages.send(transactionReference, { - contentType: ContentTypeTransactionReference, -}); -``` -
- -```text [React] -Code sample coming soon -``` - -```text [Kotlin] -Code sample coming soon -``` - -```text [Swift] -Code sample coming soon -``` - -```text [React Native] -Code sample coming soon -``` - -::: - -## Receive a transaction reference - -To receive and process a transaction reference, you can use the following code samples. - -To handle unsupported content types, refer to the [fallback](/dms/messages#handle-an-unsupported-content-type-error) section. - -:::code-group - -```tsx [JavaScript] -// Assume `loadLastMessage` is a thing you have -const message: DecodedMessage = await loadLastMessage(); - -if (!message.contentType.sameAs(ContentTypeTransactionReference)) { - // Handle non-transaction reference message - return; -} - -const transactionRef: TransactionReference = message.content; -// Process the transaction reference here -``` - -```text [React] -Code sample coming soon -``` - -```text [Kotlin] -Code sample coming soon -``` - -```text [Swift] -Code sample coming soon -``` - -```text [React Native] -Code sample coming soon -``` - -::: - -## Display the transaction reference - -Displaying a transaction reference typically involves rendering details such as the transaction hash, network ID, and any relevant metadata. Because the exact UI representation can vary based on your app's design, you might want to fetch on-chain data before showing it to the user. diff --git a/docs/pages/dms/conversations.mdx b/docs/pages/dms/conversations.mdx deleted file mode 100644 index 36a5ce4..0000000 --- a/docs/pages/dms/conversations.mdx +++ /dev/null @@ -1,335 +0,0 @@ ---- -description: Learn how to start, list, and cache conversations with XMTP ---- - -# Start, list, and cache conversations with XMTP - -Most of the time, when interacting with the network, you'll want to do it through conversations. Conversations are between two wallets addresses. - -## Check if an address is on the network - -First you need to check if the address you want to message is on the XMTP network. You can do this by calling `client.canMessage` with the address you want to message. - -:::code-group - -
- -```jsx [JavaScript] -const isOnNetwork = await client.canMessage( - "0x3F11b27F323b62B159D2642964fa27C46C841897", - { env: "production" }, -); -``` - -You can bulk check addresses up to 1k at the same time. - -```jsx [JavaScript] -const areOnNetwork = await client.canMessage([ - "address1", - "address2", - "...", - "address1000", -]); -``` -
- -```tsx [React] -import { useCanMessage } from "@xmtp/react-sdk"; - -export const CanMessage: React.FC = () => { - const [peerAddress, setPeerAddress] = useState(""); - const [isOnNetwork, setIsOnNetwork] = useState(false); - const [isLoading, setIsLoading] = useState(false); - - const { canMessage } = useCanMessage(); - - const handleAddressChange = useCallback((e: React.KeyboardEvent) => { - setPeerAddress(e.target.value); - }, []); - - const handleCheckAddress = useCallback(async (e: FormEvent) => { - e.preventDefault(); - if (isValidAddress(peerAddress)) { - setIsLoading(true); - setIsOnNetwork(await canMessage(peerAddress)); - setIsLoading(false); - } else { - setIsOnNetwork(false); - } - }; - void checkAddress(); - }, [peerAddress]); - - return ( -
- -
- ); -}; -``` - -```kotlin [Kotlin] - val canMessage = client.canMessage(bobClient.address) -``` - -```swift [Swift] -let canAliceMessageBob = try await client.canMessage(bobClient.address) -``` - -```tsx [React Native] -import { Client } from "@xmtp/xmtp-react-native"; - -const isOnDevNetwork = await Client.canMessage( - "0x3F11b27F323b62B159D2642964fa27C46C841897", -); -``` -::: - -Be sure to provide error messaging when a user enters an address in the **To** field and the address hasn't yet created an XMTP identity. - -
- -
- -## Start a new conversation - -You can create a new conversation with any address activated on the XMTP network. To learn more about supported addresses, see [Chains](/get-started/faq#chains). - -:::code-group - -```ts [JavaScript] -const newConversation = await xmtp.conversations.newConversation( - "0x937C0d4a6294cdfa575de17382c7076b579DC176", -); -``` - -```tsx [React] -import { isValidAddress, useStartConversation } from "@xmtp/react-sdk"; -import { useCallback, useState } from "react"; - -export const StartConversation: React.FC = () => { - const [peerAddress, setPeerAddress] = useState(""); - const [message, setMessage] = useState(""); - const [isLoading, setIsLoading] = useState(false); - - const { startConversation } = useStartConversation(); - - const handleAddressChange = useCallback( - (e: ChangeEvent) => { - setPeerAddress(e.target.value); - }, - [], - ); - - const handleMessageChange = useCallback( - (e: ChangeEvent) => { - setMessage(e.target.value); - }, - [], - ); - - const handleStartConversation = useCallback( - async (e: React.FormEvent) => { - e.preventDefault(); - if (peerAddress && message) { - setIsLoading(true); - const conversation = await startConversation(peerAddress, message); - setIsLoading(false); - } - }, - [message, peerAddress, startConversation], - ); - - return ( -
- - -
- ); -}; -``` - -```kotlin [Kotlin] -val newConversation = - client.conversations.newConversation("0x3F11b27F323b62B159D2642964fa27C46C841897") -``` - -```swift [Swift] -let newConversation = try await client.conversations.newConversation( - with: "0x3F11b27F323b62B159D2642964fa27C46C841897") -``` - -```tsx [React Native] -const newConversation = await xmtp.conversations.newConversation( - "0x3F11b27F323b62B159D2642964fa27C46C841897", -); -``` - -::: - -## List existing conversations - -You can get a list of all conversations that have one or more messages. - -These conversations include all conversations for a user **regardless of which app created the conversation.** This functionality provides the concept of a [portable inbox](/protocol/portable-inbox), which enables a user to access all of their conversations in any app built with XMTP. - -To provide a user-friendly cold start (first load), display a "Loading conversations" status message and a progress bar. - -:::code-group - -```ts [JavaScript] -const allConversations = await xmtp.conversations.list(); -// Say gm to everyone you've been chatting with -for (const conversation of allConversations) { - console.log(`Saying GM to ${conversation.peerAddress}`); - await conversation.send("gm"); -} -``` - -```tsx [React] -export const ListConversations: React.FC = () => { - const { conversations, error, isLoading } = useConversations(); - - if (error) { - return "An error occurred while loading conversations"; - } - - if (isLoading) { - return "Loading conversations..."; - } - - return ( - ... - ); -}; -``` - -```kotlin [Kotlin] -val allConversations = client.conversations.list() - -for (conversation in allConversations) { - print("Saying GM to ${conversation.peerAddress}") - conversation.send(text = "gm") -} -``` - -```swift [Swift] -let allConversations = try await client.conversations.list() - -for conversation in allConversations { - print("Saying GM to \(conversation.peerAddress)") - try await conversation.send(content: "gm") -} -``` - -```tsx [React Native] -const allConversations = await xmtp.conversations.list(); -// Say gm to everyone you've been chatting with -for (const conversation of allConversations) { - console.log(`Saying GM to ${conversation.peerAddress}`); - await conversation.send("gm"); -} -``` -:::: - -## Cache the conversation list - -When running in a browser, conversations are cached in `LocalStorage` by default. Running `client.conversations.list()` will update that cache and persist the results to the browser's `LocalStorage`. The data stored in `LocalStorage` is encrypted and signed using the Keystore's identity key so that attackers cannot read the sensitive contents or tamper with them. Caching the conversation list can improve performance by up to 90%. - -To disable this behavior, set the `persistConversations` client option to `false`. - -:::code-group - -```ts [JavaScript] -const clientWithNoCache = await Client.create(signer, { - persistConversations: false, -}); -``` - -```tsx [React] -const { initialize } = useClient(); -const options = { - persistConversations: false, -}; -await initialize({ signer, options }); -``` - -
-```kotlin -val client = Client().create(signer, { env: "dev" }) -val conversations = client.conversations.export() -saveConversationsSomewhere(JSON.stringify(conversations)) -// To load the conversations in a new SDK instance you can run: - -val client = Client.create(signer, { env: "dev" }) -val conversations = JSON.parse(loadConversationsFromSomewhere()) -val client.importConversation(conversations) -``` - -**Serialize/Deserialize conversations**: You can save a conversation object locally using its `encodedContainer` property. This returns a `ConversationContainer` object which conforms to `Codable`. - -```kotlin [Kotlin] -// Get a conversation -val conversation = - client.conversations.newConversation("0x3F11b27F323b62B159D2642964fa27C46C841897") - -// Dump it to JSON -val gson = GsonBuilder().create() -val data = gson.toJson(conversation) - -// Get it back from JSON -val containerAgain = - gson.fromJson(data.toString(StandardCharsets.UTF_8), ConversationV2Export::class.java) - -// Get an actual Conversation object like we had above -val decodedConversation = containerAgain.decode(client) - -decodedConversation.send(text = "hi") -``` -
- -
- -**Serialize/Deserialize conversations**: You can save a conversation object locally using its `encodedContainer` property. This returns a `ConversationContainer` object which conforms to `Codable`. - -```swift [Swift] -// Get a conversation -let conversation = try await client.conversations.newConversation( - with: "0x3F11b27F323b62B159D2642964fa27C46C841897") - -// Get a container. -let container = conversation.encodedContainer - -// Dump it to JSON -let encoder = JSONEncoder() -let data = try encoder.encode(container) - -// Get it back from JSON -let decoder = JSONDecoder() -let containerAgain = try decoder.decode(ConversationContainer.self, from: data) - -// Get an actual Conversation object like we had above -let decodedConversation = containerAgain.decode(with: client) -try await decodedConversation.send(text: "hi") -``` -
- -```text [React Native] -Code sample coming soon -``` -::: diff --git a/docs/pages/dms/messages.mdx b/docs/pages/dms/messages.mdx deleted file mode 100644 index 2523e01..0000000 --- a/docs/pages/dms/messages.mdx +++ /dev/null @@ -1,356 +0,0 @@ ---- -description: Learn how to send and list messages ---- - -# Send and list messages with XMTP - -The message payload can be a plain string, but you can also support other content types. To learn more, see [Content types](/content-types/content-types). - -## Send messages - -To send a message, the recipient must have already started their client at least once and consequently advertised their key bundle on the network. - -Messages are limited to just short of 1MB (1048214 bytes). Use [remote attachments](/content-types/remote-attachment) to support larger messages. - -:::code-group - -
- -```ts [TypeScript] -const conversation = await xmtp.conversations.newConversation( - "0x3F11b27F323b62B159D2642964fa27C46C841897", -); -await conversation.send("Hello world"); -``` - -You might want to consider [optimistically sending messages](/perf-ux/optimistic-sending). This way, the app will not have to wait for the network to process the message first. Optimistic sending is especially useful for mobile apps where the user might have a spotty connection, making the app continue to run with multiple threads. - -```tsx [TypeScript] -// standard (string) message -const preparedTextMessage = await conversation.prepareMessage(messageText); -//After preparing an optimistic message, use its `send` method to send it. -try { - preparedTextMessage.send(); -} catch (e) { - // handle error, enable canceling and retries (see below) -} -``` -
- -
- -```tsx [TypeScript] -import { useSendMessage } from "@xmtp/react-sdk"; -import type { Conversation } from "@xmtp/react-sdk"; -import { useCallback, useState } from "react"; - -export const SendMessage: React.FC<{ conversation: CachedConversation }> = ({ - conversation, -}) => { - const [peerAddress, setPeerAddress] = useState(""); - const [message, setMessage] = useState(""); - const [isSending, setIsSending] = useState(false); - const { sendMessage } = useSendMessage(); - - const handleAddressChange = useCallback( - (e: ChangeEvent) => { - setPeerAddress(e.target.value); - }, - [], - ); - - const handleMessageChange = useCallback( - (e: ChangeEvent) => { - setMessage(e.target.value); - }, - [], - ); - - const handleSendMessage = useCallback( - async (e: React.FormEvent) => { - e.preventDefault(); - if (peerAddress && isValidAddress(peerAddress) && message) { - setIsSending(true); - await sendMessage(conversation, message); - setIsSending(false); - } - }, - [message, peerAddress, sendMessage], - ); - - return ( -
- - -
- ); -}; -``` - -**Optimistic sending with React** - -When a user sends a message with XMTP, they might experience a slight delay between sending the message and seeing their sent message display in their app UI. - -Typically, the slight delay is caused by the app needing to wait for the XMTP network to finish processing the message before the app can display the message in its UI. - -The local-first architecture of the React SDK automatically includes optimistic sending, which immediately displays the sent message in the sender’s UI while processing the message in the background. Optimistic sending provides the sender with immediate feedback and enables them to continue messaging without waiting for their previous message to finish processing. - -Messages in the sending state have their `isSending` property set to `true`. - -**Handle messages that fail to send with React** - -If a message fails to complete the sending process, you must provide an error state that alerts the user and enables them to either resend the message or cancel sending the message. - -While in this unsent state, the message remains in its original location in the user’s conversation flow, with any newer sent and received messages displaying after it. - -If the user resends the message, the message moves into the most recently sent message position in the conversation. Once it successfully sends, it remains in that position. - -If the user cancels sending the message, the message is removed from the conversation flow. - -Messages that fail to send have their `hasSendError` property set to `true`. - -**Resend a failed message** - -Use the `resendMessage` function from the `useResendMessage` hook to resend a failed message. - -```tsx [TypeScript] -const { resendMessage } = useResendMessage(); - -// resend the message -resendMessage(failedMessage); -``` - -
- -```kotlin [Kotlin] -val conversation = - client.conversations.newConversation("0x3F11b27F323b62B159D2642964fa27C46C841897") - -conversation.send(text = "Hello world") -``` - -```swift [Swift] -let conversation = try await client.conversations.newConversation( - with: "0x3F11b27F323b62B159D2642964fa27C46C841897") -try await conversation.send(content: "Hello world") -``` - -```tsx [React Native] -const conversation = await xmtp.conversations.newConversation( - "0x3F11b27F323b62B159D2642964fa27C46C841897", -); -await conversation.send("Hello world"); -``` - -::: - -## List messages in a conversation - -You can receive the complete message history in a conversation. - -:::code-group - -```ts [JavaScript] -for (const conversation of await xmtp.conversations.list()) { - // All parameters are optional and can be omitted - const opts = { - // Only show messages from last 24 hours - startTime: new Date(new Date().setDate(new Date().getDate() - 1)), - endTime: new Date(), - }; - const messagesInConversation = await conversation.messages(opts); -} -``` - -```tsx [React] -import { useCallback } from "react"; -import { useMessages } from "@xmtp/react-sdk"; -import type { CachedConversation } from "@xmtp/react-sdk"; - -export const Messages: React.FC<{ - conversation: CachedConversation; -}> = ({ conversation }) => { - // error callback - const onError = useCallback((err: Error) => { - // handle error - }, []); - - // messages callback - const onMessages = useCallback((msgs: DecodedMessage[]) => { - // do something with messages - }, []); - - const { error, messages, isLoading } = useMessages(conversation, { - onError, - onMessages, - }); - - if (error) { - return "An error occurred while loading messages"; - } - - if (isLoading) { - return "Loading messages..."; - } - - return ( - ... - ); -}; -``` - -```kotlin [Kotlin] -for (conversation in client.conversations.list()) { - val messagesInConversation = conversation.messages() -} -``` - -```swift [Swift] -for conversation in client.conversations.list() { - let messagesInConversation = try await conversation.messages() -} -``` - -```tsx [React Native] -for (const conversation of await xmtp.conversations.list()) { - const messagesInConversation = await conversation.messages(before: new Date( - new Date().setDate(new Date().getDate() - 1)), after: new Date()) -} -``` - -::: - -## List messages in a conversation with pagination - -If a conversation has a lot of messages, it's more performant to retrieve and process the messages page by page instead of handling all of the messages at once. - -:::code-group - -```text [JavaScript] -Automatically handled by the SDK -``` - -```text [React] -Automatically handled by the SDK -``` - -
- -Call `conversation.messages(limit: Int, before: Date)` to return the specified number of messages sent before that time. - -```kotlin [Kotlin] -val conversation = - client.conversations.newConversation("0x3F11b27F323b62B159D2642964fa27C46C841897") - -val messages = conversation.messages(limit = 25) -val nextPage = conversation.messages(limit = 25, before = messages[0].sent) -``` -
- -
- -Call `conversation.messages(limit: Int, before: Date)`, which will return the specified number of messages sent before that time. - -```swift [Swift] -let conversation = try await client.conversations.newConversation( - with: "0x3F11b27F323b62B159D2642964fa27C46C841897") - -let messages = try await conversation.messages(limit: 25) -let nextPage = try await conversation.messages(limit: 25, before: messages[0].sent) -``` -
- -```tsx [React Native] -const conversation = await xmtp.conversations.newConversation( - '0x3F11b27F323b62B159D2642964fa27C46C841897' -) - -for await (const page of conversation.messages({limit: 25})) { - for (const msg of page) { - // Breaking from the outer loop will stop the client from requesting any further pages - if (msg?.content() === 'gm') { - return - } - } -} -``` -::: - -## Handle unsupported content types - -As more [custom](/content-types/content-types#create-a-custom-content-type) and [standards-track](/content-types/content-types#standards-track-content-types) content types are introduced into the XMTP ecosystem, your app may encounter content types it does not support. This situation, if not handled properly, could lead to app crashes. - -Each message is accompanied by a `contentFallback` property, which offers a descriptive string representing the content type's expected value. It's important to note that content fallbacks are immutable and are predefined in the content type specification. In instances where `contentFallback` is `undefined`, such as read receipts, it indicates that the content is not intended to be rendered. If you're venturing into creating custom content types, you're provided with the flexibility to specify a custom fallback string. For a deeper dive into this, see [Build custom content types](/content-types/custom). - -:::code-group - -```jsx [JavaScript] -const codec = client.codecFor(content.contentType); -if (!codec) { - /*Not supported content type*/ - if (message.contentFallback !== undefined) { - return message.contentFallback; - } - // Handle other types like ReadReceipts which are not mean to be displayed -} -``` - -```tsx [React] -import { useClient, ContentTypeId } from "@xmtp/react-sdk"; -const { client } = useClient(); - -const contentType = ContentTypeId.fromString(message.contentType); -const codec = client.codecFor(contentType); -if (!codec) { - /*Not supported content type*/ - if (message.contentFallback !== undefined) { - return message.contentFallback; - } - // Handle other types like ReadReceipts which are not mean to be displayed -} -``` - -```kotlin [Kotlin] -val codec = client.codecRegistry.find(options?.contentType) -if (!codec) { - /*Not supported content type*/ - if (message.contentFallback != null) { - return message.contentFallback - } - // Handle other types like ReadReceipts which are not meant to be displayed -} -``` - -```swift [Swift] -let codec = client.codecRegistry.find(for: contentType) -if (!codec) { - /*Not supported content type*/ - if (message.contentFallback != null) { - return message.contentFallback - } - // Handle other types like ReadReceipts which are not meant to be displayed -} -``` - -```jsx [React Native] -//contentTypeID has the following structure `${contentType.authorityId}/${contentType.typeId}:${contentType.versionMajor}.${contentType.versionMinor}`; -const isRegistered = message.contentTypeID in client.codecRegistry; -if (!isRegistered) { - // Not supported content type - if (message?.fallback != null) { - return message?.fallback; - } - // Handle other types like ReadReceipts which are not meant to be displayed -} -``` -::: diff --git a/docs/pages/dms/overview.md b/docs/pages/dms/overview.md deleted file mode 100644 index 58ac99c..0000000 --- a/docs/pages/dms/overview.md +++ /dev/null @@ -1,299 +0,0 @@ ---- -sidebar_label: Overview -sidebar_position: 1 -description: "Get started building apps with XMTP." ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Get started with XMTP - -The [XMTP message API](/protocol/v2/architectural-overview#network-layer) revolves around a network client that allows retrieving and sending messages to other network participants. - -A client must be connected to a wallet on startup. If this is the very first time the client is created, the client will generate a [key bundle](/protocol/v2/key-generation-and-usage) that is used to [encrypt and authenticate messages](/protocol/v2/invitation-and-message-encryption). - -The key bundle persists encrypted in the network using a [wallet signature](/protocol/signatures). The public side of the key bundle is also regularly advertised on the network to allow parties to establish shared encryption keys. - -### Overview - -This is an overview of the core concepts and lines of code needed to use XMTP successfully. - - - - -```tsx -import { Client } from "@xmtp/xmtp-js"; -import { Wallet } from "ethers"; - -// You'll want to replace this with a wallet from your application -const signer = Wallet.createRandom(); -// Create the client with your wallet. This will connect to the XMTP development network by default -const xmtp = await Client.create(signer, { env: "dev" }); -// Start a conversation with XMTP -const conversation = await xmtp.conversations.newConversation( - "0x3F11b27F323b62B159D2642964fa27C46C841897", -); -// Load all messages in the conversation -const messages = await conversation.messages(); -// Send a message -await conversation.send("gm"); -// Listen for new messages in the conversation -for await (const message of await conversation.streamMessages()) { - console.log(`[${message.senderAddress}]: ${message.content}`); -} -``` - - - - -```tsx -import { - Client, - useStreamMessages, - useClient, - useMessages, - useConversations, - useCanMessage, - useStartConversation, -} from "@xmtp/react-sdk"; - -const { client, initialize } = useClient(); -const { conversations } = useConversations(); -const { startConversation } = useStartConversation(); -const { canMessage } = useCanMessage(); - -//Initialize -{ - !isConnected && ; -} - -const initXmtp = async () => { - const options = { - persistConversations: false, - env: "dev", - }; - await initialize({ keys, options, signer }); -}; - -// Start a conversation with XMTP -const add = "0x3F11b27F323b62B159D2642964fa27C46C841897"; -if (await canMessage(add)) { - const conversation = await startConversation(add, "hi"); -} - -//Stream messages -const [history, setHistory] = useState(null); -const { messages } = useMessages(conversation); -// Stream messages -const onMessage = useCallback((message) => { - setHistory((prevMessages) => { - const msgsnew = [...prevMessages, message]; - return msgsnew; - }); -}, []); -useStreamMessages(conversation, { onMessage }); -``` - - - - -```kotlin -// You'll want to replace this with a wallet from your application. -val account = PrivateKeyBuilder() - -// Create the client with your wallet. This will connect to the XMTP `dev` network by default. -// The account is anything that conforms to the `XMTP.SigningKey` protocol. -val client = Client().create(account = account) - -// Start a conversation with XMTP -val conversation = - client.conversations.newConversation("0x3F11b27F323b62B159D2642964fa27C46C841897") - -// Load all messages in the conversation -val messages = conversation.messages() -// Send a message -conversation.send(text = "gm") -// Listen for new messages in the conversation -conversation.streamMessages().collect { print("${message.senderAddress}: ${message.body}") } -``` - - - - -```swift -import XMTP - -// You'll want to replace this with a wallet from your application. -let account = try PrivateKey.generate() - -// Create the client with your wallet. This will connect to the XMTP `dev` network by default. -// The account is anything that conforms to the `XMTP.SigningKey` protocol. -let client = try await Client.create(account: account) - -// Start a conversation with XMTP -let conversation = try await client.conversations.newConversation( - with: "0x3F11b27F323b62B159D2642964fa27C46C841897") - -// Load all messages in the conversation -let messages = try await conversation.messages() -// Send a message -try await conversation.send(content: "gm") -// Listen for new messages in the conversation -for try await message in conversation.streamMessages() { - print("\(message.senderAddress): \(message.body)") -} -``` - - - - -```dart -import 'package:xmtp/xmtp.dart' as xmtp; -import 'package:web3dart/credentials.dart'; -import 'dart:math'; - -var signer = EthPrivateKey.createRandom(Random.secure()); -var api = xmtp.Api.create(); -var client = await xmtp.Client.createFromWallet(api, signer); - -//List conversations -var conversations = await client.listConversations(); -for (var convo in conversations) { - debugPrint('Saying GM to ${convo.peer}'); - await client.sendMessage(convo, 'gm'); -} - -//Listen for new conversations -var listening = client.streamConversations().listen((convo) { - debugPrint('Got a new conversation with ${convo.peer}'); -}); -// When you want to stop listening: -await listening.cancel(); - -//Send messages -var convo = await client.newConversation("0x..."); -await client.sendMessage(convo, 'gm'); - -//Listen for new messages -var listening = client.streamMessages(convo).listen((message) { - debugPrint('${message.sender}> ${message.content}'); -}); -// When you want to stop listening: -await listening.cancel(); -``` - - - - -```jsx -import { Client, Conversation, DecodedMessage } from '@xmtp/react-native-sdk'; - -const [addressText, setAddressText] = useState("No Connected Address"); -const [connected, setConnected] = useState(false); -const [client, setClient] = useState(undefined); -const [conversations, setConversations] = useState(undefined); -const [messages, setMessages] = useState(undefined); -const [conversation, setConversation] = useState(undefined); - -function connectRandomWallet() { - return async () => { - // NOTE: react-native-sdk testing - const client = await Client.createRandom('dev') - setClient(client); - const rnSDKAddress = await client.address; - // const address: string = await callIntoWebview("connectRandomWallet"); - setAddressText('react-native-sdk npm address: ' + rnSDKAddress); - setConnected(true); - getConversations(); - }; -} - -function getConversations() { - return async () => { - const conversations = await client?.conversations.list(); - setConversations(conversations); - }; -} - -function getMessages(conversation: Conversation) { - return async () => { - const messages = await conversation?.messages(); - setConversation(conversation); - setMessages(messages); - }; -} - -function sendMessage(message: string) { - return async () => { - await conversation?.send(message); - getMessages(conversation!!); - }; -} -``` - - - - -## Install - -To start with XMTP, install the XMTP client SDK: - - - - -```bash -yarn install @xmtp/xmtp-js -``` - - - - -```bash -npm install react @xmtp/react-sdk @xmtp/xmtp-js @xmtp/content-type-reaction @xmtp/content-type-remote-attachment @xmtp/content-type-reply -``` - - - - -You can find the latest package version on [Maven Central](https://central.sonatype.com/artifact/org.xmtp/android/0.0.5/versions). - -```bash -implementation 'org.xmtp:android:X.X.X' -``` - - - - -Use Xcode to add to the project (**File** > **Add Packages…**) or add this to your `Package.swift file`: - -```bash -.package(url: "https://github.com/xmtp/xmtp-ios", branch: "main") -``` - - - - -```bash -flutter pub add xmtp -``` - - - - -```bash -npm i @xmtp/react-native-sdk -``` - - - - -### Need to send a test message? - -Message this XMTP message bot to get an immediate `gm` reply: - -- `gm.xmtp.eth` (0x937C0d4a6294cdfa575de17382c7076b579DC176) - -### Troubleshooting - -- If you run into issues with Buffer and polyfills, see these [solutions](/get-started/faq#why-my-app-is-failing-saying-buffer-is-not-found) diff --git a/docs/pages/dms/streams.mdx b/docs/pages/dms/streams.mdx deleted file mode 100644 index 2e4d0fe..0000000 --- a/docs/pages/dms/streams.mdx +++ /dev/null @@ -1,308 +0,0 @@ ---- -description: Learn how to stream new conversations and messages ---- - -# Stream conversations and messages with XMTP - -XMTP supports real-time message delivery and retrieval. Once you initially retrieve existing conversations, you can listen for a real-time stream of new conversations and messages. - -## Listen for new conversations - -You can code your app to listen for new conversations in real time. Listening for new conversations lets your app display incoming messages from new contacts. - -:::code-group - -```ts [JavaScript] -const stream = await xmtp.conversations.stream(); -for await (const conversation of stream) { - console.log(`New conversation started with ${conversation.peerAddress}`); - // Say hello to your new friend - await conversation.send("Hi there!"); - // Break from the loop to stop listening - //This stream will continue infinitely. To end the stream, - //You can either break from the loop, or call `await stream.return()`. - break; -} -``` - -```tsx [React] -import { useCallback, useState } from "react"; -import { useStreamConversations } from "@xmtp/react-sdk"; -import type { Conversation } from "@xmtp/react-sdk"; - -export const NewConversations: React.FC = () => { - // track streamed conversations - const [streamedConversations, setStreamedConversations] = useState< - Conversation[] - >([]); - - // callback to handle incoming conversations - const onConversation = useCallback( - (conversation: Conversation) => { - setStreamedConversations((prev) => [...prev, conversation]); - }, - [], - ); - const { error } = useStreamConversations(onConversation); - - if (error) { - return "An error occurred while streaming conversations"; - } - - return ( - ... - ); -}; -``` - -```kotlin [Kotlin] -client.conversations.stream().collect { - print("New conversation started with ${it.peerAddress}") - // Say hello to your new friend - it.send(text = "Hi there!") -} -``` - -```swift [Swift] -for try await conversation in client.conversations.stream() { - print("New conversation started with \(conversation.peerAddress)") - - // Say hello to your new friend - try await conversation.send(content: "Hi there!") - - // Break from the loop to stop listening - //This stream will continue infinitely - break -} -``` - -```tsx [React Native] -import { useXmtp } from "@xmtp/react-native-sdk"; -const { client } = useXmtp(); - -useEffect(() => { - const streamConversations = async () => { - const unsubscribe = client.conversations.stream((conversation) => { - console.log("Streamed conversation:", conversation); - - setConversations((prevConversations) => { - const newConversations = [...prevConversations, conversation]; - return newConversations.sort( - (a, b) => new Date(b.createdAt) - new Date(a.createdAt), - ); - }); - }); - - // Optional: return a cleanup function to unsubscribe when the component unmounts - return () => { - console.log("Unsubscribing from conversation stream"); - //unsubscribe(); - }; - }; - - streamConversations(); -}, []); -``` -::: - -## Listen for new messages in a conversation - -You can code your app to listen for new incoming and outgoing messages in a conversation by calling `conversation.streamMessages()`. The stream returned by the `stream` methods is an asynchronous iterator. This means that the stream can be used by a for-await-of loop. - -:::warning[Important] -The stream is infinite. Therefore, any looping construct used with the stream won't terminate unless you explicitly initiate the termination. You can initiate the termination by breaking the loop or by making an external call to `return`. -::: - -:::code-group - -```ts [JavaScript] -const conversation = await xmtp.conversations.newConversation( - "0x3F11b27F323b62B159D2642964fa27C46C841897", -); -for await (const message of await conversation.streamMessages()) { - if (message.senderAddress === xmtp.address) { - // This message was sent from me - continue; - } - console.log(`New message from ${message.senderAddress}: ${message.content}`); -} -``` - -```tsx [React] -// The useStreamMessages hook streams new conversation messages on mount -// and exposes an error state. -import { useStreamMessages } from "@xmtp/react-sdk"; -import type { CachedConversation, DecodedMessage } from "@xmtp/react-sdk"; -import { useCallback, useEffect, useState } from "react"; - -export const StreamMessages: React.FC<{ - conversation: CachedConversation; -}> = ({ - conversation, -}) => { - // track streamed messages - const [streamedMessages, setStreamedMessages] = useState( - [], - ); - - // callback to handle incoming messages - const onMessage = useCallback( - (message: DecodedMessage) => { - setStreamedMessages((prev) => [...prev, message]); - }, - [streamedMessages], - ); - - useStreamMessages(conversation, {onMessage}); - - useEffect(() => { - setStreamedMessages([]); - }, [conversation]); - - return ( - ... - ); -}; -``` - -```kotlin [Kotlin] -val conversation = - client.conversations.newConversation("0x3F11b27F323b62B159D2642964fa27C46C841897") - -conversation.streamMessages().collect { - if (it.senderAddress == client.address) { - // This message was sent from me - } - - print("New message from ${it.senderAddress}: ${it.body}") -} -``` - -```swift [Swift] -let conversation = try await client.conversations.newConversation( - with: "0x3F11b27F323b62B159D2642964fa27C46C841897") - -for try await message in conversation.streamMessages() { - if message.senderAddress == client.address { - // This message was sent from me - continue - } - - print("New message from \(message.senderAddress): \(message.body)") -} -``` - -```tsx [React Native] -useEffect(() => { - // Define the callback function to be called for each new message - const handleMessage = async (message) => { - console.log( - `New message from ${message.senderAddress}: ${message.content()}`, - ); - setMessages((prevMessages) => updateMessages(prevMessages, message)); - }; - - // Optional: return a cleanup function to unsubscribe when the component unmounts - return () => { - console.log("Unsubscribing from message stream"); - // unsubscribe(); - }; -}, []); -``` -::: - -## Listen for new messages in all conversations - -:::warning[Important] - -There is a chance that the stream can miss messages if multiple new conversations are received while the stream is being updated to include a new conversation. - -::: - -:::code-group - -```ts [JavaScript] -for await (const message of await xmtp.conversations.streamAllMessages()) { - if (message.senderAddress === xmtp.address) { - // This message was sent from me - continue; - } - console.log(`New message from ${message.senderAddress}: ${message.content}`); -} -``` - -```tsx [React] -// The useStreamAllMessages hook streams new messages from all conversations -// on mount and exposes an error state. -import { useStreamAllMessages } from "@xmtp/react-sdk"; -import type { DecodedMessage } from "@xmtp/react-sdk"; -import { useCallback, useState } from "react"; - -export const StreamAllMessages: React.FC = () => { - // track streamed messages - const [streamedMessages, setStreamedMessages] = useState( - [], - ); - - // callback to handle incoming messages - const onMessage = useCallback( - (message: DecodedMessage) => { - setStreamedMessages((prev) => [...prev, message]); - }, - [streamedMessages], - ); - - useStreamAllMessages(onMessage); - - return ( - ... - ); -}; -``` - -```kotlin [Kotlin] -client.conversations.streamAllMessages().collect { - if (it.senderAddress == client.address) { - // This message was sent from me - } - - print("New message from ${it.senderAddress}: ${it.body}") -} -``` - -```swift [Swift] -for try await message in client.conversations.streamAllMessages() { - if message.senderAddress == client.address { - // This message was sent from me - continue - } - - print("New message from \(message.senderAddress): \(message.body)") -} -``` - -```tsx [React Native] -import { useXmtp } from "@xmtp/react-native-sdk"; - -const { client } = useXmtp(); - -useEffect(() => { - const startMessageStream = () => { - const unsubscribe = client.conversations.streamAllMessages((message) => { - console.log( - `New message from ${message.senderAddress}: ${message.content}`, - ); - }); - - // Optional: return a cleanup function to unsubscribe when the component unmounts - return () => { - console.log("Unsubscribing from message stream"); - // unsubscribe(); - }; - }; - - startMessageStream(); -}, []); -``` - -::: diff --git a/docs/pages/dms/troubleshoot.md b/docs/pages/dms/troubleshoot.md deleted file mode 100644 index a43acfa..0000000 --- a/docs/pages/dms/troubleshoot.md +++ /dev/null @@ -1,36 +0,0 @@ -# Troubleshooting - -This document provides troubleshooting tips for common developer support questions. - -## Why is my app failing with a "Buffer is not found" error? - -If you run into issues with `Buffer` and `polyfills`, try this solution: - -::::steps - -### Install the buffer dependency - -```bash [Bash] -npm i buffer -``` - -### Create a new file `polyfills.js` in the root of your project - -```tsx [TypeScript] -import { Buffer } from "buffer"; - -window.Buffer = window.Buffer ?? Buffer; -``` - -### On the first line of your main file, import `polyfills` - -- ReactJS: `index.js` or `index.tsx` -- VueJS: `main.js` -- NuxtJS: `app.vue` - -```tsx [TypeScript] -//has to be on the first line of the file for it to work -import "./polyfills"; -``` - -:::: \ No newline at end of file diff --git a/docs/pages/get-started/awesome.md b/docs/pages/get-started/awesome.md deleted file mode 100644 index e7ecbb5..0000000 --- a/docs/pages/get-started/awesome.md +++ /dev/null @@ -1,43 +0,0 @@ -# ETHOnline 2024 + XMTP - -## Bounties - -### 🏆 Best XMTP bot with Frames - $1750 - up to 3 - -MessageKit is a powerful framework that simplifies the process of building messaging bots on XMTP. With its robust set of tools and integrations, you can quickly create bots with Open Frames that can handle web3 primitives like onchain transactions, mints, games, and more—directly within chats. - -Ideas: - -- Tipping bots: Facilitate peer-to-peer tipping, rewarding helpful or interesting contributions. -- Betting bots: Allow users to place bets on events or outcomes. -- Game bots: Engage users with interactive games like Wordle, Rock Paper Scissors, or trivia. -- Transaction bots: Assist users with executing and confirming transactions. -- Alpha bots: Share alpha information, market insights, and exclusive updates. -- AI agents: Implement web3 crypto AI agents that can perform transactions and manage services. - -### 🔔 Best use of XMTP Subscribe - $1500 - up to 2 - -Use XMTP consent proofs to let users subscribe to newsletters, get updates from creators, or receive notifications from brands. This method makes communication secure and reliable and helps creators grow their audience with trusted opt-in only wallet subscribers. - -Ideas: - -- Newsletter subscriptions: Allow users to subscribe to weekly or monthly newsletters. -- Creator updates: Enable users to get the latest updates from their favorite content creators. -- Brand notifications: Let users receive promotional messages and updates from brands they follow. -- Event reminders: Allow users to subscribe to event notifications and reminders. -- Product announcements: Enable users to get updates on new product launches and features. -- Transaction confirmations: Send confirmations for completed transactions or actions. - -## Resources - -- [MessageKit](https://messagekit.ephemerahq.com/): Tool for creating bots with XMTP -- [Subscriptions](/consent/subscribe): Enable subscriptions using consent proofs with XMTP -- [Open Frames](https://messagekit.ephemerahq.com/frames): Open Frames resources -- [YouTube video](https://www.youtube.com/watch?v=2ijTqmo_A5c&t=213s): MessageKit Demo - -## Messaging apps 💬 - -Here are some messaging apps you can use to test bots: - -- [Converse](https://getconverse.app/): Own your conversations. Works with Frames. (Frame Transactions TBA) -- [Coinbase Wallet](https://www.coinbase.com/wallet): Your key to the world of crypto. (Frame support TBA) diff --git a/docs/pages/get-started/developer-quickstart.mdx b/docs/pages/get-started/developer-quickstart.mdx deleted file mode 100644 index 79cc36b..0000000 --- a/docs/pages/get-started/developer-quickstart.mdx +++ /dev/null @@ -1,295 +0,0 @@ -# Developer quickstart for XMTP - -This document provides a developer quickstart, followed by more detailed guidance for getting started building with XMTP. - -Need to send a test message? Message the XMTP message bot at `gm.xmtp.eth` (`0x937C0d4a6294cdfa575de17382c7076b579DC176`) to get an immediate automated reply. - -### Install an SDK - -To start with XMTP, install an XMTP client SDK: - -:::code-group - -```bash [JavaScript] -yarn install @xmtp/xmtp-js -``` - -```bash [React] -npm install react @xmtp/react-sdk @xmtp/xmtp-js @xmtp/content-type-reaction @xmtp/content-type-remote-attachment @xmtp/content-type-reply -``` - -
-You can find the latest package version on [Maven Central](https://central.sonatype.com/artifact/org.xmtp/android/0.0.5/versions). - -```bash -implementation 'org.xmtp:android:X.X.X' -``` -
- -
-Use Xcode to add to the project (**File** > **Add Packages…**) or add this to your `Package.swift file`: - -```bash -.package(url: "https://github.com/xmtp/xmtp-ios", branch: "main") -``` -
- -```bash [React Native] -npm i @xmtp/react-native-sdk -``` - -::: - -## Quickstart - -Here's a quick overview of the core concepts and lines of code needed to build with XMTP. - -:::code-group - -```tsx [JavaScript] -import { Client } from "@xmtp/xmtp-js"; -import { Wallet } from "ethers"; - -// You'll want to replace this with a wallet from your application -const signer = Wallet.createRandom(); -// Create the client with your wallet. This will connect to the XMTP development network by default -const xmtp = await Client.create(signer, { env: "dev" }); -// Start a conversation with XMTP -const conversation = await xmtp.conversations.newConversation( - "0x3F11b27F323b62B159D2642964fa27C46C841897", -); -// Load all messages in the conversation -const messages = await conversation.messages(); -// Send a message -await conversation.send("gm"); -// Listen for new messages in the conversation -for await (const message of await conversation.streamMessages()) { - console.log(`[${message.senderAddress}]: ${message.content}`); -} -``` - -```tsx [React] -import { - Client, - useStreamMessages, - useClient, - useMessages, - useConversations, - useCanMessage, - useStartConversation, -} from "@xmtp/react-sdk"; - -const { client, initialize } = useClient(); -const { conversations } = useConversations(); -const { startConversation } = useStartConversation(); -const { canMessage } = useCanMessage(); - -//Initialize -{ - !isConnected && ; -} - -const initXmtp = async () => { - const options = { - persistConversations: false, - env: "dev", - }; - await initialize({ keys, options, signer }); -}; - -// Start a conversation with XMTP -const add = "0x3F11b27F323b62B159D2642964fa27C46C841897"; -if (await canMessage(add)) { - const conversation = await startConversation(add, "hi"); -} - -//Stream messages -const [history, setHistory] = useState(null); -const { messages } = useMessages(conversation); -// Stream messages -const onMessage = useCallback((message) => { - setHistory((prevMessages) => { - const msgsnew = [...prevMessages, message]; - return msgsnew; - }); -}, []); -useStreamMessages(conversation, { onMessage }); -``` - -```kotlin [Kotlin] -// You'll want to replace this with a wallet from your application. -val account = PrivateKeyBuilder() - -// Create the client with your wallet. This will connect to the XMTP `dev` network by default. -// The account is anything that conforms to the `XMTP.SigningKey` protocol. -val client = Client().create(account = account) - -// Start a conversation with XMTP -val conversation = - client.conversations.newConversation("0x3F11b27F323b62B159D2642964fa27C46C841897") - -// Load all messages in the conversation -val messages = conversation.messages() -// Send a message -conversation.send(text = "gm") -// Listen for new messages in the conversation -conversation.streamMessages().collect { print("${message.senderAddress}: ${message.body}") } -``` - -```swift [Swift] -import XMTP - -// You'll want to replace this with a wallet from your application. -let account = try PrivateKey.generate() - -// Create the client with your wallet. This will connect to the XMTP `dev` network by default. -// The account is anything that conforms to the `XMTP.SigningKey` protocol. -let client = try await Client.create(account: account) - -// Start a conversation with XMTP -let conversation = try await client.conversations.newConversation( - with: "0x3F11b27F323b62B159D2642964fa27C46C841897") - -// Load all messages in the conversation -let messages = try await conversation.messages() -// Send a message -try await conversation.send(content: "gm") -// Listen for new messages in the conversation -for try await message in conversation.streamMessages() { - print("\(message.senderAddress): \(message.body)") -} -``` - -```jsx [React Native] -import { Client, Conversation, DecodedMessage } from '@xmtp/react-native-sdk'; - -const [addressText, setAddressText] = useState("No Connected Address"); -const [connected, setConnected] = useState(false); -const [client, setClient] = useState(undefined); -const [conversations, setConversations] = useState(undefined); -const [messages, setMessages] = useState(undefined); -const [conversation, setConversation] = useState(undefined); - -function connectRandomWallet() { - return async () => { - // NOTE: react-native-sdk testing - const client = await Client.createRandom('dev') - setClient(client); - const rnSDKAddress = await client.address; - // const address: string = await callIntoWebview("connectRandomWallet"); - setAddressText('react-native-sdk npm address: ' + rnSDKAddress); - setConnected(true); - getConversations(); - }; -} - -function getConversations() { - return async () => { - const conversations = await client?.conversations.list(); - setConversations(conversations); - }; -} - -function getMessages(conversation: Conversation) { - return async () => { - const messages = await conversation?.messages(); - setConversation(conversation); - setMessages(messages); - }; -} - -function sendMessage(message: string) { - return async () => { - await conversation?.send(message); - getMessages(conversation!!); - }; -} -``` - -::: - -## Get started - -This section provides more detailed guidance for getting started with XMTP. The examples use the [XMTP JavaScript SDK](https://github.com/xmtp/xmtp-js) (`xmtp-js`). - -You might also be interested in exploring this Replit: JavaScript live code example - -### Install required packages - -```bash -yarn install @xmtp/xmtp-js ethers@5.7.0 -``` - -### Import libraries - -Import the `xmtp-js` client SDK and `ethers` library into your project: - -```jsx -const { Wallet } = require("ethers"); -const { Client } = require("@xmtp/xmtp-js"); -``` - -### Initialize a wallet - -When we initialize a wallet, we create an instance of a wallet that the XMTP client will use to sign messages and transactions. In this code sample, a random wallet is generated for demo purposes. In your real code, you should use the user's actual wallet instead of generating a random one. - -```jsx -// You'll want to replace this with a wallet from your application -const wallet = Wallet.createRandom(); -console.log("Wallet address: " + wallet.address); -//eg. Wallet address 0xd8dA6BF26964aF9D7eEd9e03E53415D37 -``` - -### Create a client - -To create a client, you need to pass in a wallet that implements the `Signer` interface. This is a requirement because the XMTP client uses the wallet to sign messages and verify the sender's identity. When you create a client, you can set [client parameters](/client/create-client#configure-the-client), including which [network environment](/client/create-client#xmtp-network-environments) (`env`) the client should connect to. - -```jsx -const xmtp = await Client.create(signer, { env: "dev" }); -console.log("Client created", xmtp.address); -//eg. Client created 0xd8dA6BF26964aF9D7eEd9e03E53415D37 -``` - -### Check if the recipient address is XMTP enabled - -For a user to send a message to a recipient, the recipient address must have XMTP enabled. This means the recipient must have already started an XMTP client at least once and consequently advertised their key bundle on the network. - -You can check if a recipient address is XMTP enabled by calling `client.canMessage` and including the recipient address. - -```jsx -//Message this XMTP message bot to get an immediate automated reply: -//gm.xmtp.eth (0x937C0d4a6294cdfa575de17382c7076b579DC176) env:production -const WALLET_TO = "0x20B572bE48527a770479744AeC6fE5644F97678B"; -const isOnProdNetwork = await xmtp.canMessage(WALLET_TO); -console.log("Can message: " + isOnProdNetwork); -//eg. Can message: true -``` - -### Start a conversation - -You can create a conversation between the sender and any XMTP-enabled address. Currently, XMTP supports Ethereum Virtual Machine (EVM) wallet addresses only. With XMTP, a conversation is the context in which users send messages. - -```jsx -const conversation = await xmtp.conversations.newConversation(WALLET_TO); -console.log("Conversation created", conversation); -//eg. Conversation created: {Object} -``` - -### Send a message - -```jsx -const message = await conversation.send("gm"); -console.log("Message sent", message); -//eg. Message sent: {Object} -``` - -### Stream messages - -To receive new messages in real-time for all of a user's conversations, use `streamAllMessages`. This method streams all new messages from any sender across all conversations the user is involved in. - -```jsx -for await (const message of await xmtp.conversations.streamAllMessages()) { - console.log(`New message from ${message.senderAddress}: ${message.content}`); -} -//eg. New message from 0xd8dA6BF26964aF9D7eEd9e03E53415D37: gm -``` diff --git a/docs/pages/get-started/examples.mdx b/docs/pages/get-started/examples.mdx deleted file mode 100644 index 58c13c6..0000000 --- a/docs/pages/get-started/examples.mdx +++ /dev/null @@ -1,312 +0,0 @@ ---- -description: "SDKs, dev tools, and example apps to help you start building apps with XMTP" ---- - -# SDKs, dev tools, and example apps for XMTP - -## SDKs - -- [JavaScript SDK](https://github.com/xmtp/xmtp-js) - -- [React SDK](https://github.com/xmtp/xmtp-web/tree/main/packages/react-sdk) - -- [Kotlin SDK](https://github.com/xmtp/xmtp-android) - -- [Swift SDK](https://github.com/xmtp/xmtp-ios) - -- [React Native SDK ](https://github.com/xmtp/xmtp-react-native) - -## Dev tools - -### Message Kit - -- [MessageKit](https://github.com/ephemeraHQ/message-kit) is a framework that simplifies the process of building messaging bots on xmtp. - -### xmtp-node-js-tools - -[xmtp-node-js-tools](https://github.com/xmtp/xmtp-node-js-tools/tree/main/packages) is a repo of tools for building with XMTP, including: - -- Bot Kit Pro - A framework for running bots on the XMTP network designed for complex workflows that require high reliability. -- Bot examples - Provides examples of bots built using Bot Kit Pro. -- Broadcast SDK - Enables you to broadcast to thousands of subscribers while handling rate-limiting logic for you. -- CLI starter - Includes a basic setup and examples to get started with building a command-line interface for XMTP. -- Frames validator - Validates XMTP frames, ensuring data integrity and compliance with the XMTP protocol specifications. -- Fs persistence - Provides file system-based data persistence for XMTP clients, enabling data storage and retrieval directly from the file system. -- GRPC API client - Facilitates communication between XMTP clients and servers using GRPC protocol. -- Redis persistence - Implements Redis-based persistence for XMTP clients, supporting efficient data storage and access in a Redis database. - -## Example apps - -Here are some quickstarts and example apps to help you get started with building your own apps using XMTP. - -:::code-group - -
- -
- -
- -
- -
- -
- -
-
    -
  • - - iOS - - Quickstart iOS app in Swift -
  • -
-
- -
- -
- -
- - Wallet connectors are essential components in decentralized applications - (dApps). They allow users to connect their cryptocurrency wallets to the - dApp, enabling them to sign transactions and interact with the blockchain. - Different wallet connectors support different wallets and XMTP works out of - the box with most of them. - - -
- -
- -
- -::: diff --git a/docs/pages/get-started/faq.md b/docs/pages/get-started/faq.md deleted file mode 100644 index 45310b3..0000000 --- a/docs/pages/get-started/faq.md +++ /dev/null @@ -1,596 +0,0 @@ -# FAQ about XMTP - -Get answers to the most frequently asked questions about XMTP. - -## What works with XMTP? - -In the spirit of web3 composability, here are **just a few** of the building blocks that work well with XMTP. Building your app with these tools can help you deliver and distribute an app—faster and with quality. - -:::tip -This list is not exhaustive and is just a starting point. A highly extensible protocol like XMTP can work with more tools than those listed in each section. -::: - -### Wallet connectors - -Here are some options for connecting wallets to your app built with XMTP: - -- [RainbowKit](https://www.rainbowkit.com/) - Support for WalletConnect v2 is now standard in RainbowKit. To learn how to upgrade, see [Migrating to WalletConnect v2](https://www.rainbowkit.com/guides/walletconnect-v2). -- [Thirdweb](https://thirdweb.com/) -- [wagmi](https://wagmi.sh/) - -:::info[For more info] -See this example implementation in the [XMTP React Native example app](https://github.com/xmtp/xmtp-react-native/blob/40638c09fd60df58609732a3fa549d45526fae0b/example/README.md#configure-thirdweb-client-api). -::: - -### Message payload storage - -Here are some options for storing encrypted message payload content: - -- [IPFS](https://ipfs.io/) -- [ThirdwebStorage](https://portal.thirdweb.com/storage) -- [web3.storage](https://web3.storage/) - -:::info[For more info] -See [Remote attachment content type](https://github.com/xmtp/xmtp-js-content-types/tree/main/packages/content-type-remote-attachment). Specifically, storage use is described in the [Upload the encrypted attachment](https://github.com/xmtp/xmtp-js-content-types/tree/main/packages/) section. -::: - -### Decentralized social - -Here are some decentralized social protocols that work with XMTP: - -- [CyberConnect](https://link3.to/cyberconnect) - For more info, see [CyberConnect & XMTP Integration Demo App](https://github.com/cyberconnecthq/cc-xmtp-chatapp) and [Integrating XMTP into CyberConnect](https://cyberconnect.hashnode.dev/integrating-xmtp-into-cyberconnect-a-guide) -- [Lens](https://www.lens.xyz/) - For more info, see the [Hey Lens app](https://github.com/heyxyz/hey) GitHub repo. - -### Wallet apps - -XMTP can be used with EVM-compatible wallet apps that support ECDSA signing on the secp256k1 elliptic curve. These include common wallet apps such as: - -- [Coinbase Wallet](https://www.coinbase.com/wallet) -- [MetaMask](https://metamask.io/) -- [Rainbow Wallet](https://rainbow.me/) -- Most wallets in the [WalletConnect network](https://explorer.walletconnect.com/?type=wallet) - -The XMTP SDK **does not** include a wallet app abstraction, as XMTP assumes that developers have a way to obtain a wallet app connection. - -### Chains - -XMTP works with externally owned accounts (EOAs) on Ethereum and Ethereum side-chains and L2s. - -Because all Ethereum Virtual Machine (EVM) chains share the same Ethereum wallet and address format and XMTP messages are stored off-chain, XMTP is interoperable across EVM chains, including testnets. (XMTP itself does not use EVMs.) - -For example, whether a user has their wallet app connected to Ethereum or an Ethereum side-chain or L2, their private key can generate and retrieve their XMTP key pair to give them access to XMTP. - -XMTP is also chain-agnostic, so multi-chain support is possible. - -Here are just a few chains that work with XMTP: - -- [Arbitrum](https://arbitrum.foundation/) -- [Avalanche](https://www.avax.com/) -- [Base](https://base.org/) -- [(BNB) Chain](https://www.bnbchain.org/) -- [Ethereum](https://ethereum.org/) -- [Hermez](https://docs.hermez.io/Hermez_1.0/about/scalability/) -- [zk-EVM](https://linea.build/) -- [Optimism](https://www.optimism.io/) -- [Polygon](https://polygon.technology/) -- [Scroll](https://www.scroll.io/) - -### Smart contract wallets - -To learn more about XMTP support for smart contract wallets, see this XIP in **Draft** status: [XIP-44: Smart Contract Wallet Support](https://community.xmtp.org/t/xip-44-smart-contract-wallet-support/627). - -## Build with XMTP - -### Which languages and environments does the XMTP SDK support? - -XMTP SDKs are [available for multiple languages](/get-started/examples/#sdks). - -### Which web3 libraries does the XMTP SDK require? - -The XMTP SDK currently requires you to use [ethers](https://ethers.org/) or another web3 library capable of supplying an [ethers Signer](https://docs.ethers.io/v5/api/signer/), such as [wagmi](https://wagmi.sh/). - -### Is XMTP compatible with viem? - -Yes, though not by default. To make them compatible, you must create a wrapper around viem. For example, see this [Hey](https://github.com/heyxyz/hey/blob/19e5911cd3b0d4f2c391d1a1180a7ea5d9335bf3/apps/web/src/hooks/useEthersWalletClient.tsx#L6) implementation. - -```tsx -import { ZERO_ADDRESS } from "@lenster/data/constants"; -import { CHAIN_ID } from "src/constants"; -import type { Address } from "viem"; -import { useWalletClient } from "wagmi"; - -const useEthersWalletClient = (): { - data: { - getAddress: () => Promise
; - signMessage: (message: string) => Promise; - }; - isLoading: boolean; -} => { - const { data, isLoading } = useWalletClient({ chainId: CHAIN_ID }); - - const ethersWalletClient = { - getAddress: async (): Promise
=> { - return (await data?.account.address) ?? ZERO_ADDRESS; - }, - signMessage: async (message: string): Promise => { - const signature = await data?.signMessage({ message }); - return signature ?? null; //lenster uses empty string which could be risky - }, - }; - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { signMessage, ...rest } = data ?? {}; - - const mergedWalletClient = { - data: { - ...ethersWalletClient, - ...{ ...rest }, - }, - }; - - return { data: mergedWalletClient.data, isLoading }; -}; - -export default useEthersWalletClient; -``` - -You can then call viem as shown in this [Hey](https://github.com/heyxyz/hey/blob/19e5911cd3b0d4f2c391d1a1180a7ea5d9335bf3/apps/web/src/hooks/useXmtpClient.tsx#L12) implementation. - -```tsx -const { data: walletClient, isLoading } = useEthersWalletClient(); -``` - -### Does XMTP work with Bun? - -Currently, Bun does not offer full compatibility with XMTP. Use Yarn as an alternative to prevent any issues. - -### How do I configure my project to work with XMTP? - -Depending on your project setup, you may need to make some configuration changes to ensure compatibility with XMTP. These changes primarily involve adding support for Node.js-specific features that XMTP requires, such as the `Buffer` object, and ensuring proper resolution of dependencies. Here are some common scenarios: - -:::details[React Scripts 5] - -- **CRACO**: (Create React App Configuration Override) is a community solution for adding custom configurations to Create React App. It allows you to customize your configuration without ejecting from the default setup provided by Create React App. - - **Install react-app-rewired**: - - ```bash - npm install craco - ``` - - Create the `craco.config.js` in your root directory: - - ```jsx - const webpack = require("webpack"); - module.exports = { - webpack: { - plugins: [ - new webpack.ProvidePlugin({ - Buffer: ["buffer", "Buffer"], - }), - ], - resolve: { - fallback: { - buffer: require.resolve("buffer/"), - }, - }, - }, - }; - ``` - -- **React-App-Rewired**: `react-app-rewired` is a tool to tweak the Create React App (CRA) configuration without ejecting, similar to CRACO. Here's how you can use it: - - **Install react-app-rewired**: - - ``` - npm install react-app-rewired - ``` - - **Modify the `scripts` in your `package.json`**: - Replace `react-scripts` with `react-app-rewired`. For example: - - ```json - "scripts": { - "start": "react-app-rewired start", - "build": "react-app-rewired build", - "test": "react-app-rewired test", - "eject": "react-app-rewired eject" - } - ``` - - **Create a `config-overrides.js` file**: - In the root of your project, create a `config-overrides.js` file. This file will be used to modify the webpack config. - - ```javascript - const webpack = require("webpack"); - - module.exports = function override(config, env) { - config.resolve.fallback = { - ...config.resolve.fallback, - buffer: require.resolve("buffer/"), - }; - config.plugins = (config.plugins || []).concat([ - new webpack.ProvidePlugin({ - Buffer: ["buffer", "Buffer"], - }), - ]); - return config; - }; - ``` - -- **Eject method**: Ejecting from CRA gives you full control over the configuration, but it's a one-way operation. Once you eject, you can't go back to the abstracted CRA setup. - - **Eject the application**: - - ``` - npm run eject - ``` - - **Modify the webpack configuration**: - After ejecting, you'll have access to the `config` folder. Modify the `webpack.config.js` file: - - ```javascript - const webpack = require("webpack"); - - // Inside the module.exports object - module.exports = { - // ... other configurations - - resolve: { - // ... other resolve options - fallback: { - // ... other fallback options - buffer: require.resolve("buffer/"), - }, - }, - plugins: [ - // ... other plugins - new webpack.ProvidePlugin({ - Buffer: ["buffer", "Buffer"], - }), - ], - }; - ``` - - ::: - -:::details[WEBPACK] - -Webpack: `vue.config.js` or `webpack.config.js`: - -```jsx -const webpack = require("webpack"); - -module.exports = { - configureWebpack: { - plugins: [ - new webpack.ProvidePlugin({ - Buffer: ["buffer", "Buffer"], - }), - ], - }, - transpileDependencies: true, -}; -``` - -::: - -:::details[VITE] - -Vite: `vite.config.js`: - -```jsx -import { defineConfig } from "vite"; -import { Buffer } from "buffer"; - -export default defineConfig({ - /**/ - define: { - global: { - Buffer: Buffer, - }, - }, - /**/ -}); -``` - -::: - -:::details[NuxtJS] - -NuxtJS: `nuxt.config.js`: - -```tsx -export default { - build: { - extend(config, { isClient }) { - if (isClient) { - config.node = { - Buffer: true, - }; - } - }, - }, -}; -``` - -::: - -### Where can I get official XMTP brand assets? - -See the [XMTP brand guidelines](https://github.com/xmtp/brand) GitHub repo. - -### How should I handle the XMTP onboarding flow in my app? - -In your app onboarding flow, enable your users to activate XMTP messaging. User access to messaging can help with app engagement and re-engagement. - -For example, here is a prompt to activate XMTP DMs in the onboarding flow to [claim a Lens handle](https://claim.lens.xyz/): - -![activatedmsscreen-width-500px](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/activate-dms-screen.png) - -In your app onboarding flow, also request user permission to display app-specific push notifications. Enabling push notifications can help with user engagement and retention by allowing your app to reach users outside of active sessions. - -Push notifications are particularly valuable for messaging apps, as they help ensure users don't miss important communications and can respond promptly to new messages. - -### Does XMTP support group chat? - -XMTP supports group chat in React Native, Android, iOS, and Node.js SDKs. - -:::info[For more info] -See [Build group chat with MLS and XMTP](/groups/build-group-chat) -::: - -To learn more about when group chat will be available for the web, see the XMTP Developer Community Call about [wen group chat web](https://www.youtube.com/watch?v=qnCeXsqqKcY). - -### Is there a way to get a list of all current XMTP-enabled wallets? - -XMTP doesn't provide a direct method to fetch all XMTP-enabled wallet addresses in bulk. You might consider using a third-party service to do so instead of building the functionality yourself. - -[Blaze CRM](https://www.withblaze.app/) is one known service. It compiles lists of XMTP addresses by querying the XMTP `canMessage` API over time. - -The XMTP ecosystem is continually evolving. If you know of other reliable services providing this functionality, please consider sharing them in the [XMTP Community Forums](https://community.xmtp.org/c/development/third-party-tools/74). - -## Network - -### Is the XMTP network decentralized? - -Currently, [Ephemera](https://ephemerahq.com/) (the company) operates all of the network nodes in the two available XMTP network environments: `dev` and `production`. - -These network nodes operate in US jurisdiction in compliance with Office of Foreign Assets Control (OFAC) sanctions and Committee on Foreign Investment in the United States (CFIUS) export compliance regulations. Accordingly, IP-based geoblocking is in place for the following countries/territories: - -- Cuba -- Iran -- North Korea -- Syria -- The Crimea, Donetsk People’s Republic, and Luhansk People’s Republic regions of Ukraine - -To explore the software for the nodes that currently form the XMTP network, see the [xmtp-node-go repo](https://github.com/xmtp/xmtp-node-go). - -Ephemera is in the process of building the replication and incentive mechanisms required to decentralize the network. These mechanisms include: - -- An onchain smart contract node registry, which lists the currently active set of XMTP nodes -- An off-chain broadcast network of nodes run by a set of independent third parties, which handles the majority of the messaging data (loosely ordered, low latency) -- A series of onhain smart contracts on an XMTP L3, which handles account information and the most critical messaging data (strictly ordered, medium latency) - -To follow and provide feedback on this work, see the [Replication tracking task](https://github.com/xmtp/xmtpd/issues/118) in the `xmtpd` repo. - -### Is XMTP a blockchain? - -XMTP is not a blockchain. Nodes on the XMTP network run software to store and transfer messages between blockchain accounts. For secure and reliable delivery of messages, the nodes participate in a consensus mechanism. - -Ephemera is researching various consensus protocols that would allow the network to operate in a decentralized fashion while maintaining its current emphasis on user privacy and low-latency message delivery. - -### Will I be able to run my own XMTP node? - -Ephemera is in the process of building the replication mechanisms required to enable third-parties to run XMTP nodes and participate in network decentralization. - -To follow and provide feedback on this work, see the [Replication tracking task](https://github.com/xmtp/xmtpd/issues/118) in the `xmtpd` repo. - -### Does XMTP have a token? - -XMTP does not currently have a token. Disregard any information regarding airdrops or token sales. If and when an official token is introduced, announcements will be made exclusively through XMTP's official channels. - -### What is the relationship between Waku and XMTP? - -XMTP currently uses the Waku protocol to relay messages between network nodes. - -Waku is an unopinionated transport layer built around the libp2p publish/subscribe model. Waku is intentionally open-ended when it comes to handling options like message encoding and encryption, which content topics to use, and how to create and manage encryption keys linked to blockchain account addresses. - -XMTP provides a standardized approach to addressing these options, focusing on maximizing compatibility across apps and ensuring message security and deliverability, while also enabling as many developers as possible to use XMTP to build interoperable messaging apps. - -### How do XMTP clients communicate with XMTP nodes? - -Clients communicate with XMTP nodes through a gRPC (or JSON/HTTP) message API. - -### What is the expected network latency for message delivery and retrieval? - -XMTP provides perceptibly real-time message delivery and retrieval. The network does not provide service level guarantees. - -## Fees - -XMTP core developers and researchers are working on a specific fee model for XMTP, with the following guiding principles in mind: - -- Fees will be dynamic to protect the network from Denial of Service (DoS) attacks. -- Infrastructure costs for the network must remain low even when decentralized, and comparable to the costs for an equivalent centralized messaging service. -- There must be a low "take rate": the biggest driver of cost must be infrastructure costs, with any remaining cost returned to the network. - -Have questions or feedback about the fee model for XMTP? See [XMTP fees: Guiding principles and FAQ](https://community.xmtp.org/t/xmtp-fees-guiding-principles-and-faq/795) in the XMTP Community Forums. - -## Security - -### Has XMTP undergone a security audit? - -A security audit of [LibXMTP](https://github.com/xmtp/libxmtp) and its use of Messaging Layer Security (MLS) will begin in Q4 2024. The audit will be performed by [NCC Group](https://www.nccgroup.com/). - -The [XMTP JavaScript SDK](https://github.com/xmtp/xmtp-js) (`xmtp-js`) was verified by [CertiK](https://www.certik.com/company/about) on Feb 6, 2023. Read their [XMTP security assessment](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/REP-final-20230207T000355Z.pdf). - -### How does XMTP establish a secure and fraud-proof relationship between identities? - -With XMTP, the concept of an identity centers on an inbox ID that has a constantly changing set of identities that can be either wallets or app installations. - -The SDK establishes most of the relationship, but the core logic is as follows: - -1. A user starts with an Ethereum wallet and installs an XMTP-enabled app. - -2. The user creates an XMTP inbox ID, which can represent a set of identities (wallets and app installations). - -3. The first wallet to claim an inbox ID becomes the first member of the set and is designated as the "recovery address." - -4. For each app installation, an installation key is generated by the app. - -5. Additional wallets and app installations can be added to the set through a two-way signature process: - - A signature from a key currently in the set - - A signature from the key being added to the set - -6. Wallets and app installations can be removed from the set using a signature from the recovery address. - -7. Changes to an inbox ID's set of identities are published as "identity updates" to the XMTP network, which stores them as an "inbox log." - -MLS credentials contain only the inbox ID. When a client receives a credential, they verify it by: -- Downloading the inbox log for that inbox ID -- Reading through the series of updates -- Verifying that the installation key is a current valid member of the set - -For group chats, XMTP uses the MLS protocol to manage secure communication between multiple parties. - -For a first-time XMTP user, the process typically involves: -- One wallet signature to claim the Inbox ID and add the installation key (these can be batched) -- One installation key signature (handled invisibly by the app) to consent to being added to the inbox ID. - -This process requires only one visible signature from the end user, in addition to any XMTP v2 signatures. - -For more details, see [Security and encryption](/protocol/security-encryption) and [Multi-wallet identity](/protocol/v3/identity). - -#### XMTP v2 - -In v2, blockchain accounts sign and advertise a set of keys to start using XMTP. These keys are used to establish a shared secret between the blockchain accounts. The shared secret is then used to generate a key for encrypting an invitation, allowing the blockchain accounts to start exchanging messages. No third-party apps or relayers are involved in this process. - -For more details, see [Key generation and usage in XMTP v2](/protocol/v2/key-generation-and-usage) and [Invitation and message encryption with XMTP v2](/protocol/v2/invitation-and-message-encryption). - -### Does each blockchain account address have a corresponding XMTP identity? - -With XMTP v2, each blockchain account address is represented by an XMTP identity key. This identity key is a part of a key bundle that only the address that generated it can use to authenticate messages. - -To learn more about XMTP v2 identity keys, see [Key generation and usage in XMTP](/protocol/v2/key-generation-and-usage). - -With XMTP v3, there is no identity key. Instead, identity is managed using an inbox ID, which enables multi-wallet identity upport. - -To learn more about XMTP v3 inbox IDs, see [How does XMTP establish a secure and fraud-proof relationship between identities?](#how-does-xmtp-establish-a-secure-and-fraud-proof-relationship-between-identities). - -### Why do apps built with XMTP v2 require a user to sign with their blockchain account private keys each time they start a new messaging session? How is this different with XMTP v3? - -With XMTP v2, When a user starts a new messaging session, they must sign with their blockchain account private key to decrypt their XMTP key bundle. The key bundle is then used for invitation and message decryption. - -Because there is no secure place in the browser to persist a decrypted key bundle, the app can use the bundle for the current session only. Once the user starts a new session, such as after refreshing their browser, they must sign again to decrypt their key bundle. - -To learn more about these keys, see [Key generation and usage in XMTP](/protocol/v2/key-generation-and-usage). - -With XMTP v3, needing to sign is no longer based on new sessions, but rather on new app instances. - -For example, a first-time user of XMTP first signs with a wallet signature to claim an inbox ID. They also provide a wallet signature to certify that the app-generated installation key is allowed to act on behalf of the inbox ID and can therefore be added to the inbox log's set of authorized keys. These signatures must be provided for each new app instance, or installation. - -To learn more about the signatures required for XMTP v3, see [How does XMTP establish a secure and fraud-proof relationship between identities?](#how-does-xmtp-establish-a-secure-and-fraud-proof-relationship-between-identities). - -## Storage - -### Where are XMTP messages stored? - -XMTP stores messages in the XMTP network before and after retrieval. App-specific message storage policies may vary. - -### What are the XMTP message retention policies? - -#### For XMTP’s blockchain and node databases: - -Currently, encrypted payloads are stored indefinitely. - -In the coming year, a retention policy will be added. - -This retention policy would represent a minimum retention period, not a maximum. - -For example, a retention policy may look something like the following, though specifics are subject to change: - - One year for messages - - Indefinite storage for account information and personal preferences - -The team is researching a way to provide this indefinite storage and have it scale forever. -- If research shows that it's possible, we'll share a plan for how it will be achieved. -- If research shows that it isn't possible, we'll share a plan that shows how retention periods will provide a permanent solution to storage scaling. - -Have questions or feedback regarding message storage and retention? Post to the [XMTP Community Forums](https://community.xmtp.org/c/development/ideas/54). - -#### For the on-device database managed by the XMTP SDK: - -Messages are stored for as long as the user decides to keep them. However, encryption keys are regularly rotated. - -### What are the costs of XMTP message storage and retrieval? - -Messages are stored off-chain on the XMTP network, with all nodes currently hosted by Ephemera. Ephemera currently absorbs all message storage and retrieval costs. - -Today, there are no message storage and retrieval-related fees incurred by developers for building with the XMTP SDK. - -## Messages - -### Which message formats does XMTP support? - -XMTP transports a message payload as a set of bytes that can represent any format that a developer wants to support, such as plain text, JSON, or non-text binary or media content. - -With XMTP, these message formats are called content types. Currently, there are two basic content types available. These content types aim to establish broad compatibility among apps built with XMTP. - -The XMTP community can propose and adopt standards for other content types, either informally or through a governance process. - -To learn more about content types, see [Content types](/content-types/content-types). - -To learn more about the XMTP improvement proposals governance process, see [What is an XIP?](https://github.com/xmtp/XIPs/blob/main/XIPs/xip-0-purpose-process.md) - -### Which message metadata does XMTP v2 support? - -Message payloads include references to timestamps. However, timestamps are not independently verified and can be set to any value by the sending app. - -### Does XMTP have a maximum message size? - -Yes. Messages sent on the XMTP network are limited to just short of 1MB (1048214 bytes). - -For this reason, XMTP supports [remote attachments](/content-types/remote-attachment). - -### Does XMTP support message attachments? - -Yes. See [Support attachments in your app built with XMTP](/content-types/remote-attachment). - -### Does XMTP support deleting and editing messages? - -Not currently. However, Ephemera is exploring ways to support message deletion and editing. - -Have ideas about message deletion and editing? Post to the [XMTP Community Forums](https://community.xmtp.org/c/development/ideas/54). - -## Message patterns - -### Is XMTP more like email or chat? - -XMTP enables developers to implement messaging features and UX paradigms that best fit their needs. As a result, messages sent using apps built with XMTP might resemble many typical forms of communication, such as email, direct and group messaging, broadcasts, text messaging, push notifications, and more. - -### Does XMTP support real-time conversations? - -Real-time chat is a core use case for XMTP and is demonstrated by the open source Converse messenger app. - -- [Try the app](https://app-preview.converse.xyz/) connected to the XMTP `dev` network -- [Try the app](https://app.converse.xyz/) connected to the XMTP `production` network - -To learn more about how the Converse messenger app is built, see the [converse-app repo](https://github.com/ephemeraHQ/converse-app). - -### Does XMTP support broadcast messaging? - -Yes. See [Broadcast messages with XMTP](/consent/broadcast). - -## Ephemera - -### What is Ephemera? - -Ephemera is a web3 software company that contributes to XMTP, an open network, protocol, and standards for secure messaging between blockchain accounts. - -Ephemera employees work alongside other XMTP community members to build with and extend XMTP. Community [contributions and participation](https://community.xmtp.org/) are critical to the development and adoption of XMTP. - -Ephemera focuses on serving developers. We build [SDKs, developer tools, and example apps](/get-started/examples) that help developers build great experiences with XMTP. - -Ephemera [acquired Converse](https://paragraph.xyz/@ephemera/converse) in June 2024 and [open-sourced it](https://github.com/ephemeraHQ/converse-app) for the entire XMTP network. diff --git a/docs/pages/get-started/intro.md b/docs/pages/get-started/intro.md deleted file mode 100644 index 6f461f5..0000000 --- a/docs/pages/get-started/intro.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -description: "XMTP is an open protocol, network, and standards for secure, private web3 messaging." ---- - -# Introduction to XMTP - -XMTP (Extensible Message Transport Protocol) is an open protocol, network, and standards for secure, private web3 messaging. - -## Why XMTP? - -Developers build with XMTP SDKs to provide messaging between blockchain accounts in their apps. The XMTP messaging API client takes care of: - -- [Authentication](/protocol/signatures) using an **XMTP identity that the user owns and controls** - -- End-to-end encryption of **[1:1 messages](/protocol/v2/invitation-and-message-encryption) and [group chats](/protocol/security-encryption) that the user owns and controls** - -- Providing a **[portable inbox](/protocol/portable-inbox) accessible across apps** built with XMTP - -- Relaying messages to the **progressively decentralized** [XMTP network](/protocol/v2/architectural-overview#network-layer) - -## Find your XMTP client SDK - -- [JavaScript](https://github.com/xmtp/xmtp-js) -- [React](https://github.com/xmtp/xmtp-web/tree/main/packages/react-sdk) -- [React Native](https://github.com/xmtp/xmtp-react-native) -- [Kotlin](https://github.com/xmtp/xmtp-android) -- [Swift](https://github.com/xmtp/xmtp-ios) - -XMTP client SDKs require you to use [ethers](https://ethers.org/) or another web3 library capable of supplying an [ethers Signer](https://docs.ethers.io/v5/api/signer/). These [wallet connection tools](/get-started/faq#wallet-connectors), as well as others, provide this capability. - -## Try messaging with XMTP - -A great way to start learning how to build an app with XMTP is to use one! - -:::::steps - -### Pick an identity you want to use to message with XMTP - -You can use an Ethereum address to start. - -If you have an [ENS name](https://ens.domains/), [UNS name](https://unstoppabledomains.com/), or [Lens handle](https://claim.lens.xyz/) associated with the address, you can tell people to use it to message you instead of using your full Ethereum address. - -Don’t have an Ethereum address? Create one using a [compatible wallet app](/get-started/faq#wallet-apps) of your choice. For example: - -- [Coinbase Wallet](https://www.coinbase.com/wallet): When you create an Ethereum account, you can claim a free `cb.id` web3 username - -- [MetaMask wallet](https://metamask.io/) - -### Pick an app - -Explore apps on [https://xmtp.org/](https://xmtp.org/). - -### Send a message - -To send a message to an address it must have an XMTP identity already created on the network. Share this page with someone you want to message to help them get on the network if they aren't already there. - -In the meantime, need someone to message with? Send a message to the XMTP message bot at `gm.xmtp.eth` (0x937C0d4a6294cdfa575de17382c7076b579DC176) and get an immediate `gm` reply. You can message the ENS name or the raw 0x address. - -### See the [portable inbox](/protocol/portable-inbox) in action - -Try a second app and see all of your conversations in both apps, regardless of the app you used to start them. This also means you and a friend can each use your own preferred app to exchange messages. - -With XMTP, you own and control your messages and are always free to use the app that best suits your needs. - -::::: - -## Understand what works with XMTP - -XMTP has been implemented to work with Ethereum Virtual Machine (EVM)-compatible wallet apps and blockchain accounts (wallets), though XMTP itself does not use EVMs. XMTP also works with other web3 identities that apps built with XMTP can derive from Ethereum accounts, such as ENS names and Lens profiles. - -To learn more, see [Works with XMTP](/get-started/faq#what-works-with-xmtp). - -## Understand XMTP concepts - -The [XMTP message API](/protocol/v2/architectural-overview#network-layer) revolves around a network client that allows retrieving and sending messages to other network participants. - -A client must be connected to a wallet on startup. If this is the very first time the client is created, the client will generate a [key bundle](/protocol/v2/key-generation-and-usage) that is used to [encrypt and authenticate messages](/protocol/v2/invitation-and-message-encryption). - -The key bundle persists encrypted in the network using a [wallet signature](/protocol/signatures). The public side of the key bundle is also regularly advertised on the network to allow parties to establish shared encryption keys. - -A user can send and receive encrypted XMTP messages using an app with an embedded XMTP messaging API [client](/protocol/v2/architectural-overview#client-layer). XMTP network [nodes](/protocol/v2/architectural-overview#network-layer) transport and persist the user's messages. - -For the protocol specification, see [The XMTP Protocol](https://github.com/xmtp/proto/blob/main/PROTOCOL.md) in the `proto` GitHub repo. diff --git a/docs/pages/get-started/references.md b/docs/pages/get-started/references.md deleted file mode 100644 index ca1ecc2..0000000 --- a/docs/pages/get-started/references.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: "Access reference documentation for each XMTP client SDK" ---- - -# SDK reference docs - -Use these reference docs as guides to integrating the capabilities of XMTP SDKs in your apps. - -- [Reference docs](https://xmtp-js.pages.dev/modules) for [JavaScript SDK](https://github.com/xmtp/xmtp-js) - -- [Reference docs](https://xmtp.github.io/xmtp-web/modules.html) for [React SDK](https://github.com/xmtp/xmtp-web/tree/main/packages/react-sdk) - -- [Reference docs](https://xmtp.github.io/xmtp-android/) for [Kotlin SDK](https://github.com/xmtp/xmtp-android) - -- [Reference docs](https://xmtp.github.io/xmtp-ios/) for [Swift SDK](https://github.com/xmtp/xmtp-ios) - -- [Reference docs](https://xmtp.github.io/xmtp-react-native/modules.html) for [React Native SDK ](https://github.com/xmtp/xmtp-react-native) diff --git a/docs/pages/groups/build-group-chat.mdx b/docs/pages/groups/build-group-chat.mdx deleted file mode 100644 index b99a4ba..0000000 --- a/docs/pages/groups/build-group-chat.mdx +++ /dev/null @@ -1,672 +0,0 @@ ---- -description: Learn how to build group chat with XMTP ---- - -# Build group chat with MLS and XMTP - -Secure group chat is an important part of every messaging app. XMTP group chat is based on the [MLS specification](https://www.rfc-editor.org/rfc/rfc9420.html). - -To learn nore, see [Security and encryption with MLS and XMTP](/protocol/security-encryption). - -In this guide, we cover the essentials of building group chat using XMTP, from the initial step of ensuring that potential members have v3 identities to starting a new group chat to synchronizing group chat details. - -## Overview - -Here are some key points to understand before building group chat with XMTP. - -### Group chat keys work per app installation - -An app installation is registered to a user. Group chat messages a user sends using an app installation are encrypted so only that app installation can decrypt them. This is because keys are generated to work per app installation. App installations do not share the same keys. - -To learn more, see [Installations](/protocol/v3/identity#installations). - -### ⚠️ Important: Manage actions that make a local database inaccessible - -Because group chat keys work per app installation, there are user actions that make an app installation’s local database inaccessible to other app installations. - -Here are the actions: - -- A user logs out of an installation of your app and logs into a different app installation on their device. -- A user deletes an installation of your app from their device. - -As a result of either of these actions, the user will lose access to the local database for the app installation, which includes all group chat messages they sent using the installation of your app on their device. - -As an app developer, this concept is important to understand and communicate to your users. For example, you might consider using this language: - -> If you log out of <app name> and log into a different app on this device, or delete <app name> from this device, you will lose access to all group chat messages you sent using this installation of <app name> on this device. - -To enable your users to avoid losing access to their local databases, allow them to store their local cache in iCloud or Google Cloud, for example. This option will enable message persistence within a single app ecosystem. - -For example, let's say that App A enables users to store their local cache in iCloud. A user does this and then deletes App A from their device. The user can reinstall App A and restore their local cache from iCloud. - -However, this option does not allow users to restore a local cache across apps. For example, a local cache from App A can't be used to restore message history to App B. In this case, the best solution will be the forthcoming XMTP Message History server. - -### Web support for group chat - -The XMTP [JavaScript SDK](https://github.com/xmtp/xmtp-js) and [React SDK](https://github.com/xmtp/xmtp-web/tree/main/packages/react-sdk) don’t yet provide web support for group chat. However, if you want to integrate group chat backend support, you can use the **experimental** XMTP [Node SDK](https://www.npmjs.com/package/@xmtp/mls-client). - -Web support for group chat is lagging due to technical challenges related to integrating WebAssembly (WASM) and its extensions. WASM sandbox cannot access the operating system directly, which is necessary for tasks like file reads. WASI extends WASM to allow operating system interaction, but it comes with its own set of challenges. For example, current WASI 0.2 has no built-in way to handle asynchronous operations effectively. The team is working toward solutions. - -### Group size - -Group sizes can range from 1 to 400. XMTP expects most groups will fall into one of two profiles: - -- Small groups where everyone knows each other (e.g., texting) and in which the group size is not large enough to require a lot of permissions or moderation. - -- Large groups of relative strangers (e.g., Discord) that often start with restricted permission and more moderation to ensure the group is not too noisy for its intended purpose. - -Also, a one-person group is allowed. Messages sent to the group will be broadcast to all the installations used by that person. - -### Local database creation and syncing - -When an app first calls `Client.create()` in one of the XMTP APIs, LibXMTP creates a local database to manage messaging between the app and the network. In subsequent calls, it loads the existing database. The database is encrypted using the keys from the `Signer` interface. See [Saving keys](/client/create-client#saving-keys) for instructions on how to extract the key, store it, and pass it to `Client.create()` later. If you want to delete your local database, call `Client.deleteLocalDatabase()`. - -Calling the `sync()` method on the Conversations protocol checks for welcome messages and creates a new group if one is found. The new group will not show up on the list until the app syncs. Calling the `sync()` method on the Group protocol prompts LibXMTP to pull updates from the network and push any unsent updates from the client related to the group. This will update the database for the group. - -In some cases, LibXMTP will perform a sync automatically. This currently includes calls to add/remove members to a group or using the stream functions. Outside of those methods, apps can call `sync()` when they choose to efficiently manage network traffic. - -:::info -If your app supports [reactions](/content-types/reaction) or [replies](/content-types/reply), you should create and manage a separate [local database](/perf-ux/local-first) to store these content types. For example, you can use the device's encrypted container as the local cache to store decrypted data. This local database is key to performantly displaying reactions and replies with their referenced messages when rendering message lists. -::: - -When a message is sent, it is stored in the local database with a status of `Unpublished`. `find_messages()` will display unpublished messages by default unless you filter on `DeliveryStatus`. Unpublished messages can be displayed to the user but should be marked as not yet sent in the app UI. - -When the app calls `sync()`, LibXMTP will make three attempts to automatically send the message to the network. If all three attempts fail, the message status will be marked as `Failed`. If it succeeds, it will be marked as `Published`. - -To learn more about database operations, see the [XMTP MLS README](https://github.com/xmtp/libxmtp/blob/main/xmtp_mls/README.md). - -### Push notifications - -Group chat supports push notifications. To learn more, see the [Build push notifications](/notifications/build-notifications). - -## Example apps - -If you’d like to dive right into exploring the code, check out the example apps in these XMTP SDKs that support group chat: - -- XMTP React Native SDK [Example](https://github.com/xmtp/xmtp-react-native/tree/main/example) -- XMTP Android SDK [Example](https://github.com/xmtp/xmtp-android/tree/main/example) -- XMTP iOS SDK [Example](https://github.com/xmtp/xmtp-ios/tree/main/XMTPiOSExample) - -## Create group chats - -Take these steps to create group chats. - -::::steps - -### Create a client that supports group chat - -See [Create a client](/client/create-client#create-a-client). - -### Check if a user has a V3 identity - -Only users with V3 identities can participate in a group chat. For this reason, the first step to creating a group chat is to check if a potential group member has a V3 identity. - -To learn more about V3 identities, see [Multi-wallet Identity in V3](/protocol/v3/identity.md). - -:::code-group - -```jsx [React Native] -const canMessageV3 = await client.canGroupMessage([alix.address, bo.address]); -``` - -```kotlin [Kotlin] -val canMessage = client.canMessageV3(listOf(alix.address, bo.address)) -``` - -```swift [Swift] -let canMessageV3 = try await alixClient.canMessageV3(addresses: [alix.address, bo.address]) -``` - -```tsx [Node] -// this API is experimental and may change in the future - -const canMessage = await client.canMessage([ - caro.address, - alix.address, - "0xNewAddress", -]); -``` - -::: - -### Create a group chat - -To create a group chat, each of the specified member addresses must have a V3 identity and have used the identity to start up an app installation that supports group chat. - -:::code-group - -```jsx [React Native] -const group = await client.conversations.newGroup( - [anotherClient.address], - // set the permission level for the group. Options include "admin_only", where only the creator is an admin, or "all_members" to make everyone an admin. - { - permissionLevel: "admin_only", - name: "Group Name", - imageUrlSquare: "", - }, -); -``` - -```kotlin [Kotlin] -val group = client.conversations.newGroup(listOf(walletAddress1, walletAddress2), - // Set permissions for the group. Options include "ADMIN_ONLY" where only the creator has admin rights, or "ALL_MEMBERS" where all members are admins. - permissions = GroupPermissions.ADMIN_ONLY, - name = "Group Name", - imageUrlSquare = "", -) -``` - -```swift [Swift] -let group = try await client.conversations.newGroup(with: [walletAddress1, walletAddress2], -// Set permissions for the group. Options include ".adminOnly" where only the creator has admin rights, or ".allMembers" where all members are admins. -permissions: .adminOnly, name: "Group Name", imageUrlSquare: "") -``` - -```tsx [Node] -// this API is experimental and may change in the future - -const group = await client.conversations.newConversation( - [walletAddress1, walletAddress2], - GroupPermissions.GroupCreatorIsAdmin, -); -``` - -::: - -:::tip - -If a member is using an app installation that doesn’t support group chat, consider sending them a message from your app to let them know how to join the group chat. For example: - -><sender address> added you to a group chat, but you aren't using an app that supports group chat. To join the group chat, use an app that supports group chat, such as <your app name>. - -::: - -:::: - -## Display group chats - -Use these methods to display group chats associated with the current client. - -### Get group chats - -:::tip - -In this documentation, “group chat” refers to "group chat conversations." As with XMTP direct message conversations, conversations do not include the messages in the conversation. - -::: - -:::code-group - -
-```jsx [JavaScript] -//First fetch new data from the network -await client.conversations.syncGroups(); -//Get the updated group list -const groups =await client.conversations.listGroups(); -``` - -Get group chats and direct message conversations: - -```jsx [JavaScript] -// List all conversations, including both group and individual -val conversations = client.conversations.listAll() -``` -
- -
-```kotlin [Kotlin] -//First fetch new data from the network -client.conversations.syncGroups() -//Get the updated group list -val groups = client.conversations.listGroups() -``` - -Get group chats and direct message conversations: - -```kotlin [Kotlin] -// List all conversations, including both group and individual -val conversations = client.conversations.list(includeGroups = true) -``` -
- -
-```swift [Swift] -//Get the updated group list -let groups =try await client.conversations.groups() -``` - -Get group chats and direct message conversations: - -```swift [Swift] -let groups = try await client.conversations.list(includeGroups: true) -``` -
- -```tsx [Node] -// this API is experimental and may change in the future -// sync groups first - -await client.conversations.sync(); -const groups = await client.conversations.list(options); -``` - -::: - -### Get group chat messages - -:::code-group - -```jsx [React Native] -await group.messages(); -``` - -```kotlin [Kotlin] -val messages = group.messages() -``` - -```swift [Swift] -try await group.messages(); -``` - -```tsx [Node] -// this API is experimental and may change in the future -// sync group first - -await group.sync(); -const messages = group.messages(options); -``` - -::: - -### Check if user is active in a group chat - -Use the `isActive` property to check if the current user is still a participant in a group chat. For example, if a user is removed from a group chat, the group chat will not be active for the user. - -Use this status to adjust the user’s interface accordingly, such as removing the user’s ability to send messages in the group chat. - -:::code-group - -```jsx [React Native] -const isActive = await group.isActive(); -``` - -```kotlin [Kotlin] -val isActive = group.isActive() -``` - -```swift [Swift] -let isActive = try group.isActive() -``` - -```tsx [Node] -// this API is experimental and may change in the future - -const isActive = group.isActive; -``` - -::: - -## Send messages in group chats - -Group chat supports all message types you can send using direct message conversations, including [Subscription Frames](/open-frames/subscription-open-frames), [replies](/content-types/reply), [reactions](/content-types/reaction), [attachments](/content-types/remote-attachment), and [read receipts](/content-types/read-receipt). - -:::code-group - -```jsx [React Native] -const group =await client.conversations.newGroup([ - walletAddress1, - walletAddress2, -]); -// Send a message -await group.send("Hello, group!"); -``` - -```kotlin [Kotlin] -val group = client.conversations.newGroup(listOf(walletAddress1,walletAddress2)) -//Send a message -group.send("Hello, group!") -``` - -```swift [Swift] -let group = try await client.conversations.newGroup(with: [walletAddress1, walletAddress2]) -//Send a message -try await group.send(content: "Hello, group!") -``` - -```tsx [Node] -// this API is experimental and may change in the future - -const group = await client.conversations.newConversation( - [walletAddress1, walletAddress2], - GroupPermissions.GroupCreatorIsAdmin, -); -await group.send("Hello, group!", ContentTypeText); -``` - -::: - -## Stream group chats - -Use these methods to stream group chats. - -### Stream group chat updates - -:::code-group - -
- -```jsx [React Native] -// Listen for group chat updates -const streamGroups =async (client) => { -const groups = []; -const cancelStreamGroups =await client.conversations.streamGroups( -(group) => { -groups.push(group); - }, -); - -// Use cancelStreamGroups() to stop listening to group updates -}; -``` - -Stream group chats and direct message conversations: - -```jsx [React Native] -const streamAllGroupMessages = async (client) => { - const allConvos = []; - const cancelStreamAllGroupMessages = - await client.conversations.streamAllMessages(async (message) => { - console.log(`New message: ${message.content}`); - }); - // Use cancelStreamAllGroupMessages() to stop listening to all conversation updates -}; -``` - -
- -
- -```kotlin [Kotlin] -// Stream updates for all group conversations -val groupsStream = client.conversations.streamGroups() - -groupsStream.collect { group -> - println("New or updated group: ${group.id}") -} -``` - -Stream group chats and direct message conversations: - -```kotlin [Kotlin] -// Stream updates for all conversations, including individual and groups -val conversationsAndGroupsStream = conversations.streamAllMessages(includeGroups = true) - -allConversationsStream.collect { grouporconv -> - println("New or updated group or conversation: ${grouporconv.id}") -} -``` - -
- -
- -```swift [Swift] -// Stream updates for all group conversations -for try await group in client.conversations.streamGroups() { - print("New or updated group: \(group.id)") -} -``` - -Stream group chats and direct message conversations: - -```swift [Swift] -// Stream updates for all conversations, including individual and groups -for try await conversation in client.conversations.streamAll() { - print("New or updated group or conversation: \(conversations.id)") -} -``` - -
- -
- -```tsx [Node] -// this API is experimental and may change in the future - -const stream = client.conversations.stream(); - -for await (const group of stream) { - console.log("New group created", group); -} - -// stop stream -stream.stop(); -``` -
- -::: - -### Stream group chat messages and membership updates - -Stream messages and member management updates in group chats, such as adding and removing members: - -:::code-group - -
-```jsx [React Native] -// Assuming `group` is an existing group chat object -const streamGroupMessages =async (group) => { -const cancelGroupMessageStream =await group.streamGroupMessages( -async (message) => { - console.log(`New message: ${message.content}`); - // Membership updates -if (message.contentTypeId === ContentTypes.GroupMembershipChange) { -const addresses =await group.memberAddresses(); - // Get new members - console.log(addresses); // Example usage of addresses - } - }, - ); - - // Use cancelGroupMessageStream() to stop listening to group updates -return cancelGroupMessageStream; -}; -``` - -Stream messages in group chats and direct message conversations: - -```jsx [React Native] -const streamAllGroupMessages =async (client) => { -const allConvos = []; -const cancelStreamAllGroupMessages = -await client.conversations.streamAllMessages( - async (message) => { - console.log(`New message: ${message.content}`); - }); - // Use cancelStreamAllGroupMessages() to stop listening to all conversation updates -}; -``` - -
- -
- -```kotlin [Kotlin] -//First fetch new data from the network -client.conversations.syncGroups() -//Get the updated group list -val groups = client.conversations.streamAllMessages(includeGroups = true) -``` - -
- -```swift [Swift] -//Get the updated group list -//Get the updated group list -let groups = try await client.conversations.streamAllMessages(includeGroups: true) -``` - -
- -Stream messages in group chats, current and future: - -```tsx [Node] -// this API is experimental and may change in the future - -const stream = client.conversations.streamAllMessages(); - -for await (const message of stream) { - console.log("New message received ", message); -} - -// stop the stream -stream.stop(); -``` - -Stream messages in a group chat: - -```tsx [Node] -// this API is experimental and may change in the future - -const stream = group.stream(); - -for await (const message of stream) { - console.log("New message received ", message); -} - -// stop the stream -stream.stop(); -``` -
- -::: - -## Sync group chats - -Calling `sync()` for a group or groups gets any updates since the last sync and adds them to the local database. Be sure to periodically synchronize each group chat to ensure your app has the latest group chat details, including the most recent messages, member list, and group chat details, for example. - -Updates are also retrieved and added to the local database when streaming and when the user takes an action. - -When your user sends a message, you don’t need to sync with the network for them to see their own message. The message gets written to their local database, and it shows up immediately for them. The same applies when your user creates a group. - -See [⚠️ Important: Manage actions that make a local database inaccessible](#️-important-manage-actions-that-make-a-local-database-inaccessible). - -This means that everything XMTP gets from the network for the user is stored in this local database and never needs to be fetched again. Extra syncing isn’t costly as the process won’t fetch data it already has, but this is just an explanation of why syncing isn’t necessary for data created by a user’s own actions. - -However, you must sync (or use streaming) to enable **other** users to see the group chats and messages your user created and sent. - -### Sync group chat updates - -:::code-group - -
- -```jsx [React Native] -// List groups without syncing with the network -let groups = await client.conversations.listGroups(); -// groups length might be 0 if not synced after group creation -// Sync groups and list again -await client.conversations.syncGroups(); -groups = await client.conversations.listGroups(); -console.log(groups.length); // groups length reflects the actual number of groups -``` - -Synchronize group chats and direct message conversations: - -```jsx [React Native] -let conversations = await client.conversations.listAll(); -``` - -
- -
- -```kotlin [Kotlin] -client.conversations.syncGroups() -``` - -Synchronize group chats and direct message conversations: - -```kotlin [Kotlin] -// List all conversations, including both group and individual -val conversations = client.conversations.list(includeGroups = true) -``` - -
- -
- -```swift [Swift] -try await client.conversations.sync() -``` - -Synchronize group chats and direct message conversations: - -```swift [Swift] -try await client.conversations.list(includeGroups: true) -``` - -
- -```tsx [Node] - -await client.conversations.sync(); -``` - -::: - -### Sync group chat messages and membership updates - -Use **`sync()`** to synchronize group chat data, such as new messages or membership changes. - -:::code-group - -```jsx [React Native] -// Assume group is an existing group chat object -await group.sync(); // Synchronizes the group's messages and members -// Fetch messages without network sync -const messages =await group.messages(true); -console.log(messages.length); // Shows messages fetched from local data -``` - -```kotlin [Kotlin] -// Assume group is an existing group chat object -group.sync() // Synchronizes the group's messages and members -// Fetch messages without network sync -val messages = group.messages() -println("Messages fetched from local: ${messages}") // Shows messages fetched from local data -``` - -```swift [Swift] -// Assume group is an existing object -try await group.send(content: "sup gang") -try await group.sync // Synchronizes the group's messages and members -// Fetch messages without network sync -try await group.messages() -// verify contents -print("Test message content: \(testMessage.content())" -``` - -```tsx [Node] -// this API is experimental and may change in the future - -await group.sync(); -``` - -::: - -## SDK method call flows - -### Form a group chat - -![Forming a group](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/form-groups.png) - -Forming groups is fairly simple. Alix's app can use the conversation protocol to create a group with Bo and Caro. Behind the scenes, XMTP looks up every installation belonging to Bo and Caro and sends each installation a welcome message. Each installation has its own key pair, so each message is encrypted separately. - -Bo and Caro's apps then see the new conversation on the list when they use the conversation protocol to sync with XMTP. They then use the group protocol to engage with individual groups. - -### Send and receive group chat messages - -![Sending and receiving](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/send-receive.png) - -When Alix sends a message to the group, XMTP sends the message to every installation of every group member. Other group member's apps use the group protocol to receive the message. diff --git a/docs/pages/groups/group-consent.md b/docs/pages/groups/group-consent.md deleted file mode 100644 index 25d0f05..0000000 --- a/docs/pages/groups/group-consent.md +++ /dev/null @@ -1,222 +0,0 @@ -# Handle user consent in group chat - -In addition to permissions that enable designated members to add and remove members from a group chat, you can apply [user consent preferences](/consent/user-consent) to group chats to prevent unwanted contacts. There are consent preferences that enable a user to allow or deny contact from a group ID, inbox ID, or address in a group chat context. - -For example, the Group protocol provides the `added_by_inbox_id` method to find out who has initiated the user into a group chat. Apps can compare this inboxId using the standard `isInboxIdAllowed()` or `isInboxIdDenied()` functions on the contacts to determine how and whether the group should be listed and how and whether messages are displayed based on the design of the app and the user's settings. - -:::note -Even if an app is not displaying a group chat, LibXMTP will keep receiving group messages and store them in the local database as long as the user is a member of the group. -::: - -## Allow or deny contact by wallet in group chat - -:::code-group - -```jsx [React Native] -// Allow -await contact.allow([walletAddress]); - -// Deny -await contact.deny([walletAddress]); -``` - -```kotlin [Kotlin] -Code sample coming soon -``` - -```swift [Swift] -// Allow -try await contact.allowInboxes(inboxIDs: [inboxID]) -``` - -```tsx [Node] -// note that this can only be done with the JS SDK (@xmtp/xmtp-js) - -await client.contacts.allow([walletAddress]); -``` - -::: - -## Allow or deny contact by inbox ID in group chat - -:::code-group - -```jsx [React Native] -// Allow -await contact.allowGroup([groupId]); - -// Deny -await contact.denyGroup([groupId]); -``` - -```kotlin [Kotlin] -// Allow -contacts.allowInboxes(listOf(inboxID)) - -// Deny -contacts.denyInboxes(listOf(inboxID)) -``` - -```swift [Swift] -// Allow -try await contact.allowInboxes(inboxIds: [inboxID]) - -//Deny -try await contact.denyInboxes(inboxIds: [inboxID]) -``` - -```tsx [Node] -// note that this can only be done with the JS SDK (@xmtp/xmtp-js) - -// allow -await client.contacts.allowInboxes([inboxID]); - -// deny -await client.contacts.denyInboxes([inboxID]); -``` - -::: - -## Allow or deny contact by group chat ID - -:::code-group - -```jsx [React Native] -// Allow group -await contact.allowGroup([groupId]); - -// Deny a group -await contact.denyGroup([groupId]); -``` - -```kotlin [Kotlin] -// Allow -contact.allowGroups(listOf(group.id)) - -// Deny -contact.denyGroups(listOf(group.id)) -``` - -```swift [Swift] -Code sample coming soon -``` - -```tsx [Node] -// note that this can only be done with the JS SDK (@xmtp/xmtp-js) - -// allow -await client.contacts.allowGroups([groupId]); - -// deny -await client.contacts.denyGroups([groupId]); -``` - -::: - -## Allow or deny contact from inbox ID - -Enable a user to explicitly allow or deny contact from an inbox ID. - -:::code-group - -```jsx [React Native] -// Allow -await client.contacts.allowInboxes([client.inboxId]); - -// Deny -await client.contacts.denyInboxes([client.inboxId]); -``` - -```kotlin [Kotlin] -// Allow -client.contacts.allowInboxes(listOf(client.inboxID)) - -// Deny -client.contacts.denyInboxes(listOf(client.inboxID)) -``` - -```swift [Swift] -// Allow -try await client.contacts.allowInboxes(inboxIds: [client.inboxID]) - -// Deny -try await client.contacts.denyInboxes(inboxIds: [client.inboxID]) -``` - -```tsx [Node] -Code sample coming soon -``` - -::: - -## Check consent for group chat ID - -Check if contact from a group chat ID is allowed or denied for a user. - -:::code-group - -```jsx [React Native] -// Check if contact by a group is allowed for a member -const isAllowed = await group.isGroupAllowed(groupId); - -// Check if contact by a group is denied for a member -const isDenied = await group.isGroupDenied(groupId); -``` - -```kotlin [Kotlin] -contact.isGroupAllowed(group.id) -``` - -```swift [Swift] -await contact.isGroupAllowed(groupId: groupID) -``` - -```tsx [Node] -// note that this can only be done with the JS SDK (@xmtp/xmtp-js) - -// is group allowed? -await client.contacts.isGroupAllowed(groupId); - -// is group denied? -await client.contacts.isGroupDenied(groupId); -``` - -::: - -## Check consent for inbox ID - -Check if contact from an inbox ID is allowed or denied for a user. - -:::code-group - -```jsx [React Native] -await client.contacts.isInboxAllowed(client.inboxId); -``` - -```kotlin [Kotlin] -contacts.isInboxAllowed(client.inboxId) -``` - -```swift [Swift] -await contact.isInboxAllowed(inboxId: client.inboxID) -``` - -```tsx [Node] -// note that this can only be done with the JS SDK (@xmtp/xmtp-js) - -// is inbox allowed? -await client.contacts.isInboxAllowed(inboxId); - -// is inbox denied? -await client.contacts.isInboxDenied(inboxId); -``` - -::: - -## Stream user consent - -To learn how to stream user consent preferences, see [Stream the consent list](/consent/consent-methods#stream-the-consent-list). - -## Synchronize user consent - -To learn how to keep user consent preferences synchronized, see [Synchronize user consent preferences](/consent/consent-methods#synchronize-user-consent-preferences). diff --git a/docs/pages/groups/group-metadata.md b/docs/pages/groups/group-metadata.md deleted file mode 100644 index c5a6876..0000000 --- a/docs/pages/groups/group-metadata.md +++ /dev/null @@ -1,99 +0,0 @@ -# Handle group chat metadata - -Group chats can have metadata, like names and images. Metadata can help users more easily identify their group chats. You can also set group chat metadata when [creating a group chat](/groups/build-group-chat#create-a-group-chat). - -## Get a group chat name - -:::code-group - -```jsx [React Native] -const groupName =await group.groupName(); -``` - -```kotlin [Kotlin] -group.name -``` - -```swift [Swift] -try group.groupname() -``` - -```tsx [Node] -// this API is experimental and may change in the future - -const groupName = group.name; -``` - -::: - -## Update a group chat name - -:::code-group - -```jsx [React Native] -await group.updateName("New Group Name"); -``` - -```kotlin [Kotlin] -group.updateGroupName("New Group Name") -``` - -```swift [Swift] -try await group.updateGroupName(groupname: "New Group Name") -``` - -```tsx [Node] -// this API is experimental and may change in the future - -await group.updateName("New Group Name"); -``` - -::: - -## Get a group chat image URL - -:::code-group - -```jsx [React Native] -const groupName = await group.imageUrlSquare(); -``` - -```kotlin [Kotlin] -group.imageURLSquare -``` - -```swift [Swift] -try group.groupImageUrlSquare() -``` - -```tsx [Node] -// this API is experimental and may change in the future - -const groupImageUrl = group.imageUrl; -``` - -::: - -## Update a group chat image URL - -:::code-group - -```jsx [React Native] -await group.updateImageUrlSquare("ImageURL"); -``` - -```kotlin [Kotlin] -group.updateGroupImageUrlSquare("newurl.com") -``` - -```swift [Swift] -try await group.updateGroupImageUrlSquare(imageUrlSquare: "newurl.com") -``` - -```tsx [Node] -// this API is experimental and may change in the future - -await group.updateImageUrl("newurl.com"); -``` - -::: diff --git a/docs/pages/groups/group-permissions.md b/docs/pages/groups/group-permissions.md deleted file mode 100644 index 9f16b13..0000000 --- a/docs/pages/groups/group-permissions.md +++ /dev/null @@ -1,439 +0,0 @@ -# Handle group chat permissions - -Robust group chat permissions are key to providing users with a friendly and safe group chat experience. - -## Available permissions and options - -These are the permissions allowed for a group: - -- Add member -- Remove member -- Update metadata -- Add admin -- Remove admin -- Update permissions - -These are the permission options available for each permission: - -- Unspecified -- Allow -- Deny -- Allow if admin or super admin -- Allow if super admin - -You can list, add, and remove members from a group chat. Only the group chat creator (super admin) has permission to add or remove members. This restriction ensures that only authorized individuals can modify the participant list. - -## Manage group chat admins - -There are two kinds of administrators: super admins and admins. The group creator starts as a super admin, who has the most permissions so that a normal admin cannot remove the creator or destroy a group. - -While group membership is inherent to the MLS group, administrators are specified through the group metadata. Updating the metadata is how you add or remove admins and specify who are admins versus super admins. - -Here's an overview of how group chat admin statuses work: - -- Everyone in a group chat is a member. -- A member can be granted admin or super admin status. -If the member's admin or super admin status is removed, they are still a member of the group chat. -- By default, only a member with super admin can add and remove admin and super admin statuses. -Also by default, the group creator is the only member with super admin status. - -:::info - -By design, checking admin permission status by wallet address is not supported. Instead, look up the `inboxID` for that wallet address, then use the calls below. - -::: - -### Check if inbox ID is an admin - -:::code-group - -```jsx [React Native] -// Assume group is an existing group chat object for client -const isAdmin = await.group.isAdmin(adminClient.inboxID) -``` - -```kotlin [Kotlin] -//Assume group is an existing group chat object for client -val isInboxIDAdmin = group.isAdmin(inboxId) -``` - -```swift [Swift] -// Assume group is an existing group chat object for client -try group.isAdmin(client.inboxID) -``` - -```tsx [Node] -// this API is experimental and may change in the future - -const isAdmin = group.isAdmin(inboxId); -``` - -::: - -### Check if inbox ID is a super admin - -:::code-group - -```jsx [React Native] -//Assume group is an existing group chat object for client -const isSuperAdmin = await group.isSuperAdmin(client.inboxID); -``` - -```kotlin [Kotlin] -//Assume group is an existing group chat object for client -val isInboxIDSuperAdmin = group.isSuperAdmin(inboxId) -``` - -```swift [Swift] -try group.isSuperAdmin(inboxid: inboxID) -``` - -```tsx [Node] -// this API is experimental and may change in the future - -const isSuperAdmin = group.isSuperAdmin(inboxId); -``` - -::: - -### List admins - -:::code-group - -```jsx [React Native] -await group.listAdmins(); -``` - -```kotlin [Kotlin] -// Returns a list of inboxIds of Admins -group.listAdmins() -``` - -```swift [Swift] -try group.listAdmins() -``` - -```tsx [Node] -// this API is experimental and may change in the future - -const admins = group.admins; -``` - -::: - -### List super admins - -:::code-group - -```jsx [React Native] -await group.listSuperAdmins(); -``` - -```kotlin [Kotlin] -// Returns a list of inboxIds of Super Admins -group.listSuperAdmins() -``` - -```swift [Swift] -try group.listSuperAdmins() -``` - -```tsx [Node] -// this API is experimental and may change in the future - -const superAdmins = group.superAdmins; -``` - -::: - -### Add admin status to inbox ID - -:::code-group - -```jsx [React Native] -await group.addAdmin(client.inboxID); -``` - -```kotlin [Kotlin] -group.addAdmin(inboxId) -``` - -```swift [Swift] -try await group.addAdmin(inboxid: inboxID) -``` - -```tsx [Node] -// this API is experimental and may change in the future - -await group.addAdmin(inboxId); -``` - -::: - -### Add super admin status to inbox ID - -:::code-group - -```jsx [React Native] -await group.addSuperAdmin(client.inboxID); -``` - -```kotlin [Kotlin] -group.addSuperAdmin(inboxId) -``` - -```swift [Swift] -try await group.addSuperAdmin(inboxid: inboxID) -``` - -```tsx [Node] -// this API is experimental and may change in the future - -await group.addSuperAdmin(inboxId); -``` - -::: - -### Remove admin status from inbox ID - -:::code-group - -```jsx [React Native] -await group.removeAdmin(client.inboxID); -``` - -```kotlin [Kotlin] -group.removeAdmin(inboxId) -``` - -```swift [Swift] -try await group.removeAdmin(inboxid: inboxid) -``` - -```tsx [Node] -// this API is experimental and may change in the future - -await group.removeAdmin(inboxId); -``` - -::: - -### Remove super admin status from inbox ID - -:::code-group - -```jsx [React Native] -await group.removeSuperAdmin(client.inboxId); -``` - -```kotlin [Kotlin] -group.removeSuperAdmin(inboxId) -``` - -```swift [Swift] -try await group.removeSuperAdmin(inboxid: inboxID) -``` - -```tsx [Node] -Code sample coming soon -``` - -::: - -## Manage group chat membership - -### Add members by inbox ID - -:::code-group - -```jsx [React Native] -await group.addMemberInboxIds([inboxId]); -``` - -```kotlin [Kotlin] -group.addMembersByInboxIds(listOf(client.inboxId)) -``` - -```swift [Swift] -try await group.addMembersByInboxId(inboxIds: [inboxId]) -``` - -```tsx [Node] -// this API is experimental and may change in the future - -await group.addMembersByInboxId([inboxId]); -``` - -::: - -### Add members by address - -:::code-group - -```jsx [React Native] -await group.addMembers([walletAddress]); -``` - -```kotlin [Kotlin] -group.addMembers(listOf(walletAddress)) -``` - -```swift [Swift] -try await group.addMembers(addresses: [walletAddress]) -``` - -```tsx [Node] -// this API is experimental and may change in the future - -await group.addMembers([walletAddress]); -``` - -::: - -### Remove members by inbox ID - -:::code-group - -```jsx [React Native] -await group.removeMemberInboxIds([inboxId]); -``` - -```kotlin [Kotlin] -group.removeMemberInboxIds(listOf(inboxId)) -``` - -```swift [Swift] -try await group.removeMemberInboxIds(inboxIds: [inboxId]) -``` - -```tsx [Node] -// this API is experimental and may change in the future - -await group.removeMembersByInboxId([inboxId]); -``` - -::: - -### Remove members by address - -:::code-group - -```jsx [React Native] -await group.removeMembers([walletAddress]); -``` - -```kotlin [Kotlin] -group.removeMembers(listOf(walletAddress)) -``` - -```swift [Swift] -try await group.removeMembers(addresses: [walletAddress]) -``` - -```tsx [Node] -// this API is experimental and may change in the future - -await group.removeMembers([walletAddress]); -``` - -::: - -### Get inbox IDs for members - -:::code-group - -```jsx [React Native] -await group.memberInboxIds(); -``` - -```kotlin [Kotlin] -val members = group.members() -val inboxIds = members.map { it.inboxId } - -OR - -val inboxId = client.inboxIdFromAddress(peerAddress) -``` - -```swift [Swift] -let members = try group.members.map(\.inboxId).sorted() - -OR - -try await client.inboxIdFromAddress(address: peerAddress) -``` - -```tsx [Node] -// this API is experimental and may change in the future - -const inboxId = await client.getInboxIdByAddress(address); -``` - -::: - -### Get addresses for members - -:::code-group - -```jsx [React Native] -const members = await group.members(); -const addresses = members.map((member) => member.addresses); -``` - -```kotlin [Kotlin] -val members = group.members() -val addresses = members.map { it.addresses } -``` - -```swift [Swift] -let peerMembers = try Conversation.group(group).peerAddresses.sorted() -``` - -```tsx [Node] -// this API is experimental and may change in the future - -// sync group first -await group.sync(); - -// get group members -const members = group.members; - -// map inbox ID to account addresses -const inboxIdAddressMap = new Map( - members.map((member) => [member.inboxId, member.accountAddresses]), -); -``` - -::: - -### Get the inbox ID that added the current member - -:::code-group - -```jsx [React Native] -// this API is experimental and may change in the future - -const addedByInboxId =await group.addedByInboxId(); -``` - -```kotlin [Kotlin] -val addedByAddress = group.addedByInboxId(); -``` - -```swift [Swift] -try await group.addedByInboxId(); -``` - -```tsx [Node] -// note that this can only be done with the JS SDK (@xmtp/xmtp-js) - -await client.contacts.allow([walletAddress]); -``` - -::: - -## SDK method call flow to add and remove members - -![Add and remove members](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/add-remove.png) - -When you add or remove members from a group, a proposal/commit message is sent to all the installations in the group. When the commit happens, the cryptographic state of the group is changed. This allows new members to receive messages but not decrypt older ones and prevents removed members from decrypting messages after their departure. diff --git a/docs/pages/inboxes/content-types.md b/docs/pages/inboxes/content-types.md new file mode 100644 index 0000000..6b7c996 --- /dev/null +++ b/docs/pages/inboxes/content-types.md @@ -0,0 +1,88 @@ +# Support content types with XMTP + +When you build an app with XMTP, all messages are encoded with a content type to ensure that an XMTP client knows how to encode and decode messages, ensuring interoperability and consistent display of messages across apps. + +In addition, message payloads are transported as a set of bytes. This means that payloads can carry any content type that a client supports, such as plain text, JSON, or even non-text binary or media content. + +At a high level, there are three categories of content types with XMTP: + +- Standard +- Standards-track +- Custom + +## Standard content types + +A standard content type is one that has undergone the XMTP Request for Comment (XRC) process and has been adopted as an [XMTP Improvement Proposal](https://github.com/xmtp/XIPs#readme) (XIP). + +Once adopted, a standard content type is bundled in XMTP client SDKs. A developer can then import the standard content type from an SDK for use in their app. + +Here is the current standard content type: + +### Text content type + +An app built with XMTP uses the `TextCodec` (plain text) standard content type by default. This means that if your app is sending plain text messages only, you don’t need to perform any additional steps related to content types. + +:::code-group + +```jsx [JavaScript] +await conversation.send("gm"); +``` + +```jsx [React] +await sendMessage(conversation, "gm"); +``` + +```swift [Swift] +try await conversation.send(content: "gm") +``` + +```kotlin [Kotlin] +conversation.send(text = "gm") +``` + +```jsx [React Native] +await conversation.send("gm"); +``` + +::: + +## Standards-track content types + +A standards-track content type is one that is being actively reviewed for adoption as a standard content type through the XIP process. + +Here are standards-track content types that you can review, test, and adopt in your app today: + +- [Remote attachment content type](#TODO) + Use to send a remote attachment of any size using the `RemoteAttachmentCodec` and a storage provider. + +- [Read receipt content type](#TODO) + + Use to send a read receipt, which is a `timestamp` that indicates when a message was read. The read receipt is sent as a message and you can use it to calculate the time since the last message was read. + +- [Reaction content type](#TODO) + + Use a reaction to send a quick and often emoji-based way to respond to a message. Reactions are usually limited to a predefined set of emojis or symbols provided by the messaging app. + +- [Reply content type](#TODO) + + Use a reply to send a direct response to a specific message in a conversation. Users can select and reply to a particular message instead of sending a new one. + +- [On-chain transaction reference content type](#TODO) + + Use to send references to on-chain transactions, such as crypto payments. + +## Custom content type + +Any developer building with XMTP can create a custom content type and immediately start using it in their app. Unlike a standard content type, use of a custom content type doesn't require prerequisite formal adoption through the XRC and XIP processes. + +For example, if you need a content type that isn't covered by a standard or standards-track content type, you can create a custom content type and begin using it immediately in your app. + +:::caution + +Be aware that your custom content type may not be automatically recognized or supported by other applications, which could result in it being overlooked or only its fallback text being displayed. + +::: + +If another app wants to display your custom content type, they must implement your custom content type in their code exactly as it's defined in your code. + +Fallback plain text is "alt text"-like description text that you can associate with a custom content type if you are concerned that a receiving app might not be able to handle the content. If the receiving app is unable to handle the custom content, it displays the fallback plain text instead. diff --git a/docs/pages/inboxes/push-notifications.md b/docs/pages/inboxes/push-notifications.md index 9b01d66..cf67c8d 100644 --- a/docs/pages/inboxes/push-notifications.md +++ b/docs/pages/inboxes/push-notifications.md @@ -14,7 +14,7 @@ Join the [XMTP Devs 💪 group chat](https://converse.xyz/group-invite/e-KZyw77 With XMTP, you can enable real-time push notifications to keep users updated on new conversations and messages. -For best practices, see [Best practices for push notifications](/notifications/notif-best-practices). +For best practices, see [Best practices for push notifications](https://docs.xmtp.org/notifications/notif-best-practices). ### **Get a Welcome message topic ID** @@ -90,10 +90,10 @@ To implement push notifications in your app, you must run a push notification se - **Continuous monitoring**: The XMTP network operates on a decentralized protocol, where messages are exchanged directly between clients. However, for push notifications, your app needs a dedicated server to continuously listen for new messages or events on the XMTP network, even when the user’s device is offline or the app is not running. - **Message processing**: Upon detecting new messages or events, the server processes them to determine their relevance and formats them appropriately for push notifications. This includes extracting necessary information, such as the sender’s identity and message content, to craft meaningful notifications. -- **Integration with push notification services**: The server interfaces with platform-specific push notification services, like [Apple Push Notification Service](/notifications/build-notifications#understand-apple-entitlements-for-ios-apps) (APNs) for iOS or Firebase Cloud Messaging (FCM) for Android. It sends the processed notifications to these services, which then deliver them to the user’s device. +- **Integration with push notification services**: The server interfaces with platform-specific push notification services, like [Apple Push Notification Service](https://docs.xmtp.org/notifications/build-notifications#understand-apple-entitlements-for-ios-apps) (APNs) for iOS or Firebase Cloud Messaging (FCM) for Android. It sends the processed notifications to these services, which then deliver them to the user’s device. To learn more about running a push notification server, see: -- Go: [Set up a push notification server](/notifications/notif-server) -- Android: [Try push notifications with the Android example XMTP app](/notifications/notifs-android) -- iOS: [Try push notifications with the iOS example XMTP app](/notifications/notifs-ios) +- Go: [Set up a push notification server](https://docs.xmtp.org/notifications/notif-server) +- Android: [Try push notifications with the Android example XMTP app](https://docs.xmtp.org/notifications/notifs-android) +- iOS: [Try push notifications with the iOS example XMTP app](https://docs.xmtp.org/notifications/notifs-ios) diff --git a/docs/pages/inboxes/support-consent.md b/docs/pages/inboxes/support-consent.md index 1d48615..2f76a5b 100644 --- a/docs/pages/inboxes/support-consent.md +++ b/docs/pages/inboxes/support-consent.md @@ -16,7 +16,7 @@ In any open and permissionless messaging ecosystem, spam is an inevitable realit However, with XMTP, you can give your users inboxes that are **spam-free spaces for chosen contacts only** by supporting user consent preferences. -To learn more, see [Understand how user consent preferences enable spam-free inboxes](/consent/user-consent). +To learn more, see [Understand how user consent preferences enable spam-free inboxes](/inboxes/support-consent). Use the following methods to provide users with control over their messaging experience, ensuring their inboxes are tailored to their preferences and free from spam. @@ -56,3 +56,135 @@ Listen for real-time updates to consent records: await alix.streamConsent() ``` +## How uesr consent preferences work + +With user consent preferences, a wallet address registered on the XMTP network can have one of three user consent preference values in relation to another user's wallet address: + +- Unknown +- Allowed +- Denied + +For example: + +1. `alix.eth` starts a conversation with `bo.eth`. At this time, `alix.eth` is unknown to `bo.eth` and the conversation displays in a message requests UI. + +2. When `bo.eth` views the message request, they express their user consent preference to **Block** or **Accept** `alix.eth` as a contact. + + - If `bo.eth` accepts `alix.eth` as a contact, their conversation displays in `bo.eth`'s main inbox. Because only contacts `bo.eth` accepts display in their main inbox, their inbox remains spam-free. + + - If `bo.eth` blocks contact with `alix.eth`, remove the conversation from `bo.eth`'s view. In an appropriate location in your app, give the user the option to unblock the contact. + +These user consent preferences are stored privately in an encrypted consent list on the XMTP network. The consent list is accessible by all apps that a user has authorized. This means a user can accept, or block, a contact once and have that consent respected across all other XMTP apps they use. + +### How user consent preferences are set + +Here are some of the ways user consent preferences are set: + +#### Unknown + +Conversation created in an app on an SDK version **with** user consent support: + +- For a new conversation that a peer contact wants to start with a user, the consent preference is set to `unknown`. + +Conversation created in an app on an SDK version **without** user consent support: + +- For all conversations with any peer contact, the consent preference is set to `unknown`. + +#### Allowed + +Conversation created in an app on an SDK version **with** user consent support: + +- For a new conversation that a user created with a peer contact, the SDK sets the consent preference to `allowed`. + + The user’s creation of the conversation with the contact is considered consent. + +- For an existing conversation created by a peer contact that hasn’t had its consent preference updated on the network (`unknown`) and that the user responds to, the SDK will update the consent preference to `allowed`. + + The user's response to the conversation is considered consent. + +- For a peer contact that a user has taken the action to allow, subscribe to, or enable notifications from, for example, the app must update the consent preference to `allowed`. + +Conversation created in an app on an SDK version **without** user consent support: + +- There are no scenarios in which a user consent preference will be set to `allowed`. + +#### Denied + +Conversation created in an app on an SDK version **with** user consent support: + +- For a peer contact that a user has taken the action to block, unsubscribe from, or disable notifications from, for example, the app must update the consent preference to `denied`. + +Conversation created in an app on an SDK version **without** user consent support: + +- There are no scenarios in which a user consent preference will be set to `denied`. + +### Use consent preferences to respect user intent + +Your app should aim to handle consent preferences appropriately because they are an expression of user intent. + +For example, if a user blocked a contact, your app should respect the user's intent to not see messages from the blocked contact. Handling the consent preference incorrectly and showing the user messages from the blocked contact may cause the user to lose trust in your app. + +Be sure to load the latest consent list from the network at appropriate steps in your app flow to ensure that your app can operate using the latest data. + +## Handle unknown contacts + +With user consent preferences, a wallet address registered on the XMTP network can have one of three user consent preference values in relation to another user's wallet address: + +- Unknown +- Allowed +- Denied + +You can implement [user consent preferences](/inboxes/support-consent) to give your users inboxes that are **spam-free spaces for allowed contacts only**. + +You can then handle message requests from unknown contacts in a separate UI. + +These message requests from unknown contacts could be from: + +- Contacts the user might know +- Contacts the user might not know +- Spammy or scammy contacts + +You can filter these unknown contacts to: + +- Identify contacts the user might know or want to know and display them on a **You might know** tab, for example. +- Identify contacts the user might not know and not want to know, which might include spam, and display them on a **Hidden requests** tab, for example. + +### Identify contacts the user might know + +To identify contacts the user might know or want to know, you can look for signals in onchain data that imply an affinity between addresses. You can then display appropriate messages on a **You might know** tab, for example. + +
+ +
+ +### Identify contacts the user might not know, including spammy or scammy requests + +To identify contacts the user might not know or not want to know, which might include spam, you can consciously decide to scan messages in an unencrypted state to find messages that might contain spammy or scammy content. You can also look for an absence of onchain interaction data between the addresses, which might indicate that there is no affinity between addresses. You can then filter the appropriate messages to display on a **Hidden requests** tab, for example. + +
+ +
+ +The decision to scan unencrypted messages is yours as the app developer. If you take this approach: + +- Handle unencrypted messages with extreme care, and don't store unencrypted messages beyond the time necessary to scan them. +- Consider telling users that your app scans unencrypted messages for spammy or scammy content. +- Consider making spam and scam message detection optional for users who prefer not to have their messages scanned. + +### Why is content moderation handled by apps and not XMTP? + +XMTP is a decentralized, open protocol built to ensure private, secure, and censorship-resistant communication. As such, XMTP can't read unencrypted messages, and therefore, it also can't scan or filter message contents for spammy or scammy material. + +The protocol can analyze onchain data signals, such as shared activity between wallet addresses, to infer potential affinities between addresses. However, because all XMTP repositories are open source, malicious actors could inspect these methods and develop workarounds to bypass them. + +Additionally, applying spam filtering or content moderation directly at the protocol level would introduce centralization, which goes against the decentralized, permissionless, and open ethos of XMTP and web3. A protocol-driven approach could limit interoperability and trust by imposing subjective rules about content across all apps. + +Instead, content filtering and moderation should be implemented at the app layer. Apps can decide how opinionated or lenient they want to be, tailoring their filtering approach to the needs of their users. For example, one app may choose to aggressively scan and block spam to provide a highly curated experience, attracting users who value more protection. Another app may opt for minimal or no filtering, appealing to users who prioritize full control and unfiltered communication. + +This flexibility enables different apps to serve different user preferences, fostering an ecosystem where users can choose the experience that best suits them. Whether an app scans messages or not, XMTP ensures that developers remain free to build in line with their own values, without imposing restrictions at the infrastructure level. This separation between the protocol and app layers is crucial to maintaining XMTP’s commitment to openness, interoperability, and user choice. + +:::tip + +Is your app using a great third-party or public good tool to help with spam and keep inboxes safe? Open an [issue](https://github.com/xmtp/docs-xmtp-org/issues) to share information about it. + +::: diff --git a/docs/pages/index.mdx b/docs/pages/index.mdx index 4b3919a..46bb3dd 100644 --- a/docs/pages/index.mdx +++ b/docs/pages/index.mdx @@ -35,14 +35,8 @@ import "../styles.css"; /> - conversation.consentState === "allowed", -); - -// Compile the subscription info, attaching the HMAC key when available. -consentedConversations.forEach((conversation) => { - subscriptionDetails.push({ - topic: conversation.topic, - hmacKey: conversation.hmacKey || null, - }); -}); - -// Special topics without HMAC keys -subscriptionDetails.push({ - topic: buildUserInviteTopic(userAddress), - hmacKey: null, -}); -subscriptionDetails.push({ - topic: buildUserIntroTopic(userAddress), - hmacKey: null, -}); - -// This operation sends the subscription details to the notification service. -await notificationClient.subscribeWithMetadata({ - installationId, - subscriptions: subscriptionDetails, -}); -``` - -## 4. Listen for notifications - -Alix's frontend is now listening for incoming notifications. - -```javascript [JavaScript] -// Listener for incoming Firebase notifications -messaging().onMessage(async (remoteMessage) => { - console.log("A new message arrived!", remoteMessage); -}); -``` - -## 5. Send a message - -Bo sends a message to Alix using their instance of the frontend. - -```javascript [JavaScript] -const bobClient = await Client.create(bobSigner, { env: "dev" }); -const conversation = await bobClient.conversations.newConversation(aliceWallet); -await conversation.send("Hello Alix!"); -``` - -## 6. XMTP network dispatch - -The XMTP network sends the encrypted message and topic to the notification server. - -```javascript [JavaScript] -// Pseudo-code for XMTP network sending encrypted message -const messageTopic = "XMTP/0/dm-alice-XMTP-topic-id"; -sendToNotificationServer(encryptedMessage, messageTopic); -``` - -## 7. Trigger push notifications - -The notification server triggers a push notification to Firebase. - -```javascript [JavaScript] -const message = { - data: { - topic: messageTopic, - message: encryptedMessage, - }, - topic: messageTopic, -}; -firebase_admin.messaging().send(message); -``` - -## 8. Firebase notification forwarding - -Firebase forwards the notification to Alix's device. - -## 9. Decrypt the message - -Alix's frontend receives the notification and decrypts the message. - -```javascript [JavaScript] -// Decrypting the message when a notification is received from Firebase -Firebase.messaging().onMessage((payload) => { - const decryptedMessage = decryptMessage(payload.data.message, encryptionKey); - console.log("Decrypted message:", decryptedMessage); -}); -``` - -:::info[for more information] -See [A Practical Guide To Building A Push Notification Client](https://github.com/XMTP/example-notification-server-go/blob/main/docs/notifications-client-guide.md?plain=1) diff --git a/docs/pages/notifications/notif-best-practices.mdx b/docs/pages/notifications/notif-best-practices.mdx deleted file mode 100644 index 84da9e8..0000000 --- a/docs/pages/notifications/notif-best-practices.mdx +++ /dev/null @@ -1,31 +0,0 @@ -# Best practices for push notifications - -- Display push notifications only for messages sent **to** a user. In other words, do not send a push notification to a user about a message they sent. To do this, filter out messages sent by the user and don't send push notifications for them. - -- Provide a separate setting for enabling and disabling direct message push notifications. For example, if you’re building a Lens app, provide a setting for XMTP push notifications that’s separate from Lens push notifications for posts, comments, likes, and so forth. For example, here are push notification settings in the Orb app: - -
- -
- -- Decrypt messages for push notifications so you can display the contents within the notification. For example, here is a decrypted push notification provided by the Converse app: - -
- -
- -- Display badges that indicate the presence of new notifications, messages, or conversations to help with engagement and interaction success. - - - Here is a conversation icon badge showing the presence of an unread message: - -
- -
- - Along these lines, be sure to unbadge conversations in which the user sent the latest message to avoid displaying unnecessary badges as users send messages across different apps. The action of sending the latest message implies that the user has seen the conversation. - - - Here is an app icon badge showing the number of unread messages in the Orb app: - -
- -
diff --git a/docs/pages/notifications/notif-server.md b/docs/pages/notifications/notif-server.md deleted file mode 100644 index e32c950..0000000 --- a/docs/pages/notifications/notif-server.md +++ /dev/null @@ -1,127 +0,0 @@ -# Set up a push notification server for an app built with XMTP - -This guide supplements the [core instructions](https://github.com/xmtp/example-notification-server-go/blob/np/export-kotlin-proto-code/README.md#local-setup) provided in the `example-notification-server-go` repository. The guide aims to address some common setup misconceptions and issues. - -This guide is for macOS users, but the steps should be similar for Linux users. - -## Useful resources - -- [Notification server example implementation](https://github.com/xmtp/example-notification-server-go) -- [Notification server integration test suite](https://github.com/xmtp/example-notification-server-go/blob/main/integration/README.md) - -## Install Docker - -1. Install Docker Desktop: - - - [Mac](https://docs.docker.com/docker-for-mac/install/) - - [Windows](https://docs.docker.com/docker-for-windows/install/) - - [Linux](https://docs.docker.com/desktop/install/linux-install/) - -2. You must also have Docker and Docker Compose installed on your system. You can install them using Homebrew: - - ```bash [Bash] - brew install docker docker-compose docker-credential-desktop - ``` - -3. Make sure Docker Desktop is running by searching for Docker in Spotlight and opening the application. You don't need to interact with the Docker UI. We're going to use terminal commands only. - -## Install Go - -If you need to upgrade Go on your system, you can do it via Homebrew: - -```bash [Bash] -brew install go -``` - -If you encounter an error like `Error: go 1.17.2 is already installed`, you already have Go installed on your system. - -You can check the version of Go installed on your system using: - -```bash [Bash] -brew update -brew upgrade go -``` - -After following these steps, you can update Homebrew and upgrade Go without issues. - -## Set up the server - -1. To start the XMTP service and database, navigate to the project terminal and run: - - ```bash [Bash] - ./dev/up - ``` - - ![set up the server](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/cmd1.png) - - If you encounter an error like `error getting credentials - err: docker-credential-desktop resolves to executable in current directory (./docker-credential-desktop), out:`, it's likely because Docker is not running. Make sure Docker Desktop is running and try the command again. - -2. Build the server using: - - ```bash [Bash] - ./dev/build - ``` - - During the build, if you encounter any Go-related errors like missing `go.sum` entries, use the suggested `go get` or `go mod download` commands in the error messages to resolve them. For example, if you see `missing go.sum entry; to add it: go mod download golang.org/x/sys`, run: - - ```bash [Bash] - go mod download golang.org/x/sys - ``` - - If you encounter errors related to Go build comments like `//go:build comment without // +build comment`, you can ignore them as they are warnings about future deprecations and won't prevent your code from running. - -## Run the server - -Run the server using the `./dev/run` script with the `--xmtp-listener` and `--api` flags: - -```bash [Bash] -./dev/up -``` - -![./dev/up in CLI](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/cmd2.png) - -```bash [Bash] -source .env -./dev/run --xmtp-listener --api -``` - -This starts both the `worker` and `api` services. The `worker` listens for new messages on the XMTP network and sends push notifications. The `api` service handles HTTP/GRPC requests. - -![./dev/run --xmtp-listener --api in CLI](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/cmd3.png) - -You can now send notifications to your device using an [XMTP push notification client](https://github.com/xmtp/example-notification-server-go/blob/main/docs/notifications-client-guide.md). - -![dev/run in CLI](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/cmd4.png) - -## Troubleshooting - -- If Docker or Docker Compose commands aren't recognized, it might mean that they aren't installed or their executable paths aren't included in your system's PATH variable. Make sure Docker and Docker Compose are installed and their paths are included in your system's PATH. - -- If you encounter Go-related errors during the build, it's often due to missing packages or outdated versions. Make sure your Go is up to date and use the `go get` or `go mod download` commands to fetch the necessary dependencies. - -- If you encounter any error like `./dev/up: line 3: docker-compose: command not found`, it's because you don't have Docker Compose installed on your system. Use the above command to install it. - -- If you see warnings about `//go:build comment without // +build comment`, these are warnings about future deprecations in Go. They won't prevent your code from running and can be ignored. - -- If `brew update` gives errors, it might be due to changes in Homebrew's repository. Homebrew switched to using `main` as its default branch. The steps provided in the "Upgrading Go" section should help resolve this issue. - -- If you encounter any errors during `brew update`, such as `fatal: couldn't find remote ref refs/heads/master`, Homebrew is having trouble updating its repositories. To fix this, run: - - ```bash [Bash] - cd $(brew --repository) - git checkout main - git reset --hard origin/main - ``` -- Here is a piece of code that points to the ports and network. Be sure to use TLS like this `./dev/run --xmtp-listener-tls --api`. - - ```jsx - static func envToUrl(env: XMTPEnvironment) -> String { - switch env { - case XMTPEnvironment.local: return "http://localhost:5556/" - case XMTPEnvironment.dev: return "https://dev.xmtp.network:5556/" - case XMTPEnvironment.production: return "https://production.xmtp.network:5556/" - } - } - ``` - -- If you run into any other issues or questions, don't hesitate to ask for help in the [XMTP Devs 💪 group chat](https://converse.xyz/group-invite/a0XKzl9oVpWNXcuYDZLMf), powered by XMTP. diff --git a/docs/pages/notifications/notifs-android.md b/docs/pages/notifications/notifs-android.md deleted file mode 100644 index 4eb2189..0000000 --- a/docs/pages/notifications/notifs-android.md +++ /dev/null @@ -1,120 +0,0 @@ -# Try push notifications with the Android example XMTP app - -This guide describes how to set up push notifications for the [XMTP Android example app](https://github.com/xmtp/xmtp-android/tree/main/example) built with the [xmtp-android SDK](https://github.com/xmtp/xmtp-android) using Firebase Cloud Messaging (FCM) and a custom notification server. - -Perform this setup to understand how you can enable push notifications for your own app built with the `xmtp-android` SDK. - -## Set up a Firebase Cloud Messaging server - -For this tutorial, we'll use [Firebase Cloud Messaging](https://console.firebase.google.com/) (FCM) as a convenient way to set up a messaging server. - -1. Create an FCM project. - -2. Add the example app to the FCM project. This generates a `google-services.json` file that you need in subsequent steps. - -3. Add the `google-services.json` file to the example app's project as described in the FCM project creation process. - -4. Generate FCM credentials, which you need to run the example notification server. To do this, from the FCM dashboard, click the gear icon next to **Project Overview** and select **Project settings**. Select **Service accounts**. Select **Go** and click **Generate new private key**. - -## Run an example notification server - -Now that you have an FCM server set up, take a look at the `kotlin` folder in the `example-notifications-server-go` repo. - -These files can serve as the basis for what you might want to provide for your own notification server. This proto code from the example notification server has already been generated and added to the `xmtp-android` example app if you use the example notification server as-is. - -**To run an example notification server:** - -1. Clone the [example-notification-server-go](https://github.com/xmtp/example-notification-server-go) repo. - -2. Complete the steps in [Local Setup](https://github.com/xmtp/example-notification-server-go/blob/np/export-kotlin-proto-code/README.md#local-setup). - -3. Get the FCM project ID and the FCM credentials you created in step 4 of setting up FCM and run: - - ```bash [Bash] - YOURFCMJSON=$(cat /path/to/FCMCredentials.json) - ``` - - ```bash [Bash] - dev/run \ - --xmtp-listener-tls \ - --xmtp-listener \ - --api \ - -x "grpc.production.xmtp.network:443" \ - -d "postgres://postgres:xmtp@localhost:25432/postgres?sslmode=disable" \ - --fcm-enabled \ - --fcm-credentials-json=$YOURFCMJSON \ - --fcm-project-id="YOURFCMPROJECTID" - ``` - -4. You should now be able to see push notifications coming across the local network. - -## Update the example app to send push notifications - -1. Add your `google-services.json` file to the `example` folder, if you haven't already done it as a part of the FCM project creation process. - -2. Uncomment `id 'com.google.gms.google-services'` in the example app's `build.gradle` file. - -3. Uncomment the following code in the top level of the example app's `build.gradle` file: - - ```groovy [Groovy] - buildscript { - repositories { - google() - mavenCentral() - } - dependencies { - classpath 'com.google.gms:google-services:4.3.15' - } - } - ``` - -4. Sync the gradle project. - -5. Add the example notification server address to the example app's `MainActivity`. In this case, it should be `PushNotificationTokenManager.init(this, "10.0.2.2:8080")`. - -6. Change the example app's environment to `XMTPEnvironment.PRODUCTION` in `ClientManager.kt`. - -7. Set up the example app to register the FCM token with the network and then subscribe each conversation to push notifications. For example: - - ```kotlin [Kotlin] - XMTPPush(context, "10.0.2.2:8080").register(token) - ``` - - ```kotlin [Kotlin] - val hmacKeysResult = ClientManager.client.conversations.getHmacKeys() - val subscriptions = conversations.map { - val hmacKeys = hmacKeysResult.hmacKeysMap - val result = hmacKeys[it.topic]?.valuesList?.map { hmacKey -> - Service.Subscription.HmacKey.newBuilder().also { sub_key -> - sub_key.key = hmacKey.hmacKey - sub_key.thirtyDayPeriodsSinceEpoch = hmacKey.thirtyDayPeriodsSinceEpoch - }.build() - } - - Service.Subscription.newBuilder().also { sub -> - sub.addAllHmacKeys(result) - sub.topic = it.topic - sub.isSilent = it.version == Conversation.Version.V1 - }.build() - } - - XMTPPush(context, "10.0.2.2:8080").subscribeWithMetadata(subscriptions) - ``` - - ```kotlin [Kotlin] - XMTPPush(context, "10.0.2.2:8080").unsubscribe(conversations.map { it.topic }) - ``` - -## Decode a notification envelope - -You can decode a single `Envelope` from XMTP using the `decode` method: - -```kotlin [Kotlin] -val conversation = - client.conversations.newConversation("0x3F11b27F323b62B159D2642964fa27C46C841897") - -// Assume this function returns an Envelope that contains a message for the above conversation -val envelope = getEnvelopeFromXMTP() - -val decodedMessage = conversation.decode(envelope) -``` diff --git a/docs/pages/notifications/notifs-ios.md b/docs/pages/notifications/notifs-ios.md deleted file mode 100644 index 409de17..0000000 --- a/docs/pages/notifications/notifs-ios.md +++ /dev/null @@ -1,51 +0,0 @@ -# Try push notifications with the iOS example XMTP app - -This guide describes how to set up push notifications for the [XMTP iOS example app](https://github.com/xmtp/xmtp-ios/tree/main/XMTPiOSExample) built with the [xmtp-ios SDK](https://github.com/xmtp/xmtp-ios) using Firebase Cloud Messaging (FCM) and a custom notification server. - -Perform this setup to understand how you can enable push notifications for your own app built with the `xmtp-ios` SDK. - -## Prerequisites - -- An iOS device for testing. Push notifications don't work on simulators -- A Firebase account and a project set up in the Firebase console - -## Set up Firebase Cloud Messaging - -For this tutorial, we'll use [Firebase Cloud Messaging](https://console.firebase.google.com/) (FCM) as a convenient way to set up a messaging server. - -1. Create an FCM project -Go to the [Firebase Console](https://console.firebase.google.com/), create a new project, and follow the setup instructions. - -2. Add your app to the FCM project -Add your iOS app to the project by following the Firebase setup workflow. You'll need your app's bundle ID. - -3. Download `GoogleService-Info.plist` -At the end of the setup, download the `GoogleService-Info.plist` file and add it to your Xcode project. - -4. Generate FCM credentials -In the Firebase console, navigate to your project settings, select the **Cloud Messaging** tab, and note your server key and sender ID. You'll need these for your notification server. - -## Configure the iOS example app for push notifications - -1. Enable push notifications -In Xcode, go to your project's target capabilities and enable push notifications. - -2. Register for notifications -Modify the `AppDelegate` to register for remote notifications and handle the device token. - -3. Handle incoming notifications -Implement the necessary delegate methods to handle incoming notifications and foreground notification display. - -## Run the notification server - -1. Clone and nonfigure the notification server -If you're using the example notification server, clone the repository and follow the setup instructions. Make sure to configure it with your FCM server key. - -2. Run the server -Start the server locally or deploy it to a hosting service. - -- Subscribe to push notifications in the app - When initializing the XMTP client in your app, subscribe to push notifications using the device token obtained during registration. - -- Decode a notification envelope -When you receive a push notification, you may want to decode the notification envelope to display a message preview or other information. diff --git a/docs/pages/open-frames/open-frames.md b/docs/pages/open-frames/open-frames.md deleted file mode 100644 index 5aa8838..0000000 --- a/docs/pages/open-frames/open-frames.md +++ /dev/null @@ -1,185 +0,0 @@ -# Get started with Open Frames for apps built with XMTP - -You can support [Frames](https://docs.farcaster.xyz/developers/frames/) in apps built with XMTP by using the [Open Frames](https://www.openframes.xyz) standard. This standard enables you to build a Frame that works in multiple ecosystems, including Farcaster, XMTP, Lens, and others. - -This tutorial describes how to display basic, transactional, and subscription Open Frames in an app built with XMTP. - -## XMTP apps that support Open Frames - -These apps built with XMTP can display Open Frames: - -- [Open Frames quickstart](https://github.com/xmtp/xmtp-quickstart-frames/): Test your Open Frames with this quickstart web app -- [Converse](https://converse.xyz): Use Open Frames with Converse Messenger - -## Display basic Open Frames - -Use this library to display basic Opens Frames in your app built with XMTP: [@xmtp/frames-client](https://github.com/xmtp/xmtp-web/tree/main/packages/frames-client) - -## Validate POST payloads from Open Frames - -Use these tools to validate create and sign POST payloads from Open Frames used with XMTP: [@xmtp/frames-validator](https://github.com/xmtp/xmtp-node-js-tools/blob/main/packages/frames-validator/) - -## Get started with supporting frameworks - -### OnchainKit - -OnchainKit supports XMTP payloads. - -- [OnchainKit documentation](https://onchainkit.xyz/xmtp/introduction): . -- [XMTP x OnchainKit quickstart](https://github.com/daria-github/a-frame-in-100-lines/): . - -#### Frame metadata - -To build an Open Frame for XMTP, you must first add XMTP metadata: - -```tsx [TypeScript] -const frameMetadata = getFrameMetadata({ - /** - * Frame metadata like Image, Buttons, Input, etc. - */ - isOpenFrame: true, - accepts: { xmtp: "vNext" }, -}); - -export const metadata: Metadata = { - /** - * ...other metadata - */ - other: { - ...frameMetadata, - }, -}; -``` - -#### How to validate incoming messages - -```tsx [TypeScript] -import { - isXmtpFrameRequest, - getXmtpFrameMessage, -} from "@coinbase/onchainkit/xmtp"; -/* ... */ -async function getResponse(req: any): Promise { - const body: FrameRequest = await req.json(); - if (isXmtpFrameRequest(body)) { - const { isValid, message } = await getXmtpFrameMessage(body); - // ... do something with the message if isValid is true - if (isValid) { - const { verifiedWalletAddress } = message; - // ... do something with the verifiedWalletAddress - } - } else { - // ... - } -} -``` - -### Frames.js - -Frames.js supports XMTP payloads. - -- [Frames.js documentation](https://framesjs.org/reference/js/xmtp) -- [XMTP x Frames.js quickstart](https://github.com/framesjs/frames.js/tree/main/templates/next-starter-with-examples/) - -#### Frame metadata - -To build an Open Frame for XMTP, you must first add XMTP metadata: - -```tsx [TypeScript] -const acceptedProtocols: ClientProtocolId[] = [ - { - id: "xmtp", - version: "vNext", - }, - { - id: "farcaster", - version: "vNext", - }, -]; -``` - -#### How to validate incoming messages - -```tsx [TypeScript] -import { getXmtpFrameMessage, isXmtpFrameActionPayload } from "frames.js/xmtp"; - -let fid: number | undefined; -let walletAddress: string | undefined; - -if (isXmtpFrameActionPayload(previousFrame.postBody)) { - const frameMessage = await getXmtpFrameMessage(previousFrame.postBody); - const { verifiedWalletAddress } = frameMessage; - // Do something with xmtp wallet address -} else { - // Do something else -} -``` - -### Frog - -- [Frog middleware documentation](https://frog.fm/concepts/middleware#xmtp-frames-middleware) -- [XMTP x Frog middleware quickstart](https://github.com/fabriguespe/frog-starter) - -#### Frame metadata - -To build a Frame with XMTP, you must first add XMTP metadata. - -```tsx [TypeScript] -const addMetaTags = (client: string, version?: string) => { - // Follow the OpenFrames meta tags spec - return { - unstable_metaTags: [ - { property: `of:accepts`, content: version || "vNext" }, - { property: `of:accepts:${client}`, content: version || "vNext" }, - ], - }; -}; - -export const app = new Frog(addMetaTags("xmtp")); -``` - -#### How to validate incoming messages - -To validate incoming messages, install the `@xmtp/frames-validator` package: - -```bash -npm install @xmtp/frames-validator -``` - -Then add the middleware: - -```tsx [TypeScript] -import { validateFramesPost } from "@xmtp/frames-validator"; - -const xmtpSupport = async (c: Context, next: Next) => { - // Check if the request is a POST and relevant for XMTP processing - if (c.req.method === "POST") { - const requestBody = (await c.req.json().catch(() => {})) || {}; - if (requestBody?.clientProtocol?.includes("xmtp")) { - c.set("client", "xmtp"); - const { verifiedWalletAddress } = await validateFramesPost(requestBody); - c.set("verifiedWalletAddress", verifiedWalletAddress); - } else { - // Add farcaster check - c.set("client", "farcaster"); - } - } - await next(); -}; - -app.use(xmtpSupport); -``` - -#### Access a verified wallet address - -```tsx [TypeScript] -app.frame("/", (c) => { - /* Get Frame variables */ - const { buttonValue, inputText, status } = c; - - // XMTP verified address - const { verifiedWalletAddress } = c?.var || {}; - - /* return */ -}); -``` diff --git a/docs/pages/open-frames/subscription-open-frames.md b/docs/pages/open-frames/subscription-open-frames.md deleted file mode 100644 index 7a2baa4..0000000 --- a/docs/pages/open-frames/subscription-open-frames.md +++ /dev/null @@ -1,103 +0,0 @@ -# Display a subscription Open Frame - -A subscription Open Frame enables users to subscribe to content. To learn how to build a subscription Open Frame, see [Subscribe](https://messagekit.ephemerahq.com/frames/tutorials/subscribe). - -This tutorial assumes your app already supports non-subscription Open Frames. If not, see [Get started with Open Frames](/open-frames/open-frames) to set this up first. - -## Example subscription Open Frame - -Use this example [subscription Open Frame](https://subscribe-boilerplate-frame.vercel.app/) with this tutorial to try out the steps in your app. - -This example Open Frame uses a randomly generated wallet on the XMTP `dev` network to automatically send a "Thank you for subscribing!" message to your main inbox upon subscribing. - -You can explore this Open Frame's code in the [subscribe-boilerplate-frame](https://github.com/xmtp-labs/subscribe-boilerplate-frame). - -## Identify a subscription Open Frame - -Subscriptions via an Open Frame are triggered using button-click events. Subscription Open Frames are a type of transactional Open Frame. Therefore, the best way to identify that an Open Frame supports subscription transactions is to look for a button `action` set to `tx` in the Open Frame metadata. For example: - -```tsx [TypeScript] -import { OpenFramesProxy } from "@xmtp/frames-client"; - -const proxy = new OpenFramesProxy(); -const frameMetadata = proxy.readMetadata("url_of_frame"); - -// Get correct button index from click handler -const button = frameMetadata.frameInfo.buttons[`${buttonIndex}`]; - -const isTransactionFrame = button.action === "tx"; -``` - -## Identify the transaction target and postUrl - -If the button action indicates the Open Frame is transactional, get the `target` and `postUrl` from the button. To learn more, see [Open Frame Metadata - Optional Properties](https://www.openframes.xyz/#optional-properties). - -```tsx [TypeScript] -if (isTransactionFrame) { - const { target, postUrl } = button; - - // Rest of logic in this guide -} -``` - -## Post to the target URL to fetch transaction data - -Make a POST request to the `target` URL to fetch transaction data. The payload that gets returned will return an `eth_personalSign` method if in the subscribe flow, and this is how you know you're dealing with a subscription Open Frame. - -Make this request from the Open Frame with a signed Frame action payload in the POST body. In the `address` field, include the address of the connected wallet. - -```tsx [TypeScript] -import { FramesClient } from "@xmtp/frames-client"; - -const framesClient = new FramesClient(client); - -const payload = await framesClient.signFrameAction({ - // Same payload as for other frames, + an address field - // Address should be the 0x address of the connected account - address, -}); - -const transactionInfo: { - chainId: string; - method: "eth_personalSign"; - params: { - abi: []; - to: `0x${string}`; - value?: string; // In the case of a subscribe frame, this will be the message that the user will consent to - }; -} = await framesClient.proxy.postTransaction(target, payload); -``` - -## Process transaction data and receive a signature - -Pull the consent message from the value of the returned transaction data and use this to get a signature using your preferred tools, such as Viem. Documenting this step in detail is out of the scope of this tutorial. - -```tsx [TypeScript] -const value = transactionInfo.params.value; - -// Pass the value and account to your preferred tools and receive a signature -const signature = <> -``` - -## Pass this signature to the signFrameAction - -Prepare a new payload with the signature passed as `transactionId` to pass to the final step. - -```tsx [TypeScript] -const payload = await framesClient.signFrameAction({ - ...prevPayload, - transactionId: signature, -}); -``` - -## Complete the subscription and display a success screen - -To complete the subscription flow and return metadata for a new success Frame, pass the `postUrl` from the button and the payload with the signature from the previous step. - -```tsx [TypeScript] -const completeTransaction = await framesClient.proxy.post( - buttonPostUrl, - payloadWithTxId -); -// Finally, set the current frame state to this new metadata/success screen -``` diff --git a/docs/pages/open-frames/transactional-open-frames.md b/docs/pages/open-frames/transactional-open-frames.md deleted file mode 100644 index 966a7e1..0000000 --- a/docs/pages/open-frames/transactional-open-frames.md +++ /dev/null @@ -1,123 +0,0 @@ -# Display a transactional Open Frame - -A transactional Open Frame enables users to trigger onchain transactions. To learn how to build a transaction Open Frame, see [Transactions](https://messagekit.ephemerahq.com/frames/tutorials/transactions). - -This tutorial assumes your app already supports non-transactional Open Frames. If not, see [Get started with Open Frames](/open-frames/open-frames) to set this up first. - -:::tip - -A minting Open Frame is a type of transactional Open Frame. Where applicable, we'll provide details specific to displaying minting Open Frames. - -::: - -## Example transactional Open Frame - -Use this example [transactional Open Frame](https://tx-boilerplate-frame.vercel.app/) with this tutorial to try out the steps in your app. This example uses the Sepolia network to make a 0.0000032ETH (~1 cent) transaction to the address associated with `hi.xmtp.eth`, or `0x194c31cAe1418D5256E8c58e0d08Aee1046C6Ed0`. - -You can explore this Open Frame's code in the [tx-boilerplate-frame](https://github.com/xmtp-labs/tx-boilerplate-frame) repo. - -## Security considerations for transactional Open Frames - -When displaying transactional Open Frames in your app, consider following these security best practices to keep your users safe: - -- Include allowlists that enable your app to interact with known “safe” transactional Open Frames only -- For unknown Open Frames, inform the user that they are about to interact with an unknown Open Frame and provide the choice to cancel or proceed at their own risk. -- Use simulation services if you want to allow access to unverified transactional Open Frames. These services enable you to submit transaction information to a simulator first. This lets users preview the transaction process and debit amount details without financial risk. - -For more transactional Open Frame security considerations, see [Frame Transactions: Security Consideration](https://www.notion.so/warpcast/Frame-Transactions-Public-9d9f9f4f527249519a41bd8d16165f73?pvs=4#03962a8da2574f9ea6ce093359f8235a). - -## Identify a transactional Open Frame - -Open Frame transactions are triggered using button-click events. Therefore, the best way to determine if an Open Frame is transactional is to look for a button `action` set to `tx` in the Open Frame metadata. For example: - -```tsx [TypeScript] -import { OpenFramesProxy } from "@xmtp/frames-client"; - -const proxy = new OpenFramesProxy(); -const frameMetadata = proxy.readMetadata("url_of_frame"); - -// Get correct button index from click handler -const button = frameMetadata.frameInfo.buttons[`${buttonIndex}`]; - -const isTransactionFrame = button.action === "tx"; -``` - -## Identify the transaction target and postUrl - -If the button action indicates the Open Frame is transactional, get the `target` and `postUrl` from the button. To learn more, see [Open Frame Metadata - Optional Properties](https://www.openframes.xyz/#optional-properties). - -```tsx [TypeScript] -if (isTransactionFrame) { - const { target, postUrl } = button; - - // Rest of logic in this guide -} -``` - -## Post to the target URL to fetch transaction data - -Make a POST request to the `target` URL to fetch transaction data. Make this request from the Open Frame with a signed Open Frame action payload in the POST body. In the `address` field, include the address of the connected wallet. - -```tsx [TypeScript] -import { FramesClient } from "@xmtp/frames-client"; - -const framesClient = new FramesClient(client); - -const payload = await framesClient.signFrameAction({ - // Same payload as for other frames, + an address field - // Address should be the 0x address of the connected account - address, -}); - -const transactionInfo: { - chainId: string; - method: "eth_sendTransaction"; - params: { - abi: Abi | []; - to: `0x${string}`; - value?: string; - // Needed if you are interacting with a smart contract in this transaction, e.g. in a mint scenario - data?: `0x${string}`; - }; -} = await framesClient.proxy.postTransaction(target, payload); -``` - -## Process transaction data and receive a hash - -Pull the address and value from the returned transaction data and use them to process the transaction using your preferred tools, such as Infura. Documenting this step in detail is out of the scope of this tutorial. - -```tsx [TypeScript] -const address = transactionInfo.params.to; -// Returned as wei in a string -const value = Number(transactionInfo.params.value); - - -// Pass the address, value, and any other information needed -// Process the payment via your preferred tools and receive a hash. -const transactionHash = <> -``` - -## Ensure the processed transaction matches the request - -Use the hash to gather information about the processed transaction using your preferred tools. Ensure that the details match the requested transaction. - -```tsx [TypeScript] -// Pass the hash to your provider of choice -// Receive the processed transaction details -const transactionReceipt = <> - -if ( - transactionReceipt.to !== address || transactionReceipt.value !== value - ) { - // Error handle, shouldn't show frame success screen - } else { - // Pass the hash as an optional transactionId to the signFrameAction payload if you plan to use it - // Complete the transaction, which returns metadata of a new success frame - const completeTransaction = await framesClient.proxy.post( - postUrl, - payload, - ); - // Set the current frame state to this new metadata/success screen - } -} -``` diff --git a/docs/pages/perf-ux/debug-and-test.md b/docs/pages/perf-ux/debug-and-test.md deleted file mode 100644 index 4cb5ca8..0000000 --- a/docs/pages/perf-ux/debug-and-test.md +++ /dev/null @@ -1,93 +0,0 @@ -# Performance test an app built with XMTP - -Be sure to test your app's performance to ensure that it provides a seamless and snappy user experience. - -To do this, you can use the `xmtp-debug` repo to easily populate a test wallet with _X_ number of conversations, each with _Y_ number of messages, on the XMTP network of your choice. - -## Suggested performance tests - -It's important to test your app's performance when handling a wallet address with more than just a few conversations and messages. - -For example, start by creating a test wallet with ~2,000 conversations and 1,000 messages per conversation and run the following performance tests: - -- For a cold start (first load): - - Test that the app is interactive in <15 sec -- For a warm cache (subsequent loads and refreshes): - - Test that the app is interactive in <1 sec -- Sender UX: - - Test that the time between sending a message and displaying the message in the conversation thread is ≤1 second -- Recipient UX: - - Test that the time between sending a message and displaying the message in the conversation thread is ≤1 second - -## Run tests - -1. Clone the [xmtp-debug](https://github.com/xmtp/xmtp-debug) repo -2. Run `npm install` -3. Run `npm start init` - -Example output - -``` -xmtp-debug % npm start --silent -- --env=production --end='3 weeks ago' --desc --limit=3 contacts list hi.xmtp.eth -XMTP environment: production -Resolved address: 0x194c31cAe1418D5256E8c58e0d08Aee1046C6Ed0 -Ending on 2022-11-02T20:12:16.010Z -Limited to 3 -┌─────────┬──────────────────────────┬──────┬─────────────┬─────────────┐ -│ (index) │ date │ type │ identityKey │ preKey │ -├─────────┼──────────────────────────┼──────┼─────────────┼─────────────┤ -│ 0 │ 2022-11-01T21:38:14.409Z │ 'V1' │ '044f…7b1a' │ '04d2…4f8c' │ -│ 1 │ 2022-10-28T18:24:13.305Z │ 'V1' │ '044f…7b1a' │ '04d2…4f8c' │ -│ 2 │ 2022-10-28T18:14:20.502Z │ 'V1' │ '044f…7b1a' │ '04d2…4f8c' │ -└─────────┴──────────────────────────┴──────┴─────────────┴─────────────┘ -``` - -You can also set the options using environment variables prefixed with `XMTP_`. For example: - -```sh -$ export XMTP_ADDRESS=xmtp.eth -$ export XMTP_ENV=production -$ npm start contacts list -$ npm start intros list -$ ... -``` - -Populating test wallets might cause you to exceed the XMTP network rate limit. If this happens, wait 5 minutes and try again. To learn more, see [Understand XMTP network rate limits](/consent/broadcast#understand-xmtp-network-rate-limits). - -Run `npm start` to view available commands and options. - -``` -npm start - -Commands: - npm start init initialize wallet - npm start intros [cmd] [address] list/check introduction messages for the - address - npm start invites [cmd] [address] list/check introductions for the address - npm start contacts [cmd] [address] list/check published contacts for the - address - npm start private [address] list published private key bundles for the - address - -Options: - --help Show help [boolean] - --version Show version number [boolean] - -e, --env The XMTP environment to use - [string] [choices: "dev", "production"] [default: "dev"] - -a, --address wallet address to inspect [string] - -f, --full do not shorten long output items [boolean] [default: false] - -s, --start restrict output to dates on or after this date [string] - -n, --end restrict output to dates before this date [string] - -l, --limit restrict output to first entries [number] - -d, --desc sort output in descending order [boolean] - -Examples: - npm start intros list xmtp.eth list all introduction messages for - xmtp.eth - npm start -- -d -l10 intros list list last 10 introduction messages - xmtp.eth for xmtp.eth in descending order - npm start -- --full invites list list all invitations for xmtp.eth, - xmtp.eth do not shorten addresses - npm start -- -e=production contacts check all contacts of xmtp.eth for - check xmtp.eth anomalies on the production network -``` diff --git a/docs/pages/perf-ux/get-featured.md b/docs/pages/perf-ux/get-featured.md deleted file mode 100644 index 73dfda7..0000000 --- a/docs/pages/perf-ux/get-featured.md +++ /dev/null @@ -1,73 +0,0 @@ -# Launch checklist - -To be featured on the [xmtp.org](https://xmtp.org/) home page and receive amplification from XMTP's social channels, follow this checklist. Meeting these criteria helps you provide a best-in-class messaging experience with your client. - -## A. Follow this quality checklist - -Before launching, ensure your app meets the following criteria: - -### Meet performance benchmarks - -- [ ] Implement a [Local-first cache](/perf-ux/local-first). -- [ ] Cache conversation list `conversations.list()` to boost performance by 90%. -- [ ] Serialize securely stored `DecodedMessage` histories to reduce redundant downloads and decryptions. -- [ ] Implement message [pagination](/dms/messages#list-messages-in-a-conversation-with-pagination). -- [ ] Compress message content with a suitable compression algorithm. -- [ ] Follow the [testing tutorial](/perf-ux/debug-and-test) -- [ ] (Bonus) Implement [optimistic sending](/perf-ux/optimistic-sending). - -### Meet reliability benchmarks - -- [ ] No duplicate conversations should be created or displayed. If duplicates exist, only the latest conversation should be visible. -- [ ] The app should be stable and not crash frequently. -- [ ] No visible critical bugs. -- [ ] Make sure to use the latest [XMTP client SDK](/get-started/examples). -- [ ] Always set an `appVersion` [value](/client/create-client#configure-the-client). - -### Support content types - -- [ ] Support image [remote attachments](/content-types/remote-attachment). -- [ ] Support [message replies](/content-types/reply) -- [ ] Support [message reactions](/content-types/reaction) -- [ ] (Bonus) Support [onchain transaction references](/content-types/transaction-ref) - -### Support identity resolution - -- [ ] Offer forward and reverse [identity resolution](/perf-ux/identity-resolution) support for ENS. -- [ ] (Bonus) Support for UNS, cb.id, .lens, Cyberconnect. - -### Track basic and privacy-preserving metrics - -Enable your app to keep track of: - -- [ ] Number of active wallets: At least one message sent. -- [ ] Number of active conversations: At least one message. -- [ ] Number of returning conversations: A minimum of one message from each participant. - -## B. Launch your app - -Way to go! 🎉 Here are some resources and ideas for promoting your app launch: - -- Check out these launch posts for apps built with XMTP: - - [Coinbase Wallet](https://x.com/CoinbaseWallet/status/1679178581224873985?s=20) - - [Converse](https://x.com/converseapp_/status/1648362598058819585) - - [Lenster](https://x.com/lensterxyz/status/1588203593257009152?s=20&t=wHy9mBrNR5ri146CbhCMUw) - - [Orb](https://x.com/orbapp_/status/1618659601154715649?s=20) - - [Bello](https://x.com/xmtp_/status/1693978790618095972) -- Need an XMTP logo for your announcement? - - See the [XMTP Brand Guidelines](https://github.com/xmtp/brand) -- Tag the XMTP team to help amplify your launch - - [@xmtp4all](https://lenster.xyz/u/xmtp4all) on Lens - - [@xmtp\_](https://x.com/xmtp_) on X (Twitter) - - [@xmtp](https://warpcast.com/xmtp) on Farcaster - - [@xmtp_network](https://www.threads.net/@xmtp_network) on Threads -- Have your app added to the [XMTP home page](https://xmtp.org/) - - [Submit this form](https://forms.gle/p1VgVtkoGfHXANXt5) -- Have your project repo added to [awesome-xmtp](https://github.com/xmtp/awesome-xmtp) - - [Create a PR](https://github.com/xmtp/awesome-xmtp) -- Create a commemorative [POAP](https://app.poap.xyz/) for your launch to reward early users - -## C. Keep in touch post-launch - -- Keep in touch using the [XMTP Community Forums](https://community.xmtp.org/). This helps ensure that you hear about the latest SDK and content type releases, as well as upgrade and deprecation notices. -- Contribute to the XMTP [GitHub Repos](https://github.com/xmtp): If you have code improvements, bug fixes, or features that could benefit the XMTP ecosystem, consider contributing to the XMTP GitHub repositories. By doing this, you not only improve the protocol but also gain valuable experience and recognition within the community. Make sure to follow the guidelines laid out for pull requests and XMTP Improvement Proposals. diff --git a/docs/pages/perf-ux/identity-resolution.md b/docs/pages/perf-ux/identity-resolution.md deleted file mode 100644 index ad9728a..0000000 --- a/docs/pages/perf-ux/identity-resolution.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -description: "Learn about identity resolution in apps built with XMTP." ---- - -# Resolve identities in an app built with XMTP - -When you build with XMTP, there’s no cold start for your app and your users. As soon as your app plugs into the XMTP network, it can reach today’s most popular and meaningful identities. XMTP’s interoperability and composability help ensure that the network can continue to grow and bring messaging to every identity—via your app. - -In this context, **identity** refers to: - -- Wallet addresses, such as raw 0x addresses like `0x4b70d04124c2996De29e0caa050A49822Faec6Cc` -- Human-readable domain names associated with wallet addresses. These domain names are provided by name services, such as Ethereum Name Service (ENS) and Unstoppable Domains (UNS). - -As a UX best practice, build your app to enable a user to enter a domain name in the **To** field and have the identity resolve to its associated raw wallet address. For example, a user should be able to enter `gm.xmtp.eth` in your **To** field and have your app forward-resolve and display the identity's associated wallet address `0x937C0d4a6294cdfa575de17382c7076b579DC176`. - -Your app should also be able to accept a raw wallet address and reverse-resolve and display the identity's associated domain name, if available. - -When displaying a name, also look for and display its associated avatar. For example, when displaying a Lens name, look for and display a Lens profile photo. For raw 0x addresses, display blockies as avatars. - -## Third-party identity resolution tools - -This list of third-party identity resolution tools is provided for informational purposes only. - -:::tip - -Is your app using a great tool to resolve identities? Open an [issue](https://github.com/xmtp/docs-xmtp-org/issues) to share information about it. - -::: - -### Airstack - -[Airstack](https://docs.airstack.xyz/airstack-docs-and-faqs/guides/resolve-identities) provides tools to resolve Ox, ENS, Lens, and Farcaster identities. - -### ENSjs - -[ENSjs](https://github.com/ensdomains/ensjs) provides tools to resolve ENS identities. - -### SimpleHash - -[SimpleHash](https://docs.simplehash.com/reference/overview) provides tools to resolve ENS and Base Name Service identities. - -### Unstoppable Domains - -[Unstoppable Domains](https://docs.unstoppabledomains.com/resolution/overview/) provides tools to resolve Unstoppable Domains identities. diff --git a/docs/pages/perf-ux/local-first.md b/docs/pages/perf-ux/local-first.md deleted file mode 100644 index f433c02..0000000 --- a/docs/pages/perf-ux/local-first.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -description: "If you're building a production-grade app, be sure to use a local-first architecture to help you build a performant app." ---- - -# Use local-first architecture - -If you're building a production-grade app, be sure to use a local-first architecture to help you build a performant app. Using a local-first architecture means building your app so a client prioritizes using local storage on the device where it’s running. - -For example, use the XMTP SDK to initially retrieve existing message data from the XMTP network and place it in local storage. Then, asynchronously load new and updated message data as needed. - -Here’s an overview of how your app frontend, local storage, client SDK, and the XMTP network work together in this local-first approach: - -![Local-first architecture](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/local-first-arch.jpeg) - -## Mobile apps - -When building a mobile app with the XMTP V3 [React Native](https://github.com/xmtp/xmtp-react-native), [Android](https://github.com/xmtp/xmtp-android), and [iOS](https://github.com/xmtp/xmtp-ios) SDKs, LibXMTP will [create and manage a local database](/groups/build-group-chat#local-database-creation-and-syncing) for you. - -However, you should create and manage an additional separate local database if your app: - -- Supports [reactions](/content-types/reaction) and [replies](/content-types/reply) -- Supports 1:1 messaging backed by [XMTP V2 infrastructure](/protocol/v2/architectural-overview.md) - -Use this separate local database to store reactions and replies content types, enabling your app to performantly display them with their referenced messages when rendering message lists. - -## Web apps - -- When building a web app with the [React SDK](https://github.com/xmtp/xmtp-web/tree/main/packages/react-sdk), the local-first architecture is automatically provided by the SDK. - -- When building a web app with the [xmtp-js SDK](https://github.com/xmtp/xmtp-js), you can use the browser `localStorage` as the local cache to store encrypted data, decrypting data each time before display. You might also consider using Dexie to manage your web app's local data. - -For more performance best practices, see [Launch checklist](/perf-ux/get-featured). diff --git a/docs/pages/perf-ux/optimistic-sending.md b/docs/pages/perf-ux/optimistic-sending.md deleted file mode 100644 index c832ebd..0000000 --- a/docs/pages/perf-ux/optimistic-sending.md +++ /dev/null @@ -1,61 +0,0 @@ -# Optimistically send messages - -When a user sends a message with XMTP, they might experience a slight delay between sending the message and seeing their sent message display in their app UI. - -Typically, the slight delay is caused by the app needing to wait for the XMTP network to finish processing the message before the app can display the message in its UI. - -Messaging without optimistic sending: - -![Messaging without optimistic sending. Note the slight delay after clicking Send.](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/without-opt-sending.gif) - -Note the slight delay after clicking **Send**. - -Implement optimistic sending to immediately display the sent message in the sender’s UI while processing the message in the background. This provides the user with immediate feedback and enables them to continue messaging without waiting for their previous message to finish processing. - -Messaging with optimistic sending: - -![Messaging with optimistic sending. The message displays immediately for the sender, with a checkmark indicator displaying once the message has been successfully sent.](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/with-opt-sending.gif) - -The message displays immediately for the sender, with a checkmark indicator displaying once the message has been successfully sent. - -## Preserve message order - -It’s important to preserve order when sending messages optimistically so that the messages appear on the network in the order they are sent. If a message is being processed when a user attempts to send another message, the new message should wait for the current message to be processed before being sent. - -## Handle send statuses - -- After initially sending an optimistic message, show the user an indicator that the message is still being processed. -- After successfully sending an optimistic message, show the user a success indicator. - -## Handle messages that fail to send - -If an optimistic message fails to send, give the user an option to retry sending the message or cancel sending. Use a try/catch block to intercept errors and allow the user to retry or cancel. - -## Prepare message before sending - -Use an XMTP SDK to prepare a message before sending it. This will encrypt and package the message in the proper format for the XMTP network. After preparing the message, it’s ready to be sent optimistically. - -```tsx [JavaScript] -// standard (string) message -const preparedTextMessage = await conversation.prepareMessage(messageText); - -// custom content type -const preparedCustomContentMessage = await conversation.prepareMessage( - customContent, - { - contentType, - }, -); -``` - -## Send prepared message - -After preparing an optimistic message, use its `send` method to send it. - -```tsx [JavaScript] -try { - preparedMessage.send(); -} catch (e) { - // handle error, enable canceling and retries (see below) -} -``` diff --git a/docs/pages/perf-ux/xmtp-metamask-snap.md b/docs/pages/perf-ux/xmtp-metamask-snap.md deleted file mode 100644 index d3ce2fc..0000000 --- a/docs/pages/perf-ux/xmtp-metamask-snap.md +++ /dev/null @@ -1,72 +0,0 @@ -# Use and build with the "Sign in with XMTP" MetaMask Snap - -Use the “Sign in with XMTP” MetaMask Snap to securely and conveniently sign in to any web app built with XMTP. - -When you install the Snap, you permit it to store your XMTP user keys in MetaMask secure storage. From then on, when you use an app you’ve authorized to work with Sign in with XMTP, the Snap seamlessly and securely allows the app to use those keys without accessing the key material directly, enabling you to start messaging without needing to provide a signature. - -## FAQ about Sign in with XMTP - -### How do I install Sign in with XMTP? - -Use [MetaMask](https://metamask.io/) to sign in to any web app built with XMTP that supports MetaMask Snaps. [View supported apps](https://github.com/xmtp/snap) - -- If this is your first time using an app built with XMTP, you’ll be given the option to install Sign in with XMTP to securely store your user keys. You’ll then be prompted to sign with your wallet account to create and enable an XMTP identity and generate your user keys. Your user keys will then be stored in MetaMask secure storage. - -- If this isn’t your first time using an app built with XMTP, you’ll be given the option to install Sign in with XMTP to securely store your user keys. You’ll then be prompted to sign with your wallet account to enable your XMTP identity and provide your user keys for secure storage. - -As a part of this flow, you also authorize the web app you’re using to work with Sign in with XMTP. - -Because your XMTP user keys are securely stored in the Snap, Sign in with XMTP can seamlessly and securely allow your authorized apps to use those keys without accessing the key material directly, enabling you to start new messaging sessions without needing to provide a signature. - -### How do I use Sign in with XMTP? - -Once you install Sign in with XMTP, store your XMTP user keys, and authorize an app to work with the Snap, you won’t need to interact with the Snap again for that app. - -When you access the app, Sign in with XMTP will seamlessly and securely allow the authorized app to use your keys without accessing the key material directly, enabling you to start messaging without needing to provide a signature. - -You can use Sign in with XMTP with multiple apps. For example, if you access a different web app, you’ll be given the option to use Sign in with XMTP with the new app. - -### What does Sign in with XMTP do? - -With your permission, Sign in with XMTP stores your XMTP user keys in MetaMask secure storage. - -When you authorize Sign in with XMTP permission to work with an app, the Snap seamlessly and securely allows the app to use those keys without accessing the key material directly, enabling you to start messaging without needing to provide a signature. - -The Snap is used only when you visit a Snap-enabled app you've already authorized to work with Sign in with XMTP. - -### What does Sign in with XMTP NOT do? - -Sign in with XMTP doesn’t: - -- Show your inbox -- Show notifications for new messages -- Allow you to send messages - -Apps that use the Snap provide these capabilities. - -### Do my Sign in with XMTP app authorizations expire? - -Yes. All app authorizations expire automatically after 30 days. - -### As a developer who wants my app to use Sign in with XMTP, how do I get started? - -Build your browser-based app with [XMTP JavaScript SDK](https://github.com/xmtp/xmtp-js) ≥v11.0.0, which supports Sign in with XMTP. - -To enable the Snap in your app, set the `useSnaps` flag to `true` as part of client creation. - -To learn more, see [Configure the client](/client/create-client#configure-the-client) and [SnapKeystore](https://github.com/xmtp/xmtp-js/blob/962259d7cfbbeb7995208f01eb5c5243c51f0b8e/packages/js-sdk/src/keystore/README.md#snapkeystore). - -Upon first use, your users will be prompted to choose to use Sign in with XMTP with your app. - -To learn more, see [Installing and upgrading Snaps](https://github.com/xmtp/xmtp-js/blob/962259d7cfbbeb7995208f01eb5c5243c51f0b8e/packages/js-sdk/src/keystore/README.md#installing-and-upgrading-snaps). - -### How do I get support for Sign in with XMTP? - -Users of the Snap: - -- [support@xmtp.com](mailto:support@xmtp.com) -- [User support forum](https://community.xmtp.org/c/help/get-help-and-guidance-about-using-apps-and-services-built-with-xmtp/75) - -Developers building with the Snap: - -- [XMTP Devs 💪 group chat](https://converse.xyz/group-invite/a0XKzl9oVpWNXcuYDZLMf), powered by XMTP diff --git a/docs/pages/protocol/portable-inbox.md b/docs/pages/protocol/portable-inbox.md index 24f0ba2..700a825 100644 --- a/docs/pages/protocol/portable-inbox.md +++ b/docs/pages/protocol/portable-inbox.md @@ -32,19 +32,19 @@ With XMTP, you own and control your messages and are always free to use the app Developers build messaging into their apps using the **XMTP open protocol and standards**. This makes the messaging features in these apps portable, or able to exchange information. This is what enables **all apps built with XMTP to automatically provide portable inboxes** for users. -To learn more about building with XMTP, see [Quickstart for the XMTP client SDK for JavaScript](/get-started/developer-quickstart). +To learn more about building with XMTP, see [Quickstart for the XMTP client SDK for JavaScript](https://docs.xmtp.org/get-started/developer-quickstart). ### You own and control your XMTP identity To use XMTP, you create an XMTP identity that you can use to send and receive messages with any app built with XMTP. Because you create the identity using an Ethereum account’s public and private keys that only you have access to, **you own and control your XMTP identity.** -To learn more about keys and XMTP identities, see [Key generation and usage in XMTP](/protocol/v2/key-generation-and-usage). +To learn more about keys and XMTP identities, see [Multi-wallet idenity](/protocol/v3/identity). ### You own and control your messages When you send messages with an app built with XMTP, the messages are **end-to-end encrypted** and stored on and retrieved from the **XMTP network**. Because the XMTP network is progressively decentralized and not controlled by any single entity, **you own and control your messages.** -To learn more about message encryption, see [Invitation and message encryption](/protocol/v2/invitation-and-message-encryption). +To learn more about encryption, see [Security and encryption with MLS and XMTP](/protocol/security-encryption). ### A vibrant ecosystem of apps built with XMTP diff --git a/docs/pages/protocol/signatures.mdx b/docs/pages/protocol/signatures.mdx index 85f273a..7f3a94b 100644 --- a/docs/pages/protocol/signatures.mdx +++ b/docs/pages/protocol/signatures.mdx @@ -88,7 +88,7 @@ When you click **Sign**, you're consenting to receive broadcast messages from th When you provide consent, you're adding the publisher's address to your personal XMTP allowed contacts list. This enables messages from the publisher to be displayed in your main inbox instead of being treated as a message from an unknown sender and placed in a secondary view. -To learn about XMTP's consent standards, see [Understand user consent preferences](/consent/user-consent). +To learn about XMTP's consent standards, see [Understand user consent preferences](/inboxes/support-consent). ## XMTP v2 signatures diff --git a/docs/pages/protocol/v2/algorithms-in-use.md b/docs/pages/protocol/v2/algorithms-in-use.md deleted file mode 100644 index 7374d80..0000000 --- a/docs/pages/protocol/v2/algorithms-in-use.md +++ /dev/null @@ -1,22 +0,0 @@ -# Algorithms in use - -XMTP supports the replacement and expansion of supported algorithms in a backward-compatible manner. - -Supported algorithms are selected based on fairly pragmatic criteria. For example, the algorithm must be: - -- Tried and true and in widespread use -- Well-supported in desirable XMTP client app languages, such as JavaScript -- Available in standard browser APIs, rather than via third-party dependencies - -XMTP also aims to reuse existing algorithms, looking to well-known and standard algorithms with trustworthy implementations. - -As such, XMTP's cryptographic primitives are built around the standard [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto) and the [@noble libraries](https://www.npmjs.com/package/@noble/secp256k1), using components of Signal's X3DH protocol for secure offline communication. - -Specifically, XMTP's participant authentication and message encryption algorithm choices include: - -- EC Public/Private Keys (secp256k1) -- ECDSA signatures and signing of public keys (ECDSA and EIP-191) -- Shared secret derivation (ECDH/X3DH) -- Authenticated symmetric encryption (AEAD: AES-256-GCM) -- Symmetric key derivation (HKDF-SHA-256) -- X3DH-style key bundles ([X3DH Key Agreement Protocol](https://signal.org/docs/specifications/x3dh/)) diff --git a/docs/pages/protocol/v2/architectural-overview.md b/docs/pages/protocol/v2/architectural-overview.md deleted file mode 100644 index 014dcd6..0000000 --- a/docs/pages/protocol/v2/architectural-overview.md +++ /dev/null @@ -1,229 +0,0 @@ ---- -description: "Learn about the architecture of XMTP and how it supports messaging between blockchain accounts." ---- - -# Architectural overview of XMTP - -This topic introduces the architecture of XMTP (Extensible Message Transport Protocol) and how it supports messaging between blockchain accounts. - -You can use this information to get an overview of how XMTP works and how building with XMTP can fit into your architecture and environment. - -At the most basic level, the architecture of XMTP includes three layers: - -- [Network layer](#network-layer) -- [Client layer](#client-layer) -- [App layer](#app-layer) - -![Diagram showing three layers of the XMTP architecture: network, client, and app.](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/arch-layers.png) - -## Network layer - -The network layer provides the XMTP network, which is composed of **nodes** (computers) running XMTP node software. - -The XMTP network enables any computer running XMTP node software to participate in the network. Currently, the node software is closed source and all nodes in the XMTP network are operated by Ephemera. Ephemera is working toward a phased decentralization of the network. - -This diagram shows the key components of an XMTP node. The nodes provide a **message API** that enables client apps built with the XMTP client SDK to communicate with the nodes in the XMTP network. The nodes use Waku node software to connect to other nodes and form a peer-to-peer network to relay and store envelopes submitted and requested by client apps. - - - -![Diagram showing three nodes connected in a peer-to-peer fashion to form the XMTP network. The diagram shows the key components of a node, including a message API and Waku node. The diagram also shows a client app connecting a message API client to the message API in a node.](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/xmtp-nodes.png) - -Currently, nodes are configured to rate limit high-volume publishing from message API clients. A rate-limited message API client can expect to receive a 429 status code response from a node. Rate limits can change at any time in the interest of maintaining network health. To learn more, see [Rate limiting](/consent/broadcast#understand-xmtp-network-rate-limits). - -Every **envelope** contains a payload, often encrypted, that is not observable by nodes. The payload could be a public key bundle, private key bundle, or a message created by a client app, but this information is opaque to nodes. Meaning is assigned to these envelopes in the [Client layer](#client-layer). - -Nodes can see envelope properties, which help the nodes understand how to handle envelopes, but the properties reveal nothing about message content. An example of an important envelope property is a **topic** name. A topic name is a required envelope property. A topic name helps a node understand where to relay and store the envelope. Each envelope belongs to exactly one topic. - -The primary responsibilities of an XMTP node are to: - -- Connect to other nodes, forming a peer-to-peer network -- Advertise information about all of the nodes it’s connected to, enabling newly joined nodes to connect to other nodes in the XMTP network -- Relay envelopes to other nodes -- Store envelopes in topics -- Make envelopes available for retrieval by client apps - - - -Here’s a high-level view of how XMTP nodes relay and store envelopes containing payloads submitted and retrieved by client apps built with XMTP: - -![Animation showing the flow of a user sending a message to another user, including how the sender's client app encrypts and submits the message to the XMTP network, how an XMTP node relays the message to other nodes, and how the recipient's client app retrieves the message from the network, decrypts it, and delivers it to the recipient.](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/xmtp-message-flow.gif) - -## Client layer - -The client layer consists of XMTP message API clients (clients) embedded in client apps built with the XMTP client SDK. A message API client connects to the message API in an arbitrary XMTP node to communicate with the network, as shown in the [XMTP node diagram](#network-layer). - -The primary responsibilities of a client are to: - -- Create blockchain account-based XMTP identities, including public and private key bundles. - To learn more, see [Key generation and usage](/protocol/v2/key-generation-and-usage). - -- Encrypt and decrypt private key bundles, invitations, and messages. - To learn more, see [Invitation and message encryption](/protocol/v2/invitation-and-message-encryption). - -- Submit and retrieve public key bundles, encrypted private key bundles, encrypted invitations, and encrypted messages to and from the XMTP network. - -- Encode and decode message content types. - To learn more, see [Content types](/content-types/content-types). - -### XMTP V2 topics and message presentation flow - -This section describes how topics and the message presentation flow work for the current version of the protocol, referred to as XMTP V2. Only client apps with XMTP client SDK >=v7.0.0 can use XMTP V2. To learn how topics and flows work in XMTP V1, see [XMTP V1 topics and message presentation flow](#xmtp-v1-topics-and-message-presentation-flow). - -In XMTP V2, clients use the following topics to perform their primary responsibilities. - -#### Contact topic V2 - -A client uses a contact topic to advertise a user’s public key bundle on the XMTP network. The network advertises this public key bundle to enable other users to contact the user. - -The contact topic name uses this format: `contact-`. - -For example, `contact-0x458dd9C5bf4d4E8f80Ba88923E3b94FD028CEe38`. - -To learn more, see [Contacts](https://github.com/xmtp/proto/blob/main/PROTOCOL.md#contacts) in the `xmtp/proto` repo. - -#### Invite topic V2 - -Clients use invite topics to initiate conversations between participants. - -The invite topic name uses this format: `invite-`. - -For example, `invite-0x458dd9C5bf4d4E8f80Ba88923E3b94FD028CEe38`. - -The client sends an invitation to both the sender and recipient’s invite topic. The invitation includes no message content, but includes: - -- A randomly generated conversation topic name, which tells clients which conversation topic to use to send and retrieve messages - -- Encrypted key material, which includes a shared secret for message encryption - -To learn more, see [Invitations](https://github.com/xmtp/proto/blob/main/PROTOCOL.md#invitations) in the `xmtp/proto` repo. - -#### Conversation topic V2 - -Clients use conversation topics to store messages exchanged between a pair of addresses. - -A conversation topic is created for a pair of addresses when the first message is sent between them. The conversation topic name uses this format provided by the invitation: `m-` - -For example, `m-98ed4749a569d3bf302727102157361c0e513026840cbbc9be07705c5584da4d` - -This format is generated by the `buildDirectMessageTopicV2` function in the codebase: - -```jsx -export const buildDirectMessageTopicV2 = (randomString: string): string => { - return buildContentTopic(`m-${randomString}`); -}; -``` - -#### Private store topic V2 - -A client built with XMTP can choose to store its users' private key bundles locally or encrypted on the XMTP network. When required, a client uses a private store topic to store a user's private key bundle. - -The private store topic name uses this format: `privatestore-`. - -For example, `privatestore-0x458dd9C5bf4d4E8f80Ba88923E3b94FD028CEe38`. - -This diagram shows how a client app uses these topics to present Bola with a message sent by Amal: - -![Diagram showing a client app interacting with XMTP V2 topics in the XMTP network with the goal of delivering messages to a user named Bola.](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/deliver-a-message-V2.png) - -In this flow, the client app: - -1. Retrieves Bola’s private key bundle from the network. If one doesn’t exist, it creates it and stores it encrypted on the network in a private store topic, or locally. - -2. If one doesn't already exist, stores Bola’s public key bundle on the network in a contact topic so others can message Bola. - -3. Retrieves Amal's encrypted invitation to Bola from Bola’s invite topic. Uses Bola's private key and Amal's public key from the invitation header to decrypt the invitation and get the conversation topic name and shared secret. - -4. Uses the conversation topic name from the invitation to retrieve Amal's encrypted message to Bola. - -5. Uses the shared secret from the invitation to create an encryption key to decrypt Amal’s message and present it to Bola. - -To learn more, see [Key generation and usage](/protocol/v2/key-generation-and-usage) and [Invitation and message encryption](/protocol/v2/invitation-and-message-encryption). - -### XMTP V1 topics and message presentation flow - -This section describes how topics and the message presentation flow work for XMTP V1. To understand whether a client app will use XMTP V1 or V2, see [Determining whether to use XMTP V2 or V1 topics](#determining-whether-to-use-xmtp-v2-or-v1-topics). - -In XMTP V1, client apps use the following topics to perform their primary responsibilities. - -#### Contact topic V1 - -A client uses a contact topic to advertise a user’s public key bundle on the XMTP network. The network advertises this public key bundle to enable other users to contact the user. - -The contact topic name uses this format: `contact-`. - -For example, `contact-0x458dd9C5bf4d4E8f80Ba88923E3b94FD028CEe38`. - -#### Intro topic V1 - -Clients use intro topics to store the first message sent between two participants (blockchain accounts). This enables clients to know that messages exist in a given conversation topic. - -The intro topic name uses this format: `intro--`. - -For example, `intro-0x458dd9C5bf4d4E8f80Ba88923E3b94FD028CEe38-0x357540a11BE08e9264c348b346d0C7dBB7df80d7`. - -#### Conversation topic V1 - -Clients use conversation topics to store messages sent between two participants. Here are some characteristics of conversation topics: - -- All messages between two participants are stored in a single conversation topic. - -- The conversation topic name includes the blockchain account addresses of the participants, revealing some identifying information. - -The conversation topic name uses this format: `dm--`. - -For example, `dm-0x458dd9C5bf4d4E8f80Ba88923E3b94FD028CEe38-0x357540a11BE08e9264c348b346d0C7dBB7df80d7`. - -#### Private store V1 - -A client built with XMTP can choose to store its users' private key bundles locally or encrypted on the XMTP network. When required, a client uses a private store topic to store a user's private key bundle. - -The private store topic name uses this format: `privatestore-`. - -For example, `privatestore-0x458dd9C5bf4d4E8f80Ba88923E3b94FD028CEe38`. - -This diagram shows how a client app uses these XMTP V1 topics to present Bola with a message sent by Amal: - -![Diagram showing a client app interacting with XMTP V1 topics in the XMTP network with the goal of delivering messages to a user named Bola.](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/deliver-a-message-V1.png) - -In this flow, the client app: - -1. Retrieves Bola’s private key bundle from the network. If one doesn’t exist, it creates it and stores it encrypted on the network in a private store topic, or locally. - -2. If one doesn't already exist, stores Bola’s public key bundle on the network in a contact topic, so others can message Bola. - -3. Retrieves Bola’s intro topic to see which conversations they have. - -4. Retrieves the messages between Bola and Amal from their direct message topic. - -5. Uses Bola’s private key and Amal’s public key to create a shared secret. Uses the shared secret to create an encryption key to decrypt Amal’s message and present it to Bola. - -For more details, see [Invitation and message encryption](/protocol/v2/invitation-and-message-encryption). - -### Determining whether to use XMTP V2 or V1 topics - -The following diagram shows how a client app using XMTP client SDK >=v7.0.0 determines whether it can use [XMTP V2 topics and message presentation flow](#xmtp-v2-topics-and-message-presentation-flow) or if it must use [XMTP V1 topics and message presentation flow](#xmtp-v1-topics-and-message-presentation-flow) to communicate with another client app. - -![Diagram showing a decision tree of how a client app using SDK >=v7.0.0 determines whether it can use XMTP V2 or V1 topics to communicate with another client app](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/v1-or-v2-decision-tree.png) - -A contact topic may contain multiple versions of a public key bundle for a user. For example, `PublicKeyBundleV2` and `PublicKeyBundleV1`. - -## App layer - -The app layer consists of client apps built with the XMTP client SDK. - -A developer can provide messaging between blockchain accounts in their app by building with the [XMTP client SDK](/get-started/examples#sdks). When a developer builds with the SDK, their app embeds an XMTP message API client, which communicates with a message API in an XMTP node to handle all XMTP network interactions required to enable their users to send and receive messages. To learn more, see [XMTP node diagram](#network-layer). - -With XMTP network interactions handled by the message API client, developers can focus on the user-related aspects of building client apps, such as: - -- User acquisition - -- User interface - -- User identity metadata - -- Inbox filtering - -- Custom content types - To learn more, see [Content types](/content-types/content-types). - -Developers can also help shape XMTP by participating in [XMTP Improvement Proposals](https://github.com/xmtp/XIPs/blob/main/XIPs/xip-0-purpose-process.md) (XIPs). diff --git a/docs/pages/protocol/v2/invitation-and-message-encryption.md b/docs/pages/protocol/v2/invitation-and-message-encryption.md deleted file mode 100644 index 318ceae..0000000 --- a/docs/pages/protocol/v2/invitation-and-message-encryption.md +++ /dev/null @@ -1,70 +0,0 @@ -# Invitation and message encryption with XMTP - -All XMTP invitations and messages are encrypted. - -## XMTP V2 invitation and message encryption - -This section describes how invitation and message encryption work for XMTP V2. Only client apps with XMTP client SDK >=v7.0.0 can use XMTP V2. - -To learn more about invitations and messages, see [XMTP V2 topics and message presentation flow](/protocol/v2/architectural-overview#xmtp-v2-topics-and-message-presentation-flow). - -To learn about how invitation and message encryption work in XMTP V1, see [XMTP V1 message encryption](#xmtp-v1-message-encryption). - -### Invitation encryption - -A client app encrypts and decrypts invites using the following artifacts: - -- Public key bundle (per user) -- Private key bundle (per user) -- Shared secret (per sender and recipient pair) -- Encryption key (per sender and recipient pair) - -The following sequence diagram dives a bit deeper into the flow and illustrates how a client app creates and uses these artifacts to encrypt an invite sent from Amal to Bola: - -![Diagram showing the sequence of steps a client app takes to use a private key, public key, shared secret, and encryption key to encrypt an invite before submitting it to the XMTP network.](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/invite-encrypt-v2.png) - -Likewise, this sequence diagram illustrates the invite decryption process: - -![Diagram showing the sequence of steps a client app takes to retrieve an invitation from the XMTP network and use a private key, public key, shared secret, and encryption key to decrypt the invitation.](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/invite-decrypt-v2.png) - -### Message encryption - -A client app signs, verifies, encrypts, and decrypts messages using the following artifacts: - -- Pre-key (sender) -- Identity public key (sender) -- Shared secret (per invitees to a conversation) -- Encryption key (per invitees to a conversation) - -On a related note, the encrypted message is signed by the sender using their private key. Upon decryption but before presentation to the recipient, the client app uses the sender's public key from the message header to verify the sender of the message. - -The following sequence diagram dives a bit deeper into the flow and illustrates how a client app creates and uses these artifacts to encrypt and sign a message sent from Amal to Bola: - -![Diagram showing the sequence of steps a client app takes to use a shared secret to generate an encryption key and use it to encrypt a message before submitting it to the XMTP network.](img/https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/message-encrypt-v2.png) - -Likewise, this sequence diagram illustrates the message decryption and message verification process: - -![Diagram showing the sequence of steps a client app takes to use a shared secret to generate an encryption key and use it to decrypt a message before presenting it to a user.](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/message-decrypt-v2.png) - -## XMTP V1 message encryption - -This section describes how message encryption works for XMTP V1. To understand whether a client app will use XMTP V1 or V2, see [Determining whether to use XMTP V2 or V1 topics](/protocol/v2/architectural-overview#determining-whether-to-use-xmtp-v2-or-v1-topics). - -With XMTP V1 message encryption, a client app encrypts and decrypts messages using the following artifacts: - -- Public key bundle (per user) -- Private key bundle (per user) -- Shared secret (per sender and recipient pair) -- Encryption key (per sender and recipient pair) - -Here’s a high-level overview of the message encryption and decryption flow for XMTP V1: - -![Animation showing the flow of a user sending a message to another user, including details of how the sender's client app encrypts and submits the message to the XMTP network, how an XMTP node relays the message to other nodes, and how the recipient's client app retrieves the message from the network, decrypts it, and delivers it to the recipient.](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/message-encrypt-decrypt.gif) - -The following sequence diagram dives a bit deeper into the flow and illustrates how a client app creates and uses these artifacts to encrypt a message: - -![Diagram showing the sequence of steps a client app takes to use a private key, public key, shared secret, and encryption key to encrypt a message before submitting it to the XMTP network.](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/message-encrypt-v1.png) - -Likewise, this sequence diagram illustrates the message decryption process: - -![Diagram showing the sequence of steps a client app takes to retrieve a message from the XMTP network, use a private key, public key, shared secret, and encryption key to decrypt them message, and then deliver the message to a user.](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/message-encrypt-v2.png) diff --git a/docs/pages/protocol/v2/key-generation-and-usage.md b/docs/pages/protocol/v2/key-generation-and-usage.md deleted file mode 100644 index 7b53654..0000000 --- a/docs/pages/protocol/v2/key-generation-and-usage.md +++ /dev/null @@ -1,58 +0,0 @@ -# Key generation and usage in XMTP - -The XMTP client protocol supports the generation of keys that enable client apps to establish secure, unfalsifiable relationships between their users' blockchain accounts. These keys also enable client apps to ensure that only the sender and recipient can encrypt and decrypt messages sent between them. - -To learn more about user authentication, see [Sign to send and receive messages using apps built with XMTP](/protocol/signatures). - -To learn more about message encryption, see [Invitation and message encryption with XMTP](/protocol/v2/invitation-and-message-encryption). - -## Identity keys - -An XMTP message API client (client) and the XMTP network cannot (and should not) access a user's blockchain account keys. For this reason, a client generates the following identity keys to serve as proxies for a user's blockchain account keys: - -- `IdentityPublicKey` -- `IdentityPrivateKey` - -A client prompts the user to sign the `IdentityPublicKey` with their blockchain account keys to confirm, or prove, that the user, as controller of the blockchain account, generated the `IdentityPublicKey`. - -Anyone can verify the user's signature and consider it an attestation that the `IdentityPublicKey` is the user's true proxy key since only the user's blockchain account keys could have created the signature. - -## Prekeys - -A client also generates public and private prekeys. A client prompts the user to sign their public prekey with their `IdentityPrivateKey`. - -The prekeys are used to encrypt invitations and sign encoded messages on behalf of an XMTP identity. - -An XMTP identity may have multiple private prekeys. A client must be able to access every private prekey used by an XMTP identity to decrypt historical messages. - -There is always only one public prekey for an XMTP identity, which is the most current prekey. - -## Key generation and retrieval flow - -The following diagrams show how a client generates and retrieves identity keys and prekeys. The diagrams also show details of how a client encrypts and stores keys. - -Encrypted keys generated for a blockchain account are accessible by only the client apps authorized by the user (controller of the blockchain account). - -To start the flow, a user accesses an app built with XMTP and connects the app to their desired blockchain account using their wallet app. The app then creates a client. - -The client checks the XMTP network for keys associated with the account. - -If the keys don't exist, [the client generates them](#key-generation-flow). - -If the keys exist, [the client retrieves them](#key-retrieval-flow). - -### Key generation flow - -If the client checks the XMTP network for keys associated with the account and the keys don't exist, the client generates them according to this flow. - -![Flowchart shows how a message API client generates and stores identity keys and prekeys needed to support a user's messaging session](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/key-generation-flow.png) - -### Key retrieval flow - -If the client checks the XMTP network for keys associated with the account and the keys exist, the client can retrieve them according to this flow. - -![Flowchart shows how a message API client retrieves existing identity keys and prekeys needed to support a user's messaging session](https://raw.githubusercontent.com/xmtp/docs-xmtp-org/main/docs/pages/img/key-retrieval-flow.png) - -## Learn more - -To learn more about keys, see [Keys](https://github.com/xmtp/proto/blob/main/PROTOCOL.md#keys) in The XMTP Protocol specification. diff --git a/docs/pages/protocol/xmtp-versions.md b/docs/pages/protocol/xmtp-versions.md deleted file mode 100644 index dc0e438..0000000 --- a/docs/pages/protocol/xmtp-versions.md +++ /dev/null @@ -1,50 +0,0 @@ -# Understand XMTP versions - -XMTP currently has three versions: V3, V2, and V1. - -## XMTP V3 - -XMTP V3 refers to the latest version of XMTP, which has the following fundamental characteristics: - -- Supports group chat. To learn more, see [Build group chat with MLS and XMTP](/groups/build-group-chat). -- Built on MLS (Message Layer Security), which delivers these [security and encryption guarantees](/protocol/security-encryption) -- Uses app installation-based handling. To learn more, see [Installations](/protocol/v3/identity#installations). -- Uses [LibXMTP](https://github.com/xmtp/libxmtp) - - Creates and manages an SDK-level local database - - Creates a V3 client that manages message handling between the app and network - - Requires syncing groups and messages to pull the latest from the network, otherwise it will pull information from the local database only. To learn more, see [Sync group chats](/groups/build-group-chat#sync-group-chats). -- Introduces inbox identities - - Inbox identities are created for users by XMTP V3 SDKs - - Checks will be able to tell if a user has an inbox ID and can therefore be messaged via XMTP V3 - -The following XMTP SDKs support V3 and V2: - -- [XMTP React Native](https://github.com/xmtp/xmtp-react-native) -- [XMTP Android](https://github.com/xmtp/xmtp-android) -- [XMTP iOS](https://github.com/xmtp/xmtp-ios) -- [XMTP Node](https://www.npmjs.com/package/@xmtp/mls-client) (experimental) - -To learn more about how XMTP V3 works, see [Learn protocol concepts](/protocol/signatures). - -## XMTP V2 - -XMTP V2 supports one-to-one chat. One-to-one chat will eventually be available through XMTP V3 and be built on MLS. - -The following XMTP SDKs support V2: - -- [XMTP React Native](https://github.com/xmtp/xmtp-react-native) -- [XMTP Android](https://github.com/xmtp/xmtp-android) -- [XMTP iOS](https://github.com/xmtp/xmtp-ios) -- [XMTP JavaScript](https://github.com/xmtp/xmtp-js) -- [XMTP React](https://github.com/xmtp/xmtp-web/tree/main/packages/react-sdk) -- [XMTP Node](https://www.npmjs.com/package/@xmtp/mls-client) (experimental) - -To learn more about how XMTP V2 works, see the sections in [XMTP V2](/protocol/v2/architectural-overview). - -## XMTP V1 - -XMTP V1 was deprecated as of January 2023, and new conversations started using XMTP V2 conversations. - -However, if you have an existing V1 conversation, new messages continue to be sent to it. To learn more, see [Determining whether to use XMTP V2 or V1 topics](/protocol/v2/architectural-overview#determining-whether-to-use-xmtp-v2-or-v1-topics). - -XMTP will provide ample advanced notice regarding when writes will be turned off for XMTP V1. diff --git a/docs/pages/z_archive/changelog.md b/docs/pages/z_archive/changelog.md index 7a2b6e5..9a46260 100644 --- a/docs/pages/z_archive/changelog.md +++ b/docs/pages/z_archive/changelog.md @@ -52,7 +52,7 @@ Provides a Kotlin implementation of an XMTP message API client for use with Andr ## [JavaScript client SDK](https://github.com/xmtp/xmtp-js) v9.1.0 released (xmtp-js) -This release implemented deterministic [XMTP v2 conversation topics](/protocol/v2/architectural-overview#conversation-topic-v2). This feature addresses a possible, but improbable, scenario in which two conversation topics are unintentionally created between two wallet addresses, causing unexpected conversation fragmentation. Upgrade now to get this feature that provides a **forward-only fix**. **[Read the release notes](https://github.com/xmtp/xmtp-js/releases/tag/v9.1.0)** (May 24) +This release implemented deterministic XMTP v2 conversation topics. This feature addresses a possible, but improbable, scenario in which two conversation topics are unintentionally created between two wallet addresses, causing unexpected conversation fragmentation. Upgrade now to get this feature that provides a **forward-only fix**. **[Read the release notes](https://github.com/xmtp/xmtp-js/releases/tag/v9.1.0)** (May 24) ## [JavaScript client SDK](https://github.com/xmtp/xmtp-js) v9.0.0 released (xmtp-js) diff --git a/package-lock.json b/package-lock.json index f71975d..6eeb66e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,11 +49,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -61,28 +62,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -98,27 +99,28 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", "dependencies": { - "@babel/types": "^7.25.0", + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -127,26 +129,25 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -156,81 +157,55 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dependencies": { - "@babel/types": "^7.25.2" + "@babel/types": "^7.26.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -240,11 +215,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", - "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -254,11 +229,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", - "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -268,11 +243,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", - "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -282,9 +257,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -293,28 +268,28 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -323,13 +298,12 @@ } }, "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -728,29 +702,29 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.6.tgz", - "integrity": "sha512-Vkvsw6EcpMHjvZZdMkSY+djMGFbt7CRssW99Ne8tar2WLnZ/l3dbxeTShbLQj+/s35h+Qb4cmnob+EzwtjrXGQ==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", "dependencies": { - "@floating-ui/utils": "^0.2.6" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.9.tgz", - "integrity": "sha512-zB1PcI350t4tkm3rvUhSRKa9sT7vH5CrAbQxW+VaPYJXKAO0gsg4CTueL+6Ajp7XzAQC8CW4Jj1Wgqc0sB6oUQ==", + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.6" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/react": { - "version": "0.26.21", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.21.tgz", - "integrity": "sha512-7P5ncDIiYd6RrwpCDbKyFzvabM014QlzlumtDbK3Bck0UueC+Rp8BLS34qcGBcN1pZCTodl4QNnCVmKv4tSxfQ==", + "version": "0.26.27", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.27.tgz", + "integrity": "sha512-jLP72x0Kr2CgY6eTYi/ra3VA9LOkTo4C+DUTrbFgFOExKy3omYVmwMjNKqxAHdsnyLS96BIDLcO2SlnsNf8KUQ==", "dependencies": { - "@floating-ui/react-dom": "^2.1.1", - "@floating-ui/utils": "^0.2.6", + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", "tabbable": "^6.0.0" }, "peerDependencies": { @@ -759,9 +733,9 @@ } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", - "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -771,16 +745,19 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.6.tgz", - "integrity": "sha512-0KI3zGxIUs1KDR/pjQPdJH4Z8nGBm0yJ5WRoRfdw1Kzeh45jkIfA0rmD0kBF6fKHH+xaH7g8y4jIXyAV5MGK3g==" + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" }, "node_modules/@hono/node-server": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.12.0.tgz", - "integrity": "sha512-e6oHjNiErRxsZRZBmc2KucuvY3btlO/XPncIpP2X75bRdTilF9GLjm3NHvKKunpJbbJJj31/FoPTksTf8djAVw==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.13.4.tgz", + "integrity": "sha512-3tW9lC0+2mRmoGUEnq0d8Pi3SToWjg8flM9Z+h5Aamy23jjpiFr7n3/HLqXve6EudOsgN2tG2hZusqzNYVRmRw==", "engines": { "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" } }, "node_modules/@isaacs/cliui": { @@ -864,9 +841,9 @@ } }, "node_modules/@mdx-js/mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz", - "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz", + "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==", "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", @@ -874,14 +851,15 @@ "@types/mdx": "^2.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", - "estree-util-to-js": "^2.0.0", + "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", - "hast-util-to-estree": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", - "periscopic": "^3.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", @@ -898,9 +876,9 @@ } }, "node_modules/@mdx-js/react": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", - "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", + "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", "dependencies": { "@types/mdx": "^2.0.0" }, @@ -914,9 +892,9 @@ } }, "node_modules/@mdx-js/rollup": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-3.0.1.tgz", - "integrity": "sha512-j0II91OCm4ld+l5QVgXXMQGxVVcAWIQJakYWi1dv5pefDHASJyCYER2TsdH7Alf958GoFSM7ugukWyvDq/UY4A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-3.1.0.tgz", + "integrity": "sha512-q4xOtUXpCzeouE8GaJ8StT4rDxm/U5j6lkMHL2srb2Q3Y7cobE0aXyPzXVVlbeIMBi+5R5MpbiaVE5/vJUdnHg==", "dependencies": { "@mdx-js/mdx": "^3.0.0", "@rollup/pluginutils": "^5.0.0", @@ -947,6 +925,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "peer": true, "engines": { "node": ">= 16" }, @@ -1072,15 +1051,15 @@ "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==" }, "node_modules/@radix-ui/react-accordion": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.0.tgz", - "integrity": "sha512-HJOzSX8dQqtsp/3jVxCU3CXEONF7/2jlGAB28oX8TTw1Dz8JYbEI1UcL8355PuLBE41/IRRMvCw7VkiK/jcUOQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.1.tgz", + "integrity": "sha512-bg/l7l5QzUjgsh8kjwDFommzAshnUsuVMV5NM56QVCm+7ZckYdd9P/ExR8xG/Oup0OajVxNLaHJ1tb8mXk+nzQ==", "dependencies": { "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collapsible": "1.1.0", + "@radix-ui/react-collapsible": "1.1.1", "@radix-ui/react-collection": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", "@radix-ui/react-id": "1.1.0", "@radix-ui/react-primitive": "2.0.0", @@ -1124,15 +1103,15 @@ } }, "node_modules/@radix-ui/react-collapsible": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.0.tgz", - "integrity": "sha512-zQY7Epa8sTL0mq4ajSJpjgn2YmCgyrG7RsQgLp3C0LQVkG7+Tf6Pv1CeNWZLyqMjhdPkBa5Lx7wYBeSu7uCSTA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.1.tgz", + "integrity": "sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg==", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-context": "1.1.1", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-presence": "1.1.1", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-controllable-state": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1177,6 +1156,20 @@ } } }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-compose-refs": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", @@ -1192,9 +1185,9 @@ } }, "node_modules/@radix-ui/react-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", - "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -1206,24 +1199,24 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.1.tgz", - "integrity": "sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz", + "integrity": "sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.0", - "@radix-ui/react-focus-guards": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", "@radix-ui/react-focus-scope": "1.1.0", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-portal": "1.1.1", - "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-slot": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.7" + "react-remove-scroll": "2.6.0" }, "peerDependencies": { "@types/react": "*", @@ -1255,9 +1248,9 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz", - "integrity": "sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", + "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", @@ -1281,9 +1274,9 @@ } }, "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz", - "integrity": "sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz", + "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -1319,11 +1312,11 @@ } }, "node_modules/@radix-ui/react-icons": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz", - "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.1.tgz", + "integrity": "sha512-QvYompk0X+8Yjlo/Fv4McrzxohDdM5GgLHyQcPpcsPvlOSXCGFjdbuyGL5dzRbg0GpknAjQJJZzdiRK7iWVuFQ==", "peerDependencies": { - "react": "^16.x || ^17.x || ^18.x" + "react": "^16.x || ^17.x || ^18.x || ^19.x" } }, "node_modules/@radix-ui/react-id": { @@ -1366,18 +1359,18 @@ } }, "node_modules/@radix-ui/react-navigation-menu": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.0.tgz", - "integrity": "sha512-OQ8tcwAOR0DhPlSY3e4VMXeHiol7la4PPdJWhhwJiJA+NLX0SaCaonOkRnI3gCDHoZ7Fo7bb/G6q25fRM2Y+3Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.1.tgz", + "integrity": "sha512-egDo0yJD2IK8L17gC82vptkvW1jLeni1VuqCyzY727dSJdk5cDjINomouLoNk8RVF7g2aNIfENKWL4UzeU9c8Q==", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-collection": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.1", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-presence": "1.1.1", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-callback-ref": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0", @@ -1401,25 +1394,25 @@ } }, "node_modules/@radix-ui/react-popover": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.1.tgz", - "integrity": "sha512-3y1A3isulwnWhvTTwmIreiB8CF4L+qRjZnK1wYLO7pplddzXKby/GnZ2M7OZY3qgnl6p9AodUIHRYGXNah8Y7g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.2.tgz", + "integrity": "sha512-u2HRUyWW+lOiA2g0Le0tMmT55FGOEWHwPFt1EPfbLly7uXQExFo5duNKqG2DzmFXIdqOeNd+TpE8baHWJCyP9w==", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.0", - "@radix-ui/react-focus-guards": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", "@radix-ui/react-focus-scope": "1.1.0", "@radix-ui/react-id": "1.1.0", "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.1", - "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-slot": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.7" + "react-remove-scroll": "2.6.0" }, "peerDependencies": { "@types/react": "*", @@ -1467,10 +1460,24 @@ } } }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-portal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz", - "integrity": "sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", + "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", "dependencies": { "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1491,9 +1498,9 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz", - "integrity": "sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1565,6 +1572,20 @@ } } }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", @@ -1583,15 +1604,15 @@ } }, "node_modules/@radix-ui/react-tabs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.0.tgz", - "integrity": "sha512-bZgOKB/LtZIij75FSuPzyEti/XBhJH52ExgtdVqjCIh+Nx/FW+LhnbXtbCzIi34ccyMsyOja8T0thCzoHFXNKA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.1.tgz", + "integrity": "sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==", "dependencies": { "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-presence": "1.1.1", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-roving-focus": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0" @@ -1749,21 +1770,21 @@ "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" }, "node_modules/@remix-run/router": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.0.tgz", - "integrity": "sha512-zDICCLKEwbVYTS6TjYaWtHXxkdoUvD/QXvyVZjGCsWz5vyH7aFeONlPffPdW+Y/t6KT0MgXb2Mfjun9YpWN1dA==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.20.0.tgz", + "integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==", "engines": { "node": ">=14.0.0" } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", + "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "picomatch": "^4.0.2" }, "engines": { "node": ">=14.0.0" @@ -1783,9 +1804,9 @@ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", - "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.3.tgz", + "integrity": "sha512-ufb2CH2KfBWPJok95frEZZ82LtDl0A6QKTa8MoM+cWwDZvVGl5/jNb79pIhRvAalUu+7LD91VYR0nwRD799HkQ==", "cpu": [ "arm" ], @@ -1795,9 +1816,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz", - "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.3.tgz", + "integrity": "sha512-iAHpft/eQk9vkWIV5t22V77d90CRofgR2006UiCjHcHJFVI1E0oBkQIAbz+pLtthFw3hWEmVB4ilxGyBf48i2Q==", "cpu": [ "arm64" ], @@ -1807,9 +1828,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz", - "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.3.tgz", + "integrity": "sha512-QPW2YmkWLlvqmOa2OwrfqLJqkHm7kJCIMq9kOz40Zo9Ipi40kf9ONG5Sz76zszrmIZZ4hgRIkez69YnTHgEz1w==", "cpu": [ "arm64" ], @@ -1819,9 +1840,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz", - "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.3.tgz", + "integrity": "sha512-KO0pN5x3+uZm1ZXeIfDqwcvnQ9UEGN8JX5ufhmgH5Lz4ujjZMAnxQygZAVGemFWn+ZZC0FQopruV4lqmGMshow==", "cpu": [ "x64" ], @@ -1830,10 +1851,34 @@ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.3.tgz", + "integrity": "sha512-CsC+ZdIiZCZbBI+aRlWpYJMSWvVssPuWqrDy/zi9YfnatKKSLFCe6fjna1grHuo/nVaHG+kiglpRhyBQYRTK4A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.3.tgz", + "integrity": "sha512-F0nqiLThcfKvRQhZEzMIXOQG4EeX61im61VYL1jo4eBxv4aZRmpin6crnBJQ/nWnCsjH5F6J3W6Stdm0mBNqBg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz", - "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.3.tgz", + "integrity": "sha512-KRSFHyE/RdxQ1CSeOIBVIAxStFC/hnBgVcaiCkQaVC+EYDtTe4X7z5tBkFyRoBgUGtB6Xg6t9t2kulnX6wJc6A==", "cpu": [ "arm" ], @@ -1843,9 +1888,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz", - "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.3.tgz", + "integrity": "sha512-h6Q8MT+e05zP5BxEKz0vi0DhthLdrNEnspdLzkoFqGwnmOzakEHSlXfVyA4HJ322QtFy7biUAVFPvIDEDQa6rw==", "cpu": [ "arm" ], @@ -1855,9 +1900,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz", - "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.3.tgz", + "integrity": "sha512-fKElSyXhXIJ9pqiYRqisfirIo2Z5pTTve5K438URf08fsypXrEkVmShkSfM8GJ1aUyvjakT+fn2W7Czlpd/0FQ==", "cpu": [ "arm64" ], @@ -1867,9 +1912,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz", - "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.3.tgz", + "integrity": "sha512-YlddZSUk8G0px9/+V9PVilVDC6ydMz7WquxozToozSnfFK6wa6ne1ATUjUvjin09jp34p84milxlY5ikueoenw==", "cpu": [ "arm64" ], @@ -1879,9 +1924,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz", - "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.3.tgz", + "integrity": "sha512-yNaWw+GAO8JjVx3s3cMeG5Esz1cKVzz8PkTJSfYzE5u7A+NvGmbVFEHP+BikTIyYWuz0+DX9kaA3pH9Sqxp69g==", "cpu": [ "ppc64" ], @@ -1891,9 +1936,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz", - "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.3.tgz", + "integrity": "sha512-lWKNQfsbpv14ZCtM/HkjCTm4oWTKTfxPmr7iPfp3AHSqyoTz5AgLemYkWLwOBWc+XxBbrU9SCokZP0WlBZM9lA==", "cpu": [ "riscv64" ], @@ -1903,9 +1948,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz", - "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.3.tgz", + "integrity": "sha512-HoojGXTC2CgCcq0Woc/dn12wQUlkNyfH0I1ABK4Ni9YXyFQa86Fkt2Q0nqgLfbhkyfQ6003i3qQk9pLh/SpAYw==", "cpu": [ "s390x" ], @@ -1915,9 +1960,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz", - "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.3.tgz", + "integrity": "sha512-mnEOh4iE4USSccBOtcrjF5nj+5/zm6NcNhbSEfR3Ot0pxBwvEn5QVUXcuOwwPkapDtGZ6pT02xLoPaNv06w7KQ==", "cpu": [ "x64" ], @@ -1927,9 +1972,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz", - "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.3.tgz", + "integrity": "sha512-rMTzawBPimBQkG9NKpNHvquIUTQPzrnPxPbCY1Xt+mFkW7pshvyIS5kYgcf74goxXOQk0CP3EoOC1zcEezKXhw==", "cpu": [ "x64" ], @@ -1939,9 +1984,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz", - "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.3.tgz", + "integrity": "sha512-2lg1CE305xNvnH3SyiKwPVsTVLCg4TmNCF1z7PSHX2uZY2VbUpdkgAllVoISD7JO7zu+YynpWNSKAtOrX3AiuA==", "cpu": [ "arm64" ], @@ -1951,9 +1996,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz", - "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.3.tgz", + "integrity": "sha512-9SjYp1sPyxJsPWuhOCX6F4jUMXGbVVd5obVpoVEi8ClZqo52ViZewA6eFz85y8ezuOA+uJMP5A5zo6Oz4S5rVQ==", "cpu": [ "ia32" ], @@ -1963,9 +2008,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz", - "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.3.tgz", + "integrity": "sha512-HGZgRFFYrMrP3TJlq58nR1xy8zHKId25vhmm5S9jETEfDf6xybPxsavFTJaufe2zgOGYJBskGlj49CwtEuFhWQ==", "cpu": [ "x64" ], @@ -1975,9 +2020,9 @@ ] }, "node_modules/@scure/base": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.7.tgz", - "integrity": "sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "peer": true, "funding": { "url": "https://paulmillr.com/funding/" @@ -2011,43 +2056,82 @@ } }, "node_modules/@shikijs/core": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.12.1.tgz", - "integrity": "sha512-biCz/mnkMktImI6hMfMX3H9kOeqsInxWEyCHbSlL8C/2TR1FqfmGxTLRNwYCKsyCyxWLbB8rEqXRVZuyxuLFmA==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.22.2.tgz", + "integrity": "sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==", + "dependencies": { + "@shikijs/engine-javascript": "1.22.2", + "@shikijs/engine-oniguruma": "1.22.2", + "@shikijs/types": "1.22.2", + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.3" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.22.2.tgz", + "integrity": "sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw==", "dependencies": { - "@types/hast": "^3.0.4" + "@shikijs/types": "1.22.2", + "@shikijs/vscode-textmate": "^9.3.0", + "oniguruma-to-js": "0.4.3" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.22.2.tgz", + "integrity": "sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA==", + "dependencies": { + "@shikijs/types": "1.22.2", + "@shikijs/vscode-textmate": "^9.3.0" } }, "node_modules/@shikijs/rehype": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-1.12.1.tgz", - "integrity": "sha512-AZLC80TIiRWFwPbSqdwykeSeMjQwYWlkX8yfI7T4nan0qgWfvv/oP7C767JQ8USudEylbe5KzBdE8Ao2sHsidA==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-1.22.2.tgz", + "integrity": "sha512-A0RHgiYR5uiHvddwHehBN9j8PhOvfT6/GebSTWrapur6M+fD/4i3mlfUv7aFK4b+4GQ1R42L8fC5N98whZjNcg==", "dependencies": { - "@shikijs/transformers": "1.12.1", + "@shikijs/types": "1.22.2", "@types/hast": "^3.0.4", - "hast-util-to-string": "^3.0.0", - "shiki": "1.12.1", + "hast-util-to-string": "^3.0.1", + "shiki": "1.22.2", "unified": "^11.0.5", "unist-util-visit": "^5.0.0" } }, "node_modules/@shikijs/transformers": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.12.1.tgz", - "integrity": "sha512-zOpj/S2thBvnJV4Ty3EE8aRs/VqCbV+lgtEYeBRkPxTW22uLADEIZq0qjt5W2Rfy2KSu29e73nRyzp4PefjUTg==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.22.2.tgz", + "integrity": "sha512-8f78OiBa6pZDoZ53lYTmuvpFPlWtevn23bzG+azpPVvZg7ITax57o/K3TC91eYL3OMJOO0onPbgnQyZjRos8XQ==", "dependencies": { - "shiki": "1.12.1" + "shiki": "1.22.2" } }, "node_modules/@shikijs/twoslash": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-1.12.1.tgz", - "integrity": "sha512-k4D6sC9p9GksbHa4RnB1VkQIZtQ+L7nQMqi/YAxEgTKZF5v7IW6dHak0Z7bvZXrfhle36NIqWMJXz5xDexupvw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-1.22.2.tgz", + "integrity": "sha512-4R3A7aH/toZgtlveXHKk01nIsvn8hjAfPJ1aT550zcV4qK6vK/tfaEyYtaljOaY1wig2l5+8sKjNSEz3PcSiEw==", + "dependencies": { + "@shikijs/core": "1.22.2", + "@shikijs/types": "1.22.2", + "twoslash": "^0.2.12" + } + }, + "node_modules/@shikijs/types": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.22.2.tgz", + "integrity": "sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg==", "dependencies": { - "@shikijs/core": "1.12.1", - "twoslash": "^0.2.9" + "@shikijs/vscode-textmate": "^9.3.0", + "@types/hast": "^3.0.4" } }, + "node_modules/@shikijs/vscode-textmate": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.0.tgz", + "integrity": "sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==" + }, "node_modules/@types/acorn": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", @@ -2102,9 +2186,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, "node_modules/@types/estree-jsx": { "version": "1.0.5", @@ -2141,38 +2225,41 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", - "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", + "version": "22.8.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.6.tgz", + "integrity": "sha512-tosuJYKrIqjQIlVCM4PEGxOmyg3FCPa/fViuJChnGeEIhjA46oy8FMVoF9su1/v8PNs2a8Q0iFNyOx0uOF91nw==", "dependencies": { - "undici-types": "~6.13.0" + "undici-types": "~6.19.8" } }, "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==" }, "node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" }, "node_modules/@typescript/vfs": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.5.0.tgz", - "integrity": "sha512-AJS307bPgbsZZ9ggCT3wwpg3VbTKMFNHfaY/uF0ahSkYYrPF2dSSKDNIDIQAHm9qJqbLvCsSJH7yN4Vs/CsMMg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.0.tgz", + "integrity": "sha512-hvJUjNVeBMp77qPINuUvYXj4FyWeeMMKZkxEATEU3hqBAQ7qdTBCUFT7Sp0Zu0faeEtFf+ldXxMEDr/bk73ISg==", "dependencies": { "debug": "^4.1.1" + }, + "peerDependencies": { + "typescript": "*" } }, "node_modules/@ungap/structured-clone": { @@ -2181,37 +2268,43 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, "node_modules/@vanilla-extract/babel-plugin-debug-ids": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.6.tgz", - "integrity": "sha512-C188vUEYmw41yxg3QooTs8r1IdbDQQ2mH7L5RkORBnHx74QlmsNfqVmKwAVTgrlYt8JoRaWMtPfGm/Ql0BNQrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.1.0.tgz", + "integrity": "sha512-Zy9bKjaL2P5zsrFYQJ8IjWGlFODmZrpvFmjFE0Zv8om55Pz1JtpJtL6DvlxlWUxbVaP1HKCqsmEfFOZN8fX/ZQ==", "dependencies": { "@babel/core": "^7.23.9" } }, "node_modules/@vanilla-extract/css": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.15.3.tgz", - "integrity": "sha512-mxoskDAxdQAspbkmQRxBvolUi1u1jnyy9WZGm+GeH8V2wwhEvndzl1QoK7w8JfA0WFevTxbev5d+i+xACZlPhA==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.16.0.tgz", + "integrity": "sha512-05JTbvG1E0IrSZKZ5el2EM9CmAX0XSdsNY+d4aRZxDvYf3/hwxomvFFEz2b/awjgg9yTVHW83Wq19wE4OoTEMg==", "dependencies": { "@emotion/hash": "^0.9.0", - "@vanilla-extract/private": "^1.0.5", + "@vanilla-extract/private": "^1.0.6", "css-what": "^6.1.0", "cssesc": "^3.0.0", "csstype": "^3.0.7", "dedent": "^1.5.3", "deep-object-diff": "^1.1.9", "deepmerge": "^4.2.2", + "lru-cache": "^10.4.3", "media-query-parser": "^2.0.2", "modern-ahocorasick": "^1.0.0", "picocolors": "^1.0.0" } }, + "node_modules/@vanilla-extract/css/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, "node_modules/@vanilla-extract/dynamic": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@vanilla-extract/dynamic/-/dynamic-2.1.1.tgz", - "integrity": "sha512-iqf736036ujEIKsIq28UsBEMaLC2vR2DhwKyrG3NDb/fRy9qL9FKl1TqTtBV4daU30Uh3saeik4vRzN8bzQMbw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@vanilla-extract/dynamic/-/dynamic-2.1.2.tgz", + "integrity": "sha512-9BGMciD8rO1hdSPIAh1ntsG4LPD3IYKhywR7VOmmz9OO4Lx1hlwkSg3E6X07ujFx7YuBfx0GDQnApG9ESHvB2A==", "dependencies": { - "@vanilla-extract/private": "^1.0.5" + "@vanilla-extract/private": "^1.0.6" } }, "node_modules/@vanilla-extract/integration": { @@ -2617,9 +2710,9 @@ } }, "node_modules/@vanilla-extract/private": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.5.tgz", - "integrity": "sha512-6YXeOEKYTA3UV+RC8DeAjFk+/okoNz/h88R+McnzA2zpaVqTR/Ep+vszkWYlGBcMNO7vEkqbq5nT/JMMvhi+tw==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.6.tgz", + "integrity": "sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw==" }, "node_modules/@vanilla-extract/vite-plugin": { "version": "3.9.5", @@ -2636,13 +2729,13 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", - "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", + "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==", "dependencies": { - "@babel/core": "^7.24.5", - "@babel/plugin-transform-react-jsx-self": "^7.24.5", - "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@babel/core": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, @@ -2676,63 +2769,31 @@ } }, "node_modules/@xmtp/content-type-primitives": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@xmtp/content-type-primitives/-/content-type-primitives-1.0.1.tgz", - "integrity": "sha512-F/2/yh0UQZb49tuxszTIbH+TDNJhTgSlj3UX8YOevMaMpIAvY26qjIA35M8Bw0nng3aU/iYqFA1p3ZO/7rM9Qw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@xmtp/content-type-primitives/-/content-type-primitives-1.0.2.tgz", + "integrity": "sha512-U0yjczglsToTV4IN4hCuYffADBTarZxpxNIr658CTqvsVOHDMVoRa57mzMHKKqHsylgAqSQmQQGZo3C3byFeww==", "dependencies": { "@xmtp/proto": "^3.61.1" } }, "node_modules/@xmtp/content-type-reaction": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@xmtp/content-type-reaction/-/content-type-reaction-1.1.9.tgz", - "integrity": "sha512-/3qN/jNaxb7pYocD9NqmtHLJGe5bD+jmaOSa1LJIIPhhTXAanFbdScb1JzYQHBonyYsOT+hA4bGLjcpWHIYH/w==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@xmtp/content-type-reaction/-/content-type-reaction-1.1.10.tgz", + "integrity": "sha512-I8/kwJ0IczxTKpKXpanbyIaDlgbC/LAUe3Bn+lTBQr2h5BEoRgVFvI5/bvb9pp4xOMlissxSZ2gzA+9wW4+qtA==", "peer": true, "dependencies": { - "@xmtp/content-type-primitives": "^1.0.1" + "@xmtp/content-type-primitives": "^1.0.2" } }, "node_modules/@xmtp/content-type-remote-attachment": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@xmtp/content-type-remote-attachment/-/content-type-remote-attachment-1.1.9.tgz", - "integrity": "sha512-4/SapFdSOSRCbJTsDx0Z1AO2GpfnfL5hXSEcFHDCVw++zLTObKLRWTwaSRJeI49PLFjYgZPdwSvHkw8hfOSm0A==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@xmtp/content-type-remote-attachment/-/content-type-remote-attachment-1.1.11.tgz", + "integrity": "sha512-18orjR1OtmF4nLRCw0Wb32Onkq51tSKGO4YIBM907LdqSb5dOlXN5h7CanV0GVWdAvsljLC3BASJu4VMc/8IFg==", "peer": true, "dependencies": { "@noble/secp256k1": "^1.7.1", - "@xmtp/content-type-primitives": "^1.0.1", - "@xmtp/proto": "^3.61.1", - "@xmtp/xmtp-js": "^11.6.3" - } - }, - "node_modules/@xmtp/content-type-remote-attachment/node_modules/@xmtp/xmtp-js": { - "version": "11.6.3", - "resolved": "https://registry.npmjs.org/@xmtp/xmtp-js/-/xmtp-js-11.6.3.tgz", - "integrity": "sha512-Bp34Cl6/Ku3gylmQegRWgc2BX20+OD4k6fMWbEoLFKcNxkA0j8XV8Ml7IQ7C+4pyVtrlDA0at33LvmuRd6owsQ==", - "peer": true, - "dependencies": { - "@noble/secp256k1": "1.7.1", - "@xmtp/consent-proof-signature": "^0.1.3", - "@xmtp/proto": "3.54.0", - "@xmtp/user-preferences-bindings-wasm": "^0.3.6", - "async-mutex": "^0.5.0", - "elliptic": "^6.5.4", - "long": "^5.2.3", - "viem": "2.7.15" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@xmtp/content-type-remote-attachment/node_modules/@xmtp/xmtp-js/node_modules/@xmtp/proto": { - "version": "3.54.0", - "resolved": "https://registry.npmjs.org/@xmtp/proto/-/proto-3.54.0.tgz", - "integrity": "sha512-X0jDRR19/tH0qRB8mM/H/vBueQAK22VZF4QUnDN7TgnbNaOYL5DvSmPfXFH+xzeGKQ5S0zgwc+qFJbI4xoKNHw==", - "peer": true, - "dependencies": { - "long": "^5.2.0", - "protobufjs": "^7.0.0", - "rxjs": "^7.8.0", - "undici": "^5.8.1" + "@xmtp/content-type-primitives": "^1.0.2", + "@xmtp/proto": "^3.61.1" } }, "node_modules/@xmtp/content-type-reply": { @@ -2754,9 +2815,9 @@ } }, "node_modules/@xmtp/proto": { - "version": "3.65.0", - "resolved": "https://registry.npmjs.org/@xmtp/proto/-/proto-3.65.0.tgz", - "integrity": "sha512-5DeU7uM/M4gCDn3370SZUvyC9BDztZPRLZBYfWo6HTn/vU9T4YJFBFCS8KjiJdpd2F/1nR01TnbjgJntkLN5pw==", + "version": "3.72.0", + "resolved": "https://registry.npmjs.org/@xmtp/proto/-/proto-3.72.0.tgz", + "integrity": "sha512-HqAR+zUNNJMLDs4hpUkRJyHz/Xs9exmxEdZlIg6LXrUm5QCIr6bm8E1HBbrbkRMR2UEExseFrzq/5vEWdwScQg==", "dependencies": { "long": "^5.2.0", "protobufjs": "^7.0.0", @@ -2838,22 +2899,10 @@ } } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "bin": { "acorn": "bin/acorn" }, @@ -2870,9 +2919,9 @@ } }, "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "engines": { "node": ">=12" }, @@ -2881,14 +2930,14 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/any-promise": { @@ -2908,6 +2957,17 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -2925,9 +2985,9 @@ } }, "node_modules/astring": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", - "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", "bin": { "astring": "bin/astring" } @@ -3076,9 +3136,9 @@ "peer": true }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "funding": [ { "type": "opencollective", @@ -3094,10 +3154,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -3130,9 +3190,9 @@ } }, "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } @@ -3154,9 +3214,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001649", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001649.tgz", - "integrity": "sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ==", + "version": "1.0.30001676", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001676.tgz", + "integrity": "sha512-Qz6zwGCiPghQXGJvgQAem79esjitvJ+CxSbSQkW9H/UX5hg8XM88d4lp2W+MEQ81j+Hip58Il+jGVdazk1z9cw==", "funding": [ { "type": "opencollective", @@ -3182,16 +3242,14 @@ } }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "engines": { - "node": ">=4" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/character-entities": { @@ -3301,17 +3359,20 @@ } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/comma-separated-tokens": { "version": "2.0.3", @@ -3342,16 +3403,16 @@ } }, "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", + "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", + "negotiator": "~0.6.4", "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", + "safe-buffer": "5.2.1", "vary": "~1.1.2" }, "engines": { @@ -3372,9 +3433,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/confbox": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", - "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==" + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==" }, "node_modules/convert-source-map": { "version": "2.0.0", @@ -3461,11 +3522,11 @@ } }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3568,9 +3629,9 @@ } }, "node_modules/dexie": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/dexie/-/dexie-4.0.8.tgz", - "integrity": "sha512-1G6cJevS17KMDK847V3OHvK2zei899GwpDiqfEXHP1ASvme6eWJmAp9AU4s1son2TeGkWmC0g3y8ezOBPnalgQ==" + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/dexie/-/dexie-4.0.9.tgz", + "integrity": "sha512-VQG1huEVSAdDZssb9Bb9mFy+d3jAE0PT4d1nIRYlT46ip1fzbs1tXi0SlUayRDgV3tTbJG8ZRqAo2um49gtynA==" }, "node_modules/dexie-react-hooks": { "version": "1.1.7", @@ -3626,14 +3687,14 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==" + "version": "1.5.50", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.50.tgz", + "integrity": "sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==" }, "node_modules/elliptic": { - "version": "6.5.6", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.6.tgz", - "integrity": "sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.0.tgz", + "integrity": "sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==", "peer": true, "dependencies": { "bn.js": "^4.11.9", @@ -3646,29 +3707,59 @@ } }, "node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==" }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { "node": ">= 0.8" } }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", @@ -3696,9 +3787,9 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { "node": ">=6" } @@ -3709,11 +3800,14 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "engines": { - "node": ">=0.8.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/estree-util-attach-comments": { @@ -3752,6 +3846,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/estree-util-to-js": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", @@ -3907,9 +4014,9 @@ } }, "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -4087,14 +4194,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", @@ -4178,9 +4277,9 @@ } }, "node_modules/hast-util-select": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.2.tgz", - "integrity": "sha512-hT/SD/d/Meu+iobvgkffo1QecV8WeKWxwsNMzcTJsKw1cKTQKSR/7ArJeURLNJF9HDjp9nVoORyNNJxrvBye8Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.3.tgz", + "integrity": "sha512-OVRQlQ1XuuLP8aFVLYmC2atrfWHS5UD3shonxpnyrjcCkwtvmt/+N6kYJdcY4mkMJhxp4kj2EFIxQ9kvkkt/eQ==", "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", @@ -4192,7 +4291,6 @@ "hast-util-has-property": "^3.0.0", "hast-util-to-string": "^3.0.0", "hast-util-whitespace": "^3.0.0", - "not": "^0.1.0", "nth-check": "^2.0.0", "property-information": "^6.0.0", "space-separated-tokens": "^2.0.0", @@ -4231,10 +4329,45 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-estree/node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/hast-util-to-estree/node_modules/style-to-object": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", + "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.3.tgz", + "integrity": "sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", - "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz", + "integrity": "sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==", "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", @@ -4257,23 +4390,10 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", - "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==" - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz", - "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==", - "dependencies": { - "inline-style-parser": "0.2.3" - } - }, "node_modules/hast-util-to-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz", - "integrity": "sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", "dependencies": { "@types/hast": "^3.0.0" }, @@ -4322,11 +4442,21 @@ } }, "node_modules/hono": { - "version": "3.12.12", - "resolved": "https://registry.npmjs.org/hono/-/hono-3.12.12.tgz", - "integrity": "sha512-5IAMJOXfpA5nT+K0MNjClchzz0IhBHs2Szl7WFAhrFOsbtQsYmNynFyJRg/a3IPsmCfxcrf8txUGiNShXpK5Rg==", + "version": "4.6.8", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.6.8.tgz", + "integrity": "sha512-f+2Ec9JAzabT61pglDiLJcF/DjiSefZkjCn9bzm1cYLGkD5ExJ3Jnv93ax9h0bn7UPLHF81KktoyjdQfWI2n1Q==", + "peer": true, "engines": { - "node": ">=16.0.0" + "node": ">=16.9.0" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/http-errors": { @@ -4372,9 +4502,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "engines": { "node": ">= 4" } @@ -4385,9 +4515,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==" }, "node_modules/invariant": { "version": "2.2.4", @@ -4453,9 +4583,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dependencies": { "hasown": "^2.0.2" }, @@ -4541,14 +4671,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -4624,14 +4746,14 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json5": { @@ -4706,17 +4828,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/long": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", @@ -4767,9 +4878,9 @@ } }, "node_modules/markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4809,21 +4920,10 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mdast-util-from-markdown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", - "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -4860,17 +4960,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mdast-util-gfm": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", @@ -4890,9 +4979,9 @@ } }, "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", @@ -4983,9 +5072,9 @@ } }, "node_modules/mdast-util-mdx-expression": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", - "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", @@ -5000,9 +5089,9 @@ } }, "node_modules/mdast-util-mdx-jsx": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz", - "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", + "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", @@ -5014,7 +5103,6 @@ "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^5.0.0", "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" }, @@ -5074,15 +5162,16 @@ } }, "node_modules/mdast-util-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.1.tgz", + "integrity": "sha512-OrkcCoqAkEg9b1ykXBrA0ehRc8H4fGU/03cACmW2xXzau1+dIdS+qJugh1Cqex3hMumSBgSE/5pc7uqP12nLAw==", "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" @@ -5193,9 +5282,9 @@ } }, "node_modules/micromark-extension-directive": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.1.tgz", - "integrity": "sha512-VGV2uxUzhEZmaP7NSFo2vtq7M2nUD+WfmYQD+d8i/1nHbzE+rMy9uzTvUybBbNiVbrhOZibg3gbyoARGqgDWyg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", @@ -5365,9 +5454,9 @@ } }, "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", - "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz", + "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==", "dependencies": { "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", @@ -5376,6 +5465,7 @@ "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" @@ -5478,9 +5568,9 @@ } }, "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", - "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz", + "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==", "funding": [ { "type": "GitHub Sponsors", @@ -5494,6 +5584,7 @@ "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -5841,9 +5932,9 @@ ] }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -5852,6 +5943,17 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -5871,25 +5973,6 @@ "node": ">= 0.6" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -5938,14 +6021,14 @@ "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==" }, "node_modules/mlly": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", - "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.2.tgz", + "integrity": "sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==", "dependencies": { - "acorn": "^8.11.3", + "acorn": "^8.12.1", "pathe": "^1.1.2", - "pkg-types": "^1.1.1", - "ufo": "^1.5.3" + "pkg-types": "^1.2.0", + "ufo": "^1.5.4" } }, "node_modules/modern-ahocorasick": { @@ -5954,9 +6037,9 @@ "integrity": "sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==" }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/mz": { "version": "2.7.0", @@ -5986,9 +6069,9 @@ } }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "engines": { "node": ">= 0.6" } @@ -6014,11 +6097,6 @@ "node": ">=0.10.0" } }, - "node_modules/not": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/not/-/not-0.1.0.tgz", - "integrity": "sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==" - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -6090,6 +6168,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/oniguruma-to-js": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/oniguruma-to-js/-/oniguruma-to-js-0.4.3.tgz", + "integrity": "sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==", + "dependencies": { + "regex": "^4.3.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/ora": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", @@ -6112,17 +6201,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/outdent": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", @@ -6182,9 +6260,9 @@ } }, "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" }, "node_modules/parse-entities": { "version": "4.0.1", @@ -6206,9 +6284,9 @@ } }, "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" }, "node_modules/parseurl": { "version": "1.3.3", @@ -6272,27 +6350,17 @@ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -6315,19 +6383,19 @@ } }, "node_modules/pkg-types": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", - "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz", + "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==", "dependencies": { - "confbox": "^0.1.7", - "mlly": "^1.7.1", + "confbox": "^0.1.8", + "mlly": "^1.7.2", "pathe": "^1.1.2" } }, "node_modules/postcss": { - "version": "8.4.41", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", - "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "funding": [ { "type": "opencollective", @@ -6344,8 +6412,8 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -6444,9 +6512,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", - "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -6480,9 +6548,9 @@ } }, "node_modules/protobufjs": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", - "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", @@ -6572,9 +6640,9 @@ } }, "node_modules/react-intersection-observer": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.13.0.tgz", - "integrity": "sha512-y0UvBfjDiXqC8h0EWccyaj4dVBWMxgEx0t5RGNzQsvkfvZwugnKwxpu70StY4ivzYuMajavwUDjH4LJyIki9Lw==", + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.13.1.tgz", + "integrity": "sha512-tSzDaTy0qwNPLJHg8XZhlyHTgGW6drFKTtvjdL+p6um12rcnp8Z5XstE+QNBJ7c64n5o0Lj4ilUleA41bmDoMw==", "peerDependencies": { "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -6599,11 +6667,11 @@ } }, "node_modules/react-remove-scroll": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz", - "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", "dependencies": { - "react-remove-scroll-bar": "^2.3.4", + "react-remove-scroll-bar": "^2.3.6", "react-style-singleton": "^2.2.1", "tslib": "^2.1.0", "use-callback-ref": "^1.3.0", @@ -6644,11 +6712,11 @@ } }, "node_modules/react-router": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.0.tgz", - "integrity": "sha512-wVQq0/iFYd3iZ9H2l3N3k4PL8EEHcb0XlU2Na8nEwmiXgIUElEH6gaJDtUQxJ+JFzmIXaQjfdpcGWaM6IoQGxg==", + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.27.0.tgz", + "integrity": "sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==", "dependencies": { - "@remix-run/router": "1.19.0" + "@remix-run/router": "1.20.0" }, "engines": { "node": ">=14.0.0" @@ -6658,12 +6726,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.0.tgz", - "integrity": "sha512-RRGUIiDtLrkX3uYcFiCIxKFWMcWQGMojpYZfcstc63A1+sSnVgILGIm9gNUA6na3Fm1QuPGSBQH2EMbAZOnMsQ==", + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.27.0.tgz", + "integrity": "sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==", "dependencies": { - "@remix-run/router": "1.19.0", - "react-router": "6.26.0" + "@remix-run/router": "1.20.0", + "react-router": "6.27.0" }, "engines": { "node": ">=14.0.0" @@ -6735,11 +6803,87 @@ "node": ">=8.10.0" } }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz", + "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, + "node_modules/regex": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-4.4.0.tgz", + "integrity": "sha512-uCUSuobNVeqUupowbdZub6ggI5/JZkYyJdDogddJr60L764oxC2pMZov1fQ3wM9bdyzUILDG+Sqx6NAKAz9rKQ==" + }, "node_modules/rehype-autolink-headings": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz", @@ -6769,9 +6913,9 @@ } }, "node_modules/rehype-class-names/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" }, "node_modules/rehype-class-names/node_modules/unified": { "version": "10.1.2", @@ -6831,6 +6975,20 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/rehype-slug": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz", @@ -6895,9 +7053,9 @@ } }, "node_modules/remark-mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", - "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", + "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" @@ -6939,9 +7097,9 @@ } }, "node_modules/remark-rehype": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", - "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz", + "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==", "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", @@ -7017,11 +7175,11 @@ } }, "node_modules/rollup": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz", - "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.3.tgz", + "integrity": "sha512-HBW896xR5HGmoksbi3JBDtmVzWiPAYqp7wip50hjQ67JbDz61nyoMPdqu1DvVW9asYb2M65Z20ZHsyJCMqMyDg==", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.6" }, "bin": { "rollup": "dist/bin/rollup" @@ -7031,22 +7189,24 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.20.0", - "@rollup/rollup-android-arm64": "4.20.0", - "@rollup/rollup-darwin-arm64": "4.20.0", - "@rollup/rollup-darwin-x64": "4.20.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", - "@rollup/rollup-linux-arm-musleabihf": "4.20.0", - "@rollup/rollup-linux-arm64-gnu": "4.20.0", - "@rollup/rollup-linux-arm64-musl": "4.20.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", - "@rollup/rollup-linux-riscv64-gnu": "4.20.0", - "@rollup/rollup-linux-s390x-gnu": "4.20.0", - "@rollup/rollup-linux-x64-gnu": "4.20.0", - "@rollup/rollup-linux-x64-musl": "4.20.0", - "@rollup/rollup-win32-arm64-msvc": "4.20.0", - "@rollup/rollup-win32-ia32-msvc": "4.20.0", - "@rollup/rollup-win32-x64-msvc": "4.20.0", + "@rollup/rollup-android-arm-eabi": "4.24.3", + "@rollup/rollup-android-arm64": "4.24.3", + "@rollup/rollup-darwin-arm64": "4.24.3", + "@rollup/rollup-darwin-x64": "4.24.3", + "@rollup/rollup-freebsd-arm64": "4.24.3", + "@rollup/rollup-freebsd-x64": "4.24.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.3", + "@rollup/rollup-linux-arm-musleabihf": "4.24.3", + "@rollup/rollup-linux-arm64-gnu": "4.24.3", + "@rollup/rollup-linux-arm64-musl": "4.24.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.3", + "@rollup/rollup-linux-riscv64-gnu": "4.24.3", + "@rollup/rollup-linux-s390x-gnu": "4.24.3", + "@rollup/rollup-linux-x64-gnu": "4.24.3", + "@rollup/rollup-linux-x64-musl": "4.24.3", + "@rollup/rollup-win32-arm64-msvc": "4.24.3", + "@rollup/rollup-win32-ia32-msvc": "4.24.3", + "@rollup/rollup-win32-x64-msvc": "4.24.3", "fsevents": "~2.3.2" } }, @@ -7081,9 +7241,23 @@ } }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/scheduler": { "version": "0.23.2", @@ -7102,9 +7276,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -7137,20 +7311,23 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" @@ -7181,11 +7358,15 @@ } }, "node_modules/shiki": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.12.1.tgz", - "integrity": "sha512-nwmjbHKnOYYAe1aaQyEBHvQymJgfm86ZSS7fT8OaPRr4sbAcBNz7PbfAikMEFSDQ6se2j2zobkXvVKcBOm0ysg==", - "dependencies": { - "@shikijs/core": "1.12.1", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.22.2.tgz", + "integrity": "sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA==", + "dependencies": { + "@shikijs/core": "1.22.2", + "@shikijs/engine-javascript": "1.22.2", + "@shikijs/engine-oniguruma": "1.22.2", + "@shikijs/types": "1.22.2", + "@shikijs/vscode-textmate": "^9.3.0", "@types/hast": "^3.0.4" } }, @@ -7219,9 +7400,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } @@ -7265,25 +7446,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/string-width": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", @@ -7394,11 +7556,11 @@ } }, "node_modules/style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", "dependencies": { - "inline-style-parser": "0.1.1" + "inline-style-parser": "0.2.4" } }, "node_modules/sucrase": { @@ -7422,17 +7584,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -7450,9 +7601,9 @@ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" }, "node_modules/tailwindcss": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.7.tgz", - "integrity": "sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==", + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", + "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -7523,14 +7674,6 @@ "node": ">=0.8" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7579,31 +7722,31 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/twoslash": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.2.9.tgz", - "integrity": "sha512-oj7XY6h8E9nTZBmfRE1gpsSSUqAQo5kcIpFkXyQPp8UCsyCQsUlP2bJ2s32o02c1n5+xl4h9rcCsQ1F97Z6LZg==", + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.2.12.tgz", + "integrity": "sha512-tEHPASMqi7kqwfJbkk7hc/4EhlrKCSLcur+TcvYki3vhIfaRMXnXjaYFgXpoZRbT6GdprD4tGuVBEmTpUgLBsw==", "dependencies": { - "@typescript/vfs": "1.5.0", - "twoslash-protocol": "0.2.9" + "@typescript/vfs": "^1.6.0", + "twoslash-protocol": "0.2.12" }, "peerDependencies": { "typescript": "*" } }, "node_modules/twoslash-protocol": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.2.9.tgz", - "integrity": "sha512-uKQl8UboT6JU4VAtYaSI3DbNtgaNhFaTpCSMy/n3tRl5lMlMhrjiuNKdqx15xjcviconuGJ9oObkz1h9zJFrJg==" + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.2.12.tgz", + "integrity": "sha512-5qZLXVYfZ9ABdjqbvPc4RWMr7PrpPaaDSeaYY55vl/w1j6H6kzsWK/urAEIXlzYlyrFmyz1UbwIt+AA0ck+wbg==" }, "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7613,9 +7756,9 @@ } }, "node_modules/ua-parser-js": { - "version": "1.0.38", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.38.tgz", - "integrity": "sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==", + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", + "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", "funding": [ { "type": "opencollective", @@ -7630,6 +7773,9 @@ "url": "https://github.com/sponsors/faisalman" } ], + "bin": { + "ua-parser-js": "script/cli.js" + }, "engines": { "node": "*" } @@ -7651,9 +7797,9 @@ } }, "node_modules/undici-types": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", - "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==" + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, "node_modules/unified": { "version": "11.0.5", @@ -7709,19 +7855,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-remove-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", @@ -7770,9 +7903,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "funding": [ { "type": "opencollective", @@ -7788,8 +7921,8 @@ } ], "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -7865,12 +7998,11 @@ } }, "node_modules/vfile": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.2.tgz", - "integrity": "sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "dependencies": { "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", "vfile-message": "^4.0.0" }, "funding": { @@ -7922,13 +8054,13 @@ } }, "node_modules/vite": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz", - "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==", + "version": "5.4.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", + "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", "dependencies": { "esbuild": "^0.21.3", - "postcss": "^8.4.39", - "rollup": "^4.13.0" + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" @@ -7947,6 +8079,7 @@ "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" @@ -7964,6 +8097,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -7997,9 +8133,9 @@ } }, "node_modules/vocs": { - "version": "1.0.0-alpha.55", - "resolved": "https://registry.npmjs.org/vocs/-/vocs-1.0.0-alpha.55.tgz", - "integrity": "sha512-RT456+7uG4qNz7CwIb7xxhQAt/wJwjUzoi3fNgzfR62v4j/1gTdgn+yqD5vqv7RzJh7j4Iw3R9GF6jriAfiwng==", + "version": "1.0.0-alpha.62", + "resolved": "https://registry.npmjs.org/vocs/-/vocs-1.0.0-alpha.62.tgz", + "integrity": "sha512-WidbX8M33lPlDjOvvjQyZaYGtn3hRZ3iViFuwvlmgAqCX1yGXaQs1tLdS1Cy5ki+q0BIUqXvvy8jo9rBQ+fM6w==", "funding": [ { "type": "github", @@ -8007,49 +8143,49 @@ } ], "dependencies": { - "@floating-ui/react": "^0.26.6", - "@hono/node-server": "^1.2.3", - "@mdx-js/react": "^3.0.0", - "@mdx-js/rollup": "^3.0.0", - "@noble/hashes": "^1.3.2", + "@floating-ui/react": "^0.26.24", + "@hono/node-server": "^1.13.1", + "@mdx-js/react": "^3.0.1", + "@mdx-js/rollup": "^3.0.1", + "@noble/hashes": "^1.5.0", "@radix-ui/colors": "^3.0.0", - "@radix-ui/react-accordion": "^1.1.2", - "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-accordion": "^1.2.1", + "@radix-ui/react-dialog": "^1.1.2", "@radix-ui/react-icons": "^1.3.0", - "@radix-ui/react-label": "^2.0.2", - "@radix-ui/react-navigation-menu": "^1.1.4", - "@radix-ui/react-popover": "^1.0.7", - "@radix-ui/react-tabs": "^1.0.4", - "@shikijs/rehype": "^1.10.3", - "@shikijs/transformers": "^1.10.3", - "@shikijs/twoslash": "^1.10.3", - "@vanilla-extract/css": "^1.14.0", - "@vanilla-extract/dynamic": "^2.1.0", - "@vanilla-extract/vite-plugin": "^3.9.4", + "@radix-ui/react-label": "^2.1.0", + "@radix-ui/react-navigation-menu": "^1.2.1", + "@radix-ui/react-popover": "^1.1.2", + "@radix-ui/react-tabs": "^1.1.1", + "@shikijs/rehype": "^1.21.0", + "@shikijs/transformers": "^1.21.0", + "@shikijs/twoslash": "^1.21.0", + "@vanilla-extract/css": "^1.16.0", + "@vanilla-extract/dynamic": "^2.1.2", + "@vanilla-extract/vite-plugin": "^3.9.5", "@vitejs/plugin-react": "4.3.1", - "autoprefixer": "^10.4.16", + "autoprefixer": "^10.4.20", "cac": "^6.7.14", - "chroma-js": "^2.4.2", - "clsx": "^2.0.0", + "chroma-js": "^2.6.0", + "clsx": "^2.1.1", "compression": "^1.7.4", "create-vocs": "^1.0.0-alpha.4", "cross-spawn": "^7.0.3", - "fs-extra": "^11.1.1", + "fs-extra": "^11.2.0", "globby": "^13.2.2", "hastscript": "^8.0.0", - "hono": "^3.10.2", + "hono": "^3.12.12", "mark.js": "^8.11.1", "mdast-util-directive": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", + "mdast-util-from-markdown": "^2.0.1", "mdast-util-gfm": "^3.0.0", - "mdast-util-to-hast": "^13.0.2", - "minimatch": "^9.0.3", + "mdast-util-to-hast": "^13.2.0", + "minimatch": "^9.0.5", "minisearch": "^6.3.0", "ora": "^7.0.1", "p-limit": "^5.0.0", - "postcss": "^8.4.31", + "postcss": "^8.4.47", "react-helmet": "^6.1.0", - "react-intersection-observer": "^9.5.3", + "react-intersection-observer": "^9.13.1", "react-router-dom": "^6.20.0", "rehype-autolink-headings": "^7.1.0", "rehype-class-names": "^1.0.14", @@ -8059,15 +8195,15 @@ "remark-gfm": "^4.0.0", "remark-mdx-frontmatter": "^4.0.0", "remark-parse": "^11.0.0", - "serve-static": "^1.15.0", - "shiki": "^1.10.3", - "tailwindcss": "^3.3.3", + "serve-static": "^1.16.2", + "shiki": "^1.21.0", + "tailwindcss": "^3.4.13", "toml": "^3.0.0", - "twoslash": "~0.2.9", - "ua-parser-js": "^1.0.36", - "unified": "^11.0.4", + "twoslash": "~0.2.12", + "ua-parser-js": "^1.0.39", + "unified": "^11.0.5", "unist-util-visit": "^5.0.0", - "vite": "^5.3.3" + "vite": "^5.4.8" }, "bin": { "vocs": "_lib/cli/index.js" @@ -8077,6 +8213,43 @@ "react-dom": "^18.2.0" } }, + "node_modules/vocs/node_modules/@noble/hashes": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", + "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/vocs/node_modules/@vitejs/plugin-react": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/vocs/node_modules/hono": { + "version": "3.12.12", + "resolved": "https://registry.npmjs.org/hono/-/hono-3.12.12.tgz", + "integrity": "sha512-5IAMJOXfpA5nT+K0MNjClchzz0IhBHs2Szl7WFAhrFOsbtQsYmNynFyJRg/a3IPsmCfxcrf8txUGiNShXpK5Rg==", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -8146,22 +8319,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -8191,17 +8348,6 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -8250,9 +8396,9 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", "bin": { "yaml": "bin.mjs" }, diff --git a/vocs.config.tsx b/vocs.config.tsx index 45f9f64..62ea3b1 100644 --- a/vocs.config.tsx +++ b/vocs.config.tsx @@ -88,12 +88,12 @@ export default defineConfig({ }, { text: "Quickstart repos", - link: "/consent/consent-quickstarts", + link: "#TODO", }, ], }, { - "text": "Build inboxes - V3 Alpha", + "text": "Build inboxes", "collapsed": true, "items": [ { @@ -111,204 +111,10 @@ export default defineConfig({ { "text": "Support push notifications", "link": "/inboxes/push-notifications" - } - ] - }, - { - text: "Build inboxes - V2/V3 Hybrid", - collapsed: true, - items: [ - { - text: "Get started", - collapsed: false, - items: [ - { - text: "Developer quickstart", - link: "/get-started/developer-quickstart", - }, - { - text: "SDKs and example apps", - link: "/get-started/examples", - }, - { - text: "SDK references", - link: "/get-started/references", - }, - ], - }, - { - text: "Create a client", - link: "/client/create-client", - }, - { - text: "Build 1:1 chat", - collapsed: true, - items: [ - { - text: "Create a 1:1 conversation", - link: "/dms/conversations", - }, - { - text: "Send 1:1 messages", - link: "/dms/messages", - }, - { - text: "Stream 1:1 conversations & messages", - link: "/dms/streams", - }, - ], - }, - { - text: "Build group chat", - collapsed: true, - items: [ - { - text: "Build group chat", - link: "/groups/build-group-chat", - }, - { - text: "Handle group consent", - link: "/groups/group-consent", - }, - { - text: "Handle group permissions", - link: "/groups/group-permissions", - }, - { - text: "Handle group metadata", - link: "/groups/group-metadata", - }, - ], - }, - { - text: "Build push notifications", - collapsed: true, - items: [ - { - text: "Send push notifications", - link: "/notifications/build-notifications", - }, - { - text: "Set up a push notification server", - link: "/notifications/notif-server", - }, - { - text: "Best practices", - link: "/notifications/notif-best-practices", - }, - { - text: "Try Android example notifications", - link: "/notifications/notifs-android", - }, - { - text: "Try iOS example notifications", - link: "/notifications/notifs-ios", - }, - ], - }, - { - text: "Support spam-free inboxes", - collapsed: true, - items: [ - { - text: "User consent and spam-free inboxes", - link: "/consent/user-consent", - }, - { - text: "Build with consent methods", - link: "/consent/consent-methods", - }, - { - text: "Handle unknown contacts", - link: "/consent/filter-spam", - }, - ], }, { - text: "Support content types", - collapsed: true, - items: [ - { - text: "Understand content types", - link: "/content-types/content-types", - }, - { - text: "Remote attachment", - link: "/content-types/remote-attachment", - }, - { - text: "Replies", - link: "/content-types/reply", - }, - { - text: "Reactions", - link: "/content-types/reaction", - }, - { - text: "Read receipts", - link: "/content-types/read-receipt", - }, - { - text: "Onchain transaction references", - link: "/content-types/transaction-ref", - }, - { - text: "Custom content type", - link: "/content-types/custom", - }, - ], - }, - { - text: "Display Open Frames", - collapsed: true, - items: [ - { - text: "Get started with Open Frames", - link: "/open-frames/open-frames", - }, - { - text: "Display transactional Open Frames", - link: "/open-frames/transactional-open-frames", - }, - { - text: "Display subscription Open Frames", - link: "/open-frames/subscription-open-frames", - }, - ], - }, - { - text: "Performance & UX", - collapsed: true, - items: [ - { - text: "Use local-first architecture", - link: "/perf-ux/local-first", - }, - { - text: "Use optimistic sending", - link: "/perf-ux/optimistic-sending", - }, - { - text: "Resolve identities", - link: "/perf-ux/identity-resolution", - }, - { - text: "Performance test", - link: "/perf-ux/debug-and-test", - }, - { - text: "Launch checklist", - link: "/perf-ux/get-featured", - }, - { - text: "MetaMask Snap", - link: "/perf-ux/xmtp-metamask-snap", - }, - ], - }, - { - text: "Troubleshoot", - link: "/dms/troubleshoot", + "text": "Support content types", + "link": "/inboxes/content-types", }, ], }, @@ -316,6 +122,10 @@ export default defineConfig({ text: "Learn protocol concepts", collapsed: true, items: [ + { + text: "Protocol spec ↗", + link: "https://github.com/xmtp/libxmtp/blob/main/xmtp_mls/README.md", + }, { text: "Account signatures", link: "/protocol/signatures", @@ -324,10 +134,6 @@ export default defineConfig({ text: "Security and encryption", link: "/protocol/security-encryption", }, - { - text: "Protocols", - link: "/protocol/protocols", - }, { text: "Multi-wallet identity", link: "/protocol/v3/identity", @@ -340,40 +146,10 @@ export default defineConfig({ text: "Smart wallet support", link: "/protocol/v3/smart-wallet", }, - { - text: "Portable inbox", - link: "/protocol/portable-inbox", - }, { text: "XIPs", link: "/protocol/xips", }, - { - text: "XMTP versions", - link: "/protocol/xmtp-versions", - }, - { - text: "XMTP V2", - collapsed: true, - items: [ - { - text: "Architecture", - link: "/protocol/v2/architectural-overview", - }, - { - text: "Key generation", - link: "/protocol/v2/key-generation-and-usage", - }, - { - text: "Encryption", - link: "/protocol/v2/invitation-and-message-encryption", - }, - { - text: "Algorithms in use", - link: "/protocol/v2/algorithms-in-use", - }, - ], - }, ], }, ], diff --git a/yarn.lock b/yarn.lock index 82ca0a9..8ed9a9f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,14 +2,19 @@ # yarn lockfile v1 +"@adraffy/ens-normalize@1.10.0": + version "1.10.0" + resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz" + integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== + "@alloc/quick-lru@^5.2.0": version "5.2.0" - resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" + resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== "@ampproject/remapping@^2.2.0": version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: "@jridgewell/gen-mapping" "^0.3.5" @@ -17,7 +22,7 @@ "@babel/code-frame@^7.24.7": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz" integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== dependencies: "@babel/highlight" "^7.24.7" @@ -25,12 +30,12 @@ "@babel/compat-data@^7.25.2": version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.2.tgz#e41928bd33475305c586f6acbbb7e3ade7a6f7f5" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz" integrity sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ== -"@babel/core@^7.20.7", "@babel/core@^7.23.9", "@babel/core@^7.24.5": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.20.7", "@babel/core@^7.23.9", "@babel/core@^7.24.5": version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz" integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== dependencies: "@ampproject/remapping" "^2.2.0" @@ -51,7 +56,7 @@ "@babel/generator@^7.25.0": version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz" integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== dependencies: "@babel/types" "^7.25.0" @@ -61,7 +66,7 @@ "@babel/helper-compilation-targets@^7.25.2": version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz" integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== dependencies: "@babel/compat-data" "^7.25.2" @@ -72,7 +77,7 @@ "@babel/helper-module-imports@^7.24.7": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz" integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== dependencies: "@babel/traverse" "^7.24.7" @@ -80,7 +85,7 @@ "@babel/helper-module-transforms@^7.25.2": version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz" integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== dependencies: "@babel/helper-module-imports" "^7.24.7" @@ -90,12 +95,12 @@ "@babel/helper-plugin-utils@^7.24.7": version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz" integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== "@babel/helper-simple-access@^7.24.7": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz" integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== dependencies: "@babel/traverse" "^7.24.7" @@ -103,22 +108,22 @@ "@babel/helper-string-parser@^7.24.8": version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz" integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== "@babel/helper-validator-identifier@^7.24.7": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== "@babel/helper-validator-option@^7.24.8": version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz" integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== "@babel/helpers@^7.25.0": version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz" integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== dependencies: "@babel/template" "^7.25.0" @@ -126,7 +131,7 @@ "@babel/highlight@^7.24.7": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz" integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== dependencies: "@babel/helper-validator-identifier" "^7.24.7" @@ -136,42 +141,42 @@ "@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3": version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz" integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== dependencies: "@babel/types" "^7.25.2" "@babel/plugin-syntax-typescript@^7.20.0": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz" integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-react-jsx-self@^7.24.5": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz#66bff0248ea0b549972e733516ffad577477bdab" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz" integrity sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-react-jsx-source@^7.24.1": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz#1198aab2548ad19582013815c938d3ebd8291ee3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz" integrity sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/runtime@^7.12.5": version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz" integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw== dependencies: regenerator-runtime "^0.14.0" "@babel/template@^7.25.0": version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz" integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== dependencies: "@babel/code-frame" "^7.24.7" @@ -180,7 +185,7 @@ "@babel/traverse@^7.24.7", "@babel/traverse@^7.25.2": version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz" integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== dependencies: "@babel/code-frame" "^7.24.7" @@ -193,7 +198,7 @@ "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2": version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz" integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== dependencies: "@babel/helper-string-parser" "^7.24.8" @@ -202,7 +207,7 @@ "@clack/core@^0.3.3": version "0.3.4" - resolved "https://registry.yarnpkg.com/@clack/core/-/core-0.3.4.tgz#375e82fc8fe46650b37cab2f2ea8752c6b7f0450" + resolved "https://registry.npmjs.org/@clack/core/-/core-0.3.4.tgz" integrity sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw== dependencies: picocolors "^1.0.0" @@ -210,263 +215,44 @@ "@clack/prompts@^0.7.0": version "0.7.0" - resolved "https://registry.yarnpkg.com/@clack/prompts/-/prompts-0.7.0.tgz#6aaef48ea803d91cce12bc80811cfcb8de2e75ea" + resolved "https://registry.npmjs.org/@clack/prompts/-/prompts-0.7.0.tgz" integrity sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA== dependencies: "@clack/core" "^0.3.3" + is-unicode-supported "*" picocolors "^1.0.0" sisteransi "^1.0.5" "@emotion/hash@^0.9.0": version "0.9.2" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz" integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== -"@esbuild/aix-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" - integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== - -"@esbuild/aix-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" - integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== - -"@esbuild/android-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" - integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== - -"@esbuild/android-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" - integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== - -"@esbuild/android-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" - integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== - -"@esbuild/android-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" - integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== - -"@esbuild/android-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" - integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== - -"@esbuild/android-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" - integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== - "@esbuild/darwin-arm64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz" integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== "@esbuild/darwin-arm64@0.21.5": version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz" integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== -"@esbuild/darwin-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" - integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== - -"@esbuild/darwin-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" - integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== - -"@esbuild/freebsd-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" - integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== - -"@esbuild/freebsd-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" - integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== - -"@esbuild/freebsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" - integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== - -"@esbuild/freebsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" - integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== - -"@esbuild/linux-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" - integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== - -"@esbuild/linux-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" - integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== - -"@esbuild/linux-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" - integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== - -"@esbuild/linux-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" - integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== - -"@esbuild/linux-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" - integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== - -"@esbuild/linux-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" - integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== - -"@esbuild/linux-loong64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" - integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== - -"@esbuild/linux-loong64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" - integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== - -"@esbuild/linux-mips64el@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" - integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== - -"@esbuild/linux-mips64el@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" - integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== - -"@esbuild/linux-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" - integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== - -"@esbuild/linux-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" - integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== - -"@esbuild/linux-riscv64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" - integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== - -"@esbuild/linux-riscv64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" - integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== - -"@esbuild/linux-s390x@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" - integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== - -"@esbuild/linux-s390x@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" - integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== - -"@esbuild/linux-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" - integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== - -"@esbuild/linux-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" - integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== - -"@esbuild/netbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" - integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== - -"@esbuild/netbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" - integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== - -"@esbuild/openbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" - integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== - -"@esbuild/openbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" - integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== - -"@esbuild/sunos-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" - integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== - -"@esbuild/sunos-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" - integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== - -"@esbuild/win32-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" - integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== - -"@esbuild/win32-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" - integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== - -"@esbuild/win32-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" - integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== - -"@esbuild/win32-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" - integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== - -"@esbuild/win32-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" - integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== - -"@esbuild/win32-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" - integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== - "@fastify/busboy@^2.0.0": version "2.1.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz" integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== "@floating-ui/core@^1.6.0": version "1.6.6" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.6.tgz#f6edf703c8acb73e3802cf558c88ddb7cddc4f67" + resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.6.tgz" integrity sha512-Vkvsw6EcpMHjvZZdMkSY+djMGFbt7CRssW99Ne8tar2WLnZ/l3dbxeTShbLQj+/s35h+Qb4cmnob+EzwtjrXGQ== dependencies: "@floating-ui/utils" "^0.2.6" "@floating-ui/dom@^1.0.0": version "1.6.9" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.9.tgz#7240f4fea0ff929a9d642f7572331d33dd2ee809" + resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.9.tgz" integrity sha512-zB1PcI350t4tkm3rvUhSRKa9sT7vH5CrAbQxW+VaPYJXKAO0gsg4CTueL+6Ajp7XzAQC8CW4Jj1Wgqc0sB6oUQ== dependencies: "@floating-ui/core" "^1.6.0" @@ -474,14 +260,14 @@ "@floating-ui/react-dom@^2.0.0", "@floating-ui/react-dom@^2.1.1": version "2.1.1" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.1.tgz#cca58b6b04fc92b4c39288252e285e0422291fb0" + resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz" integrity sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg== dependencies: "@floating-ui/dom" "^1.0.0" "@floating-ui/react@^0.26.6": version "0.26.21" - resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.21.tgz#29fe23a5197650d48eb1b05c5c46ff61df368fb6" + resolved "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.21.tgz" integrity sha512-7P5ncDIiYd6RrwpCDbKyFzvabM014QlzlumtDbK3Bck0UueC+Rp8BLS34qcGBcN1pZCTodl4QNnCVmKv4tSxfQ== dependencies: "@floating-ui/react-dom" "^2.1.1" @@ -490,17 +276,17 @@ "@floating-ui/utils@^0.2.6": version "0.2.6" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.6.tgz#1898a31c7e17a50384147a02a4e6264b1b1a0291" + resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.6.tgz" integrity sha512-0KI3zGxIUs1KDR/pjQPdJH4Z8nGBm0yJ5WRoRfdw1Kzeh45jkIfA0rmD0kBF6fKHH+xaH7g8y4jIXyAV5MGK3g== "@hono/node-server@^1.2.3": version "1.12.0" - resolved "https://registry.yarnpkg.com/@hono/node-server/-/node-server-1.12.0.tgz#e0a8e93811c96e3bb9fc29ba23915989bd477995" + resolved "https://registry.npmjs.org/@hono/node-server/-/node-server-1.12.0.tgz" integrity sha512-e6oHjNiErRxsZRZBmc2KucuvY3btlO/XPncIpP2X75bRdTilF9GLjm3NHvKKunpJbbJJj31/FoPTksTf8djAVw== "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -512,7 +298,7 @@ "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: "@jridgewell/set-array" "^1.2.1" @@ -521,22 +307,22 @@ "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" @@ -544,7 +330,7 @@ "@mdx-js/mdx@^3.0.0": version "3.0.1" - resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-3.0.1.tgz#617bd2629ae561fdca1bb88e3badd947f5a82191" + resolved "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz" integrity sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA== dependencies: "@types/estree" "^1.0.0" @@ -573,14 +359,14 @@ "@mdx-js/react@^3.0.0": version "3.0.1" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.0.1.tgz#997a19b3a5b783d936c75ae7c47cfe62f967f746" + resolved "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz" integrity sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A== dependencies: "@types/mdx" "^2.0.0" "@mdx-js/rollup@^3.0.0": version "3.0.1" - resolved "https://registry.yarnpkg.com/@mdx-js/rollup/-/rollup-3.0.1.tgz#1dee20f18880e29b5160cb2b22c27055f41aabe3" + resolved "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-3.0.1.tgz" integrity sha512-j0II91OCm4ld+l5QVgXXMQGxVVcAWIQJakYWi1dv5pefDHASJyCYER2TsdH7Alf958GoFSM7ugukWyvDq/UY4A== dependencies: "@mdx-js/mdx" "^3.0.0" @@ -588,27 +374,39 @@ source-map "^0.7.0" vfile "^6.0.0" -"@noble/hashes@^1.3.2": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" - integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== +"@noble/curves@~1.2.0", "@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/hashes@^1.3.2", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2", "@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/secp256k1@^1.7.1", "@noble/secp256k1@1.7.1": + version "1.7.1" + resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -616,32 +414,32 @@ "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz" integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== "@protobufjs/base64@^1.1.2": version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + resolved "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz" integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== "@protobufjs/codegen@^2.0.4": version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + resolved "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz" integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== "@protobufjs/eventemitter@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + resolved "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz" integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== "@protobufjs/fetch@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + resolved "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz" integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== dependencies: "@protobufjs/aspromise" "^1.1.1" @@ -649,42 +447,42 @@ "@protobufjs/float@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + resolved "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz" integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== "@protobufjs/inquire@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + resolved "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz" integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== "@protobufjs/path@^1.1.2": version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + resolved "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz" integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== "@protobufjs/pool@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + resolved "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz" integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== "@protobufjs/utf8@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== "@radix-ui/colors@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/colors/-/colors-3.0.0.tgz#e8a591a303c44e503bd1212cacf40a09511165e0" + resolved "https://registry.npmjs.org/@radix-ui/colors/-/colors-3.0.0.tgz" integrity sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg== "@radix-ui/primitive@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.0.tgz#42ef83b3b56dccad5d703ae8c42919a68798bbe2" + resolved "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz" integrity sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA== "@radix-ui/react-accordion@^1.1.2": version "1.2.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-accordion/-/react-accordion-1.2.0.tgz#aed0770fcb16285db992d81873ccd7a014c7f17d" + resolved "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.0.tgz" integrity sha512-HJOzSX8dQqtsp/3jVxCU3CXEONF7/2jlGAB28oX8TTw1Dz8JYbEI1UcL8355PuLBE41/IRRMvCw7VkiK/jcUOQ== dependencies: "@radix-ui/primitive" "1.1.0" @@ -699,14 +497,14 @@ "@radix-ui/react-arrow@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz#744f388182d360b86285217e43b6c63633f39e7a" + resolved "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz" integrity sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw== dependencies: "@radix-ui/react-primitive" "2.0.0" "@radix-ui/react-collapsible@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-collapsible/-/react-collapsible-1.1.0.tgz#4d49ddcc7b7d38f6c82f1fd29674f6fab5353e77" + resolved "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.0.tgz" integrity sha512-zQY7Epa8sTL0mq4ajSJpjgn2YmCgyrG7RsQgLp3C0LQVkG7+Tf6Pv1CeNWZLyqMjhdPkBa5Lx7wYBeSu7uCSTA== dependencies: "@radix-ui/primitive" "1.1.0" @@ -720,7 +518,7 @@ "@radix-ui/react-collection@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.0.tgz#f18af78e46454a2360d103c2251773028b7724ed" + resolved "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz" integrity sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw== dependencies: "@radix-ui/react-compose-refs" "1.1.0" @@ -730,17 +528,17 @@ "@radix-ui/react-compose-refs@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz#656432461fc8283d7b591dcf0d79152fae9ecc74" + resolved "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz" integrity sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw== "@radix-ui/react-context@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.0.tgz#6df8d983546cfd1999c8512f3a8ad85a6e7fcee8" + resolved "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz" integrity sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A== "@radix-ui/react-dialog@^1.0.5": version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.1.tgz#4906507f7b4ad31e22d7dad69d9330c87c431d44" + resolved "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.1.tgz" integrity sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg== dependencies: "@radix-ui/primitive" "1.1.0" @@ -760,12 +558,12 @@ "@radix-ui/react-direction@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc" + resolved "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz" integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg== "@radix-ui/react-dismissable-layer@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz#2cd0a49a732372513733754e6032d3fb7988834e" + resolved "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz" integrity sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig== dependencies: "@radix-ui/primitive" "1.1.0" @@ -776,12 +574,12 @@ "@radix-ui/react-focus-guards@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz#8e9abb472a9a394f59a1b45f3dd26cfe3fc6da13" + resolved "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz" integrity sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw== "@radix-ui/react-focus-scope@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz#ebe2891a298e0a33ad34daab2aad8dea31caf0b2" + resolved "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz" integrity sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA== dependencies: "@radix-ui/react-compose-refs" "1.1.0" @@ -790,26 +588,26 @@ "@radix-ui/react-icons@^1.3.0": version "1.3.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-icons/-/react-icons-1.3.0.tgz#c61af8f323d87682c5ca76b856d60c2312dbcb69" + resolved "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz" integrity sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw== "@radix-ui/react-id@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.0.tgz#de47339656594ad722eb87f94a6b25f9cffae0ed" + resolved "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz" integrity sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA== dependencies: "@radix-ui/react-use-layout-effect" "1.1.0" "@radix-ui/react-label@^2.0.2": version "2.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-label/-/react-label-2.1.0.tgz#3aa2418d70bb242be37c51ff5e51a2adcbc372e3" + resolved "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.0.tgz" integrity sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw== dependencies: "@radix-ui/react-primitive" "2.0.0" "@radix-ui/react-navigation-menu@^1.1.4": version "1.2.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.0.tgz#884c9b9fd141cc5db257bd3f6bf3b84e349c6617" + resolved "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.0.tgz" integrity sha512-OQ8tcwAOR0DhPlSY3e4VMXeHiol7la4PPdJWhhwJiJA+NLX0SaCaonOkRnI3gCDHoZ7Fo7bb/G6q25fRM2Y+3Q== dependencies: "@radix-ui/primitive" "1.1.0" @@ -829,7 +627,7 @@ "@radix-ui/react-popover@^1.0.7": version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-popover/-/react-popover-1.1.1.tgz#604b783cdb3494ed4f16a58c17f0e81e61ab7775" + resolved "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.1.tgz" integrity sha512-3y1A3isulwnWhvTTwmIreiB8CF4L+qRjZnK1wYLO7pplddzXKby/GnZ2M7OZY3qgnl6p9AodUIHRYGXNah8Y7g== dependencies: "@radix-ui/primitive" "1.1.0" @@ -850,7 +648,7 @@ "@radix-ui/react-popper@1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.0.tgz#a3e500193d144fe2d8f5d5e60e393d64111f2a7a" + resolved "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz" integrity sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg== dependencies: "@floating-ui/react-dom" "^2.0.0" @@ -866,7 +664,7 @@ "@radix-ui/react-portal@1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.1.tgz#1957f1eb2e1aedfb4a5475bd6867d67b50b1d15f" + resolved "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz" integrity sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g== dependencies: "@radix-ui/react-primitive" "2.0.0" @@ -874,7 +672,7 @@ "@radix-ui/react-presence@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.0.tgz#227d84d20ca6bfe7da97104b1a8b48a833bfb478" + resolved "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz" integrity sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ== dependencies: "@radix-ui/react-compose-refs" "1.1.0" @@ -882,14 +680,14 @@ "@radix-ui/react-primitive@2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz#fe05715faa9203a223ccc0be15dc44b9f9822884" + resolved "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz" integrity sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw== dependencies: "@radix-ui/react-slot" "1.1.0" "@radix-ui/react-roving-focus@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz#b30c59daf7e714c748805bfe11c76f96caaac35e" + resolved "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz" integrity sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA== dependencies: "@radix-ui/primitive" "1.1.0" @@ -904,14 +702,14 @@ "@radix-ui/react-slot@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.0.tgz#7c5e48c36ef5496d97b08f1357bb26ed7c714b84" + resolved "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz" integrity sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw== dependencies: "@radix-ui/react-compose-refs" "1.1.0" "@radix-ui/react-tabs@^1.0.4": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-1.1.0.tgz#0a6db1caed56776a1176aae68532060e301cc1c0" + resolved "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.0.tgz" integrity sha512-bZgOKB/LtZIij75FSuPzyEti/XBhJH52ExgtdVqjCIh+Nx/FW+LhnbXtbCzIi34ccyMsyOja8T0thCzoHFXNKA== dependencies: "@radix-ui/primitive" "1.1.0" @@ -925,163 +723,110 @@ "@radix-ui/react-use-callback-ref@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1" + resolved "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz" integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw== "@radix-ui/react-use-controllable-state@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz#1321446857bb786917df54c0d4d084877aab04b0" + resolved "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz" integrity sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw== dependencies: "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-use-escape-keydown@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz#31a5b87c3b726504b74e05dac1edce7437b98754" + resolved "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz" integrity sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw== dependencies: "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-use-layout-effect@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz#3c2c8ce04827b26a39e442ff4888d9212268bd27" + resolved "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz" integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w== "@radix-ui/react-use-previous@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz#d4dd37b05520f1d996a384eb469320c2ada8377c" + resolved "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz" integrity sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og== "@radix-ui/react-use-rect@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz#13b25b913bd3e3987cc9b073a1a164bb1cf47b88" + resolved "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz" integrity sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ== dependencies: "@radix-ui/rect" "1.1.0" "@radix-ui/react-use-size@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz#b4dba7fbd3882ee09e8d2a44a3eed3a7e555246b" + resolved "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz" integrity sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw== dependencies: "@radix-ui/react-use-layout-effect" "1.1.0" "@radix-ui/react-visually-hidden@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz#ad47a8572580f7034b3807c8e6740cd41038a5a2" + resolved "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz" integrity sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ== dependencies: "@radix-ui/react-primitive" "2.0.0" "@radix-ui/rect@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.0.tgz#f817d1d3265ac5415dadc67edab30ae196696438" + resolved "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz" integrity sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg== "@remix-run/router@1.19.0": version "1.19.0" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.19.0.tgz#745dbffbce67f05386d57ca22c51dfd85c979593" + resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.19.0.tgz" integrity sha512-zDICCLKEwbVYTS6TjYaWtHXxkdoUvD/QXvyVZjGCsWz5vyH7aFeONlPffPdW+Y/t6KT0MgXb2Mfjun9YpWN1dA== "@rollup/pluginutils@^5.0.0": version "5.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz" integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== dependencies: "@types/estree" "^1.0.0" estree-walker "^2.0.2" picomatch "^2.3.1" -"@rollup/rollup-android-arm-eabi@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz#c3f5660f67030c493a981ac1d34ee9dfe1d8ec0f" - integrity sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA== - -"@rollup/rollup-android-arm64@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz#64161f0b67050023a3859e723570af54a82cff5c" - integrity sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ== - "@rollup/rollup-darwin-arm64@4.20.0": version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz#25f3d57b1da433097cfebc89341b355901615763" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz" integrity sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q== -"@rollup/rollup-darwin-x64@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz#d8ddaffb636cc2f59222c50316e27771e48966df" - integrity sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ== - -"@rollup/rollup-linux-arm-gnueabihf@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz#41bd4fcffa20fb84f3dbac6c5071638f46151885" - integrity sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA== - -"@rollup/rollup-linux-arm-musleabihf@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz#842077c5113a747eb5686f19f2f18c33ecc0acc8" - integrity sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw== - -"@rollup/rollup-linux-arm64-gnu@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz#65d1d5b6778848f55b7823958044bf3e8737e5b7" - integrity sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ== - -"@rollup/rollup-linux-arm64-musl@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz#50eef7d6e24d0fe3332200bb666cad2be8afcf86" - integrity sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q== - -"@rollup/rollup-linux-powerpc64le-gnu@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz#8837e858f53c84607f05ad0602943e96d104c6b4" - integrity sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw== - -"@rollup/rollup-linux-riscv64-gnu@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz#c894ade2300caa447757ddf45787cca246e816a4" - integrity sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA== - -"@rollup/rollup-linux-s390x-gnu@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz#5841e5390d4c82dd5cdf7b2c95a830e3c2f47dd3" - integrity sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg== - -"@rollup/rollup-linux-x64-gnu@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz#cc1f26398bf777807a99226dc13f47eb0f6c720d" - integrity sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew== - -"@rollup/rollup-linux-x64-musl@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz#1507465d9056e0502a590d4c1a00b4d7b1fda370" - integrity sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg== - -"@rollup/rollup-win32-arm64-msvc@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz#86a221f01a2c248104dd0defb4da119f2a73642e" - integrity sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA== +"@scure/base@~1.1.0", "@scure/base@~1.1.2": + version "1.1.7" + resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.7.tgz" + integrity sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g== -"@rollup/rollup-win32-ia32-msvc@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz#8bc8f77e02760aa664694b4286d6fbea7f1331c5" - integrity sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A== +"@scure/bip32@1.3.2": + version "1.3.2" + resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz" + integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA== + dependencies: + "@noble/curves" "~1.2.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.2" -"@rollup/rollup-win32-x64-msvc@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz#601fffee719a1e8447f908aca97864eec23b2784" - integrity sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg== +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" "@shikijs/core@1.12.1": version "1.12.1" - resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.12.1.tgz#32626494bef573cce01f9e0a36d5776cbc1b2e58" + resolved "https://registry.npmjs.org/@shikijs/core/-/core-1.12.1.tgz" integrity sha512-biCz/mnkMktImI6hMfMX3H9kOeqsInxWEyCHbSlL8C/2TR1FqfmGxTLRNwYCKsyCyxWLbB8rEqXRVZuyxuLFmA== dependencies: "@types/hast" "^3.0.4" "@shikijs/rehype@^1.10.3": version "1.12.1" - resolved "https://registry.yarnpkg.com/@shikijs/rehype/-/rehype-1.12.1.tgz#79dfea048abd217e34318e98c4f2399120438d6e" + resolved "https://registry.npmjs.org/@shikijs/rehype/-/rehype-1.12.1.tgz" integrity sha512-AZLC80TIiRWFwPbSqdwykeSeMjQwYWlkX8yfI7T4nan0qgWfvv/oP7C767JQ8USudEylbe5KzBdE8Ao2sHsidA== dependencies: "@shikijs/transformers" "1.12.1" @@ -1091,16 +836,16 @@ unified "^11.0.5" unist-util-visit "^5.0.0" -"@shikijs/transformers@1.12.1", "@shikijs/transformers@^1.10.3": +"@shikijs/transformers@^1.10.3", "@shikijs/transformers@1.12.1": version "1.12.1" - resolved "https://registry.yarnpkg.com/@shikijs/transformers/-/transformers-1.12.1.tgz#8aedda6f038636662666c771dbb13296084fce34" + resolved "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.12.1.tgz" integrity sha512-zOpj/S2thBvnJV4Ty3EE8aRs/VqCbV+lgtEYeBRkPxTW22uLADEIZq0qjt5W2Rfy2KSu29e73nRyzp4PefjUTg== dependencies: shiki "1.12.1" "@shikijs/twoslash@^1.10.3": version "1.12.1" - resolved "https://registry.yarnpkg.com/@shikijs/twoslash/-/twoslash-1.12.1.tgz#b358c8e6ef39d75c2daca5e00c8e6083d653c35c" + resolved "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-1.12.1.tgz" integrity sha512-k4D6sC9p9GksbHa4RnB1VkQIZtQ+L7nQMqi/YAxEgTKZF5v7IW6dHak0Z7bvZXrfhle36NIqWMJXz5xDexupvw== dependencies: "@shikijs/core" "1.12.1" @@ -1108,14 +853,14 @@ "@types/acorn@^4.0.0": version "4.0.6" - resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22" + resolved "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz" integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ== dependencies: "@types/estree" "*" "@types/babel__core@^7.20.5": version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz" integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" @@ -1126,14 +871,14 @@ "@types/babel__generator@*": version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz" integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": version "7.4.4" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz" integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" @@ -1141,69 +886,69 @@ "@types/babel__traverse@*": version "7.20.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz" integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== dependencies: "@babel/types" "^7.20.7" "@types/debug@^4.0.0": version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== dependencies: "@types/ms" "*" "@types/estree-jsx@^1.0.0": version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" + resolved "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz" integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== dependencies: "@types/estree" "*" -"@types/estree@*", "@types/estree@1.0.5", "@types/estree@^1.0.0": +"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@1.0.5": version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/hast@^3.0.0", "@types/hast@^3.0.4": version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + resolved "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz" integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== dependencies: "@types/unist" "*" "@types/mdast@^4.0.0": version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz" integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== dependencies: "@types/unist" "*" "@types/mdx@^2.0.0": version "2.0.13" - resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd" + resolved "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz" integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== "@types/ms@*": version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz" integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== -"@types/node@*", "@types/node@>=13.7.0": +"@types/node@*", "@types/node@^18.0.0 || >=20.0.0", "@types/node@>=13.7.0": version "22.1.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.1.0.tgz#6d6adc648b5e03f0e83c78dc788c2b037d0ad94b" + resolved "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz" integrity sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw== dependencies: undici-types "~6.13.0" "@types/prop-types@*": version "15.7.12" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz" integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== -"@types/react@latest": +"@types/react@*", "@types/react@^16.8.0 || ^17.0.0 || ^18.0.0", "@types/react@^16.9.0 || ^17.0.0 || ^18.0.0", "@types/react@>=16", "@types/react@latest": version "18.3.3" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" + resolved "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz" integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== dependencies: "@types/prop-types" "*" @@ -1211,36 +956,36 @@ "@types/unist@*", "@types/unist@^3.0.0": version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.2.tgz#6dd61e43ef60b34086287f83683a5c1b2dc53d20" + resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz" integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ== "@types/unist@^2.0.0": version "2.0.10" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" + resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz" integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== "@typescript/vfs@1.5.0": version "1.5.0" - resolved "https://registry.yarnpkg.com/@typescript/vfs/-/vfs-1.5.0.tgz#ed942922724f9ace8c07c80b006c47e5e3833218" + resolved "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.5.0.tgz" integrity sha512-AJS307bPgbsZZ9ggCT3wwpg3VbTKMFNHfaY/uF0ahSkYYrPF2dSSKDNIDIQAHm9qJqbLvCsSJH7yN4Vs/CsMMg== dependencies: debug "^4.1.1" "@ungap/structured-clone@^1.0.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== "@vanilla-extract/babel-plugin-debug-ids@^1.0.4": version "1.0.6" - resolved "https://registry.yarnpkg.com/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.6.tgz#e9033b5fb97c1b13066cec701f42e753373c2516" + resolved "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.6.tgz" integrity sha512-C188vUEYmw41yxg3QooTs8r1IdbDQQ2mH7L5RkORBnHx74QlmsNfqVmKwAVTgrlYt8JoRaWMtPfGm/Ql0BNQrA== dependencies: "@babel/core" "^7.23.9" "@vanilla-extract/css@^1.14.0": version "1.15.3" - resolved "https://registry.yarnpkg.com/@vanilla-extract/css/-/css-1.15.3.tgz#debf04f61496e290b53f045a2cb6966cc1ba9448" + resolved "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.15.3.tgz" integrity sha512-mxoskDAxdQAspbkmQRxBvolUi1u1jnyy9WZGm+GeH8V2wwhEvndzl1QoK7w8JfA0WFevTxbev5d+i+xACZlPhA== dependencies: "@emotion/hash" "^0.9.0" @@ -1257,14 +1002,14 @@ "@vanilla-extract/dynamic@^2.1.0": version "2.1.1" - resolved "https://registry.yarnpkg.com/@vanilla-extract/dynamic/-/dynamic-2.1.1.tgz#bc93a577b127a7dcb6f254973d13a863029a7faf" + resolved "https://registry.npmjs.org/@vanilla-extract/dynamic/-/dynamic-2.1.1.tgz" integrity sha512-iqf736036ujEIKsIq28UsBEMaLC2vR2DhwKyrG3NDb/fRy9qL9FKl1TqTtBV4daU30Uh3saeik4vRzN8bzQMbw== dependencies: "@vanilla-extract/private" "^1.0.5" "@vanilla-extract/integration@^6.3.0": version "6.5.0" - resolved "https://registry.yarnpkg.com/@vanilla-extract/integration/-/integration-6.5.0.tgz#613407565b07dc60b123ca9080ea3f47cd2ce7bb" + resolved "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-6.5.0.tgz" integrity sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ== dependencies: "@babel/core" "^7.20.7" @@ -1283,12 +1028,12 @@ "@vanilla-extract/private@^1.0.5": version "1.0.5" - resolved "https://registry.yarnpkg.com/@vanilla-extract/private/-/private-1.0.5.tgz#8c08ac4851f4cc89a3dcdb858d8938e69b1481c4" + resolved "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.5.tgz" integrity sha512-6YXeOEKYTA3UV+RC8DeAjFk+/okoNz/h88R+McnzA2zpaVqTR/Ep+vszkWYlGBcMNO7vEkqbq5nT/JMMvhi+tw== "@vanilla-extract/vite-plugin@^3.9.4": version "3.9.5" - resolved "https://registry.yarnpkg.com/@vanilla-extract/vite-plugin/-/vite-plugin-3.9.5.tgz#d9986111001778f52a36d1f9710a11f3aa6d2c4d" + resolved "https://registry.npmjs.org/@vanilla-extract/vite-plugin/-/vite-plugin-3.9.5.tgz" integrity sha512-CWI/CtrVW6i3HKccI6T7uGQkTJ8bd8Xl2UMBg3Pkr7dwWMmavXTeucV0I9KSbmXaYXSbEj+Q8c9y0xAZwtmTig== dependencies: "@vanilla-extract/integration" "^6.3.0" @@ -1296,9 +1041,9 @@ postcss "^8.3.6" postcss-load-config "^4.0.1" -"@vitejs/plugin-react@4.3.1", "@vitejs/plugin-react@^4.3.1": +"@vitejs/plugin-react@^4.3.1", "@vitejs/plugin-react@4.3.1": version "4.3.1" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz#d0be6594051ded8957df555ff07a991fb618b48e" + resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz" integrity sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg== dependencies: "@babel/core" "^7.24.5" @@ -1307,23 +1052,56 @@ "@types/babel__core" "^7.20.5" react-refresh "^0.14.2" +"@xmtp/consent-proof-signature@^0.1.3": + version "0.1.3" + resolved "https://registry.npmjs.org/@xmtp/consent-proof-signature/-/consent-proof-signature-0.1.3.tgz" + integrity sha512-2uTKOd7ov6QnDgCFNnL+4Hx9osxRLSpdBNrbpKauWp8/qrrMEe6yBwFRNq40ieElo1mo1usB8DbhSH0jalcIdw== + dependencies: + "@xmtp/proto" "3.56.0" + long "^5.2.3" + "@xmtp/content-type-primitives@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@xmtp/content-type-primitives/-/content-type-primitives-1.0.1.tgz#b0bc4b900ad5b6777f4f35cae60511c1d0c9c3ab" + resolved "https://registry.npmjs.org/@xmtp/content-type-primitives/-/content-type-primitives-1.0.1.tgz" integrity sha512-F/2/yh0UQZb49tuxszTIbH+TDNJhTgSlj3UX8YOevMaMpIAvY26qjIA35M8Bw0nng3aU/iYqFA1p3ZO/7rM9Qw== dependencies: "@xmtp/proto" "^3.61.1" +"@xmtp/content-type-reaction@^1.1.7": + version "1.1.9" + resolved "https://registry.npmjs.org/@xmtp/content-type-reaction/-/content-type-reaction-1.1.9.tgz" + integrity sha512-/3qN/jNaxb7pYocD9NqmtHLJGe5bD+jmaOSa1LJIIPhhTXAanFbdScb1JzYQHBonyYsOT+hA4bGLjcpWHIYH/w== + dependencies: + "@xmtp/content-type-primitives" "^1.0.1" + +"@xmtp/content-type-remote-attachment@^1.1.8": + version "1.1.9" + resolved "https://registry.npmjs.org/@xmtp/content-type-remote-attachment/-/content-type-remote-attachment-1.1.9.tgz" + integrity sha512-4/SapFdSOSRCbJTsDx0Z1AO2GpfnfL5hXSEcFHDCVw++zLTObKLRWTwaSRJeI49PLFjYgZPdwSvHkw8hfOSm0A== + dependencies: + "@noble/secp256k1" "^1.7.1" + "@xmtp/content-type-primitives" "^1.0.1" + "@xmtp/proto" "^3.61.1" + "@xmtp/xmtp-js" "^11.6.3" + +"@xmtp/content-type-reply@^1.1.9": + version "1.1.11" + resolved "https://registry.npmjs.org/@xmtp/content-type-reply/-/content-type-reply-1.1.11.tgz" + integrity sha512-6VPW/N6n0a5FIN+9QB6KuouO5KzmLLC7+K6lo1sgQO4mhkbQKocLHN62s9hWYDYpxvD7agH+AE7XcBrRm3yhDA== + dependencies: + "@xmtp/content-type-primitives" "^1.0.1" + "@xmtp/proto" "^3.61.1" + "@xmtp/content-type-text@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@xmtp/content-type-text/-/content-type-text-1.0.0.tgz#2162862231e8120d21856fce01159fdef4d8601b" + resolved "https://registry.npmjs.org/@xmtp/content-type-text/-/content-type-text-1.0.0.tgz" integrity sha512-mXkgDHw327SjFoGqV57w/xgZADq2doKZg3eF26Di7NQ9IGvi1LKPVMhwif4xLdA5duR+GZuhsSszkTllim6vug== dependencies: "@xmtp/content-type-primitives" "^1.0.1" -"@xmtp/proto@^3.61.1": +"@xmtp/proto@^3.61.1", "@xmtp/proto@^3.62.1": version "3.65.0" - resolved "https://registry.yarnpkg.com/@xmtp/proto/-/proto-3.65.0.tgz#6d5e4bfb8bfbfe843bf73f5131faf3b2cbe0516a" + resolved "https://registry.npmjs.org/@xmtp/proto/-/proto-3.65.0.tgz" integrity sha512-5DeU7uM/M4gCDn3370SZUvyC9BDztZPRLZBYfWo6HTn/vU9T4YJFBFCS8KjiJdpd2F/1nR01TnbjgJntkLN5pw== dependencies: long "^5.2.0" @@ -1331,9 +1109,29 @@ rxjs "^7.8.0" undici "^5.8.1" +"@xmtp/proto@3.54.0": + version "3.54.0" + resolved "https://registry.npmjs.org/@xmtp/proto/-/proto-3.54.0.tgz" + integrity sha512-X0jDRR19/tH0qRB8mM/H/vBueQAK22VZF4QUnDN7TgnbNaOYL5DvSmPfXFH+xzeGKQ5S0zgwc+qFJbI4xoKNHw== + dependencies: + long "^5.2.0" + protobufjs "^7.0.0" + rxjs "^7.8.0" + undici "^5.8.1" + +"@xmtp/proto@3.56.0": + version "3.56.0" + resolved "https://registry.npmjs.org/@xmtp/proto/-/proto-3.56.0.tgz" + integrity sha512-zW8/s7x9je0keYjJpu/c5zmYK5wE14MxcDWLkxzMwRmrajwdy69BNN0NgVJ1uBzMUqGTjnGQJANDev8lpa58qQ== + dependencies: + long "^5.2.0" + protobufjs "^7.0.0" + rxjs "^7.8.0" + undici "^5.8.1" + "@xmtp/react-sdk@^8.0.1": version "8.0.1" - resolved "https://registry.yarnpkg.com/@xmtp/react-sdk/-/react-sdk-8.0.1.tgz#2992bc6d76ef5de6c0517924624c4928e56d00bc" + resolved "https://registry.npmjs.org/@xmtp/react-sdk/-/react-sdk-8.0.1.tgz" integrity sha512-OAqb4CHjzL4rvFFX2zzh0qklPo0LNOYWuT67/tfh4esEsV+jVF3/nh2DVgUvhggjnYojqqxUSs+RafSpt5JDIg== dependencies: "@xmtp/content-type-primitives" "^1.0.1" @@ -1345,9 +1143,49 @@ uuid "^10.0.0" zod "^3.23.8" +"@xmtp/user-preferences-bindings-wasm@^0.3.6": + version "0.3.6" + resolved "https://registry.npmjs.org/@xmtp/user-preferences-bindings-wasm/-/user-preferences-bindings-wasm-0.3.6.tgz" + integrity sha512-ANi6ikrO6YBaK978sMuEEnpREvFQQnMVaNdlviaLzmc07u4Of4s/VLNnavl4qTb4F4cvwSiBWou0wSYIE5SWYg== + +"@xmtp/xmtp-js@^11.6.3": + version "11.6.3" + resolved "https://registry.npmjs.org/@xmtp/xmtp-js/-/xmtp-js-11.6.3.tgz" + integrity sha512-Bp34Cl6/Ku3gylmQegRWgc2BX20+OD4k6fMWbEoLFKcNxkA0j8XV8Ml7IQ7C+4pyVtrlDA0at33LvmuRd6owsQ== + dependencies: + "@noble/secp256k1" "1.7.1" + "@xmtp/consent-proof-signature" "^0.1.3" + "@xmtp/proto" "3.54.0" + "@xmtp/user-preferences-bindings-wasm" "^0.3.6" + async-mutex "^0.5.0" + elliptic "^6.5.4" + long "^5.2.3" + viem "2.7.15" + +"@xmtp/xmtp-js@^12.1.0": + version "12.1.0" + resolved "https://registry.npmjs.org/@xmtp/xmtp-js/-/xmtp-js-12.1.0.tgz" + integrity sha512-4lekqPYugQaOujxmiplpotkJmU56zKz5Cxx+Zh9aqUeq+C3lPvLtcEKdlDBTWlt0ehfocYZ8R7Q3J6VXMUzE2A== + dependencies: + "@noble/secp256k1" "1.7.1" + "@xmtp/consent-proof-signature" "^0.1.3" + "@xmtp/content-type-primitives" "^1.0.1" + "@xmtp/content-type-text" "^1.0.0" + "@xmtp/proto" "^3.62.1" + "@xmtp/user-preferences-bindings-wasm" "^0.3.6" + async-mutex "^0.5.0" + elliptic "^6.5.5" + long "^5.2.3" + viem "2.7.15" + +abitype@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/abitype/-/abitype-1.0.0.tgz" + integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== + accepts@~1.3.5: version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -1355,51 +1193,51 @@ accepts@~1.3.5: acorn-jsx@^5.0.0: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.0.0, acorn@^8.11.3: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.0.0, acorn@^8.11.3: version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz" integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^6.1.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== any-promise@^1.0.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -1407,31 +1245,31 @@ anymatch@~3.1.2: arg@^5.0.2: version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== aria-hidden@^1.1.1: version "1.2.4" - resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522" + resolved "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz" integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== dependencies: tslib "^2.0.0" astring@^1.8.0: version "1.8.6" - resolved "https://registry.yarnpkg.com/astring/-/astring-1.8.6.tgz#2c9c157cf1739d67561c56ba896e6948f6b93731" + resolved "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz" integrity sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg== async-mutex@^0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.5.0.tgz#353c69a0b9e75250971a64ac203b0ebfddd75482" + resolved "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz" integrity sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA== dependencies: tslib "^2.4.0" autoprefixer@^10.4.16: version "10.4.20" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz" integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== dependencies: browserslist "^4.23.3" @@ -1443,60 +1281,70 @@ autoprefixer@^10.4.16: bail@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + resolved "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz" integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== bcp-47-match@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/bcp-47-match/-/bcp-47-match-2.0.3.tgz#603226f6e5d3914a581408be33b28a53144b09d0" + resolved "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz" integrity sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ== binary-extensions@^2.0.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bl@^5.0.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" + resolved "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz" integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== dependencies: buffer "^6.0.3" inherits "^2.0.4" readable-stream "^3.4.0" +bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + boolbase@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.3, braces@~3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" -browserslist@^4.23.1, browserslist@^4.23.3: +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browserslist@^4.23.1, browserslist@^4.23.3, "browserslist@>= 4.21.0": version "4.23.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz" integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== dependencies: caniuse-lite "^1.0.30001646" @@ -1506,7 +1354,7 @@ browserslist@^4.23.1, browserslist@^4.23.3: buffer@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -1514,66 +1362,71 @@ buffer@^6.0.3: bytes@3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== cac@^6.7.14: version "6.7.14" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== camelcase-css@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== caniuse-lite@^1.0.30001646: version "1.0.30001649" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001649.tgz#3ec700309ca0da2b0d3d5fb03c411b191761c992" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001649.tgz" integrity sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ== ccount@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + resolved "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz" integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== chalk@^2.4.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^5.0.0, chalk@^5.3.0: +chalk@^5.0.0: + version "5.3.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + +chalk@^5.3.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== character-entities-html4@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + resolved "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz" integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== character-entities-legacy@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz" integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== character-entities@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + resolved "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz" integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== character-reference-invalid@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz" integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== chokidar@^3.5.3: version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" @@ -1588,75 +1441,75 @@ chokidar@^3.5.3: chroma-js@^2.4.2: version "2.6.0" - resolved "https://registry.yarnpkg.com/chroma-js/-/chroma-js-2.6.0.tgz#578743dd359698a75067a19fa5571dec54d0b70b" + resolved "https://registry.npmjs.org/chroma-js/-/chroma-js-2.6.0.tgz" integrity sha512-BLHvCB9s8Z1EV4ethr6xnkl/P2YRFOGqfgvuMG/MyCbZPrTA+NeiByY6XvgF0zP4/2deU2CXnWyMa3zu1LqQ3A== cli-cursor@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz" integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== dependencies: restore-cursor "^4.0.0" cli-spinners@^2.9.0: version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== clsx@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== collapse-white-space@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-2.1.0.tgz#640257174f9f42c740b40f3b55ee752924feefca" + resolved "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz" integrity sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + comma-separated-tokens@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== commander@^4.0.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== compressible@~2.0.16: version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" compression@^1.7.4: version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: accepts "~1.3.5" @@ -1669,17 +1522,17 @@ compression@^1.7.4: confbox@^0.1.7: version "0.1.7" - resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.7.tgz#ccfc0a2bcae36a84838e83a3b7f770fb17d6c579" + resolved "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz" integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== convert-source-map@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== create-vocs@^1.0.0-alpha.4: version "1.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/create-vocs/-/create-vocs-1.0.0-alpha.5.tgz#fd1c1767ac4c6a0660fcf969e748ad876c13e02b" + resolved "https://registry.npmjs.org/create-vocs/-/create-vocs-1.0.0-alpha.5.tgz" integrity sha512-/Nr9taHX1SxL5t72DLFPYujqD8d5PDk0T8bJ9Fb/m7ck1lP20PBxHzF5IYnHI0BeTpIuGk/MQoLfT6JKpY6xnw== dependencies: "@clack/prompts" "^0.7.0" @@ -1690,7 +1543,7 @@ create-vocs@^1.0.0-alpha.4: cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -1699,169 +1552,182 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.3: css-selector-parser@^3.0.0: version "3.0.5" - resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-3.0.5.tgz#9b636ebccf7c4bcce5c1ac21ae27de9f01180ae9" + resolved "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.0.5.tgz" integrity sha512-3itoDFbKUNx1eKmVpYMFyqKX04Ww9osZ+dLgrk6GEv6KMVeXUhUnp4I5X+evw+u3ZxVU6RFXSSRxlTeMh8bA+g== css-what@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== csstype@^3.0.2, csstype@^3.0.7: version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== date-fns@^3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.6.0.tgz#f20ca4fe94f8b754951b24240676e8618c0206bf" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz" integrity sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww== -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4: version "4.3.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz" integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== dependencies: ms "2.1.2" +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + decode-named-character-reference@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz" integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== dependencies: character-entities "^2.0.0" dedent@^1.5.3: version "1.5.3" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz" integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== deep-object-diff@^1.1.9: version "1.1.9" - resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.9.tgz#6df7ef035ad6a0caa44479c536ed7b02570f4595" + resolved "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz" integrity sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA== deepmerge@^4.2.2: version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== depd@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== dequal@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== destroy@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-node-es@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" + resolved "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz" integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== detect-package-manager@^3.0.1: version "3.0.2" - resolved "https://registry.yarnpkg.com/detect-package-manager/-/detect-package-manager-3.0.2.tgz#ca34261ab84198072580e93ae86582c575428da9" + resolved "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-3.0.2.tgz" integrity sha512-8JFjJHutStYrfWwzfretQoyNGoZVW1Fsrp4JO9spa7h/fBfwgTMEIy4/LBzRDGsxwVPHU0q+T9YvwLDJoOApLQ== dependencies: execa "^5.1.1" devlop@^1.0.0, devlop@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + resolved "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz" integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== dependencies: dequal "^2.0.0" dexie-react-hooks@^1.1.7: version "1.1.7" - resolved "https://registry.yarnpkg.com/dexie-react-hooks/-/dexie-react-hooks-1.1.7.tgz#75bd92a609a7c3dc3643e2fd21e7db5df6df923b" + resolved "https://registry.npmjs.org/dexie-react-hooks/-/dexie-react-hooks-1.1.7.tgz" integrity sha512-Lwv5W0Hk+uOW3kGnsU9GZoR1er1B7WQ5DSdonoNG+focTNeJbHW6vi6nBoX534VKI3/uwHebYzSw1fwY6a7mTw== -dexie@^4.0.8: +"dexie@^3.2 || ^4.0.1-alpha", dexie@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/dexie/-/dexie-4.0.8.tgz#21fca70686bdaa1d86fad45b6b19316f6a084a1d" + resolved "https://registry.npmjs.org/dexie/-/dexie-4.0.8.tgz" integrity sha512-1G6cJevS17KMDK847V3OHvK2zei899GwpDiqfEXHP1ASvme6eWJmAp9AU4s1son2TeGkWmC0g3y8ezOBPnalgQ== didyoumean@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" direction@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/direction/-/direction-2.0.1.tgz#71800dd3c4fa102406502905d3866e65bdebb985" + resolved "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz" integrity sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA== dlv@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== ee-first@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.5.tgz#03bfdf422bdd2c05ee2657efedde21264a1a566b" - integrity sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA== + version "1.5.4" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz" + integrity sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA== + +elliptic@^6.5.4, elliptic@^6.5.5: + version "6.5.6" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.6.tgz" + integrity sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" emoji-regex@^10.2.1: version "10.3.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz" integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== esbuild@^0.21.3: version "0.21.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz" integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== optionalDependencies: "@esbuild/aix-ppc64" "0.21.5" @@ -1890,7 +1756,7 @@ esbuild@^0.21.3: "esbuild@npm:esbuild@~0.17.6 || ~0.18.0 || ~0.19.0": version "0.19.12" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz" integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== optionalDependencies: "@esbuild/aix-ppc64" "0.19.12" @@ -1919,34 +1785,34 @@ esbuild@^0.21.3: escalade@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz" integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== estree-util-attach-comments@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz#344bde6a64c8a31d15231e5ee9e297566a691c2d" + resolved "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz" integrity sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw== dependencies: "@types/estree" "^1.0.0" estree-util-build-jsx@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz#b6d0bced1dcc4f06f25cf0ceda2b2dcaf98168f1" + resolved "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz" integrity sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ== dependencies: "@types/estree-jsx" "^1.0.0" @@ -1956,12 +1822,12 @@ estree-util-build-jsx@^3.0.0: estree-util-is-identifier-name@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd" + resolved "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz" integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== estree-util-to-js@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz#10a6fb924814e6abb62becf0d2bc4dea51d04f17" + resolved "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz" integrity sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg== dependencies: "@types/estree-jsx" "^1.0.0" @@ -1970,14 +1836,14 @@ estree-util-to-js@^2.0.0: estree-util-value-to-estree@^3.0.0: version "3.1.2" - resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-3.1.2.tgz#d2f0e5d350a6c181673eb7299743325b86a9bf5c" + resolved "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.1.2.tgz" integrity sha512-S0gW2+XZkmsx00tU2uJ4L9hUT7IFabbml9pHh2WQqFmAbxit++YGZne0sKJbNwkj9Wvg9E4uqWl4nCIFQMmfag== dependencies: "@types/estree" "^1.0.0" estree-util-visit@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz#13a9a9f40ff50ed0c022f831ddf4b58d05446feb" + resolved "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz" integrity sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww== dependencies: "@types/estree-jsx" "^1.0.0" @@ -1985,24 +1851,24 @@ estree-util-visit@^2.0.0: estree-walker@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== estree-walker@^3.0.0: version "3.0.3" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz" integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== dependencies: "@types/estree" "^1.0.0" etag@~1.8.1: version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eval@0.1.8: version "0.1.8" - resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" + resolved "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz" integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== dependencies: "@types/node" "*" @@ -2010,7 +1876,7 @@ eval@0.1.8: execa@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -2025,12 +1891,12 @@ execa@^5.1.1: extend@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== fast-glob@^3.3.0: version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -2041,28 +1907,28 @@ fast-glob@^3.3.0: fastq@^1.6.0: version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" fault@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c" + resolved "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz" integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== dependencies: format "^0.2.0" fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -2070,7 +1936,7 @@ find-up@^5.0.0: foreground-child@^3.1.0: version "3.2.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz" integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== dependencies: cross-spawn "^7.0.0" @@ -2078,22 +1944,22 @@ foreground-child@^3.1.0: format@^0.2.0: version "0.2.2" - resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + resolved "https://registry.npmjs.org/format/-/format-0.2.2.tgz" integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== fraction.js@^4.3.7: version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== fresh@0.5.2: version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-extra@^11.1.1: version "11.2.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz" integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== dependencies: graceful-fs "^4.2.0" @@ -2102,51 +1968,51 @@ fs-extra@^11.1.1: fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-nonce@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" + resolved "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz" integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== github-slugger@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a" + resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz" integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw== glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob@^10.3.10: version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: foreground-child "^3.1.0" @@ -2158,12 +2024,12 @@ glob@^10.3.10: globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globby@^13.2.2: version "13.2.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" + resolved "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz" integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== dependencies: dir-glob "^3.0.1" @@ -2174,24 +2040,32 @@ globby@^13.2.2: graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + hasown@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" hast-util-classnames@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-classnames/-/hast-util-classnames-3.0.0.tgz#79d1e2c49fd0b2f4213f12048cb7a0439c351c8b" + resolved "https://registry.npmjs.org/hast-util-classnames/-/hast-util-classnames-3.0.0.tgz" integrity sha512-tI3JjoGDEBVorMAWK4jNRsfLMYmih1BUOG3VV36pH36njs1IEl7xkNrVTD2mD2yYHmQCa5R/fj61a8IAF4bRaQ== dependencies: "@types/hast" "^3.0.0" @@ -2199,35 +2073,35 @@ hast-util-classnames@^3.0.0: hast-util-has-property@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz#4e595e3cddb8ce530ea92f6fc4111a818d8e7f93" + resolved "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz" integrity sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA== dependencies: "@types/hast" "^3.0.0" hast-util-heading-rank@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz#2d5c6f2807a7af5c45f74e623498dd6054d2aba8" + resolved "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz" integrity sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA== dependencies: "@types/hast" "^3.0.0" hast-util-is-element@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz#6e31a6532c217e5b533848c7e52c9d9369ca0932" + resolved "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz" integrity sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g== dependencies: "@types/hast" "^3.0.0" hast-util-parse-selector@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27" + resolved "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz" integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== dependencies: "@types/hast" "^3.0.0" hast-util-select@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/hast-util-select/-/hast-util-select-6.0.2.tgz#f1e6c583ab6227cb510383471328734342bd1d1c" + resolved "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.2.tgz" integrity sha512-hT/SD/d/Meu+iobvgkffo1QecV8WeKWxwsNMzcTJsKw1cKTQKSR/7ArJeURLNJF9HDjp9nVoORyNNJxrvBye8Q== dependencies: "@types/hast" "^3.0.0" @@ -2249,7 +2123,7 @@ hast-util-select@^6.0.0: hast-util-to-estree@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz#f2afe5e869ddf0cf690c75f9fc699f3180b51b19" + resolved "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz" integrity sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw== dependencies: "@types/estree" "^1.0.0" @@ -2271,7 +2145,7 @@ hast-util-to-estree@^3.0.0: hast-util-to-jsx-runtime@^2.0.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz#3ed27caf8dc175080117706bf7269404a0aa4f7c" + resolved "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz" integrity sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ== dependencies: "@types/estree" "^1.0.0" @@ -2292,21 +2166,21 @@ hast-util-to-jsx-runtime@^2.0.0: hast-util-to-string@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz#2a131948b4b1b26461a2c8ac876e2c88d02946bd" + resolved "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz" integrity sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA== dependencies: "@types/hast" "^3.0.0" hast-util-whitespace@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + resolved "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz" integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== dependencies: "@types/hast" "^3.0.0" hastscript@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-8.0.0.tgz#4ef795ec8dee867101b9f23cc830d4baf4fd781a" + resolved "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz" integrity sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw== dependencies: "@types/hast" "^3.0.0" @@ -2315,14 +2189,23 @@ hastscript@^8.0.0: property-information "^6.0.0" space-separated-tokens "^2.0.0" +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + hono@^3.10.2: version "3.12.12" - resolved "https://registry.yarnpkg.com/hono/-/hono-3.12.12.tgz#1b725feb2604d1b2d50c3a8c11594cca1db462f8" + resolved "https://registry.npmjs.org/hono/-/hono-3.12.12.tgz" integrity sha512-5IAMJOXfpA5nT+K0MNjClchzz0IhBHs2Szl7WFAhrFOsbtQsYmNynFyJRg/a3IPsmCfxcrf8txUGiNShXpK5Rg== http-errors@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -2333,49 +2216,49 @@ http-errors@2.0.0: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.4: version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== -inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4: +inherits@^2.0.3, inherits@^2.0.4, inherits@2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inline-style-parser@0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== inline-style-parser@0.2.3: version "0.2.3" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.3.tgz#e35c5fb45f3a83ed7849fe487336eb7efa25971c" + resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz" integrity sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g== invariant@^2.2.4: version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" is-alphabetical@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz" integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== is-alphanumerical@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz" integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== dependencies: is-alphabetical "^2.0.0" @@ -2383,90 +2266,98 @@ is-alphanumerical@^2.0.0: is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-buffer@^2.0.0: version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== is-core-module@^2.13.0: version "2.15.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz" integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== dependencies: hasown "^2.0.2" is-decimal@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz" integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-hexadecimal@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz" integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== is-interactive@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz" integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-plain-obj@^4.0.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz" integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== is-reference@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.2.tgz#154747a01f45cd962404ee89d43837af2cba247c" + resolved "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz" integrity sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg== dependencies: "@types/estree" "*" is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-unicode-supported@*: + version "1.3.0" + is-unicode-supported@^1.1.0, is-unicode-supported@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isows@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/isows/-/isows-1.0.3.tgz" + integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== + jackspeak@^3.1.2: version "3.4.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" @@ -2475,32 +2366,32 @@ jackspeak@^3.1.2: javascript-stringify@^2.0.1: version "2.1.0" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" + resolved "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz" integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== jiti@^1.21.0: version "1.21.6" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" + resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz" integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== json5@^2.2.3: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -2509,86 +2400,86 @@ jsonfile@^6.0.1: lilconfig@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== lilconfig@^3.0.0: version "3.1.2" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz" integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz" integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== dependencies: chalk "^5.0.0" is-unicode-supported "^1.1.0" -long@^5.0.0, long@^5.2.0: +long@^5.0.0, long@^5.2.0, long@^5.2.3: version "5.2.3" - resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + resolved "https://registry.npmjs.org/long/-/long-5.2.3.tgz" integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== longest-streak@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + resolved "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz" integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" lru-cache@^10.2.0: version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" mark.js@^8.11.1: version "8.11.1" - resolved "https://registry.yarnpkg.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5" + resolved "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz" integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ== markdown-extensions@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz#34bebc83e9938cae16e0e017e4a9814a8330d3c4" + resolved "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz" integrity sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q== markdown-table@^3.0.0: version "3.0.3" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.3.tgz#e6331d30e493127e031dd385488b5bd326e4a6bd" + resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz" integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== mdast-util-directive@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz#3fb1764e705bbdf0afb0d3f889e4404c3e82561f" + resolved "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz" integrity sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q== dependencies: "@types/mdast" "^4.0.0" @@ -2602,7 +2493,7 @@ mdast-util-directive@^3.0.0: mdast-util-find-and-replace@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz#a6fc7b62f0994e973490e45262e4bc07607b04e0" + resolved "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz" integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA== dependencies: "@types/mdast" "^4.0.0" @@ -2612,7 +2503,7 @@ mdast-util-find-and-replace@^3.0.0: mdast-util-from-markdown@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz#32a6e8f512b416e1f51eb817fc64bd867ebcd9cc" + resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz" integrity sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA== dependencies: "@types/mdast" "^4.0.0" @@ -2630,7 +2521,7 @@ mdast-util-from-markdown@^2.0.0: mdast-util-frontmatter@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz#f5f929eb1eb36c8a7737475c7eb438261f964ee8" + resolved "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz" integrity sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA== dependencies: "@types/mdast" "^4.0.0" @@ -2642,7 +2533,7 @@ mdast-util-frontmatter@^2.0.0: mdast-util-gfm-autolink-literal@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz#5baf35407421310a08e68c15e5d8821e8898ba2a" + resolved "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz" integrity sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg== dependencies: "@types/mdast" "^4.0.0" @@ -2653,7 +2544,7 @@ mdast-util-gfm-autolink-literal@^2.0.0: mdast-util-gfm-footnote@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz#25a1753c7d16db8bfd53cd84fe50562bd1e6d6a9" + resolved "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz" integrity sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ== dependencies: "@types/mdast" "^4.0.0" @@ -2664,7 +2555,7 @@ mdast-util-gfm-footnote@^2.0.0: mdast-util-gfm-strikethrough@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz#d44ef9e8ed283ac8c1165ab0d0dfd058c2764c16" + resolved "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz" integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== dependencies: "@types/mdast" "^4.0.0" @@ -2673,7 +2564,7 @@ mdast-util-gfm-strikethrough@^2.0.0: mdast-util-gfm-table@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz#7a435fb6223a72b0862b33afbd712b6dae878d38" + resolved "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz" integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== dependencies: "@types/mdast" "^4.0.0" @@ -2684,7 +2575,7 @@ mdast-util-gfm-table@^2.0.0: mdast-util-gfm-task-list-item@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz#e68095d2f8a4303ef24094ab642e1047b991a936" + resolved "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz" integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== dependencies: "@types/mdast" "^4.0.0" @@ -2694,7 +2585,7 @@ mdast-util-gfm-task-list-item@^2.0.0: mdast-util-gfm@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz#3f2aecc879785c3cb6a81ff3a243dc11eca61095" + resolved "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz" integrity sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw== dependencies: mdast-util-from-markdown "^2.0.0" @@ -2707,7 +2598,7 @@ mdast-util-gfm@^3.0.0: mdast-util-mdx-expression@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz#4968b73724d320a379110d853e943a501bfd9d87" + resolved "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz" integrity sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw== dependencies: "@types/estree-jsx" "^1.0.0" @@ -2719,7 +2610,7 @@ mdast-util-mdx-expression@^2.0.0: mdast-util-mdx-jsx@^3.0.0: version "3.1.2" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz#daae777c72f9c4a106592e3025aa50fb26068e1b" + resolved "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz" integrity sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA== dependencies: "@types/estree-jsx" "^1.0.0" @@ -2738,7 +2629,7 @@ mdast-util-mdx-jsx@^3.0.0: mdast-util-mdx@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz#792f9cf0361b46bee1fdf1ef36beac424a099c41" + resolved "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz" integrity sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w== dependencies: mdast-util-from-markdown "^2.0.0" @@ -2749,7 +2640,7 @@ mdast-util-mdx@^3.0.0: mdast-util-mdxjs-esm@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97" + resolved "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz" integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== dependencies: "@types/estree-jsx" "^1.0.0" @@ -2761,7 +2652,7 @@ mdast-util-mdxjs-esm@^2.0.0: mdast-util-phrasing@^4.0.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" + resolved "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz" integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== dependencies: "@types/mdast" "^4.0.0" @@ -2769,7 +2660,7 @@ mdast-util-phrasing@^4.0.0: mdast-util-to-hast@^13.0.0, mdast-util-to-hast@^13.0.2: version "13.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" + resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz" integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== dependencies: "@types/hast" "^3.0.0" @@ -2784,7 +2675,7 @@ mdast-util-to-hast@^13.0.0, mdast-util-to-hast@^13.0.2: mdast-util-to-markdown@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz#9813f1d6e0cdaac7c244ec8c6dabfdb2102ea2b4" + resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz" integrity sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ== dependencies: "@types/mdast" "^4.0.0" @@ -2798,31 +2689,31 @@ mdast-util-to-markdown@^2.0.0: mdast-util-to-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" + resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz" integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== dependencies: "@types/mdast" "^4.0.0" media-query-parser@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/media-query-parser/-/media-query-parser-2.0.2.tgz#ff79e56cee92615a304a1c2fa4f2bd056c0a1d29" + resolved "https://registry.npmjs.org/media-query-parser/-/media-query-parser-2.0.2.tgz" integrity sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w== dependencies: "@babel/runtime" "^7.12.5" merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromark-core-commonmark@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz#9a45510557d068605c6e9a80f282b2bb8581e43d" + resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz" integrity sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA== dependencies: decode-named-character-reference "^1.0.0" @@ -2844,7 +2735,7 @@ micromark-core-commonmark@^2.0.0: micromark-extension-directive@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/micromark-extension-directive/-/micromark-extension-directive-3.0.1.tgz#67b3985bb991a69dbcae52664c57ee54b22f635a" + resolved "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.1.tgz" integrity sha512-VGV2uxUzhEZmaP7NSFo2vtq7M2nUD+WfmYQD+d8i/1nHbzE+rMy9uzTvUybBbNiVbrhOZibg3gbyoARGqgDWyg== dependencies: devlop "^1.0.0" @@ -2857,7 +2748,7 @@ micromark-extension-directive@^3.0.0: micromark-extension-frontmatter@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz#651c52ffa5d7a8eeed687c513cd869885882d67a" + resolved "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz" integrity sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg== dependencies: fault "^2.0.0" @@ -2867,7 +2758,7 @@ micromark-extension-frontmatter@^2.0.0: micromark-extension-gfm-autolink-literal@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz#6286aee9686c4462c1e3552a9d505feddceeb935" + resolved "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz" integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== dependencies: micromark-util-character "^2.0.0" @@ -2877,7 +2768,7 @@ micromark-extension-gfm-autolink-literal@^2.0.0: micromark-extension-gfm-footnote@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz#4dab56d4e398b9853f6fe4efac4fc9361f3e0750" + resolved "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz" integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== dependencies: devlop "^1.0.0" @@ -2891,7 +2782,7 @@ micromark-extension-gfm-footnote@^2.0.0: micromark-extension-gfm-strikethrough@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz#86106df8b3a692b5f6a92280d3879be6be46d923" + resolved "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz" integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== dependencies: devlop "^1.0.0" @@ -2903,7 +2794,7 @@ micromark-extension-gfm-strikethrough@^2.0.0: micromark-extension-gfm-table@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz#5cadedfbb29fca7abf752447967003dc3b6583c9" + resolved "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz" integrity sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g== dependencies: devlop "^1.0.0" @@ -2914,14 +2805,14 @@ micromark-extension-gfm-table@^2.0.0: micromark-extension-gfm-tagfilter@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz#f26d8a7807b5985fba13cf61465b58ca5ff7dc57" + resolved "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz" integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== dependencies: micromark-util-types "^2.0.0" micromark-extension-gfm-task-list-item@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz#bcc34d805639829990ec175c3eea12bb5b781f2c" + resolved "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz" integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== dependencies: devlop "^1.0.0" @@ -2932,7 +2823,7 @@ micromark-extension-gfm-task-list-item@^2.0.0: micromark-extension-gfm@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz#3e13376ab95dd7a5cfd0e29560dfe999657b3c5b" + resolved "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz" integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== dependencies: micromark-extension-gfm-autolink-literal "^2.0.0" @@ -2946,7 +2837,7 @@ micromark-extension-gfm@^3.0.0: micromark-extension-mdx-expression@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz#1407b9ce69916cf5e03a196ad9586889df25302a" + resolved "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz" integrity sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ== dependencies: "@types/estree" "^1.0.0" @@ -2960,7 +2851,7 @@ micromark-extension-mdx-expression@^3.0.0: micromark-extension-mdx-jsx@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz#4aba0797c25efb2366a3fd2d367c6b1c1159f4f5" + resolved "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz" integrity sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w== dependencies: "@types/acorn" "^4.0.0" @@ -2976,14 +2867,14 @@ micromark-extension-mdx-jsx@^3.0.0: micromark-extension-mdx-md@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz#1d252881ea35d74698423ab44917e1f5b197b92d" + resolved "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz" integrity sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ== dependencies: micromark-util-types "^2.0.0" micromark-extension-mdxjs-esm@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz#de21b2b045fd2059bd00d36746081de38390d54a" + resolved "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz" integrity sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A== dependencies: "@types/estree" "^1.0.0" @@ -2998,7 +2889,7 @@ micromark-extension-mdxjs-esm@^3.0.0: micromark-extension-mdxjs@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz#b5a2e0ed449288f3f6f6c544358159557549de18" + resolved "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz" integrity sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ== dependencies: acorn "^8.0.0" @@ -3012,7 +2903,7 @@ micromark-extension-mdxjs@^3.0.0: micromark-factory-destination@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz#857c94debd2c873cba34e0445ab26b74f6a6ec07" + resolved "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz" integrity sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA== dependencies: micromark-util-character "^2.0.0" @@ -3021,7 +2912,7 @@ micromark-factory-destination@^2.0.0: micromark-factory-label@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz#17c5c2e66ce39ad6f4fc4cbf40d972f9096f726a" + resolved "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz" integrity sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw== dependencies: devlop "^1.0.0" @@ -3031,7 +2922,7 @@ micromark-factory-label@^2.0.0: micromark-factory-mdx-expression@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz#f2a9724ce174f1751173beb2c1f88062d3373b1b" + resolved "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz" integrity sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg== dependencies: "@types/estree" "^1.0.0" @@ -3045,7 +2936,7 @@ micromark-factory-mdx-expression@^2.0.0: micromark-factory-space@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz#5e7afd5929c23b96566d0e1ae018ae4fcf81d030" + resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz" integrity sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg== dependencies: micromark-util-character "^2.0.0" @@ -3053,7 +2944,7 @@ micromark-factory-space@^2.0.0: micromark-factory-title@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz#726140fc77892af524705d689e1cf06c8a83ea95" + resolved "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz" integrity sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A== dependencies: micromark-factory-space "^2.0.0" @@ -3063,7 +2954,7 @@ micromark-factory-title@^2.0.0: micromark-factory-whitespace@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz#9e92eb0f5468083381f923d9653632b3cfb5f763" + resolved "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz" integrity sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA== dependencies: micromark-factory-space "^2.0.0" @@ -3073,7 +2964,7 @@ micromark-factory-whitespace@^2.0.0: micromark-util-character@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.0.tgz#31320ace16b4644316f6bf057531689c71e2aee1" + resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz" integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== dependencies: micromark-util-symbol "^2.0.0" @@ -3081,14 +2972,14 @@ micromark-util-character@^2.0.0: micromark-util-chunked@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz#e51f4db85fb203a79dbfef23fd41b2f03dc2ef89" + resolved "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz" integrity sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg== dependencies: micromark-util-symbol "^2.0.0" micromark-util-classify-character@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz#8c7537c20d0750b12df31f86e976d1d951165f34" + resolved "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz" integrity sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw== dependencies: micromark-util-character "^2.0.0" @@ -3097,7 +2988,7 @@ micromark-util-classify-character@^2.0.0: micromark-util-combine-extensions@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz#75d6ab65c58b7403616db8d6b31315013bfb7ee5" + resolved "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz" integrity sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ== dependencies: micromark-util-chunked "^2.0.0" @@ -3105,14 +2996,14 @@ micromark-util-combine-extensions@^2.0.0: micromark-util-decode-numeric-character-reference@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz#2698bbb38f2a9ba6310e359f99fcb2b35a0d2bd5" + resolved "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz" integrity sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ== dependencies: micromark-util-symbol "^2.0.0" micromark-util-decode-string@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz#7dfa3a63c45aecaa17824e656bcdb01f9737154a" + resolved "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz" integrity sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA== dependencies: decode-named-character-reference "^1.0.0" @@ -3122,12 +3013,12 @@ micromark-util-decode-string@^2.0.0: micromark-util-encode@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz#0921ac7953dc3f1fd281e3d1932decfdb9382ab1" + resolved "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz" integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA== micromark-util-events-to-acorn@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz#4275834f5453c088bd29cd72dfbf80e3327cec07" + resolved "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz" integrity sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA== dependencies: "@types/acorn" "^4.0.0" @@ -3141,26 +3032,26 @@ micromark-util-events-to-acorn@^2.0.0: micromark-util-html-tag-name@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz#ae34b01cbe063363847670284c6255bb12138ec4" + resolved "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz" integrity sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw== micromark-util-normalize-identifier@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz#91f9a4e65fe66cc80c53b35b0254ad67aa431d8b" + resolved "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz" integrity sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w== dependencies: micromark-util-symbol "^2.0.0" micromark-util-resolve-all@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz#189656e7e1a53d0c86a38a652b284a252389f364" + resolved "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz" integrity sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA== dependencies: micromark-util-types "^2.0.0" micromark-util-sanitize-uri@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz#ec8fbf0258e9e6d8f13d9e4770f9be64342673de" + resolved "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz" integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw== dependencies: micromark-util-character "^2.0.0" @@ -3169,7 +3060,7 @@ micromark-util-sanitize-uri@^2.0.0: micromark-util-subtokenize@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz#76129c49ac65da6e479c09d0ec4b5f29ec6eace5" + resolved "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz" integrity sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q== dependencies: devlop "^1.0.0" @@ -3179,17 +3070,17 @@ micromark-util-subtokenize@^2.0.0: micromark-util-symbol@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz#12225c8f95edf8b17254e47080ce0862d5db8044" + resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz" integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw== micromark-util-types@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.0.tgz#63b4b7ffeb35d3ecf50d1ca20e68fc7caa36d95e" + resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz" integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w== micromark@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.0.tgz#84746a249ebd904d9658cfabc1e8e5f32cbc6249" + resolved "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz" integrity sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ== dependencies: "@types/debug" "^4.0.0" @@ -3212,59 +3103,69 @@ micromark@^4.0.0: micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.7" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz" integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== dependencies: braces "^3.0.3" picomatch "^2.3.1" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - "mime-db@>= 1.43.0 < 2": version "1.53.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz" integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + minimatch@^9.0.3, minimatch@^9.0.4: version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== minisearch@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/minisearch/-/minisearch-6.3.0.tgz#985a2f1ca3c73c2d65af94f0616bfe57164b0b6b" + resolved "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz" integrity sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ== mlly@^1.4.2, mlly@^1.7.1: version "1.7.1" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.1.tgz#e0336429bb0731b6a8e887b438cbdae522c8f32f" + resolved "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz" integrity sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA== dependencies: acorn "^8.11.3" @@ -3274,27 +3175,27 @@ mlly@^1.4.2, mlly@^1.7.1: modern-ahocorasick@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/modern-ahocorasick/-/modern-ahocorasick-1.0.1.tgz#dec373444f51b5458ac05216a8ec376e126dd283" + resolved "https://registry.npmjs.org/modern-ahocorasick/-/modern-ahocorasick-1.0.1.tgz" integrity sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA== ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mz@^2.7.0: version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== dependencies: any-promise "^1.0.0" @@ -3303,80 +3204,80 @@ mz@^2.7.0: nanoid@^3.3.7: version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== negotiator@0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== node-releases@^2.0.18: version "2.0.18" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz" integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-range@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== not@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/not/-/not-0.1.0.tgz#c9691c1746c55dcfbe54cbd8bd4ff041bc2b519d" + resolved "https://registry.npmjs.org/not/-/not-0.1.0.tgz" integrity sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA== npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" nth-check@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-hash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== on-finished@2.4.1: version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" on-headers@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" ora@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-7.0.1.tgz#cdd530ecd865fe39e451a0e7697865669cb11930" + resolved "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz" integrity sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw== dependencies: chalk "^5.3.0" @@ -3391,38 +3292,38 @@ ora@^7.0.1: outdent@^0.8.0: version "0.8.0" - resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0" + resolved "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz" integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A== p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-limit@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz" integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== dependencies: yocto-queue "^1.0.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" package-json-from-dist@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" + resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz" integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== parse-entities@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e" + resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz" integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== dependencies: "@types/unist" "^2.0.0" @@ -3436,27 +3337,27 @@ parse-entities@^4.0.0: parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-scurry@^1.11.1: version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: lru-cache "^10.2.0" @@ -3464,17 +3365,17 @@ path-scurry@^1.11.1: path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pathe@^1.1.1, pathe@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== periscopic@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a" + resolved "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz" integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw== dependencies: "@types/estree" "^1.0.0" @@ -3483,27 +3384,27 @@ periscopic@^3.0.0: picocolors@^1.0.0, picocolors@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz" integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pirates@^4.0.1: version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pkg-types@^1.1.1: version "1.1.3" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.3.tgz#161bb1242b21daf7795036803f28e30222e476e3" + resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz" integrity sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA== dependencies: confbox "^0.1.7" @@ -3512,7 +3413,7 @@ pkg-types@^1.1.1: postcss-import@^15.1.0: version "15.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz" integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== dependencies: postcss-value-parser "^4.0.0" @@ -3521,14 +3422,14 @@ postcss-import@^15.1.0: postcss-js@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" + resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz" integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== dependencies: camelcase-css "^2.0.1" postcss-load-config@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz" integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== dependencies: lilconfig "^3.0.0" @@ -3536,14 +3437,14 @@ postcss-load-config@^4.0.1: postcss-nested@^6.0.1: version "6.2.0" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" + resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz" integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== dependencies: postcss-selector-parser "^6.1.1" postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz#5be94b277b8955904476a2400260002ce6c56e38" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz" integrity sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg== dependencies: cssesc "^3.0.0" @@ -3551,12 +3452,12 @@ postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.1.1: postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.3.6, postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.39: +postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.3.6, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.39, postcss@>=8.0.9: version "8.4.41" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.41.tgz#d6104d3ba272d882fe18fc07d15dc2da62fa2681" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz" integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ== dependencies: nanoid "^3.3.7" @@ -3565,7 +3466,7 @@ postcss@^8.3.6, postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.39: prop-types@^15.7.2: version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" @@ -3574,12 +3475,12 @@ prop-types@^15.7.2: property-information@^6.0.0: version "6.5.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" + resolved "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz" integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== protobufjs@^7.0.0: version "7.3.2" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.3.2.tgz#60f3b7624968868f6f739430cfbc8c9370e26df4" + resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz" integrity sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg== dependencies: "@protobufjs/aspromise" "^1.1.2" @@ -3597,17 +3498,17 @@ protobufjs@^7.0.0: queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -react-dom@latest: +"react-dom@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", react-dom@^18.2.0, react-dom@>=16.8, react-dom@>=16.8.0, react-dom@latest: version "18.3.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz" integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" @@ -3615,12 +3516,12 @@ react-dom@latest: react-fast-compare@^3.1.1: version "3.2.2" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + resolved "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz" integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== react-helmet@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726" + resolved "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz" integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw== dependencies: object-assign "^4.1.1" @@ -3630,22 +3531,22 @@ react-helmet@^6.1.0: react-intersection-observer@^9.5.3: version "9.13.0" - resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-9.13.0.tgz#ee10827954cf6ccc204d027f8400a6ddb8df163a" + resolved "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.13.0.tgz" integrity sha512-y0UvBfjDiXqC8h0EWccyaj4dVBWMxgEx0t5RGNzQsvkfvZwugnKwxpu70StY4ivzYuMajavwUDjH4LJyIki9Lw== react-is@^16.13.1: version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-refresh@^0.14.2: version "0.14.2" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" + resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz" integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== react-remove-scroll-bar@^2.3.4: version "2.3.6" - resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz#3e585e9d163be84a010180b18721e851ac81a29c" + resolved "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz" integrity sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g== dependencies: react-style-singleton "^2.2.1" @@ -3653,7 +3554,7 @@ react-remove-scroll-bar@^2.3.4: react-remove-scroll@2.5.7: version "2.5.7" - resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz#15a1fd038e8497f65a695bf26a4a57970cac1ccb" + resolved "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz" integrity sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA== dependencies: react-remove-scroll-bar "^2.3.4" @@ -3664,7 +3565,7 @@ react-remove-scroll@2.5.7: react-router-dom@^6.20.0: version "6.26.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.26.0.tgz#8debe13295c58605c04f93018d659a763245e58c" + resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.0.tgz" integrity sha512-RRGUIiDtLrkX3uYcFiCIxKFWMcWQGMojpYZfcstc63A1+sSnVgILGIm9gNUA6na3Fm1QuPGSBQH2EMbAZOnMsQ== dependencies: "@remix-run/router" "1.19.0" @@ -3672,42 +3573,42 @@ react-router-dom@^6.20.0: react-router@6.26.0: version "6.26.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.26.0.tgz#d5af4c46835b202348ef2b7ddacd32a2db539fde" + resolved "https://registry.npmjs.org/react-router/-/react-router-6.26.0.tgz" integrity sha512-wVQq0/iFYd3iZ9H2l3N3k4PL8EEHcb0XlU2Na8nEwmiXgIUElEH6gaJDtUQxJ+JFzmIXaQjfdpcGWaM6IoQGxg== dependencies: "@remix-run/router" "1.19.0" react-side-effect@^2.1.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.2.tgz#dc6345b9e8f9906dc2eeb68700b615e0b4fe752a" + resolved "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz" integrity sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw== react-style-singleton@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" + resolved "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz" integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== dependencies: get-nonce "^1.0.0" invariant "^2.2.4" tslib "^2.0.0" -react@latest: +"react@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.14.0 || ^17 || ^18", "react@^16.3.0 || ^17.0.0 || ^18.0.0", "react@^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.x || ^17.x || ^18.x", react@^18.2.0, react@^18.3.1, react@>=16, react@>=16.3.0, react@>=16.8, react@>=16.8.0, react@latest: version "18.3.1" - resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz" integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== dependencies: loose-envify "^1.1.0" read-cache@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== dependencies: pify "^2.3.0" readable-stream@^3.4.0: version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -3716,19 +3617,19 @@ readable-stream@^3.4.0: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" regenerator-runtime@^0.14.0: version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== rehype-autolink-headings@^7.1.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz#531087e155d9df053944923efd47d99728f3b196" + resolved "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz" integrity sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw== dependencies: "@types/hast" "^3.0.0" @@ -3740,7 +3641,7 @@ rehype-autolink-headings@^7.1.0: rehype-class-names@^1.0.14: version "1.0.14" - resolved "https://registry.yarnpkg.com/rehype-class-names/-/rehype-class-names-1.0.14.tgz#30db83b300d5f7512ddf8146be6646c66efcb068" + resolved "https://registry.npmjs.org/rehype-class-names/-/rehype-class-names-1.0.14.tgz" integrity sha512-eFBt6Qxb7K77y6P82tUtN9rKpU7guWlaK4XA4RrrSFHkUTCvr2D3cgb9OR5d4t1AaGOvR59FH9nRwUnbpn9AEg== dependencies: "@types/hast" "^3.0.0" @@ -3750,7 +3651,7 @@ rehype-class-names@^1.0.14: rehype-slug@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/rehype-slug/-/rehype-slug-6.0.0.tgz#1d21cf7fc8a83ef874d873c15e6adaee6344eaf1" + resolved "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz" integrity sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A== dependencies: "@types/hast" "^3.0.0" @@ -3761,7 +3662,7 @@ rehype-slug@^6.0.0: remark-directive@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/remark-directive/-/remark-directive-3.0.0.tgz#34452d951b37e6207d2e2a4f830dc33442923268" + resolved "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz" integrity sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA== dependencies: "@types/mdast" "^4.0.0" @@ -3771,7 +3672,7 @@ remark-directive@^3.0.0: remark-frontmatter@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz#b68d61552a421ec412c76f4f66c344627dc187a2" + resolved "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz" integrity sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ== dependencies: "@types/mdast" "^4.0.0" @@ -3781,7 +3682,7 @@ remark-frontmatter@^5.0.0: remark-gfm@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.0.tgz#aea777f0744701aa288b67d28c43565c7e8c35de" + resolved "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz" integrity sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA== dependencies: "@types/mdast" "^4.0.0" @@ -3793,7 +3694,7 @@ remark-gfm@^4.0.0: remark-mdx-frontmatter@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-mdx-frontmatter/-/remark-mdx-frontmatter-4.0.0.tgz#1d0287103ac73c5d493d2fad19dd805e69db55ca" + resolved "https://registry.npmjs.org/remark-mdx-frontmatter/-/remark-mdx-frontmatter-4.0.0.tgz" integrity sha512-PZzAiDGOEfv1Ua7exQ8S5kKxkD8CDaSb4nM+1Mprs6u8dyvQifakh+kCj6NovfGXW+bTvrhjaR3srzjS2qJHKg== dependencies: "@types/mdast" "^4.0.0" @@ -3805,7 +3706,7 @@ remark-mdx-frontmatter@^4.0.0: remark-mdx@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.0.1.tgz#8f73dd635c1874e44426e243f72c0977cf60e212" + resolved "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz" integrity sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA== dependencies: mdast-util-mdx "^3.0.0" @@ -3813,7 +3714,7 @@ remark-mdx@^3.0.0: remark-parse@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" + resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz" integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== dependencies: "@types/mdast" "^4.0.0" @@ -3823,7 +3724,7 @@ remark-parse@^11.0.0: remark-rehype@^11.0.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.0.tgz#d5f264f42bcbd4d300f030975609d01a1697ccdc" + resolved "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz" integrity sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g== dependencies: "@types/hast" "^3.0.0" @@ -3834,7 +3735,7 @@ remark-rehype@^11.0.0: remark-stringify@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3" + resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz" integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== dependencies: "@types/mdast" "^4.0.0" @@ -3843,12 +3744,12 @@ remark-stringify@^11.0.0: "require-like@>= 0.1.1": version "0.1.2" - resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + resolved "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz" integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== resolve@^1.1.7, resolve@^1.22.2: version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" @@ -3857,7 +3758,7 @@ resolve@^1.1.7, resolve@^1.22.2: restore-cursor@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz" integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== dependencies: onetime "^5.1.0" @@ -3865,12 +3766,12 @@ restore-cursor@^4.0.0: reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rollup@^4.13.0: +rollup@^1.20.0||^2.0.0||^3.0.0||^4.0.0, rollup@^4.13.0, rollup@>=2: version "4.20.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.20.0.tgz#f9d602161d29e178f0bf1d9f35f0a26f83939492" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz" integrity sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw== dependencies: "@types/estree" "1.0.5" @@ -3895,43 +3796,43 @@ rollup@^4.13.0: run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" rxjs@^7.8.0: version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + scheduler@^0.23.2: version "0.23.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz" integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" semver@^6.3.1: version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== send@0.18.0: version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" @@ -3950,7 +3851,7 @@ send@0.18.0: serve-static@^1.15.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" @@ -3960,24 +3861,24 @@ serve-static@^1.15.0: setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shiki@1.12.1, shiki@^1.10.3: +shiki@^1.10.3, shiki@1.12.1: version "1.12.1" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.12.1.tgz#72d9d230a8d68ddaf8cf7c94a1dc6a5f2625324e" + resolved "https://registry.npmjs.org/shiki/-/shiki-1.12.1.tgz" integrity sha512-nwmjbHKnOYYAe1aaQyEBHvQymJgfm86ZSS7fT8OaPRr4sbAcBNz7PbfAikMEFSDQ6se2j2zobkXvVKcBOm0ysg== dependencies: "@shikijs/core" "1.12.1" @@ -3985,63 +3886,88 @@ shiki@1.12.1, shiki@^1.10.3: signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1: version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== sisteransi@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== source-map-js@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz" integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== source-map@^0.7.0: version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== space-separated-tokens@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz" integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== statuses@2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== stdin-discarder@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.1.0.tgz#22b3e400393a8e28ebf53f9958f3880622efde21" + resolved "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz" integrity sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ== dependencies: bl "^5.0.0" -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.1, string-width@^5.1.2: +string-width@^5.0.1: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string-width@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" @@ -4050,64 +3976,64 @@ string-width@^5.0.1, string-width@^5.1.2: string-width@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-6.1.0.tgz#96488d6ed23f9ad5d82d13522af9e4c4c3fd7518" + resolved "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz" integrity sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ== dependencies: eastasianwidth "^0.2.0" emoji-regex "^10.2.1" strip-ansi "^7.0.1" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - stringify-entities@^4.0.0: version "4.0.4" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz" integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== dependencies: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== style-to-object@^0.4.0: version "0.4.4" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.4.tgz#266e3dfd56391a7eefb7770423612d043c3f33ec" + resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz" integrity sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg== dependencies: inline-style-parser "0.1.1" style-to-object@^1.0.0: version "1.0.6" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.6.tgz#0c28aed8be1813d166c60d962719b2907c26547b" + resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz" integrity sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA== dependencies: inline-style-parser "0.2.3" sucrase@^3.32.0: version "3.35.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz" integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== dependencies: "@jridgewell/gen-mapping" "^0.3.2" @@ -4120,24 +4046,24 @@ sucrase@^3.32.0: supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== tabbable@^6.0.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" + resolved "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz" integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== tailwindcss@^3.3.3: version "3.4.7" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.7.tgz#6092f18767f5933f59375b9afe558e592fc77201" + resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.7.tgz" integrity sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ== dependencies: "@alloc/quick-lru" "^5.2.0" @@ -4165,103 +4091,103 @@ tailwindcss@^3.3.3: thenify-all@^1.0.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== dependencies: thenify ">= 3.1.0 < 4" "thenify@>= 3.1.0 < 4": version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== dependencies: any-promise "^1.0.0" to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== toml@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" + resolved "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz" integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== trim-lines@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + resolved "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz" integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== trough@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + resolved "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz" integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== ts-interface-checker@^0.1.9: version "0.1.13" - resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0: version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz" integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== twoslash-protocol@0.2.9: version "0.2.9" - resolved "https://registry.yarnpkg.com/twoslash-protocol/-/twoslash-protocol-0.2.9.tgz#2fb3875d345c852550971a0dd79fa4d70c213bd0" + resolved "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.2.9.tgz" integrity sha512-uKQl8UboT6JU4VAtYaSI3DbNtgaNhFaTpCSMy/n3tRl5lMlMhrjiuNKdqx15xjcviconuGJ9oObkz1h9zJFrJg== twoslash@^0.2.9, twoslash@~0.2.9: version "0.2.9" - resolved "https://registry.yarnpkg.com/twoslash/-/twoslash-0.2.9.tgz#9152f46fb41768353b4df2878af18060ec690244" + resolved "https://registry.npmjs.org/twoslash/-/twoslash-0.2.9.tgz" integrity sha512-oj7XY6h8E9nTZBmfRE1gpsSSUqAQo5kcIpFkXyQPp8UCsyCQsUlP2bJ2s32o02c1n5+xl4h9rcCsQ1F97Z6LZg== dependencies: "@typescript/vfs" "1.5.0" twoslash-protocol "0.2.9" -typescript@latest: +typescript@*, typescript@>=5.0.4, typescript@latest: version "5.5.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz" integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== ua-parser-js@^1.0.36: version "1.0.38" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.38.tgz#66bb0c4c0e322fe48edfe6d446df6042e62f25e2" + resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.38.tgz" integrity sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ== ufo@^1.5.3: version "1.5.4" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754" + resolved "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz" integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== undici-types@~6.13.0: version "6.13.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz" integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== undici@^5.8.1: version "5.28.4" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + resolved "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz" integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== dependencies: "@fastify/busboy" "^2.0.0" unified@^10.1.2: version "10.1.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" + resolved "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz" integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== dependencies: "@types/unist" "^2.0.0" @@ -4274,7 +4200,7 @@ unified@^10.1.2: unified@^11.0.0, unified@^11.0.4, unified@^11.0.5: version "11.0.5" - resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" + resolved "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz" integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== dependencies: "@types/unist" "^3.0.0" @@ -4287,28 +4213,28 @@ unified@^11.0.0, unified@^11.0.4, unified@^11.0.5: unist-util-is@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" + resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz" integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== dependencies: "@types/unist" "^3.0.0" unist-util-position-from-estree@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz#d94da4df596529d1faa3de506202f0c9a23f2200" + resolved "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz" integrity sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ== dependencies: "@types/unist" "^3.0.0" unist-util-position@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + resolved "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz" integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== dependencies: "@types/unist" "^3.0.0" unist-util-remove-position@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz#fea68a25658409c9460408bc6b4991b965b52163" + resolved "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz" integrity sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q== dependencies: "@types/unist" "^3.0.0" @@ -4316,21 +4242,21 @@ unist-util-remove-position@^5.0.0: unist-util-stringify-position@^3.0.0: version "3.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" + resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz" integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== dependencies: "@types/unist" "^2.0.0" unist-util-stringify-position@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz" integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== dependencies: "@types/unist" "^3.0.0" unist-util-visit-parents@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" + resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz" integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== dependencies: "@types/unist" "^3.0.0" @@ -4338,7 +4264,7 @@ unist-util-visit-parents@^6.0.0: unist-util-visit@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz" integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== dependencies: "@types/unist" "^3.0.0" @@ -4347,12 +4273,12 @@ unist-util-visit@^5.0.0: universalify@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== update-browserslist-db@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz" integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== dependencies: escalade "^3.1.2" @@ -4360,14 +4286,14 @@ update-browserslist-db@^1.1.0: use-callback-ref@^1.3.0: version "1.3.2" - resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.2.tgz#6134c7f6ff76e2be0b56c809b17a650c942b1693" + resolved "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz" integrity sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA== dependencies: tslib "^2.0.0" use-sidecar@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" + resolved "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz" integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== dependencies: detect-node-es "^1.1.0" @@ -4375,22 +4301,22 @@ use-sidecar@^1.1.2: util-deprecate@^1.0.1, util-deprecate@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== uuid@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" + resolved "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz" integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== vary@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vfile-message@^3.0.0: version "3.1.4" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" + resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz" integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw== dependencies: "@types/unist" "^2.0.0" @@ -4398,7 +4324,7 @@ vfile-message@^3.0.0: vfile-message@^4.0.0: version "4.0.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" + resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz" integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== dependencies: "@types/unist" "^3.0.0" @@ -4406,7 +4332,7 @@ vfile-message@^4.0.0: vfile@^5.0.0: version "5.3.7" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7" + resolved "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz" integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g== dependencies: "@types/unist" "^2.0.0" @@ -4416,16 +4342,30 @@ vfile@^5.0.0: vfile@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.2.tgz#ef49548ea3d270097a67011921411130ceae7deb" + resolved "https://registry.npmjs.org/vfile/-/vfile-6.0.2.tgz" integrity sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg== dependencies: "@types/unist" "^3.0.0" unist-util-stringify-position "^4.0.0" vfile-message "^4.0.0" +viem@2.7.15: + version "2.7.15" + resolved "https://registry.npmjs.org/viem/-/viem-2.7.15.tgz" + integrity sha512-I2RMQpg1/MC7fXVjHxeXRPU9k/WEOvZajK/KZSr7DChS0AaZ7uovsQWppwBn2wvZWguTCIRAHqzMwIEGku95yQ== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + abitype "1.0.0" + isows "1.0.3" + ws "8.13.0" + vite-node@^1.2.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.6.0.tgz#2c7e61129bfecc759478fa592754fd9704aaba7f" + resolved "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz" integrity sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw== dependencies: cac "^6.7.14" @@ -4434,9 +4374,9 @@ vite-node@^1.2.0: picocolors "^1.0.0" vite "^5.0.0" -vite@^5.0.0, vite@^5.0.11, vite@^5.3.3: +"vite@^2.2.3 || ^3.0.0 || ^4.0.3 || ^5.0.0", "vite@^4.2.0 || ^5.0.0", vite@^5.0.0, vite@^5.0.11, vite@^5.3.3: version "5.3.5" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.5.tgz#b847f846fb2b6cb6f6f4ed50a830186138cb83d8" + resolved "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz" integrity sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA== dependencies: esbuild "^0.21.3" @@ -4447,7 +4387,7 @@ vite@^5.0.0, vite@^5.0.11, vite@^5.3.3: vocs@latest: version "1.0.0-alpha.55" - resolved "https://registry.yarnpkg.com/vocs/-/vocs-1.0.0-alpha.55.tgz#e5a9f40f458a2555034ce230f792e4f3d43dcedf" + resolved "https://registry.npmjs.org/vocs/-/vocs-1.0.0-alpha.55.tgz" integrity sha512-RT456+7uG4qNz7CwIb7xxhQAt/wJwjUzoi3fNgzfR62v4j/1gTdgn+yqD5vqv7RzJh7j4Iw3R9GF6jriAfiwng== dependencies: "@floating-ui/react" "^0.26.6" @@ -4514,14 +4454,14 @@ vocs@latest: which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -4530,39 +4470,44 @@ which@^2.0.1: wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" string-width "^5.0.1" strip-ansi "^7.0.1" +ws@*, ws@8.13.0: + version "8.13.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + yallist@^3.0.2: version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yaml@^2.0.0, yaml@^2.3.4: version "2.5.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.0.tgz#c6165a721cf8000e91c36490a41d7be25176cf5d" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz" integrity sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== yocto-queue@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz" integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== -zod@^3.23.8: +"zod@^3 >=3.22.0", zod@^3.23.8: version "3.23.8" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" + resolved "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz" integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== zwitch@^2.0.0: version "2.0.4" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + resolved "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz" integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== From 9755d2f4b594e29b3bf2c5e587bf7626c05c2efa Mon Sep 17 00:00:00 2001 From: Jennifer Hasegawa <5481259+jhaaaa@users.noreply.github.com> Date: Sun, 3 Nov 2024 10:48:15 -0800 Subject: [PATCH 3/3] rm yarn.lock --- yarn.lock | 4513 ----------------------------------------------------- 1 file changed, 4513 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 8ed9a9f..0000000 --- a/yarn.lock +++ /dev/null @@ -1,4513 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@adraffy/ens-normalize@1.10.0": - version "1.10.0" - resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz" - integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== - -"@alloc/quick-lru@^5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" - integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== - -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.24.7": - version "7.24.7" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz" - integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== - dependencies: - "@babel/highlight" "^7.24.7" - picocolors "^1.0.0" - -"@babel/compat-data@^7.25.2": - version "7.25.2" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz" - integrity sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ== - -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.20.7", "@babel/core@^7.23.9", "@babel/core@^7.24.5": - version "7.25.2" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz" - integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.0" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-module-transforms" "^7.25.2" - "@babel/helpers" "^7.25.0" - "@babel/parser" "^7.25.0" - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.2" - "@babel/types" "^7.25.2" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.25.0": - version "7.25.0" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz" - integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== - dependencies: - "@babel/types" "^7.25.0" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.25.2": - version "7.25.2" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz" - integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== - dependencies: - "@babel/compat-data" "^7.25.2" - "@babel/helper-validator-option" "^7.24.8" - browserslist "^4.23.1" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-module-imports@^7.24.7": - version "7.24.7" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz" - integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-module-transforms@^7.25.2": - version "7.25.2" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz" - integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== - dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.2" - -"@babel/helper-plugin-utils@^7.24.7": - version "7.24.8" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz" - integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== - -"@babel/helper-simple-access@^7.24.7": - version "7.24.7" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz" - integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-string-parser@^7.24.8": - version "7.24.8" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz" - integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== - -"@babel/helper-validator-identifier@^7.24.7": - version "7.24.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz" - integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== - -"@babel/helper-validator-option@^7.24.8": - version "7.24.8" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz" - integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== - -"@babel/helpers@^7.25.0": - version "7.25.0" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz" - integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== - dependencies: - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.0" - -"@babel/highlight@^7.24.7": - version "7.24.7" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz" - integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== - dependencies: - "@babel/helper-validator-identifier" "^7.24.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3": - version "7.25.3" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz" - integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== - dependencies: - "@babel/types" "^7.25.2" - -"@babel/plugin-syntax-typescript@^7.20.0": - version "7.24.7" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz" - integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-react-jsx-self@^7.24.5": - version "7.24.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz" - integrity sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-react-jsx-source@^7.24.1": - version "7.24.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz" - integrity sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/runtime@^7.12.5": - version "7.25.0" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz" - integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.25.0": - version "7.25.0" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz" - integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.25.0" - "@babel/types" "^7.25.0" - -"@babel/traverse@^7.24.7", "@babel/traverse@^7.25.2": - version "7.25.3" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz" - integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.0" - "@babel/parser" "^7.25.3" - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.2" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2": - version "7.25.2" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz" - integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== - dependencies: - "@babel/helper-string-parser" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" - to-fast-properties "^2.0.0" - -"@clack/core@^0.3.3": - version "0.3.4" - resolved "https://registry.npmjs.org/@clack/core/-/core-0.3.4.tgz" - integrity sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw== - dependencies: - picocolors "^1.0.0" - sisteransi "^1.0.5" - -"@clack/prompts@^0.7.0": - version "0.7.0" - resolved "https://registry.npmjs.org/@clack/prompts/-/prompts-0.7.0.tgz" - integrity sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA== - dependencies: - "@clack/core" "^0.3.3" - is-unicode-supported "*" - picocolors "^1.0.0" - sisteransi "^1.0.5" - -"@emotion/hash@^0.9.0": - version "0.9.2" - resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz" - integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== - -"@esbuild/darwin-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz" - integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== - -"@esbuild/darwin-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz" - integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== - -"@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== - -"@floating-ui/core@^1.6.0": - version "1.6.6" - resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.6.tgz" - integrity sha512-Vkvsw6EcpMHjvZZdMkSY+djMGFbt7CRssW99Ne8tar2WLnZ/l3dbxeTShbLQj+/s35h+Qb4cmnob+EzwtjrXGQ== - dependencies: - "@floating-ui/utils" "^0.2.6" - -"@floating-ui/dom@^1.0.0": - version "1.6.9" - resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.9.tgz" - integrity sha512-zB1PcI350t4tkm3rvUhSRKa9sT7vH5CrAbQxW+VaPYJXKAO0gsg4CTueL+6Ajp7XzAQC8CW4Jj1Wgqc0sB6oUQ== - dependencies: - "@floating-ui/core" "^1.6.0" - "@floating-ui/utils" "^0.2.6" - -"@floating-ui/react-dom@^2.0.0", "@floating-ui/react-dom@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz" - integrity sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg== - dependencies: - "@floating-ui/dom" "^1.0.0" - -"@floating-ui/react@^0.26.6": - version "0.26.21" - resolved "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.21.tgz" - integrity sha512-7P5ncDIiYd6RrwpCDbKyFzvabM014QlzlumtDbK3Bck0UueC+Rp8BLS34qcGBcN1pZCTodl4QNnCVmKv4tSxfQ== - dependencies: - "@floating-ui/react-dom" "^2.1.1" - "@floating-ui/utils" "^0.2.6" - tabbable "^6.0.0" - -"@floating-ui/utils@^0.2.6": - version "0.2.6" - resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.6.tgz" - integrity sha512-0KI3zGxIUs1KDR/pjQPdJH4Z8nGBm0yJ5WRoRfdw1Kzeh45jkIfA0rmD0kBF6fKHH+xaH7g8y4jIXyAV5MGK3g== - -"@hono/node-server@^1.2.3": - version "1.12.0" - resolved "https://registry.npmjs.org/@hono/node-server/-/node-server-1.12.0.tgz" - integrity sha512-e6oHjNiErRxsZRZBmc2KucuvY3btlO/XPncIpP2X75bRdTilF9GLjm3NHvKKunpJbbJJj31/FoPTksTf8djAVw== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.5.0" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@mdx-js/mdx@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz" - integrity sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA== - dependencies: - "@types/estree" "^1.0.0" - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdx" "^2.0.0" - collapse-white-space "^2.0.0" - devlop "^1.0.0" - estree-util-build-jsx "^3.0.0" - estree-util-is-identifier-name "^3.0.0" - estree-util-to-js "^2.0.0" - estree-walker "^3.0.0" - hast-util-to-estree "^3.0.0" - hast-util-to-jsx-runtime "^2.0.0" - markdown-extensions "^2.0.0" - periscopic "^3.0.0" - remark-mdx "^3.0.0" - remark-parse "^11.0.0" - remark-rehype "^11.0.0" - source-map "^0.7.0" - unified "^11.0.0" - unist-util-position-from-estree "^2.0.0" - unist-util-stringify-position "^4.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - -"@mdx-js/react@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz" - integrity sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A== - dependencies: - "@types/mdx" "^2.0.0" - -"@mdx-js/rollup@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-3.0.1.tgz" - integrity sha512-j0II91OCm4ld+l5QVgXXMQGxVVcAWIQJakYWi1dv5pefDHASJyCYER2TsdH7Alf958GoFSM7ugukWyvDq/UY4A== - dependencies: - "@mdx-js/mdx" "^3.0.0" - "@rollup/pluginutils" "^5.0.0" - source-map "^0.7.0" - vfile "^6.0.0" - -"@noble/curves@~1.2.0", "@noble/curves@1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - dependencies: - "@noble/hashes" "1.3.2" - -"@noble/hashes@^1.3.2", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2", "@noble/hashes@1.3.2": - version "1.3.2" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - -"@noble/secp256k1@^1.7.1", "@noble/secp256k1@1.7.1": - version "1.7.1" - resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz" - integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - -"@radix-ui/colors@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@radix-ui/colors/-/colors-3.0.0.tgz" - integrity sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg== - -"@radix-ui/primitive@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz" - integrity sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA== - -"@radix-ui/react-accordion@^1.1.2": - version "1.2.0" - resolved "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.0.tgz" - integrity sha512-HJOzSX8dQqtsp/3jVxCU3CXEONF7/2jlGAB28oX8TTw1Dz8JYbEI1UcL8355PuLBE41/IRRMvCw7VkiK/jcUOQ== - dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-collapsible" "1.1.0" - "@radix-ui/react-collection" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.0" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-controllable-state" "1.1.0" - -"@radix-ui/react-arrow@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz" - integrity sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw== - dependencies: - "@radix-ui/react-primitive" "2.0.0" - -"@radix-ui/react-collapsible@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.0.tgz" - integrity sha512-zQY7Epa8sTL0mq4ajSJpjgn2YmCgyrG7RsQgLp3C0LQVkG7+Tf6Pv1CeNWZLyqMjhdPkBa5Lx7wYBeSu7uCSTA== - dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.0" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-presence" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-controllable-state" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" - -"@radix-ui/react-collection@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz" - integrity sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw== - dependencies: - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-slot" "1.1.0" - -"@radix-ui/react-compose-refs@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz" - integrity sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw== - -"@radix-ui/react-context@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz" - integrity sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A== - -"@radix-ui/react-dialog@^1.0.5": - version "1.1.1" - resolved "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.1.tgz" - integrity sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg== - dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.0" - "@radix-ui/react-dismissable-layer" "1.1.0" - "@radix-ui/react-focus-guards" "1.1.0" - "@radix-ui/react-focus-scope" "1.1.0" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-portal" "1.1.1" - "@radix-ui/react-presence" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-slot" "1.1.0" - "@radix-ui/react-use-controllable-state" "1.1.0" - aria-hidden "^1.1.1" - react-remove-scroll "2.5.7" - -"@radix-ui/react-direction@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz" - integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg== - -"@radix-ui/react-dismissable-layer@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz" - integrity sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig== - dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-escape-keydown" "1.1.0" - -"@radix-ui/react-focus-guards@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz" - integrity sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw== - -"@radix-ui/react-focus-scope@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz" - integrity sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA== - dependencies: - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-callback-ref" "1.1.0" - -"@radix-ui/react-icons@^1.3.0": - version "1.3.0" - resolved "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz" - integrity sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw== - -"@radix-ui/react-id@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz" - integrity sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA== - dependencies: - "@radix-ui/react-use-layout-effect" "1.1.0" - -"@radix-ui/react-label@^2.0.2": - version "2.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.0.tgz" - integrity sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw== - dependencies: - "@radix-ui/react-primitive" "2.0.0" - -"@radix-ui/react-navigation-menu@^1.1.4": - version "1.2.0" - resolved "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.0.tgz" - integrity sha512-OQ8tcwAOR0DhPlSY3e4VMXeHiol7la4PPdJWhhwJiJA+NLX0SaCaonOkRnI3gCDHoZ7Fo7bb/G6q25fRM2Y+3Q== - dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-collection" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.0" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-dismissable-layer" "1.1.0" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-presence" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-controllable-state" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" - "@radix-ui/react-use-previous" "1.1.0" - "@radix-ui/react-visually-hidden" "1.1.0" - -"@radix-ui/react-popover@^1.0.7": - version "1.1.1" - resolved "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.1.tgz" - integrity sha512-3y1A3isulwnWhvTTwmIreiB8CF4L+qRjZnK1wYLO7pplddzXKby/GnZ2M7OZY3qgnl6p9AodUIHRYGXNah8Y7g== - dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.0" - "@radix-ui/react-dismissable-layer" "1.1.0" - "@radix-ui/react-focus-guards" "1.1.0" - "@radix-ui/react-focus-scope" "1.1.0" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-popper" "1.2.0" - "@radix-ui/react-portal" "1.1.1" - "@radix-ui/react-presence" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-slot" "1.1.0" - "@radix-ui/react-use-controllable-state" "1.1.0" - aria-hidden "^1.1.1" - react-remove-scroll "2.5.7" - -"@radix-ui/react-popper@1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz" - integrity sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg== - dependencies: - "@floating-ui/react-dom" "^2.0.0" - "@radix-ui/react-arrow" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" - "@radix-ui/react-use-rect" "1.1.0" - "@radix-ui/react-use-size" "1.1.0" - "@radix-ui/rect" "1.1.0" - -"@radix-ui/react-portal@1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz" - integrity sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g== - dependencies: - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-layout-effect" "1.1.0" - -"@radix-ui/react-presence@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz" - integrity sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ== - dependencies: - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" - -"@radix-ui/react-primitive@2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz" - integrity sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw== - dependencies: - "@radix-ui/react-slot" "1.1.0" - -"@radix-ui/react-roving-focus@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz" - integrity sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA== - dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-collection" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.0" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-controllable-state" "1.1.0" - -"@radix-ui/react-slot@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz" - integrity sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw== - dependencies: - "@radix-ui/react-compose-refs" "1.1.0" - -"@radix-ui/react-tabs@^1.0.4": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.0.tgz" - integrity sha512-bZgOKB/LtZIij75FSuPzyEti/XBhJH52ExgtdVqjCIh+Nx/FW+LhnbXtbCzIi34ccyMsyOja8T0thCzoHFXNKA== - dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-context" "1.1.0" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-presence" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-roving-focus" "1.1.0" - "@radix-ui/react-use-controllable-state" "1.1.0" - -"@radix-ui/react-use-callback-ref@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz" - integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw== - -"@radix-ui/react-use-controllable-state@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz" - integrity sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw== - dependencies: - "@radix-ui/react-use-callback-ref" "1.1.0" - -"@radix-ui/react-use-escape-keydown@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz" - integrity sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw== - dependencies: - "@radix-ui/react-use-callback-ref" "1.1.0" - -"@radix-ui/react-use-layout-effect@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz" - integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w== - -"@radix-ui/react-use-previous@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz" - integrity sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og== - -"@radix-ui/react-use-rect@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz" - integrity sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ== - dependencies: - "@radix-ui/rect" "1.1.0" - -"@radix-ui/react-use-size@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz" - integrity sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw== - dependencies: - "@radix-ui/react-use-layout-effect" "1.1.0" - -"@radix-ui/react-visually-hidden@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz" - integrity sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ== - dependencies: - "@radix-ui/react-primitive" "2.0.0" - -"@radix-ui/rect@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz" - integrity sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg== - -"@remix-run/router@1.19.0": - version "1.19.0" - resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.19.0.tgz" - integrity sha512-zDICCLKEwbVYTS6TjYaWtHXxkdoUvD/QXvyVZjGCsWz5vyH7aFeONlPffPdW+Y/t6KT0MgXb2Mfjun9YpWN1dA== - -"@rollup/pluginutils@^5.0.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz" - integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^2.3.1" - -"@rollup/rollup-darwin-arm64@4.20.0": - version "4.20.0" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz" - integrity sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q== - -"@scure/base@~1.1.0", "@scure/base@~1.1.2": - version "1.1.7" - resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.7.tgz" - integrity sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g== - -"@scure/bip32@1.3.2": - version "1.3.2" - resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz" - integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA== - dependencies: - "@noble/curves" "~1.2.0" - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.2" - -"@scure/bip39@1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz" - integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== - dependencies: - "@noble/hashes" "~1.3.0" - "@scure/base" "~1.1.0" - -"@shikijs/core@1.12.1": - version "1.12.1" - resolved "https://registry.npmjs.org/@shikijs/core/-/core-1.12.1.tgz" - integrity sha512-biCz/mnkMktImI6hMfMX3H9kOeqsInxWEyCHbSlL8C/2TR1FqfmGxTLRNwYCKsyCyxWLbB8rEqXRVZuyxuLFmA== - dependencies: - "@types/hast" "^3.0.4" - -"@shikijs/rehype@^1.10.3": - version "1.12.1" - resolved "https://registry.npmjs.org/@shikijs/rehype/-/rehype-1.12.1.tgz" - integrity sha512-AZLC80TIiRWFwPbSqdwykeSeMjQwYWlkX8yfI7T4nan0qgWfvv/oP7C767JQ8USudEylbe5KzBdE8Ao2sHsidA== - dependencies: - "@shikijs/transformers" "1.12.1" - "@types/hast" "^3.0.4" - hast-util-to-string "^3.0.0" - shiki "1.12.1" - unified "^11.0.5" - unist-util-visit "^5.0.0" - -"@shikijs/transformers@^1.10.3", "@shikijs/transformers@1.12.1": - version "1.12.1" - resolved "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.12.1.tgz" - integrity sha512-zOpj/S2thBvnJV4Ty3EE8aRs/VqCbV+lgtEYeBRkPxTW22uLADEIZq0qjt5W2Rfy2KSu29e73nRyzp4PefjUTg== - dependencies: - shiki "1.12.1" - -"@shikijs/twoslash@^1.10.3": - version "1.12.1" - resolved "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-1.12.1.tgz" - integrity sha512-k4D6sC9p9GksbHa4RnB1VkQIZtQ+L7nQMqi/YAxEgTKZF5v7IW6dHak0Z7bvZXrfhle36NIqWMJXz5xDexupvw== - dependencies: - "@shikijs/core" "1.12.1" - twoslash "^0.2.9" - -"@types/acorn@^4.0.0": - version "4.0.6" - resolved "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz" - integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ== - dependencies: - "@types/estree" "*" - -"@types/babel__core@^7.20.5": - version "7.20.5" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz" - integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.4" - resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz" - integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*": - version "7.20.6" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz" - integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== - dependencies: - "@babel/types" "^7.20.7" - -"@types/debug@^4.0.0": - version "4.1.12" - resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/estree-jsx@^1.0.0": - version "1.0.5" - resolved "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz" - integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== - dependencies: - "@types/estree" "*" - -"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@1.0.5": - version "1.0.5" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/hast@^3.0.0", "@types/hast@^3.0.4": - version "3.0.4" - resolved "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz" - integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== - dependencies: - "@types/unist" "*" - -"@types/mdast@^4.0.0": - version "4.0.4" - resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz" - integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== - dependencies: - "@types/unist" "*" - -"@types/mdx@^2.0.0": - version "2.0.13" - resolved "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz" - integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== - -"@types/ms@*": - version "0.7.34" - resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - -"@types/node@*", "@types/node@^18.0.0 || >=20.0.0", "@types/node@>=13.7.0": - version "22.1.0" - resolved "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz" - integrity sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw== - dependencies: - undici-types "~6.13.0" - -"@types/prop-types@*": - version "15.7.12" - resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz" - integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== - -"@types/react@*", "@types/react@^16.8.0 || ^17.0.0 || ^18.0.0", "@types/react@^16.9.0 || ^17.0.0 || ^18.0.0", "@types/react@>=16", "@types/react@latest": - version "18.3.3" - resolved "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz" - integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== - dependencies: - "@types/prop-types" "*" - csstype "^3.0.2" - -"@types/unist@*", "@types/unist@^3.0.0": - version "3.0.2" - resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz" - integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ== - -"@types/unist@^2.0.0": - version "2.0.10" - resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz" - integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== - -"@typescript/vfs@1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.5.0.tgz" - integrity sha512-AJS307bPgbsZZ9ggCT3wwpg3VbTKMFNHfaY/uF0ahSkYYrPF2dSSKDNIDIQAHm9qJqbLvCsSJH7yN4Vs/CsMMg== - dependencies: - debug "^4.1.1" - -"@ungap/structured-clone@^1.0.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -"@vanilla-extract/babel-plugin-debug-ids@^1.0.4": - version "1.0.6" - resolved "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.6.tgz" - integrity sha512-C188vUEYmw41yxg3QooTs8r1IdbDQQ2mH7L5RkORBnHx74QlmsNfqVmKwAVTgrlYt8JoRaWMtPfGm/Ql0BNQrA== - dependencies: - "@babel/core" "^7.23.9" - -"@vanilla-extract/css@^1.14.0": - version "1.15.3" - resolved "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.15.3.tgz" - integrity sha512-mxoskDAxdQAspbkmQRxBvolUi1u1jnyy9WZGm+GeH8V2wwhEvndzl1QoK7w8JfA0WFevTxbev5d+i+xACZlPhA== - dependencies: - "@emotion/hash" "^0.9.0" - "@vanilla-extract/private" "^1.0.5" - css-what "^6.1.0" - cssesc "^3.0.0" - csstype "^3.0.7" - dedent "^1.5.3" - deep-object-diff "^1.1.9" - deepmerge "^4.2.2" - media-query-parser "^2.0.2" - modern-ahocorasick "^1.0.0" - picocolors "^1.0.0" - -"@vanilla-extract/dynamic@^2.1.0": - version "2.1.1" - resolved "https://registry.npmjs.org/@vanilla-extract/dynamic/-/dynamic-2.1.1.tgz" - integrity sha512-iqf736036ujEIKsIq28UsBEMaLC2vR2DhwKyrG3NDb/fRy9qL9FKl1TqTtBV4daU30Uh3saeik4vRzN8bzQMbw== - dependencies: - "@vanilla-extract/private" "^1.0.5" - -"@vanilla-extract/integration@^6.3.0": - version "6.5.0" - resolved "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-6.5.0.tgz" - integrity sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ== - dependencies: - "@babel/core" "^7.20.7" - "@babel/plugin-syntax-typescript" "^7.20.0" - "@vanilla-extract/babel-plugin-debug-ids" "^1.0.4" - "@vanilla-extract/css" "^1.14.0" - esbuild "npm:esbuild@~0.17.6 || ~0.18.0 || ~0.19.0" - eval "0.1.8" - find-up "^5.0.0" - javascript-stringify "^2.0.1" - lodash "^4.17.21" - mlly "^1.4.2" - outdent "^0.8.0" - vite "^5.0.11" - vite-node "^1.2.0" - -"@vanilla-extract/private@^1.0.5": - version "1.0.5" - resolved "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.5.tgz" - integrity sha512-6YXeOEKYTA3UV+RC8DeAjFk+/okoNz/h88R+McnzA2zpaVqTR/Ep+vszkWYlGBcMNO7vEkqbq5nT/JMMvhi+tw== - -"@vanilla-extract/vite-plugin@^3.9.4": - version "3.9.5" - resolved "https://registry.npmjs.org/@vanilla-extract/vite-plugin/-/vite-plugin-3.9.5.tgz" - integrity sha512-CWI/CtrVW6i3HKccI6T7uGQkTJ8bd8Xl2UMBg3Pkr7dwWMmavXTeucV0I9KSbmXaYXSbEj+Q8c9y0xAZwtmTig== - dependencies: - "@vanilla-extract/integration" "^6.3.0" - outdent "^0.8.0" - postcss "^8.3.6" - postcss-load-config "^4.0.1" - -"@vitejs/plugin-react@^4.3.1", "@vitejs/plugin-react@4.3.1": - version "4.3.1" - resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz" - integrity sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg== - dependencies: - "@babel/core" "^7.24.5" - "@babel/plugin-transform-react-jsx-self" "^7.24.5" - "@babel/plugin-transform-react-jsx-source" "^7.24.1" - "@types/babel__core" "^7.20.5" - react-refresh "^0.14.2" - -"@xmtp/consent-proof-signature@^0.1.3": - version "0.1.3" - resolved "https://registry.npmjs.org/@xmtp/consent-proof-signature/-/consent-proof-signature-0.1.3.tgz" - integrity sha512-2uTKOd7ov6QnDgCFNnL+4Hx9osxRLSpdBNrbpKauWp8/qrrMEe6yBwFRNq40ieElo1mo1usB8DbhSH0jalcIdw== - dependencies: - "@xmtp/proto" "3.56.0" - long "^5.2.3" - -"@xmtp/content-type-primitives@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@xmtp/content-type-primitives/-/content-type-primitives-1.0.1.tgz" - integrity sha512-F/2/yh0UQZb49tuxszTIbH+TDNJhTgSlj3UX8YOevMaMpIAvY26qjIA35M8Bw0nng3aU/iYqFA1p3ZO/7rM9Qw== - dependencies: - "@xmtp/proto" "^3.61.1" - -"@xmtp/content-type-reaction@^1.1.7": - version "1.1.9" - resolved "https://registry.npmjs.org/@xmtp/content-type-reaction/-/content-type-reaction-1.1.9.tgz" - integrity sha512-/3qN/jNaxb7pYocD9NqmtHLJGe5bD+jmaOSa1LJIIPhhTXAanFbdScb1JzYQHBonyYsOT+hA4bGLjcpWHIYH/w== - dependencies: - "@xmtp/content-type-primitives" "^1.0.1" - -"@xmtp/content-type-remote-attachment@^1.1.8": - version "1.1.9" - resolved "https://registry.npmjs.org/@xmtp/content-type-remote-attachment/-/content-type-remote-attachment-1.1.9.tgz" - integrity sha512-4/SapFdSOSRCbJTsDx0Z1AO2GpfnfL5hXSEcFHDCVw++zLTObKLRWTwaSRJeI49PLFjYgZPdwSvHkw8hfOSm0A== - dependencies: - "@noble/secp256k1" "^1.7.1" - "@xmtp/content-type-primitives" "^1.0.1" - "@xmtp/proto" "^3.61.1" - "@xmtp/xmtp-js" "^11.6.3" - -"@xmtp/content-type-reply@^1.1.9": - version "1.1.11" - resolved "https://registry.npmjs.org/@xmtp/content-type-reply/-/content-type-reply-1.1.11.tgz" - integrity sha512-6VPW/N6n0a5FIN+9QB6KuouO5KzmLLC7+K6lo1sgQO4mhkbQKocLHN62s9hWYDYpxvD7agH+AE7XcBrRm3yhDA== - dependencies: - "@xmtp/content-type-primitives" "^1.0.1" - "@xmtp/proto" "^3.61.1" - -"@xmtp/content-type-text@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@xmtp/content-type-text/-/content-type-text-1.0.0.tgz" - integrity sha512-mXkgDHw327SjFoGqV57w/xgZADq2doKZg3eF26Di7NQ9IGvi1LKPVMhwif4xLdA5duR+GZuhsSszkTllim6vug== - dependencies: - "@xmtp/content-type-primitives" "^1.0.1" - -"@xmtp/proto@^3.61.1", "@xmtp/proto@^3.62.1": - version "3.65.0" - resolved "https://registry.npmjs.org/@xmtp/proto/-/proto-3.65.0.tgz" - integrity sha512-5DeU7uM/M4gCDn3370SZUvyC9BDztZPRLZBYfWo6HTn/vU9T4YJFBFCS8KjiJdpd2F/1nR01TnbjgJntkLN5pw== - dependencies: - long "^5.2.0" - protobufjs "^7.0.0" - rxjs "^7.8.0" - undici "^5.8.1" - -"@xmtp/proto@3.54.0": - version "3.54.0" - resolved "https://registry.npmjs.org/@xmtp/proto/-/proto-3.54.0.tgz" - integrity sha512-X0jDRR19/tH0qRB8mM/H/vBueQAK22VZF4QUnDN7TgnbNaOYL5DvSmPfXFH+xzeGKQ5S0zgwc+qFJbI4xoKNHw== - dependencies: - long "^5.2.0" - protobufjs "^7.0.0" - rxjs "^7.8.0" - undici "^5.8.1" - -"@xmtp/proto@3.56.0": - version "3.56.0" - resolved "https://registry.npmjs.org/@xmtp/proto/-/proto-3.56.0.tgz" - integrity sha512-zW8/s7x9je0keYjJpu/c5zmYK5wE14MxcDWLkxzMwRmrajwdy69BNN0NgVJ1uBzMUqGTjnGQJANDev8lpa58qQ== - dependencies: - long "^5.2.0" - protobufjs "^7.0.0" - rxjs "^7.8.0" - undici "^5.8.1" - -"@xmtp/react-sdk@^8.0.1": - version "8.0.1" - resolved "https://registry.npmjs.org/@xmtp/react-sdk/-/react-sdk-8.0.1.tgz" - integrity sha512-OAqb4CHjzL4rvFFX2zzh0qklPo0LNOYWuT67/tfh4esEsV+jVF3/nh2DVgUvhggjnYojqqxUSs+RafSpt5JDIg== - dependencies: - "@xmtp/content-type-primitives" "^1.0.1" - "@xmtp/content-type-text" "^1.0.0" - async-mutex "^0.5.0" - date-fns "^3.6.0" - dexie "^4.0.8" - dexie-react-hooks "^1.1.7" - uuid "^10.0.0" - zod "^3.23.8" - -"@xmtp/user-preferences-bindings-wasm@^0.3.6": - version "0.3.6" - resolved "https://registry.npmjs.org/@xmtp/user-preferences-bindings-wasm/-/user-preferences-bindings-wasm-0.3.6.tgz" - integrity sha512-ANi6ikrO6YBaK978sMuEEnpREvFQQnMVaNdlviaLzmc07u4Of4s/VLNnavl4qTb4F4cvwSiBWou0wSYIE5SWYg== - -"@xmtp/xmtp-js@^11.6.3": - version "11.6.3" - resolved "https://registry.npmjs.org/@xmtp/xmtp-js/-/xmtp-js-11.6.3.tgz" - integrity sha512-Bp34Cl6/Ku3gylmQegRWgc2BX20+OD4k6fMWbEoLFKcNxkA0j8XV8Ml7IQ7C+4pyVtrlDA0at33LvmuRd6owsQ== - dependencies: - "@noble/secp256k1" "1.7.1" - "@xmtp/consent-proof-signature" "^0.1.3" - "@xmtp/proto" "3.54.0" - "@xmtp/user-preferences-bindings-wasm" "^0.3.6" - async-mutex "^0.5.0" - elliptic "^6.5.4" - long "^5.2.3" - viem "2.7.15" - -"@xmtp/xmtp-js@^12.1.0": - version "12.1.0" - resolved "https://registry.npmjs.org/@xmtp/xmtp-js/-/xmtp-js-12.1.0.tgz" - integrity sha512-4lekqPYugQaOujxmiplpotkJmU56zKz5Cxx+Zh9aqUeq+C3lPvLtcEKdlDBTWlt0ehfocYZ8R7Q3J6VXMUzE2A== - dependencies: - "@noble/secp256k1" "1.7.1" - "@xmtp/consent-proof-signature" "^0.1.3" - "@xmtp/content-type-primitives" "^1.0.1" - "@xmtp/content-type-text" "^1.0.0" - "@xmtp/proto" "^3.62.1" - "@xmtp/user-preferences-bindings-wasm" "^0.3.6" - async-mutex "^0.5.0" - elliptic "^6.5.5" - long "^5.2.3" - viem "2.7.15" - -abitype@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/abitype/-/abitype-1.0.0.tgz" - integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== - -accepts@~1.3.5: - version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.0.0: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.0.0, acorn@^8.11.3: - version "8.12.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -aria-hidden@^1.1.1: - version "1.2.4" - resolved "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz" - integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== - dependencies: - tslib "^2.0.0" - -astring@^1.8.0: - version "1.8.6" - resolved "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz" - integrity sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg== - -async-mutex@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz" - integrity sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA== - dependencies: - tslib "^2.4.0" - -autoprefixer@^10.4.16: - version "10.4.20" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz" - integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== - dependencies: - browserslist "^4.23.3" - caniuse-lite "^1.0.30001646" - fraction.js "^4.3.7" - normalize-range "^0.1.2" - picocolors "^1.0.1" - postcss-value-parser "^4.2.0" - -bail@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz" - integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bcp-47-match@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz" - integrity sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ== - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -bl@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz" - integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== - dependencies: - buffer "^6.0.3" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.3, braces@~3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browserslist@^4.23.1, browserslist@^4.23.3, "browserslist@>= 4.21.0": - version "4.23.3" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz" - integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== - dependencies: - caniuse-lite "^1.0.30001646" - electron-to-chromium "^1.5.4" - node-releases "^2.0.18" - update-browserslist-db "^1.1.0" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -cac@^6.7.14: - version "6.7.14" - resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - -camelcase-css@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - -caniuse-lite@^1.0.30001646: - version "1.0.30001649" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001649.tgz" - integrity sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ== - -ccount@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz" - integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^5.0.0: - version "5.3.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - -chalk@^5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - -character-entities-html4@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz" - integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== - -character-entities-legacy@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz" - integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== - -character-entities@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz" - integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== - -character-reference-invalid@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz" - integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== - -chokidar@^3.5.3: - version "3.6.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chroma-js@^2.4.2: - version "2.6.0" - resolved "https://registry.npmjs.org/chroma-js/-/chroma-js-2.6.0.tgz" - integrity sha512-BLHvCB9s8Z1EV4ethr6xnkl/P2YRFOGqfgvuMG/MyCbZPrTA+NeiByY6XvgF0zP4/2deU2CXnWyMa3zu1LqQ3A== - -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== - dependencies: - restore-cursor "^4.0.0" - -cli-spinners@^2.9.0: - version "2.9.2" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -clsx@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz" - integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== - -collapse-white-space@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz" - integrity sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -comma-separated-tokens@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz" - integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== - -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -confbox@^0.1.7: - version "0.1.7" - resolved "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz" - integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -create-vocs@^1.0.0-alpha.4: - version "1.0.0-alpha.5" - resolved "https://registry.npmjs.org/create-vocs/-/create-vocs-1.0.0-alpha.5.tgz" - integrity sha512-/Nr9taHX1SxL5t72DLFPYujqD8d5PDk0T8bJ9Fb/m7ck1lP20PBxHzF5IYnHI0BeTpIuGk/MQoLfT6JKpY6xnw== - dependencies: - "@clack/prompts" "^0.7.0" - cac "^6.7.14" - detect-package-manager "^3.0.1" - fs-extra "^11.1.1" - picocolors "^1.0.0" - -cross-spawn@^7.0.0, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -css-selector-parser@^3.0.0: - version "3.0.5" - resolved "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.0.5.tgz" - integrity sha512-3itoDFbKUNx1eKmVpYMFyqKX04Ww9osZ+dLgrk6GEv6KMVeXUhUnp4I5X+evw+u3ZxVU6RFXSSRxlTeMh8bA+g== - -css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -csstype@^3.0.2, csstype@^3.0.7: - version "3.1.3" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -date-fns@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz" - integrity sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww== - -debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4: - version "4.3.6" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== - dependencies: - ms "2.1.2" - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -decode-named-character-reference@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz" - integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== - dependencies: - character-entities "^2.0.0" - -dedent@^1.5.3: - version "1.5.3" - resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz" - integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== - -deep-object-diff@^1.1.9: - version "1.1.9" - resolved "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz" - integrity sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -dequal@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-node-es@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz" - integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== - -detect-package-manager@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-3.0.2.tgz" - integrity sha512-8JFjJHutStYrfWwzfretQoyNGoZVW1Fsrp4JO9spa7h/fBfwgTMEIy4/LBzRDGsxwVPHU0q+T9YvwLDJoOApLQ== - dependencies: - execa "^5.1.1" - -devlop@^1.0.0, devlop@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz" - integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== - dependencies: - dequal "^2.0.0" - -dexie-react-hooks@^1.1.7: - version "1.1.7" - resolved "https://registry.npmjs.org/dexie-react-hooks/-/dexie-react-hooks-1.1.7.tgz" - integrity sha512-Lwv5W0Hk+uOW3kGnsU9GZoR1er1B7WQ5DSdonoNG+focTNeJbHW6vi6nBoX534VKI3/uwHebYzSw1fwY6a7mTw== - -"dexie@^3.2 || ^4.0.1-alpha", dexie@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/dexie/-/dexie-4.0.8.tgz" - integrity sha512-1G6cJevS17KMDK847V3OHvK2zei899GwpDiqfEXHP1ASvme6eWJmAp9AU4s1son2TeGkWmC0g3y8ezOBPnalgQ== - -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -direction@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz" - integrity sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA== - -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.5.4: - version "1.5.4" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz" - integrity sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA== - -elliptic@^6.5.4, elliptic@^6.5.5: - version "6.5.6" - resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.6.tgz" - integrity sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^10.2.1: - version "10.3.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz" - integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -esbuild@^0.21.3: - version "0.21.5" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz" - integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== - optionalDependencies: - "@esbuild/aix-ppc64" "0.21.5" - "@esbuild/android-arm" "0.21.5" - "@esbuild/android-arm64" "0.21.5" - "@esbuild/android-x64" "0.21.5" - "@esbuild/darwin-arm64" "0.21.5" - "@esbuild/darwin-x64" "0.21.5" - "@esbuild/freebsd-arm64" "0.21.5" - "@esbuild/freebsd-x64" "0.21.5" - "@esbuild/linux-arm" "0.21.5" - "@esbuild/linux-arm64" "0.21.5" - "@esbuild/linux-ia32" "0.21.5" - "@esbuild/linux-loong64" "0.21.5" - "@esbuild/linux-mips64el" "0.21.5" - "@esbuild/linux-ppc64" "0.21.5" - "@esbuild/linux-riscv64" "0.21.5" - "@esbuild/linux-s390x" "0.21.5" - "@esbuild/linux-x64" "0.21.5" - "@esbuild/netbsd-x64" "0.21.5" - "@esbuild/openbsd-x64" "0.21.5" - "@esbuild/sunos-x64" "0.21.5" - "@esbuild/win32-arm64" "0.21.5" - "@esbuild/win32-ia32" "0.21.5" - "@esbuild/win32-x64" "0.21.5" - -"esbuild@npm:esbuild@~0.17.6 || ~0.18.0 || ~0.19.0": - version "0.19.12" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz" - integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== - optionalDependencies: - "@esbuild/aix-ppc64" "0.19.12" - "@esbuild/android-arm" "0.19.12" - "@esbuild/android-arm64" "0.19.12" - "@esbuild/android-x64" "0.19.12" - "@esbuild/darwin-arm64" "0.19.12" - "@esbuild/darwin-x64" "0.19.12" - "@esbuild/freebsd-arm64" "0.19.12" - "@esbuild/freebsd-x64" "0.19.12" - "@esbuild/linux-arm" "0.19.12" - "@esbuild/linux-arm64" "0.19.12" - "@esbuild/linux-ia32" "0.19.12" - "@esbuild/linux-loong64" "0.19.12" - "@esbuild/linux-mips64el" "0.19.12" - "@esbuild/linux-ppc64" "0.19.12" - "@esbuild/linux-riscv64" "0.19.12" - "@esbuild/linux-s390x" "0.19.12" - "@esbuild/linux-x64" "0.19.12" - "@esbuild/netbsd-x64" "0.19.12" - "@esbuild/openbsd-x64" "0.19.12" - "@esbuild/sunos-x64" "0.19.12" - "@esbuild/win32-arm64" "0.19.12" - "@esbuild/win32-ia32" "0.19.12" - "@esbuild/win32-x64" "0.19.12" - -escalade@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -estree-util-attach-comments@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz" - integrity sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw== - dependencies: - "@types/estree" "^1.0.0" - -estree-util-build-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz" - integrity sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - estree-walker "^3.0.0" - -estree-util-is-identifier-name@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz" - integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== - -estree-util-to-js@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz" - integrity sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg== - dependencies: - "@types/estree-jsx" "^1.0.0" - astring "^1.8.0" - source-map "^0.7.0" - -estree-util-value-to-estree@^3.0.0: - version "3.1.2" - resolved "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.1.2.tgz" - integrity sha512-S0gW2+XZkmsx00tU2uJ4L9hUT7IFabbml9pHh2WQqFmAbxit++YGZne0sKJbNwkj9Wvg9E4uqWl4nCIFQMmfag== - dependencies: - "@types/estree" "^1.0.0" - -estree-util-visit@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz" - integrity sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/unist" "^3.0.0" - -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -estree-walker@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eval@0.1.8: - version "0.1.8" - resolved "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz" - integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== - dependencies: - "@types/node" "*" - require-like ">= 0.1.1" - -execa@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -fast-glob@^3.3.0: - version "3.3.2" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fault@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz" - integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== - dependencies: - format "^0.2.0" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -foreground-child@^3.1.0: - version "3.2.1" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz" - integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -format@^0.2.0: - version "0.2.2" - resolved "https://registry.npmjs.org/format/-/format-0.2.2.tgz" - integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== - -fraction.js@^4.3.7: - version "4.3.7" - resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-extra@^11.1.1: - version "11.2.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-nonce@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz" - integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -github-slugger@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz" - integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@^10.3.10: - version "10.4.5" - resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^1.11.1" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^13.2.2: - version "13.2.2" - resolved "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz" - integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.3.0" - ignore "^5.2.4" - merge2 "^1.4.1" - slash "^4.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -hast-util-classnames@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-classnames/-/hast-util-classnames-3.0.0.tgz" - integrity sha512-tI3JjoGDEBVorMAWK4jNRsfLMYmih1BUOG3VV36pH36njs1IEl7xkNrVTD2mD2yYHmQCa5R/fj61a8IAF4bRaQ== - dependencies: - "@types/hast" "^3.0.0" - space-separated-tokens "^2.0.0" - -hast-util-has-property@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz" - integrity sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-heading-rank@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz" - integrity sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-is-element@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz" - integrity sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-parse-selector@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz" - integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-select@^6.0.0: - version "6.0.2" - resolved "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.2.tgz" - integrity sha512-hT/SD/d/Meu+iobvgkffo1QecV8WeKWxwsNMzcTJsKw1cKTQKSR/7ArJeURLNJF9HDjp9nVoORyNNJxrvBye8Q== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - bcp-47-match "^2.0.0" - comma-separated-tokens "^2.0.0" - css-selector-parser "^3.0.0" - devlop "^1.0.0" - direction "^2.0.0" - hast-util-has-property "^3.0.0" - hast-util-to-string "^3.0.0" - hast-util-whitespace "^3.0.0" - not "^0.1.0" - nth-check "^2.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - unist-util-visit "^5.0.0" - zwitch "^2.0.0" - -hast-util-to-estree@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz" - integrity sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw== - dependencies: - "@types/estree" "^1.0.0" - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - estree-util-attach-comments "^3.0.0" - estree-util-is-identifier-name "^3.0.0" - hast-util-whitespace "^3.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - style-to-object "^0.4.0" - unist-util-position "^5.0.0" - zwitch "^2.0.0" - -hast-util-to-jsx-runtime@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz" - integrity sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ== - dependencies: - "@types/estree" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - hast-util-whitespace "^3.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - style-to-object "^1.0.0" - unist-util-position "^5.0.0" - vfile-message "^4.0.0" - -hast-util-to-string@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz" - integrity sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-whitespace@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz" - integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== - dependencies: - "@types/hast" "^3.0.0" - -hastscript@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz" - integrity sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw== - dependencies: - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - hast-util-parse-selector "^4.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hono@^3.10.2: - version "3.12.12" - resolved "https://registry.npmjs.org/hono/-/hono-3.12.12.tgz" - integrity sha512-5IAMJOXfpA5nT+K0MNjClchzz0IhBHs2Szl7WFAhrFOsbtQsYmNynFyJRg/a3IPsmCfxcrf8txUGiNShXpK5Rg== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.4: - version "5.3.1" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -inherits@^2.0.3, inherits@^2.0.4, inherits@2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inline-style-parser@0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz" - integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== - -inline-style-parser@0.2.3: - version "0.2.3" - resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz" - integrity sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g== - -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -is-alphabetical@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz" - integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== - -is-alphanumerical@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz" - integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== - dependencies: - is-alphabetical "^2.0.0" - is-decimal "^2.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^2.0.0: - version "2.0.5" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-core-module@^2.13.0: - version "2.15.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz" - integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== - dependencies: - hasown "^2.0.2" - -is-decimal@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz" - integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz" - integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== - -is-interactive@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz" - integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz" - integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== - -is-reference@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz" - integrity sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg== - dependencies: - "@types/estree" "*" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-unicode-supported@*: - version "1.3.0" - -is-unicode-supported@^1.1.0, is-unicode-supported@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" - integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isows@1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/isows/-/isows-1.0.3.tgz" - integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== - -jackspeak@^3.1.2: - version "3.4.3" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -javascript-stringify@^2.0.1: - version "2.1.0" - resolved "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz" - integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== - -jiti@^1.21.0: - version "1.21.6" - resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz" - integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json5@^2.2.3: - version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -lilconfig@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lilconfig@^3.0.0: - version "3.1.2" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz" - integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz" - integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== - dependencies: - chalk "^5.0.0" - is-unicode-supported "^1.1.0" - -long@^5.0.0, long@^5.2.0, long@^5.2.3: - version "5.2.3" - resolved "https://registry.npmjs.org/long/-/long-5.2.3.tgz" - integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== - -longest-streak@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz" - integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lru-cache@^10.2.0: - version "10.4.3" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" - integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -mark.js@^8.11.1: - version "8.11.1" - resolved "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz" - integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ== - -markdown-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz" - integrity sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q== - -markdown-table@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz" - integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== - -mdast-util-directive@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz" - integrity sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - parse-entities "^4.0.0" - stringify-entities "^4.0.0" - unist-util-visit-parents "^6.0.0" - -mdast-util-find-and-replace@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz" - integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA== - dependencies: - "@types/mdast" "^4.0.0" - escape-string-regexp "^5.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -mdast-util-from-markdown@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz" - integrity sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - mdast-util-to-string "^4.0.0" - micromark "^4.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-decode-string "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-stringify-position "^4.0.0" - -mdast-util-frontmatter@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz" - integrity sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - escape-string-regexp "^5.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - micromark-extension-frontmatter "^2.0.0" - -mdast-util-gfm-autolink-literal@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz" - integrity sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg== - dependencies: - "@types/mdast" "^4.0.0" - ccount "^2.0.0" - devlop "^1.0.0" - mdast-util-find-and-replace "^3.0.0" - micromark-util-character "^2.0.0" - -mdast-util-gfm-footnote@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz" - integrity sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.1.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - -mdast-util-gfm-strikethrough@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz" - integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm-table@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz" - integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - markdown-table "^3.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm-task-list-item@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz" - integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz" - integrity sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw== - dependencies: - mdast-util-from-markdown "^2.0.0" - mdast-util-gfm-autolink-literal "^2.0.0" - mdast-util-gfm-footnote "^2.0.0" - mdast-util-gfm-strikethrough "^2.0.0" - mdast-util-gfm-table "^2.0.0" - mdast-util-gfm-task-list-item "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdx-expression@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz" - integrity sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdx-jsx@^3.0.0: - version "3.1.2" - resolved "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz" - integrity sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - ccount "^2.0.0" - devlop "^1.1.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - parse-entities "^4.0.0" - stringify-entities "^4.0.0" - unist-util-remove-position "^5.0.0" - unist-util-stringify-position "^4.0.0" - vfile-message "^4.0.0" - -mdast-util-mdx@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz" - integrity sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w== - dependencies: - mdast-util-from-markdown "^2.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdxjs-esm@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz" - integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-phrasing@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz" - integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== - dependencies: - "@types/mdast" "^4.0.0" - unist-util-is "^6.0.0" - -mdast-util-to-hast@^13.0.0, mdast-util-to-hast@^13.0.2: - version "13.2.0" - resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz" - integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - "@ungap/structured-clone" "^1.0.0" - devlop "^1.0.0" - micromark-util-sanitize-uri "^2.0.0" - trim-lines "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - -mdast-util-to-markdown@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz" - integrity sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - longest-streak "^3.0.0" - mdast-util-phrasing "^4.0.0" - mdast-util-to-string "^4.0.0" - micromark-util-decode-string "^2.0.0" - unist-util-visit "^5.0.0" - zwitch "^2.0.0" - -mdast-util-to-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz" - integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== - dependencies: - "@types/mdast" "^4.0.0" - -media-query-parser@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/media-query-parser/-/media-query-parser-2.0.2.tgz" - integrity sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w== - dependencies: - "@babel/runtime" "^7.12.5" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromark-core-commonmark@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz" - integrity sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA== - dependencies: - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - micromark-factory-destination "^2.0.0" - micromark-factory-label "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-factory-title "^2.0.0" - micromark-factory-whitespace "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-html-tag-name "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-subtokenize "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-directive@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.1.tgz" - integrity sha512-VGV2uxUzhEZmaP7NSFo2vtq7M2nUD+WfmYQD+d8i/1nHbzE+rMy9uzTvUybBbNiVbrhOZibg3gbyoARGqgDWyg== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-factory-whitespace "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - parse-entities "^4.0.0" - -micromark-extension-frontmatter@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz" - integrity sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg== - dependencies: - fault "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-autolink-literal@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz" - integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-footnote@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz" - integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== - dependencies: - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-strikethrough@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz" - integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== - dependencies: - devlop "^1.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-table@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz" - integrity sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-tagfilter@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz" - integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== - dependencies: - micromark-util-types "^2.0.0" - -micromark-extension-gfm-task-list-item@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz" - integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz" - integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== - dependencies: - micromark-extension-gfm-autolink-literal "^2.0.0" - micromark-extension-gfm-footnote "^2.0.0" - micromark-extension-gfm-strikethrough "^2.0.0" - micromark-extension-gfm-table "^2.0.0" - micromark-extension-gfm-tagfilter "^2.0.0" - micromark-extension-gfm-task-list-item "^2.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-mdx-expression@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz" - integrity sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-factory-mdx-expression "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-mdx-jsx@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz" - integrity sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w== - dependencies: - "@types/acorn" "^4.0.0" - "@types/estree" "^1.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - micromark-factory-mdx-expression "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - vfile-message "^4.0.0" - -micromark-extension-mdx-md@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz" - integrity sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ== - dependencies: - micromark-util-types "^2.0.0" - -micromark-extension-mdxjs-esm@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz" - integrity sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-position-from-estree "^2.0.0" - vfile-message "^4.0.0" - -micromark-extension-mdxjs@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz" - integrity sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ== - dependencies: - acorn "^8.0.0" - acorn-jsx "^5.0.0" - micromark-extension-mdx-expression "^3.0.0" - micromark-extension-mdx-jsx "^3.0.0" - micromark-extension-mdx-md "^2.0.0" - micromark-extension-mdxjs-esm "^3.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-destination@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz" - integrity sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-label@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz" - integrity sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw== - dependencies: - devlop "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-mdx-expression@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz" - integrity sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-position-from-estree "^2.0.0" - vfile-message "^4.0.0" - -micromark-factory-space@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz" - integrity sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-title@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz" - integrity sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A== - dependencies: - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-whitespace@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz" - integrity sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA== - dependencies: - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-character@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz" - integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== - dependencies: - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-chunked@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz" - integrity sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-classify-character@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz" - integrity sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-combine-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz" - integrity sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ== - dependencies: - micromark-util-chunked "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-decode-numeric-character-reference@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz" - integrity sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-decode-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz" - integrity sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz" - integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA== - -micromark-util-events-to-acorn@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz" - integrity sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA== - dependencies: - "@types/acorn" "^4.0.0" - "@types/estree" "^1.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - estree-util-visit "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - vfile-message "^4.0.0" - -micromark-util-html-tag-name@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz" - integrity sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw== - -micromark-util-normalize-identifier@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz" - integrity sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-resolve-all@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz" - integrity sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA== - dependencies: - micromark-util-types "^2.0.0" - -micromark-util-sanitize-uri@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz" - integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-subtokenize@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz" - integrity sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q== - dependencies: - devlop "^1.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-symbol@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz" - integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw== - -micromark-util-types@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz" - integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w== - -micromark@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz" - integrity sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ== - dependencies: - "@types/debug" "^4.0.0" - debug "^4.0.0" - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-subtokenize "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.7" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz" - integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -"mime-db@>= 1.43.0 < 2": - version "1.53.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz" - integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@^9.0.3, minimatch@^9.0.4: - version "9.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - -minisearch@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz" - integrity sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ== - -mlly@^1.4.2, mlly@^1.7.1: - version "1.7.1" - resolved "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz" - integrity sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA== - dependencies: - acorn "^8.11.3" - pathe "^1.1.2" - pkg-types "^1.1.1" - ufo "^1.5.3" - -modern-ahocorasick@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/modern-ahocorasick/-/modern-ahocorasick-1.0.1.tgz" - integrity sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -node-releases@^2.0.18: - version "2.0.18" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz" - integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -not@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/not/-/not-0.1.0.tgz" - integrity sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nth-check@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -ora@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz" - integrity sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw== - dependencies: - chalk "^5.3.0" - cli-cursor "^4.0.0" - cli-spinners "^2.9.0" - is-interactive "^2.0.0" - is-unicode-supported "^1.3.0" - log-symbols "^5.1.0" - stdin-discarder "^0.1.0" - string-width "^6.1.0" - strip-ansi "^7.1.0" - -outdent@^0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz" - integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A== - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz" - integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -package-json-from-dist@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz" - integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== - -parse-entities@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz" - integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== - dependencies: - "@types/unist" "^2.0.0" - character-entities "^2.0.0" - character-entities-legacy "^3.0.0" - character-reference-invalid "^2.0.0" - decode-named-character-reference "^1.0.0" - is-alphanumerical "^2.0.0" - is-decimal "^2.0.0" - is-hexadecimal "^2.0.0" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.11.1: - version "1.11.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathe@^1.1.1, pathe@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz" - integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== - -periscopic@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz" - integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^3.0.0" - is-reference "^3.0.0" - -picocolors@^1.0.0, picocolors@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-types@^1.1.1: - version "1.1.3" - resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz" - integrity sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA== - dependencies: - confbox "^0.1.7" - mlly "^1.7.1" - pathe "^1.1.2" - -postcss-import@^15.1.0: - version "15.1.0" - resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz" - integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-js@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz" - integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== - dependencies: - camelcase-css "^2.0.1" - -postcss-load-config@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz" - integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== - dependencies: - lilconfig "^3.0.0" - yaml "^2.3.4" - -postcss-nested@^6.0.1: - version "6.2.0" - resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz" - integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== - dependencies: - postcss-selector-parser "^6.1.1" - -postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz" - integrity sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.3.6, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.39, postcss@>=8.0.9: - version "8.4.41" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz" - integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.1" - source-map-js "^1.2.0" - -prop-types@^15.7.2: - version "15.8.1" - resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -property-information@^6.0.0: - version "6.5.0" - resolved "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz" - integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== - -protobufjs@^7.0.0: - version "7.3.2" - resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz" - integrity sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/node" ">=13.7.0" - long "^5.0.0" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -"react-dom@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", react-dom@^18.2.0, react-dom@>=16.8, react-dom@>=16.8.0, react-dom@latest: - version "18.3.1" - resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz" - integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.2" - -react-fast-compare@^3.1.1: - version "3.2.2" - resolved "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz" - integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== - -react-helmet@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz" - integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw== - dependencies: - object-assign "^4.1.1" - prop-types "^15.7.2" - react-fast-compare "^3.1.1" - react-side-effect "^2.1.0" - -react-intersection-observer@^9.5.3: - version "9.13.0" - resolved "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.13.0.tgz" - integrity sha512-y0UvBfjDiXqC8h0EWccyaj4dVBWMxgEx0t5RGNzQsvkfvZwugnKwxpu70StY4ivzYuMajavwUDjH4LJyIki9Lw== - -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-refresh@^0.14.2: - version "0.14.2" - resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz" - integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== - -react-remove-scroll-bar@^2.3.4: - version "2.3.6" - resolved "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz" - integrity sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g== - dependencies: - react-style-singleton "^2.2.1" - tslib "^2.0.0" - -react-remove-scroll@2.5.7: - version "2.5.7" - resolved "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz" - integrity sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA== - dependencies: - react-remove-scroll-bar "^2.3.4" - react-style-singleton "^2.2.1" - tslib "^2.1.0" - use-callback-ref "^1.3.0" - use-sidecar "^1.1.2" - -react-router-dom@^6.20.0: - version "6.26.0" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.0.tgz" - integrity sha512-RRGUIiDtLrkX3uYcFiCIxKFWMcWQGMojpYZfcstc63A1+sSnVgILGIm9gNUA6na3Fm1QuPGSBQH2EMbAZOnMsQ== - dependencies: - "@remix-run/router" "1.19.0" - react-router "6.26.0" - -react-router@6.26.0: - version "6.26.0" - resolved "https://registry.npmjs.org/react-router/-/react-router-6.26.0.tgz" - integrity sha512-wVQq0/iFYd3iZ9H2l3N3k4PL8EEHcb0XlU2Na8nEwmiXgIUElEH6gaJDtUQxJ+JFzmIXaQjfdpcGWaM6IoQGxg== - dependencies: - "@remix-run/router" "1.19.0" - -react-side-effect@^2.1.0: - version "2.1.2" - resolved "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz" - integrity sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw== - -react-style-singleton@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz" - integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== - dependencies: - get-nonce "^1.0.0" - invariant "^2.2.4" - tslib "^2.0.0" - -"react@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.14.0 || ^17 || ^18", "react@^16.3.0 || ^17.0.0 || ^18.0.0", "react@^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.x || ^17.x || ^18.x", react@^18.2.0, react@^18.3.1, react@>=16, react@>=16.3.0, react@>=16.8, react@>=16.8.0, react@latest: - version "18.3.1" - resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz" - integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== - dependencies: - loose-envify "^1.1.0" - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - -readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -rehype-autolink-headings@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz" - integrity sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw== - dependencies: - "@types/hast" "^3.0.0" - "@ungap/structured-clone" "^1.0.0" - hast-util-heading-rank "^3.0.0" - hast-util-is-element "^3.0.0" - unified "^11.0.0" - unist-util-visit "^5.0.0" - -rehype-class-names@^1.0.14: - version "1.0.14" - resolved "https://registry.npmjs.org/rehype-class-names/-/rehype-class-names-1.0.14.tgz" - integrity sha512-eFBt6Qxb7K77y6P82tUtN9rKpU7guWlaK4XA4RrrSFHkUTCvr2D3cgb9OR5d4t1AaGOvR59FH9nRwUnbpn9AEg== - dependencies: - "@types/hast" "^3.0.0" - hast-util-classnames "^3.0.0" - hast-util-select "^6.0.0" - unified "^10.1.2" - -rehype-slug@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz" - integrity sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A== - dependencies: - "@types/hast" "^3.0.0" - github-slugger "^2.0.0" - hast-util-heading-rank "^3.0.0" - hast-util-to-string "^3.0.0" - unist-util-visit "^5.0.0" - -remark-directive@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz" - integrity sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-directive "^3.0.0" - micromark-extension-directive "^3.0.0" - unified "^11.0.0" - -remark-frontmatter@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz" - integrity sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-frontmatter "^2.0.0" - micromark-extension-frontmatter "^2.0.0" - unified "^11.0.0" - -remark-gfm@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz" - integrity sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-gfm "^3.0.0" - micromark-extension-gfm "^3.0.0" - remark-parse "^11.0.0" - remark-stringify "^11.0.0" - unified "^11.0.0" - -remark-mdx-frontmatter@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/remark-mdx-frontmatter/-/remark-mdx-frontmatter-4.0.0.tgz" - integrity sha512-PZzAiDGOEfv1Ua7exQ8S5kKxkD8CDaSb4nM+1Mprs6u8dyvQifakh+kCj6NovfGXW+bTvrhjaR3srzjS2qJHKg== - dependencies: - "@types/mdast" "^4.0.0" - estree-util-is-identifier-name "^3.0.0" - estree-util-value-to-estree "^3.0.0" - toml "^3.0.0" - unified "^11.0.0" - yaml "^2.0.0" - -remark-mdx@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz" - integrity sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA== - dependencies: - mdast-util-mdx "^3.0.0" - micromark-extension-mdxjs "^3.0.0" - -remark-parse@^11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz" - integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-from-markdown "^2.0.0" - micromark-util-types "^2.0.0" - unified "^11.0.0" - -remark-rehype@^11.0.0: - version "11.1.0" - resolved "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz" - integrity sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - mdast-util-to-hast "^13.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -remark-stringify@^11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz" - integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-to-markdown "^2.0.0" - unified "^11.0.0" - -"require-like@>= 0.1.1": - version "0.1.2" - resolved "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz" - integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== - -resolve@^1.1.7, resolve@^1.22.2: - version "1.22.8" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rollup@^1.20.0||^2.0.0||^3.0.0||^4.0.0, rollup@^4.13.0, rollup@>=2: - version "4.20.0" - resolved "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz" - integrity sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw== - dependencies: - "@types/estree" "1.0.5" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.20.0" - "@rollup/rollup-android-arm64" "4.20.0" - "@rollup/rollup-darwin-arm64" "4.20.0" - "@rollup/rollup-darwin-x64" "4.20.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.20.0" - "@rollup/rollup-linux-arm-musleabihf" "4.20.0" - "@rollup/rollup-linux-arm64-gnu" "4.20.0" - "@rollup/rollup-linux-arm64-musl" "4.20.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.20.0" - "@rollup/rollup-linux-riscv64-gnu" "4.20.0" - "@rollup/rollup-linux-s390x-gnu" "4.20.0" - "@rollup/rollup-linux-x64-gnu" "4.20.0" - "@rollup/rollup-linux-x64-musl" "4.20.0" - "@rollup/rollup-win32-arm64-msvc" "4.20.0" - "@rollup/rollup-win32-ia32-msvc" "4.20.0" - "@rollup/rollup-win32-x64-msvc" "4.20.0" - fsevents "~2.3.2" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.8.0: - version "7.8.1" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -scheduler@^0.23.2: - version "0.23.2" - resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz" - integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== - dependencies: - loose-envify "^1.1.0" - -semver@^6.3.1: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -send@0.18.0: - version "0.18.0" - resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serve-static@^1.15.0: - version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shiki@^1.10.3, shiki@1.12.1: - version "1.12.1" - resolved "https://registry.npmjs.org/shiki/-/shiki-1.12.1.tgz" - integrity sha512-nwmjbHKnOYYAe1aaQyEBHvQymJgfm86ZSS7fT8OaPRr4sbAcBNz7PbfAikMEFSDQ6se2j2zobkXvVKcBOm0ysg== - dependencies: - "@shikijs/core" "1.12.1" - "@types/hast" "^3.0.4" - -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== - -source-map@^0.7.0: - version "0.7.4" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -space-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz" - integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -stdin-discarder@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz" - integrity sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ== - dependencies: - bl "^5.0.0" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string-width@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz" - integrity sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^10.2.1" - strip-ansi "^7.0.1" - -stringify-entities@^4.0.0: - version "4.0.4" - resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz" - integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== - dependencies: - character-entities-html4 "^2.0.0" - character-entities-legacy "^3.0.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1, strip-ansi@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -style-to-object@^0.4.0: - version "0.4.4" - resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz" - integrity sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg== - dependencies: - inline-style-parser "0.1.1" - -style-to-object@^1.0.0: - version "1.0.6" - resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz" - integrity sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA== - dependencies: - inline-style-parser "0.2.3" - -sucrase@^3.32.0: - version "3.35.0" - resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz" - integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== - dependencies: - "@jridgewell/gen-mapping" "^0.3.2" - commander "^4.0.0" - glob "^10.3.10" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tabbable@^6.0.0: - version "6.2.0" - resolved "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz" - integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== - -tailwindcss@^3.3.3: - version "3.4.7" - resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.7.tgz" - integrity sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ== - dependencies: - "@alloc/quick-lru" "^5.2.0" - arg "^5.0.2" - chokidar "^3.5.3" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.3.0" - glob-parent "^6.0.2" - is-glob "^4.0.3" - jiti "^1.21.0" - lilconfig "^2.1.0" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.23" - postcss-import "^15.1.0" - postcss-js "^4.0.1" - postcss-load-config "^4.0.1" - postcss-nested "^6.0.1" - postcss-selector-parser "^6.0.11" - resolve "^1.22.2" - sucrase "^3.32.0" - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -toml@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz" - integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== - -trim-lines@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz" - integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== - -trough@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz" - integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== - -ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== - -tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0: - version "2.6.3" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== - -twoslash-protocol@0.2.9: - version "0.2.9" - resolved "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.2.9.tgz" - integrity sha512-uKQl8UboT6JU4VAtYaSI3DbNtgaNhFaTpCSMy/n3tRl5lMlMhrjiuNKdqx15xjcviconuGJ9oObkz1h9zJFrJg== - -twoslash@^0.2.9, twoslash@~0.2.9: - version "0.2.9" - resolved "https://registry.npmjs.org/twoslash/-/twoslash-0.2.9.tgz" - integrity sha512-oj7XY6h8E9nTZBmfRE1gpsSSUqAQo5kcIpFkXyQPp8UCsyCQsUlP2bJ2s32o02c1n5+xl4h9rcCsQ1F97Z6LZg== - dependencies: - "@typescript/vfs" "1.5.0" - twoslash-protocol "0.2.9" - -typescript@*, typescript@>=5.0.4, typescript@latest: - version "5.5.4" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz" - integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== - -ua-parser-js@^1.0.36: - version "1.0.38" - resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.38.tgz" - integrity sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ== - -ufo@^1.5.3: - version "1.5.4" - resolved "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz" - integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== - -undici-types@~6.13.0: - version "6.13.0" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz" - integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== - -undici@^5.8.1: - version "5.28.4" - resolved "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz" - integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== - dependencies: - "@fastify/busboy" "^2.0.0" - -unified@^10.1.2: - version "10.1.2" - resolved "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz" - integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== - dependencies: - "@types/unist" "^2.0.0" - bail "^2.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^4.0.0" - trough "^2.0.0" - vfile "^5.0.0" - -unified@^11.0.0, unified@^11.0.4, unified@^11.0.5: - version "11.0.5" - resolved "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz" - integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== - dependencies: - "@types/unist" "^3.0.0" - bail "^2.0.0" - devlop "^1.0.0" - extend "^3.0.0" - is-plain-obj "^4.0.0" - trough "^2.0.0" - vfile "^6.0.0" - -unist-util-is@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz" - integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-position-from-estree@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz" - integrity sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-position@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz" - integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-remove-position@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz" - integrity sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q== - dependencies: - "@types/unist" "^3.0.0" - unist-util-visit "^5.0.0" - -unist-util-stringify-position@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz" - integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-stringify-position@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz" - integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-visit-parents@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz" - integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - -unist-util-visit@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz" - integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -update-browserslist-db@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz" - integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== - dependencies: - escalade "^3.1.2" - picocolors "^1.0.1" - -use-callback-ref@^1.3.0: - version "1.3.2" - resolved "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz" - integrity sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA== - dependencies: - tslib "^2.0.0" - -use-sidecar@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz" - integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== - dependencies: - detect-node-es "^1.1.0" - tslib "^2.0.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz" - integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vfile-message@^3.0.0: - version "3.1.4" - resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz" - integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw== - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^3.0.0" - -vfile-message@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz" - integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-stringify-position "^4.0.0" - -vfile@^5.0.0: - version "5.3.7" - resolved "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz" - integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g== - dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^3.0.0" - vfile-message "^3.0.0" - -vfile@^6.0.0: - version "6.0.2" - resolved "https://registry.npmjs.org/vfile/-/vfile-6.0.2.tgz" - integrity sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg== - dependencies: - "@types/unist" "^3.0.0" - unist-util-stringify-position "^4.0.0" - vfile-message "^4.0.0" - -viem@2.7.15: - version "2.7.15" - resolved "https://registry.npmjs.org/viem/-/viem-2.7.15.tgz" - integrity sha512-I2RMQpg1/MC7fXVjHxeXRPU9k/WEOvZajK/KZSr7DChS0AaZ7uovsQWppwBn2wvZWguTCIRAHqzMwIEGku95yQ== - dependencies: - "@adraffy/ens-normalize" "1.10.0" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@scure/bip32" "1.3.2" - "@scure/bip39" "1.2.1" - abitype "1.0.0" - isows "1.0.3" - ws "8.13.0" - -vite-node@^1.2.0: - version "1.6.0" - resolved "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz" - integrity sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw== - dependencies: - cac "^6.7.14" - debug "^4.3.4" - pathe "^1.1.1" - picocolors "^1.0.0" - vite "^5.0.0" - -"vite@^2.2.3 || ^3.0.0 || ^4.0.3 || ^5.0.0", "vite@^4.2.0 || ^5.0.0", vite@^5.0.0, vite@^5.0.11, vite@^5.3.3: - version "5.3.5" - resolved "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz" - integrity sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA== - dependencies: - esbuild "^0.21.3" - postcss "^8.4.39" - rollup "^4.13.0" - optionalDependencies: - fsevents "~2.3.3" - -vocs@latest: - version "1.0.0-alpha.55" - resolved "https://registry.npmjs.org/vocs/-/vocs-1.0.0-alpha.55.tgz" - integrity sha512-RT456+7uG4qNz7CwIb7xxhQAt/wJwjUzoi3fNgzfR62v4j/1gTdgn+yqD5vqv7RzJh7j4Iw3R9GF6jriAfiwng== - dependencies: - "@floating-ui/react" "^0.26.6" - "@hono/node-server" "^1.2.3" - "@mdx-js/react" "^3.0.0" - "@mdx-js/rollup" "^3.0.0" - "@noble/hashes" "^1.3.2" - "@radix-ui/colors" "^3.0.0" - "@radix-ui/react-accordion" "^1.1.2" - "@radix-ui/react-dialog" "^1.0.5" - "@radix-ui/react-icons" "^1.3.0" - "@radix-ui/react-label" "^2.0.2" - "@radix-ui/react-navigation-menu" "^1.1.4" - "@radix-ui/react-popover" "^1.0.7" - "@radix-ui/react-tabs" "^1.0.4" - "@shikijs/rehype" "^1.10.3" - "@shikijs/transformers" "^1.10.3" - "@shikijs/twoslash" "^1.10.3" - "@vanilla-extract/css" "^1.14.0" - "@vanilla-extract/dynamic" "^2.1.0" - "@vanilla-extract/vite-plugin" "^3.9.4" - "@vitejs/plugin-react" "4.3.1" - autoprefixer "^10.4.16" - cac "^6.7.14" - chroma-js "^2.4.2" - clsx "^2.0.0" - compression "^1.7.4" - create-vocs "^1.0.0-alpha.4" - cross-spawn "^7.0.3" - fs-extra "^11.1.1" - globby "^13.2.2" - hastscript "^8.0.0" - hono "^3.10.2" - mark.js "^8.11.1" - mdast-util-directive "^3.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-gfm "^3.0.0" - mdast-util-to-hast "^13.0.2" - minimatch "^9.0.3" - minisearch "^6.3.0" - ora "^7.0.1" - p-limit "^5.0.0" - postcss "^8.4.31" - react-helmet "^6.1.0" - react-intersection-observer "^9.5.3" - react-router-dom "^6.20.0" - rehype-autolink-headings "^7.1.0" - rehype-class-names "^1.0.14" - rehype-slug "^6.0.0" - remark-directive "^3.0.0" - remark-frontmatter "^5.0.0" - remark-gfm "^4.0.0" - remark-mdx-frontmatter "^4.0.0" - remark-parse "^11.0.0" - serve-static "^1.15.0" - shiki "^1.10.3" - tailwindcss "^3.3.3" - toml "^3.0.0" - twoslash "~0.2.9" - ua-parser-js "^1.0.36" - unified "^11.0.4" - unist-util-visit "^5.0.0" - vite "^5.3.3" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -ws@*, ws@8.13.0: - version "8.13.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yaml@^2.0.0, yaml@^2.3.4: - version "2.5.0" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz" - integrity sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yocto-queue@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz" - integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== - -"zod@^3 >=3.22.0", zod@^3.23.8: - version "3.23.8" - resolved "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz" - integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== - -zwitch@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz" - integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==