diff --git a/.husky/commit-msg b/.husky/commit-msg
index 8796e175e..6700f5128 100755
--- a/.husky/commit-msg
+++ b/.husky/commit-msg
@@ -1,4 +1,2 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
-
-npx commitlint --edit $1
\ No newline at end of file
diff --git a/.husky/pre-commit b/.husky/pre-commit
index d24fdfc60..152598269 100755
--- a/.husky/pre-commit
+++ b/.husky/pre-commit
@@ -1,4 +1,2 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
-
-npx lint-staged
diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts
index fa86128b4..fd547062d 100644
--- a/.vitepress/theme/index.ts
+++ b/.vitepress/theme/index.ts
@@ -2,6 +2,7 @@
import { h } from "vue";
import Theme from "vitepress/theme";
import "./style.css";
+import "./tailwind.postcss";
export default {
extends: Theme,
diff --git a/.vitepress/theme/tailwind.postcss b/.vitepress/theme/tailwind.postcss
new file mode 100644
index 000000000..8a90c8074
--- /dev/null
+++ b/.vitepress/theme/tailwind.postcss
@@ -0,0 +1,5 @@
+@tailwind base;
+
+@tailwind components;
+
+@tailwind utilities;
\ No newline at end of file
diff --git a/components/AddressCheckV2.jsx b/components/AddressCheckV2.jsx
new file mode 100644
index 000000000..b6bdf44a5
--- /dev/null
+++ b/components/AddressCheckV2.jsx
@@ -0,0 +1,84 @@
+import React, { useState } from "react";
+import LoadingIcon from "./LoadingIcon";
+import PlayIcon from "./PlayIcon";
+
+export default function AddressCheckV2() {
+ const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+ const [response, setResponse] = useState({});
+ const [loading, setLoading] = useState(false);
+
+ const query = `
+ query AddressCheckV2($address: AddressRouteInputTypeV2!) {
+ routingV2 {
+ addressCheckV2(address: $address) {
+ isValid
+ address
+ chain
+ }
+ }
+ }`;
+
+ const vars = {
+ address: {
+ address: "0x7045916CEEFf58547E80E31d2c60ae5F67D63027",
+ chain: "ETH",
+ },
+ };
+ const fetchAddressCheckV2 = async () => {
+ setLoading(true);
+ setResponse({});
+
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ variables: vars,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ setResponse(result);
+ })
+ .catch((error) => {
+ setResponse(error);
+ })
+ .finally(() => {
+ setLoading(false);
+ });
+ };
+
+ return (
+ <>
+
+
+
+
+
+ Response
+
+
+ {JSON.stringify(response, null, 2)}
+
+
+ >
+ );
+}
diff --git a/components/BridgeableTokens.jsx b/components/BridgeableTokens.jsx
new file mode 100644
index 000000000..6e77b9c97
--- /dev/null
+++ b/components/BridgeableTokens.jsx
@@ -0,0 +1,86 @@
+import React, { useState } from "react";
+import LoadingIcon from "./LoadingIcon";
+import PlayIcon from "./PlayIcon";
+
+export default function BridgeableTokens() {
+ const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+ const [response, setResponse] = useState({});
+ const [loading, setLoading] = useState(false);
+
+ const query = `
+ query BridgeableTokens($bridgeToken: BridgeTokenInput) {
+ routingV2 {
+ bridgeableTokens(bridgeToken: $bridgeToken) {
+ asset {
+ id
+ chain
+ name
+ }
+ }
+ }
+ }`;
+
+ const vars = {
+ bridgeToken: {
+ address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
+ name: "ETH.USDC",
+ },
+ };
+ const fetchBridgeableTokens = async () => {
+ setLoading(true);
+ setResponse({});
+
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ variables: vars,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ setResponse(result);
+ })
+ .catch((error) => {
+ setResponse(error);
+ })
+ .finally(() => {
+ setLoading(false);
+ });
+ };
+
+ return (
+ <>
+
+
+
+
+
+ Response
+
+
+ {JSON.stringify(response, null, 2)}
+
+
+ >
+ );
+}
diff --git a/components/ChainV2GraphQL.jsx b/components/ChainV2GraphQL.jsx
new file mode 100644
index 000000000..0af7caca4
--- /dev/null
+++ b/components/ChainV2GraphQL.jsx
@@ -0,0 +1,84 @@
+import React, { useState } from "react";
+import LoadingIcon from "./LoadingIcon";
+import PlayIcon from "./PlayIcon";
+
+export default function ChainV2GraphQL() {
+ const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+ const [response, setResponse] = useState({});
+ const [loading, setLoading] = useState(false);
+
+ const query = `
+ query ChainV2($name: String!) {
+ routingV2 {
+ chainV2(name: $name) {
+ name
+ tokens {
+ asset {
+ contract
+ symbol
+ }
+ }
+ }
+ }
+ }`;
+ const vars = {
+ name: "ETH",
+ };
+ const fetchChainV2 = async () => {
+ setLoading(true);
+ setResponse({});
+
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ variables: vars,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ setResponse(result);
+ })
+ .catch((error) => {
+ setResponse(error);
+ })
+ .finally(() => {
+ setLoading(false);
+ });
+ };
+
+ return (
+ <>
+
+
+
+
+
+ Response
+
+
+ {JSON.stringify(response, null, 2)}
+
+
+ >
+ );
+}
diff --git a/components/ChainsV2.jsx b/components/ChainsV2.jsx
new file mode 100644
index 000000000..37a974155
--- /dev/null
+++ b/components/ChainsV2.jsx
@@ -0,0 +1,57 @@
+import React, { useState } from "react";
+import LoadingIcon from "./LoadingIcon";
+import PlayIcon from "./PlayIcon";
+
+export default function ChainsV2() {
+ const ENDPOINT = "https://routingapi.xdefiservices.com/";
+ const [response, setResponse] = useState([]);
+ const [loading, setLoading] = useState(false);
+
+ const fetchChainsV2 = async () => {
+ setLoading(true);
+ setResponse([]);
+ fetch(ENDPOINT + "chains")
+ .then((response) => response.json())
+ .then((result) => {
+ setResponse(result);
+ })
+ .catch((error) => {
+ setResponse(error);
+ })
+ .finally(() => {
+ setLoading(false);
+ });
+ };
+
+ return (
+ <>
+
+
+
+
+
+ Response
+
+
+ {JSON.stringify(response, null, 2)}
+
+
+ >
+ );
+}
diff --git a/components/ChainsV2GraphQL.jsx b/components/ChainsV2GraphQL.jsx
new file mode 100644
index 000000000..096778ec1
--- /dev/null
+++ b/components/ChainsV2GraphQL.jsx
@@ -0,0 +1,74 @@
+import React, { useState } from "react";
+import LoadingIcon from "./LoadingIcon";
+import PlayIcon from "./PlayIcon";
+
+export default function ChainsV2GraphQL() {
+ const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+ const [response, setResponse] = useState({});
+ const [loading, setLoading] = useState(false);
+
+ const query = `
+ query ChainsV2 {
+ routingV2 {
+ chainsV2 {
+ name
+ }
+ }
+ }`;
+ const fetchChainsV2 = async () => {
+ setLoading(true);
+ setResponse({});
+
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ setResponse(result);
+ })
+ .catch((error) => {
+ setResponse(error);
+ })
+ .finally(() => {
+ setLoading(false);
+ });
+ };
+
+ return (
+ <>
+
+
+
+
+
+ Response
+
+
+ {JSON.stringify(response, null, 2)}
+
+
+ >
+ );
+}
diff --git a/components/DailyVolume.jsx b/components/DailyVolume.jsx
new file mode 100644
index 000000000..1b4062830
--- /dev/null
+++ b/components/DailyVolume.jsx
@@ -0,0 +1,81 @@
+import React, { useState } from "react";
+import LoadingIcon from "./LoadingIcon";
+import PlayIcon from "./PlayIcon";
+import moment from "moment";
+
+export default function DailyVolume() {
+ const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+ const [response, setResponse] = useState({});
+ const [loading, setLoading] = useState(false);
+
+ const query = `
+ query Volume($startDate: String!) {
+ routingV2 {
+ dailyVolume(startDate: $startDate) {
+ date
+ volume
+ }
+ }
+ }`;
+
+ const vars = {
+ startDate: moment().subtract(1, "weeks").format("YYYY-MM-DD"),
+ };
+ const fetchDailyVolume = async () => {
+ setLoading(true);
+ setResponse({});
+
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ variables: vars,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ setResponse(result);
+ })
+ .catch((error) => {
+ setResponse(error);
+ })
+ .finally(() => {
+ setLoading(false);
+ });
+ };
+
+ return (
+ <>
+
+
+
+
+
+ Response
+
+
+ {JSON.stringify(response, null, 2)}
+
+
+ >
+ );
+}
diff --git a/components/LoadingIcon.jsx b/components/LoadingIcon.jsx
new file mode 100644
index 000000000..8f3d652d6
--- /dev/null
+++ b/components/LoadingIcon.jsx
@@ -0,0 +1,28 @@
+import React from "react";
+
+export default function LoadingIcon() {
+ return (
+
+ );
+}
diff --git a/components/PlayIcon.jsx b/components/PlayIcon.jsx
new file mode 100644
index 000000000..bf9cf7828
--- /dev/null
+++ b/components/PlayIcon.jsx
@@ -0,0 +1,18 @@
+import React from "react";
+
+export default function PlayIcon() {
+ return (
+
+ );
+}
diff --git a/components/RouteV2.jsx b/components/RouteV2.jsx
new file mode 100644
index 000000000..729e5de6a
--- /dev/null
+++ b/components/RouteV2.jsx
@@ -0,0 +1,129 @@
+import React, { useState } from "react";
+import LoadingIcon from "./LoadingIcon";
+import PlayIcon from "./PlayIcon";
+
+export default function RouteV2() {
+ const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+ const [response, setResponse] = useState({});
+ const [loading, setLoading] = useState(false);
+
+ const query = `
+ query RouteV2($srcToken: String!, $destToken: String!, $slippage: String!, $addresses: [AddressRouteInputTypeV2!]!, $destAddress: String!, $amountSource: String, $infiniteApproval: Boolean) {
+ routingV2 {
+ routeV2(srcToken: $srcToken, destToken: $destToken, slippage: $slippage, addresses: $addresses, destAddress: $destAddress, amountSource: $amountSource, infiniteApproval: $infiniteApproval) {
+ addresses {
+ chain
+ address
+ }
+ destAddress
+ priceRate
+ priceRateText
+ slippage
+ priceImpact
+ amountIn
+ tradesRoute {
+ provider {
+ id
+ }
+ amountIn
+ amountOut
+ minAmountReceived
+ assetIn {
+ id
+ }
+ assetOut {
+ id
+ }
+ fee {
+ networkFeeDollar
+ networkFeeAsset
+ inboundFeeDollar
+ inboundFeeAsset
+ swapFee
+ feeRateTransaction
+ xdefiSwapFee
+ xdefiSwapFeeDollar
+ }
+ priceRateUsdAssetOut
+ priceRateUsdAssetIn
+ tradeType
+ }
+ gasPrices
+ approvalInfiniteFlag
+ errorBuildingRoute
+ }
+ }
+ }`;
+ const vars = {
+ srcToken: "AVAX.0x63a72806098bd3d9520cc43356dd78afe5d386d9",
+ destToken: "AVAX.0xc7198437980c041c805a1edcba50c1ce5db95118",
+ slippage: "1",
+ addresses: [
+ {
+ chain: "AVAX",
+ address: "0x5329ebC5903bE1Ca544762191343F60EDb5C9Ca3",
+ },
+ ],
+ destAddress: "0x5329ebC5903bE1Ca544762191343F60EDb5C9Ca3",
+ amountSource: "0.23",
+ infiniteApproval: null,
+ };
+
+ const fetchRouteV2 = async () => {
+ setLoading(true);
+ setResponse({});
+
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ variables: vars,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ setResponse(result);
+ })
+ .catch((error) => {
+ setResponse(error);
+ })
+ .finally(() => {
+ setLoading(false);
+ });
+ };
+
+ return (
+ <>
+
+
+
+
+
+ Response
+
+
+ {JSON.stringify(response, null, 2)}
+
+
+ >
+ );
+}
diff --git a/components/TokenV2.jsx b/components/TokenV2.jsx
new file mode 100644
index 000000000..a5c73e8cc
--- /dev/null
+++ b/components/TokenV2.jsx
@@ -0,0 +1,87 @@
+import React, { useState } from "react";
+import LoadingIcon from "./LoadingIcon";
+import PlayIcon from "./PlayIcon";
+
+export default function TokenV2() {
+ const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+ const [response, setResponse] = useState({});
+ const [loading, setLoading] = useState(false);
+
+ const query = `
+ query TokenV2($tokenV2Id: String!) {
+ routingV2 {
+ tokenV2(id: $tokenV2Id) {
+ id
+ asset {
+ id
+ name
+ symbol
+ chain
+ contract
+ image
+ }
+ }
+ }
+ }`;
+
+ const vars = {
+ tokenV2Id: "ac9437fb-4429-4240-b8f9-077dd7fe0a4f",
+ };
+ const fetchTokenV2 = async () => {
+ setLoading(true);
+ setResponse({});
+
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ variables: vars,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ setResponse(result);
+ })
+ .catch((error) => {
+ setResponse(error);
+ })
+ .finally(() => {
+ setLoading(false);
+ });
+ };
+
+ return (
+ <>
+
+
+
+
+
+ Response
+
+
+ {JSON.stringify(response, null, 2)}
+
+
+ >
+ );
+}
diff --git a/components/TokensV2.jsx b/components/TokensV2.jsx
new file mode 100644
index 000000000..7101ffcaa
--- /dev/null
+++ b/components/TokensV2.jsx
@@ -0,0 +1,87 @@
+import React, { useState } from "react";
+import LoadingIcon from "./LoadingIcon";
+import PlayIcon from "./PlayIcon";
+
+export default function TokensV2() {
+ const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+ const [response, setResponse] = useState({});
+ const [loading, setLoading] = useState(false);
+
+ const query = `
+ query TokensV2($names: [String!]) {
+ routingV2 {
+ tokensV2(names: $names) {
+ id
+ asset {
+ id
+ name
+ symbol
+ chain
+ contract
+ image
+ }
+ }
+ }
+ }`;
+
+ const vars = {
+ names: ["AVAX.AVAX", "AVAX.STG"],
+ };
+ const fetchTokensV2 = async () => {
+ setLoading(true);
+ setResponse({});
+
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ variables: vars,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ setResponse(result);
+ })
+ .catch((error) => {
+ setResponse(error);
+ })
+ .finally(() => {
+ setLoading(false);
+ });
+ };
+
+ return (
+ <>
+
+
+
+
+
+ Response
+
+
+ {JSON.stringify(response, null, 2)}
+
+
+ >
+ );
+}
diff --git a/package.json b/package.json
index 910234f4a..a3bdd8404 100644
--- a/package.json
+++ b/package.json
@@ -33,7 +33,11 @@
},
"dependencies": {
"@fortawesome/fontawesome-free": "^6.4.2",
+ "autoprefixer": "^10.4.18",
"markdown-it-mathjax3": "^4.3.2",
+ "moment": "^2.30.1",
+ "postcss": "^8.4.35",
+ "tailwindcss": "^3.4.1",
"v-tooltip": "^2.1.3",
"vitepress-theme-api": "^0.1.7",
"vue-clipboard2": "^0.3.3"
@@ -46,5 +50,11 @@
},
"*.md": [
"yarn format"
- ]
+ ],
+ "postcss": {
+ "plugins": {
+ "tailwindcss": {},
+ "autoprefixer": {}
+ }
+ }
}
diff --git a/routing/introduction.md b/routing/introduction.md
index 76540b503..f3204b17f 100644
--- a/routing/introduction.md
+++ b/routing/introduction.md
@@ -26,13 +26,12 @@ To check the health status of the API just send a GET request to the above URL:
::: code-group
```ts [Request]
-import requests
-
URL = "https://routingapi.xdefiservices.com"
-response = requests.get(URL)
+response = await fetch(URL)
+
+console.log(response.status)
-print(response.json())
```
```ts [Response]
diff --git a/routing/query-mutation-details.md b/routing/query-mutation-details.md
index 1f6dd0474..edfb1a39e 100644
--- a/routing/query-mutation-details.md
+++ b/routing/query-mutation-details.md
@@ -15,75 +15,46 @@ Both of these queries return information about assets available in one (chain, g
While `chainsV2` has no parameters, `chainV2` takes one of the following chain names:
-::: code-group
-
-```ts [Request]
-import requests
-
-URL = "https://routingapi.xdefiservices.com/"
-
-response = requests.get(URL + "chains/")
-
-print(response.json())
-```
-
-```ts [Response]
-[
- "BNB",
- "BTC",
- "BCH",
- "LTC",
- "ETH",
- "THOR",
- "DOGE",
- "BSC",
- "POLYGON",
- "FTM",
- "AVAX",
- "ARBITRUM",
- "AURORA",
- "NEAR",
- "SOL",
- "COSMOS",
- "OSMOSIS",
-];
+```js [JavaScript]
+const ENDPOINT = "https://routingapi.xdefiservices.com/";
+
+const fetchChainsV2 = async () => {
+ fetch(ENDPOINT + "chains")
+ .then((response) => response.json())
+ .then((result) => {
+ console.log(result);
+ });
+};
```
-:::
+
Both queries return objects of type `RoutingChainTypeV2` defined as:
```ts
-type RoutingChainTypeV2 {
- name: String!
- tokens: [RoutingTokenTypeV2]!
+interface RoutingChainTypeV2 {
+ name: string;
+ tokens: RoutingTokenTypeV2[];
}
-type RoutingTokenTypeV2 {
- id: String!
- asset: CryptoAsset!
- listProviders: [String!]!
+interface RoutingTokenTypeV2 {
+ id: string;
+ asset: CryptoAsset;
+ listProviders: string[];
}
-type CryptoAsset {
- """Unique asset identifier"""
- id: ID
-
- """Known name that identifies token"""
- name: String
-
- """The symbol that identifies token"""
- symbol: String
-
- """Asset image"""
- image: String
-
- """supported list of chain are in [`Chain`] enum"""
- chain: String
+interface CryptoAsset {
+ id?: string;
+ name?: string;
+ symbol?: string;
+ image?: string;
+ chain: string;
+ contract: string;
+ price: AssetAmountType;
+}
- """ID of token (contract address in most chain)"""
- contract: String
- price: AssetAmountType
+interface AssetAmountType {
+ // Define the properties of AssetAmountType here if necessary
}
```
@@ -91,17 +62,15 @@ type CryptoAsset {
Both queries return objects of type `RoutingTokenTypeV2` defined in the above section but take different parameters:
-- `tokenV2` takes a routing specific uid
-- `tokensV2` takes either a list of uids or symbols (of the `chain.symbol` format)
+### `tokenV2`
-::: code-group
+`tokenV2` takes a routing specific uid
-```ts [tokenV2 request]
-import requests
-
-GRAPHQL_ENDPOINT = "https://gql-router.staging.xdefiservices.com/graphql"
+::: code-group
-query = """
+```js [JavaScript]
+const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+const query = `
query TokenV2($tokenV2Id: String!) {
routingV2 {
tokenV2(id: $tokenV2Id) {
@@ -116,102 +85,93 @@ query TokenV2($tokenV2Id: String!) {
}
}
}
-}"""
-
-vars = {
- "tokenV2Id": "2a1456da-6642-4293-b383-baefcdf4c22e"
-}
-
-response = requests.post(GRAPHQL_ENDPOINT,
- json = {"query": query, "variables": vars})
-
-print(response.json())
+}`;
+
+const vars = {
+ tokenV2Id: "2a1456da-6642-4293-b383-baefcdf4c22e",
+};
+const fetchTokenV2 = async () => {
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ variables: vars,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ console.log(result);
+ });
+};
+
+fetchTokenV2();
```
-```ts [tokenV2 response]
+```js [Variables]
{
- "data": {
- "routingV2": {
- "tokenV2": {
- "id": "2a1456da-6642-4293-b383-baefcdf4c22e",
- "asset": {
- "id": "13f2d52b-3f12-42cd-9295-acd862f941be",
- "name": "Binance USD",
- "symbol": "BUSD",
- "chain": "Avalanche",
- "contract": "0x19860ccb0a68fd4213ab9d8266f7bbf05a8dde98",
- "image": "https://assets.coingecko.com/coins/images/9576/thumb/BUSD.png?1568947766"
- }
- }
- }
- }
+ tokenV2Id: "2a1456da-6642-4293-b383-baefcdf4c22e",
}
```
-```ts [tokenV2 request]
-import requests
+:::
+
+
+
+### `tokensV2`
-GRAPHQL_ENDPOINT = "https://gql-router.staging.xdefiservices.com/graphql"
+`tokensV2` takes either a list of uids or symbols (of the `chain.symbol` format)
-query = """
+::: code-group
+
+```js [JavaScript]
+const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+const query = `
query TokensV2($names: [String!]) {
routingV2 {
tokensV2(names: $names) {
- id
- asset {
- chain
- contract
- id
- name
- symbol
- }
+ isValid
+ address
+ chain
}
}
-}"""
-
-vars = {
- "names": ["AVAX.AVAX", "AVAX.STG"]
-}
-
-response = requests.post(GRAPHQL_ENDPOINT,
- json = {"query": query, "variables": vars})
-
-print(response.json())
+}`;
+
+const vars = {
+ names: ["AVAX.AVAX", "AVAX.STG"],
+};
+const fetchTokensV2 = async () => {
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ variables: vars,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ console.log(result);
+ });
+};
+
+fetchTokensV2();
```
-```ts [tokenV2 response]
+```js [Variables]
{
- "data": {
- "routingV2": {
- "tokensV2": [
- {
- "id": "ac9437fb-4429-4240-b8f9-077dd7fe0a4f",
- "asset": {
- "chain": "Avalanche",
- "contract": "AVAX",
- "id": "a0e2d381-dde0-4bb3-a5a1-f227eec4b89c",
- "name": "Avalanche",
- "symbol": "AVAX"
- }
- },
- {
- "id": "6ddf09f6-515b-49b8-9c34-e8ad5b8f3f52",
- "asset": {
- "chain": "Avalanche",
- "contract": "0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590",
- "id": "705cd798-944f-402d-93a7-8df0e88f66aa",
- "name": "Stargate Finance",
- "symbol": "STG"
- }
- }
- ]
- }
- }
+ names: ["AVAX.AVAX", "AVAX.STG"],
}
```
:::
+
+
## bridgeableTokens
This query takes a `BridgeTokenInput` object or a routing-specific uid as input. For more details on usage, see example provided in the previous section.
@@ -364,64 +324,74 @@ The address is then checked:
::: code-group
-```ts [Request]
-import requests
-
-GRAPHQL_ENDPOINT = "https://gql-router.staging.xdefiservices.com/graphql"
-
-query = """
+```js [JavaScript]
+const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+const query = `
query AddressCheckV2($address: AddressRouteInputTypeV2!) {
routingV2 {
addressCheckV2(address: $address) {
- isValid
- address
- chain
+ id
+ asset {
+ id
+ name
+ symbol
+ chain
+ contract
+ image
+ }
}
}
-}"""
-
-vars = {
- "address": {
- "address": "0x7045916CEEFf58547E80E31d2c60ae5F67D63027",
- "chain": "ETH"
- }
-}
-
-response = requests.post(GRAPHQL_ENDPOINT,
- json = {"query": query, "variables": vars})
-
-print(response.json())
+}`;
+
+const vars = {
+ address: {
+ address: "0x7045916CEEFf58547E80E31d2c60ae5F67D63027",
+ chain: "ETH",
+ },
+};
+const fetchAddressCheckV2 = async () => {
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ variables: vars,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ console.log(result);
+ });
+};
+
+fetchAddressCheckV2();
```
-```ts [Response]
+```js [Variables]
{
- "data": {
- "routingV2": {
- "addressCheckV2": {
- "isValid": true,
- "address": "0x7045916CEEFf58547E80E31d2c60ae5F67D63027",
- "chain": "ETH"
- }
- }
- }
+ address: {
+ address: "0x7045916CEEFf58547E80E31d2c60ae5F67D63027",
+ chain: "ETH",
+ },
}
```
:::
+
+
## referrerSummary
Rather than taking an input, this query relies on the header being passed through the `POST` request.
-::: code-group
-
-```ts [Request]
-import requests
+```js
+const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+const ACCOUNT_ADDRESS = "Your account address";
+const SIGNED_MESSAGE = "The message signed with registered address";
-ACCOUNT_ADDRESS = "Input your registered account address here"
-SIGNED_MESSAGE = "Input the message signed with registered address"
-
-referralSummaryQuery = """
+const query = `
query ReferralFeeSummary {
routingV2 {
referrerSummary {
@@ -442,41 +412,26 @@ query ReferralFeeSummary {
userType
}
}
-}
-"""
-
-auth_header = f"{ACCOUNT_ADDRESS}:{SIGNED_MESSAGE}"
-
-response = requests.post("https://gql-router.dev.xdefiservices.com/graphql", headers={"Authorization": auth_header},
- json={"query":referralSummaryQuery})
-
-print(response.json())
-```
-
-```ts [Response]
-{
- "data": {
- "routingV2": {
- "referrerSummary": {
- "referrerId": "29fde42d-edd6-495b-9fbc-26f7d60a8c23",
- "url": "cryptodev",
- "lifetimeFees": "3.93",
- "last7dFees": "0.0",
- "last30dFees": "3.93",
- "claimableFees": "3.93",
- "feeTier": "0.5000",
- "totalReferralVolume": "1563.45",
- "totalAssociatedAddresses": 1,
- "claimHistory": [],
- "userType": "referrer"
- }
- }
- }
-}
+}`;
+
+const fetchReferrerSummary = async () => {
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ Authorization: `${ACCOUNT_ADDRESS}:${SIGNED_MESSAGE}`,
+ },
+ query: JSON.stringify({
+ query: query,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ console.log(result);
+ });
+};
```
-:::
-
This query returns a `ReferralFeeSummary` object:
```ts
@@ -501,12 +456,10 @@ This query takes a date in the format `"YYYY-MM-DD"` and return for each date af
::: code-group
-```ts [Request]
-import requests
-
-GRAPHQL_ENDPOINT = "https://gql-router.staging.xdefiservices.com/graphql"
-
-query = """
+```js [JavaScript]
+import moment from "moment";
+const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+const query = `
query Volume($startDate: String!) {
routingV2 {
dailyVolume(startDate: $startDate) {
@@ -514,107 +467,43 @@ query Volume($startDate: String!) {
volume
}
}
-}"""
-
-vars = {
- "startDate": "2023-02-10"
-}
-
-response = requests.post(GRAPHQL_ENDPOINT,
- json = {"query": query, "variables": vars})
-
-print(response.json())
+}`;
+
+const vars = {
+ startDate: moment().subtract(1, "weeks").format("YYYY-MM-DD"),
+};
+const fetchDailyVolume = async () => {
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ variables: vars,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ console.log(result);
+ });
+};
+
+fetchDailyVolume();
```
-```ts [Response]
+```js [Variables]
{
- "data": {
- "routingV2": {
- "dailyVolume": [
- {
- "date": "2023-02-10 00:00:00",
- "volume": "0"
- },
- {
- "date": "2023-02-11 00:00:00",
- "volume": "0"
- },
- {
- "date": "2023-02-12 00:00:00",
- "volume": "0"
- },
- {
- "date": "2023-02-13 00:00:00",
- "volume": "0"
- },
- {
- "date": "2023-02-14 00:00:00",
- "volume": "542168235.4621111283289613321"
- },
- {
- "date": "2023-02-15 00:00:00",
- "volume": "0"
- },
- {
- "date": "2023-02-16 00:00:00",
- "volume": "1.36766277387363113848884"
- },
- {
- "date": "2023-02-17 00:00:00",
- "volume": "0"
- },
- {
- "date": "2023-02-18 00:00:00",
- "volume": "0"
- },
- {
- "date": "2023-02-19 00:00:00",
- "volume": "0"
- },
- {
- "date": "2023-02-20 00:00:00",
- "volume": "541.5600506040581120064440045"
- },
- {
- "date": "2023-02-21 00:00:00",
- "volume": "53996.82460348166920058343796"
- },
- {
- "date": "2023-02-22 00:00:00",
- "volume": "1242.267101413565768895289237"
- },
- {
- "date": "2023-02-23 00:00:00",
- "volume": "0.4174599441870186719936558866"
- },
- {
- "date": "2023-02-24 00:00:00",
- "volume": "0"
- },
- {
- "date": "2023-02-25 00:00:00",
- "volume": "54.06038287335565896855478036"
- },
- {
- "date": "2023-02-26 00:00:00",
- "volume": "0"
- },
- {
- "date": "2023-02-27 00:00:00",
- "volume": "0"
- },
- {
- "date": "2023-02-28 00:00:00",
- "volume": "258.4792191407147582760637100"
- }
- ]
- }
- }
+ startDate: "YYYY-MM-DD",
}
```
:::
+In demo startDate is set to 1 week ago.
+
+
+
## transactionsV2
This mutation takes a `RouteInputTypeV2` as an input and returns `PostRouteTypeV2` which only contains a `routeId`.
@@ -697,52 +586,85 @@ This mutation returns a string if trade status has been added/updated successful
## claimFees
-For referral programme participants, this triggers a claim of a fraction of the fees generated through referred swaps. A **ClaimStatus** object is returned:
-
-```ts
-type ClaimStatus {
- claimId: String!
- status: String!
- amountUsd: Float!
-}
-```
+For referral programme participants, this triggers a claim of a fraction of the fees generated through referred swaps.
This mutation does not take an input but rather relies on the header which should include an `Authorization` field (similar to the `referralSummary` query)
-::: code-group
-
-```ts [Request]
-import requests
-
-ACCOUNT_ADDRESS = "Input your registered account address here"
-SIGNED_MESSAGE = "Input the message signed with registered address"
+```js
+const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+const ACCOUNT_ADDRESS = "Your account address";
+const SIGNED_MESSAGE = "The message signed with registered address";
-query = """
+const query = `
mutation claimFees {
claimFees {
- claimId
- status
- amountUsd
+ claimId
+ status
+ amountUsd
}
}
-"""
-
-auth_header = f"{ACCOUNT_ADDRESS}:{SIGNED_MESSAGE}"
-
-response = requests.post("https://gql-router.dev.xdefiservices.com/graphql", headers={"Authorization": auth_header},
- json={"query":query})
-
-print(response.json())
+`;
+
+const fetchClaimFees = async () => {
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ Authorization: `${ACCOUNT_ADDRESS}:${SIGNED_MESSAGE}`,
+ },
+ query: JSON.stringify({
+ query: query,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ console.log(result);
+ });
+};
+
+fetchClaimFees();
```
-```ts [Response]
-{
- "data": {
- "claimFees": {
- "claimId": "6beb9dbc-6dd9-4f7c-8c66-2d951b6590be",
- "status": "PENDING",
- "amountUsd": 3.93
- }
- }
+This query returns a **ClaimStatus** object is returned:
+
+```ts
+type ClaimStatus {
+ claimId: String!
+ status: String!
+ amountUsd: Float!
}
```
+
+
diff --git a/routing/routing-graph-ql-api.md b/routing/routing-graph-ql-api.md
index ffaa41199..98d7d6a89 100644
--- a/routing/routing-graph-ql-api.md
+++ b/routing/routing-graph-ql-api.md
@@ -11,7 +11,7 @@ Additionally, "helper" queries are available to get information about available
In this section, we present the Graph QL schema upon which the routing API is built. The schema gives the full picture of what data can be queried with what parameters.
Here's a list of publicly available queries (root view):
-```bash
+```ts
type RoutingTypeV2 {
tokenV2(id: String!): RoutingTokenTypeV2!
tokensV2(names: [String!] = null, tokenIds: [String!] = null): [RoutingTokenTypeV2!]!
@@ -41,7 +41,7 @@ type RoutingTypeV2 {
In addition to the above read-only operations, mutations are made available to add new routes and trades, and alter transactions statuses.
-```bash
+```ts
type Mutation {
transactionsV2(routeData: RouteInputTypeV2!): PostRouteTypeV2!
transactionHashV2(routeId: String!, tradeId: String!, transactionHash: String!): String!
@@ -60,62 +60,77 @@ type Mutation {
This endpoint is similar to the ones discussed earlier but needs extra parameters, and sometimes a header with authentication token, to perform certain read/write operations (queries vs. mutations).
-Querying this endpoint to fetch the list of tokens/chains one can bridge to from `ETH.USDC` would look like this in Python:
+Querying this endpoint to fetch the list of tokens/chains one can bridge to from `ETH.USDC` would look like this in JavaScript:
::: code-group
-```ts [Request]
-import requests
-
-GRAPHQL_ENDPOINT = "https://gql-router.staging.xdefiservices.com/graphql"
-
-query = """
-query BridgeableTokens($bridgeToken: BridgeTokenInput) {
- routingV2 {
- bridgeableTokens(bridgeToken: $bridgeToken) {
- asset {
- id
- chain
- name
+```js [JavaScript]
+const GRAPHQL_ENDPOINT = "https://gql-router.staging.xdefiservices.com/graphql";
+const query = `
+ query BridgeableTokens($bridgeToken: BridgeTokenInput) {
+ routingV2 {
+ bridgeableTokens(bridgeToken: $bridgeToken) {
+ asset {
+ id
+ chain
+ name
+ }
}
}
}
-}"""
-
-vars = {
- "bridgeToken" : {
- "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
- "name": "ETH.USDC"
- }
+`;
+const vars = {
+ bridgeToken: {
+ address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
+ name: "ETH.USDC",
+ },
+};
+
+async function fetchBridgeableTokens() {
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ variables: vars,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ console.log(result);
+ });
}
-response = requests.post(GRAPHQL_ENDPOINT,
- json = {"query": query, "variables": vars})
-
-print(response.json())
+fetchBridgeableTokens();
```
-```ts [Response]
-{'data': {'routingV2': {'bridgeableTokens': [{'asset': {'id': '53056b61-998a-4da5-a3f1-00e38182438a',
- 'chain': 'Avalanche',
- 'name': 'USD Coin'}},
- {'asset': {'id': '53056b61-998a-4da5-a3f1-00e38182438a',
- 'chain': 'Fantom',
- 'name': 'USD Coin'}},
- {'asset': {'id': '02fb8e38-58dc-4f06-b85f-f84b4a17e0bc',
- 'chain': 'Avalanche',
- 'name': 'USD Coin Avalanche Bridged (USDC.e)'}},
- {'asset': {'id': '53056b61-998a-4da5-a3f1-00e38182438a',
- 'chain': 'Arbitrum',
- 'name': 'USD Coin'}},
- {'asset': {'id': '53056b61-998a-4da5-a3f1-00e38182438a',
- 'chain': 'BinanceSmartChain',
- 'name': 'USD Coin'}},
- {'asset': {'id': '53056b61-998a-4da5-a3f1-00e38182438a',
- 'chain': 'Polygon',
- 'name': 'USD Coin'}}]}}}
+```js [Variables]
+{
+ bridgeToken: {
+ address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
+ name: "ETH.USDC",
+ },
+}
```
:::
+
+
+
+
A comprehensive routing example, from requesting a route to getting transaction data, is shown in the [Overview](./overview) section.
diff --git a/routing/swap-example.md b/routing/swap-example.md
index 588f259ee..145658f00 100644
--- a/routing/swap-example.md
+++ b/routing/swap-example.md
@@ -12,57 +12,49 @@ In this step, we prepare the data for the chains and assets that our routing sys
#### 1.1 Get list of supported chains
-[Explorer query ChainsV2](https://gql-router.xdefiservices.com/graphql?explorerURLState=N4IgJg9gxgrgtgUwHYBcQC4QEcYIE4CeABAMIAWAhgJZIDOAagExHAA6SRReEMKNA5kxbtOnKJRoNmbDqM5IKiEaIC%2BytUhUgVQA)
+[Explorer query ChainsV2](https://gql-router.xdefi.services/graphql?explorerURLState=N4IgJg9gxgrgtgUwHYBcQC4QEcYIE4CeABAMIAWAhgJZIDOAagExHAA6SRReEMKNA5kxbtOnKJRoNmbDqM5IKiEaIC%2BytUhUgVQA)
-::: code-group
-
-```ts [Query]
+```js
+const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+const query = `
query ChainsV2 {
routingV2 {
chainsV2 {
- name
+ name,
}
}
-}
-```
-
-```ts [Response]
-{
- "data": {
- "routingV2": {
- "chainV2": {
- "name": "AVAX",
- "tokens": [
- ...
- {
- "asset": {
- "contract": "0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7",
- "symbol": "USDT"
- }
- },
- {
- "asset": {
- "contract": "0x63a72806098bd3d9520cc43356dd78afe5d386d9",
- "symbol": "AAVE"
- }
- }
- ...
- ]
- }
- }
- }
-}
+}`;
+const fetchChainsV2 = async () => {
+ setLoading(true);
+ setResponse({});
+
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ console.log(result);
+ });
+};
+
+fetchChainsV2();
```
-:::
+
#### 1.2 Get list of assets for supported chain
-[Explorer query ChainsV2](https://gql-router.xdefiservices.com/graphql?explorerURLState=N4IgJg9gxgrgtgUwHYBcQC4QEcYIE4CeABAMIAWAhgJZIBqATABQAkSFi6RAyinjQOYBCAJRFgAHSREieCDBQCGYydOlRKNBozYcirdglESpq6ToQrTRFBADWyAM7KTVohQcOEKZ69NQIqHgUUCiWvkQOBHAARhAANmFWAL6J0ikuROlpkkkgADQgAG4UfBTRcQgOGCDG0uIg5vWc9QCCtC0AGvU5IElAA)
+[Explorer query ChainV2](https://gql-router.xdefi.services/graphql?explorerURLState=N4IgJg9gxgrgtgUwHYBcQC4QEcYIE4CeABAMIAWAhgJZIBqATABQAkSFi6RAyinjQOYBCAJRFgAHSREieCDBQCGYydOlRKNBozYcirdglESpq6ToQrTRFBADWyAM7KTVohQcOEKZ69NQIqHgUUCiWvkQOBHAARhAANmFWAL6J0ikuROlpkkkgADQgAG4UfBTRcQgOGCDG0uIg5vWc9QCCtC0AGvU5IElAA)
-::: code-group
-
-```ts [Query]
+```js
+const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+const query = `
query ChainV2($name: String!) {
routingV2 {
chainV2(name: $name) {
@@ -75,54 +67,45 @@ query ChainV2($name: String!) {
}
}
}
-}
-```
-
-```ts [Variables]
-{
- "name": "AVAX"
-}
+}`;
+const vars = {
+ name: "ETH",
+};
+const fetchChainV2 = async () => {
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ variables: vars,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ console.log(result);
+ });
+};
+
+fetchChainV2();
```
-```ts [Response]
-{
- "data": {
- "routingV2": {
- "chainV2": {
- "name": "AVAX",
- "tokens": [
- ...
- {
- "asset": {
- "contract": "0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7",
- "symbol": "USDT"
- }
- },
- {
- "asset": {
- "contract": "0x63a72806098bd3d9520cc43356dd78afe5d386d9",
- "symbol": "AAVE"
- }
- }
- ...
- ]
- }
- }
- }
-}
-```
+In demo we use "ETH" as a chain name.
-:::
+
### Step 2
Query swap route. This query returns a `tradesRoute` collection, along with other properties. Based on this data, we can show the user which providers we will use, the amount of fees in dollars and assets for each transaction, and thus calculate the total fees and approximate transaction time in seconds.
-[Explorer query RouteV2](https://gql-router.xdefiservices.com/graphql?explorerURLState=N4IgJg9gxgrgtgUwHYBcQC4QEcYIE4CeABAEoQwoIBqATABQAkAznlACoQDWy6RAyijwBLJAHMAhABoiDMAiYoO3JLwHCxUmUwA2QgA56AhqISrBIidIaGwYPPKbzeAbQCCt%2B0yZkKCAJJIehRsBHrUNOIAupqy8ijudg5m6pYyhnDkqHzkrKb85mJWIgBmIkKUrgZ4EABuhtq8AEIQENoIhkgAlETAADpIRETVFBa0Pf2Dg8OUtHQs7Fw8WqxKyNJyCqsqMhuKi0jSOvpGJrzMugbGCNI2iV5OaR4O8utxCZ5MZ7vvDjcZMFkclA8tZ-oCYLlpCUyhUqrV6mdoUhyghKnpqnVtN0%2BgNJoNbh95ONcXjBlAABaGEQTUn4p5eGl4gC%2BjMm33pTFZg3RQmBJEMlC5RB5fIFCDYCAAHighUdLiYhSL-HAjFAZSTJulMigAkLBDZ5D5KMTadyMUI5HgTabBhahYMWRq8VqATqkPaiC7UAB5CgeuAiVxglAkBDAoQ1BBgD2Ge5u602u1OyaOm2xxwoX0oBOmpM21Om4oIBA52lIBAoADuEDwnAAYsWACKtbSGPAewblqs1%2BvF1xxjtEEQAI0yYAbCGb2lb7eTeJHY4n-Yzg6YlcMegng6LCH5lDYeA6TEMaqEEHdc8mkrkpT4683xcH14Qt-vE6nM49BdpSr3CAAqkwYDLhWWYer%2BYqAcBca6pe%2BpyCEYRCt%2BkyiLGAAKwjApyyYbui8LaAEpTIpQdatqIQr4NUeCNDAQjaGAFhGggrIFo6TIgJIIB1MIhjDm0TAYCAOKDL0IDzFsYm8GJrhUK4AAaAB0AAMkoAGwAMyGAA7DQAAcylqcpACcenDmAGlgMZACsNDKVAUAACwaRp1lqbY2l6YYRbWRZenucZYmSDSYm7JJGBEDJclKapUDaQAjKZznaaZ9nKY58VQAZ1mGPFUZQMOhjWfZmUIL5w42fF8V6UFIXiRcJwsRFYnxbVuJiQSzychFzgiaaYkUlS7rNSAskKW1NodRyUmRSAqnWRpNDGQgw4AMLWcZykacOACi8WrUVjmOdpak0Il8Uac5dZGTtjbDtZq3GQdGliaxkTBe14BvNNI3zYty1rRtW27fth3Had52XRp13Kbd92Pc9E2zV6KDZBCwIzWJymKTQL2cXVSIomiGL1DNSAwNO-QcUyQA)
+[Explorer query RouteV2](https://gql-router.xdefi.services/graphql?explorerURLState=N4IgJg9gxgrgtgUwHYBcQC4QEcYIE4CeABAEoQwoIBqATABQAkAznlACoQDWy6RAyijwBLJAHMAhABoiDMAiYoO3JLwHCxUmUwA2QgA56AhqISrBIidIaGwYPPKbzeAbQCCt%2B0yZkKCAJJIehRsBHrUNOIAupqy8ijudg5m6pYyhnDkqHzkrKb85mJWIgBmIkKUrgZ4EABuhtq8AEIQENoIhkgAlETAADpIRETVFBa0Pf2Dg8OUtHQs7Fw8WqxKyNJyCqsqMhuKi0jSOvpGJrzMugbGCNI2iV5OaR4O8utxCZ5MZ7vvDjcZMFkclA8tZ-oCYLlpCUyhUqrV6mdoUhyghKnpqnVtN0%2BgNJoNbh95ONcXjBlAABaGEQTUn4p5eGl4gC%2BjMm33pTFZg3RQmBJEMlC5RB5fIFCDYCAAHighUdLiYhSL-HAjFAZSTJulMigAkLBDZ5D5KMTadyMUI5HgTabBhahYMWRq8VqATqkPaiC7UAB5CgeuAiVxglAkBDAoQ1BBgD2Ge5u602u1OyaOm2xxwoX0oBOmpM21Om4oIBA52lIBAoADuEDwnAAYsWACKtbSGPAewblqs1%2BvF1xxjtEEQAI0yYAbCGb2lb7eTeJHY4n-Yzg6YlcMegng6LCH5lDYeA6TEMaqEEHdc8mkrkpT4683xcH14Qt-vE6nM49BdpSr3CAAqkwYDLhWWYer%2BYqAcBca6pe%2BpyCEYRCt%2BkyiLGAAKwjApyyYbui8LaAEpTIpQdatqIQr4NUeCNDAQjaGAFhGggrIFo6TIgJIIB1MIhjDm0TAYCAOKDL0IDzFsYm8GJrhUK4AAaAB0AAMkoAGwAMyGAA7DQAAcylqcpACcenDmAGlgMZACsNDKVAUAACwaRp1lqbY2l6YYRbWRZenucZYmSDSYm7JJGBEDJclKapUDaQAjKZznaaZ9nKY58VQAZ1mGPFUZQMOhjWfZmUIL5w42fF8V6UFIXiRcJwsRFYnxbVuJiQSzychFzgiaaYkUlS7rNSAskKW1NodRyUmRSAqnWRpNDGQgw4AMLWcZykacOACi8WrUVjmOdpak0Il8Uac5dZGTtjbDtZq3GQdGliaxkTBe14BvNNI3zYty1rRtW27fth3Had52XRp13Kbd92Pc9E2zV6KDZBCwIzWJymKTQL2cXVSIomiGL1DNSAwNO-QcUyQA)
::: code-group
-```ts [Query]
+```ts [JavaScript]
+const GRAPHQL_ENDPOINT = "https://gql-router.xdefi.services/graphql";
+const query = `
query RouteV2($srcToken: String!, $destToken: String!, $slippage: String!, $addresses: [AddressRouteInputTypeV2!]!, $destAddress: String!, $amountSource: String, $infiniteApproval: Boolean) {
routingV2 {
routeV2(srcToken: $srcToken, destToken: $destToken, slippage: $slippage, addresses: $addresses, destAddress: $destAddress, amountSource: $amountSource, infiniteApproval: $infiniteApproval) {
@@ -168,108 +151,57 @@ query RouteV2($srcToken: String!, $destToken: String!, $slippage: String!, $addr
errorBuildingRoute
}
}
-}srcToken
+}`;
+const vars = {
+ srcToken: "AVAX.0x63a72806098bd3d9520cc43356dd78afe5d386d9",
+ destToken: "AVAX.0xc7198437980c041c805a1edcba50c1ce5db95118",
+ slippage: "1",
+ addresses: [
+ {
+ chain: "AVAX",
+ address: "0x5329ebC5903bE1Ca544762191343F60EDb5C9Ca3",
+ },
+ ],
+ destAddress: "0x5329ebC5903bE1Ca544762191343F60EDb5C9Ca3",
+ amountSource: "0.23",
+ infiniteApproval: null,
+};
+
+const fetchRouteV2 = async () => {
+ await fetch(GRAPHQL_ENDPOINT, {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ query,
+ variables: vars,
+ }),
+ })
+ .then((response) => response.json())
+ .then((result) => {
+ console.log(result);
+ });
+};
+
+fetchRouteV2();
```
-```ts [Variables]
+```js [Variables]
{
"srcToken": "AVAX.0x63a72806098bd3d9520cc43356dd78afe5d386d9",
"destToken": "AVAX.0xc7198437980c041c805a1edcba50c1ce5db95118",
"slippage": "1",
"addresses": [
{
- "chain": "AVAX",
- "address": "0x5329ebC5903bE1Ca544762191343F60EDb5C9Ca3"
+ "chain": "AVAX",
+ "address": "0x5329ebC5903bE1Ca544762191343F60EDb5C9Ca3"
},
-],
+ ],
"destAddress": "0x5329ebC5903bE1Ca544762191343F60EDb5C9Ca3",
"amountSource": "0.23",
"infiniteApproval": null
}
-
-
-```
-
-```ts [Response]
-{
- "data": {
- "routingV2": {
- "routeV2": {
- "addresses": [
- {
- "chain": "AVAX",
- "address": "0x5329ebC5903bE1Ca544762191343F60EDb5C9Ca3"
- }
- ],
- "destAddress": "0x5329ebC5903bE1Ca544762191343F60EDb5C9Ca3",
- "priceRate": "83.41570269977431352948063293",
- "priceRateText": "1 AAVE = 83.415703 USDT",
- "slippage": "1",
- "priceImpact": "-1.71%",
- "amountIn": "0.23",
- "tradesRoute": [
- {
- "provider": {
- "id": "87c6a323-45ef-4153-9d6c-143cb5b9e98b"
- },
- "amountIn": "0.23",
- "amountOut": "0.23",
- "minAmountReceived": "0.23",
- "assetIn": {
- "id": "4a4edfe5-1cdb-4142-b068-de4ee7e3a1d1"
- },
- "assetOut": {
- "id": "4a4edfe5-1cdb-4142-b068-de4ee7e3a1d1"
- },
- "fee": {
- "networkFeeDollar": "0",
- "networkFeeAsset": "0",
- "inboundFeeDollar": "0.03291354",
- "inboundFeeAsset": "0.001782",
- "swapFee": "0.03291354",
- "feeRateTransaction": "29.7",
- "xdefiSwapFee": "0",
- "xdefiSwapFeeDollar": "0"
- },
- "priceRateUsdAssetOut": "83.36156590872216",
- "priceRateUsdAssetIn": "83.36156590872216",
- "tradeType": "APPROVAL"
- },
- {
- "provider": {
- "id": "87c6a323-45ef-4153-9d6c-143cb5b9e98b"
- },
- "amountIn": "0.23",
- "amountOut": "18.857786",
- "minAmountReceived": "18.66920814",
- "assetIn": {
- "id": "4a4edfe5-1cdb-4142-b068-de4ee7e3a1d1"
- },
- "assetOut": {
- "id": "bead7daf-8652-43b8-8d85-676e385b1ec2"
- },
- "fee": {
- "networkFeeDollar": "0",
- "networkFeeAsset": "0",
- "inboundFeeDollar": "0.26013688099740",
- "inboundFeeAsset": "0.014084292420",
- "swapFee": "0.26013688099740",
- "feeRateTransaction": "29.7",
- "xdefiSwapFee": "0",
- "xdefiSwapFeeDollar": "0E-14"
- },
- "priceRateUsdAssetOut": "0.999351",
- "priceRateUsdAssetIn": "83.36156590872216",
- "tradeType": "SWAP"
- }
- ],
- "gasPrices": {},
- "approvalInfiniteFlag": false,
- "errorBuildingRoute": null
- }
- }
- }
-}
```
```ts [Snippets]
@@ -283,6 +215,8 @@ enum TradeType {
:::
+
+
**Variables:**
- `chainName`: This variable is obtained from step [1.1](#1.1-get-list-of-supported-chains).
@@ -306,3 +240,27 @@ enum TradeType {
**Snippets:**
- Enum describes all possible values for `tradeType` property from the response.
+
+
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 000000000..e3f815e7d
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,4 @@
+module.exports = {
+ darkMode: "selector",
+ content: ["./components/*.jsx"],
+};
diff --git a/yarn.lock b/yarn.lock
index f34f5d79c..e0abcf598 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -138,6 +138,11 @@
"@algolia/logger-common" "4.20.0"
"@algolia/requester-common" "4.20.0"
+"@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"
+ integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
+
"@ampproject/remapping@^2.2.0":
version "2.2.1"
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
@@ -1381,11 +1386,29 @@ ansi-styles@^6.0.0, ansi-styles@^6.1.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
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"
+ integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
+
+anymatch@~3.1.2:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
arg@^4.1.0:
version "4.1.3"
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
+arg@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
+ integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
+
argparse@^1.0.7:
version "1.0.10"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
@@ -1413,11 +1436,28 @@ arrify@^1.0.1:
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==
+autoprefixer@^10.4.18:
+ version "10.4.18"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.18.tgz#fcb171a3b017be7cb5d8b7a825f5aacbf2045163"
+ integrity sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==
+ dependencies:
+ browserslist "^4.23.0"
+ caniuse-lite "^1.0.30001591"
+ fraction.js "^4.3.7"
+ normalize-range "^0.1.2"
+ picocolors "^1.0.0"
+ postcss-value-parser "^4.2.0"
+
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+binary-extensions@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
boolbase@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
@@ -1438,7 +1478,7 @@ brace-expansion@^2.0.1:
dependencies:
balanced-match "^1.0.0"
-braces@^3.0.2:
+braces@^3.0.2, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
@@ -1455,11 +1495,26 @@ browserslist@^4.22.2:
node-releases "^2.0.14"
update-browserslist-db "^1.0.13"
+browserslist@^4.23.0:
+ version "4.23.0"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab"
+ integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==
+ dependencies:
+ caniuse-lite "^1.0.30001587"
+ electron-to-chromium "^1.4.668"
+ node-releases "^2.0.14"
+ update-browserslist-db "^1.0.13"
+
callsites@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+camelcase-css@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
+ integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
+
camelcase-keys@^6.2.2:
version "6.2.2"
resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
@@ -1479,6 +1534,11 @@ caniuse-lite@^1.0.30001565:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001574.tgz#fb4f1359c77f6af942510493672e1ec7ec80230c"
integrity sha512-BtYEK4r/iHt/txm81KBudCUcTy7t+s9emrIaHqjYurQ10x71zJ5VQ9x1dYPcz/b+pKSp4y/v1xSI67A+LzpNyg==
+caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001591:
+ version "1.0.30001597"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz#8be94a8c1d679de23b22fbd944232aa1321639e6"
+ integrity sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==
+
chalk@5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385"
@@ -1525,6 +1585,21 @@ cheerio@1.0.0-rc.10:
parse5-htmlparser2-tree-adapter "^6.0.1"
tslib "^2.2.0"
+chokidar@^3.5.3:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
+ 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"
+
cli-cursor@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea"
@@ -1597,6 +1672,11 @@ commander@9.2.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-9.2.0.tgz#6e21014b2ed90d8b7c9647230d8b7a94a4a419a9"
integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==
+commander@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+ integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
commander@^6.1.0:
version "6.2.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
@@ -1739,6 +1819,11 @@ delegate@^3.1.2:
resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
+didyoumean@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
+ integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
+
diff@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
@@ -1751,6 +1836,11 @@ dir-glob@^3.0.1:
dependencies:
path-type "^4.0.0"
+dlv@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
+ integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
+
doctrine@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
@@ -1812,6 +1902,11 @@ electron-to-chromium@^1.4.601:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.622.tgz#925d8b2264abbcbe264a9a6290d97b9e5a1af205"
integrity sha512-GZ47DEy0Gm2Z8RVG092CkFvX7SdotG57c4YZOe8W8qD4rOmk3plgeNmiLVRHP/Liqj1wRiY3uUUod9vb9hnxZA==
+electron-to-chromium@^1.4.668:
+ version "1.4.704"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.704.tgz#218696fc0b1cb42298b9ae0612d9c4ffd6f8500e"
+ integrity sha512-OK01+86Qvby1V6cTiowVbhp25aX4DLZnwar+NocAOXdzKAByd+jq5156bmo4kHwevWMknznW18Y/Svfk2dU91A==
+
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
@@ -2069,6 +2164,17 @@ fast-glob@^3.2.9:
merge2 "^1.3.0"
micromatch "^4.0.4"
+fast-glob@^3.3.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
+ 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"
+
fast-json-stable-stringify@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@@ -2145,6 +2251,11 @@ foreground-child@^3.1.0:
cross-spawn "^7.0.0"
signal-exit "^4.0.1"
+fraction.js@^4.3.7:
+ version "4.3.7"
+ resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
+ integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
+
fs-extra@^11.0.0:
version "11.1.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d"
@@ -2200,7 +2311,7 @@ git-raw-commits@^2.0.11:
split2 "^3.0.0"
through2 "^4.0.0"
-glob-parent@^5.1.2:
+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"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
@@ -2214,6 +2325,17 @@ glob-parent@^6.0.2:
dependencies:
is-glob "^4.0.3"
+glob@^10.3.10, glob@~10.3.4:
+ version "10.3.10"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
+ integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
+ dependencies:
+ foreground-child "^3.1.0"
+ jackspeak "^2.3.5"
+ minimatch "^9.0.1"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+ path-scurry "^1.10.1"
+
glob@^7.1.3:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
@@ -2226,17 +2348,6 @@ glob@^7.1.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@~10.3.4:
- version "10.3.10"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
- integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
- dependencies:
- foreground-child "^3.1.0"
- jackspeak "^2.3.5"
- minimatch "^9.0.1"
- minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
- path-scurry "^1.10.1"
-
global-dirs@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
@@ -2420,6 +2531,13 @@ is-arrayish@^0.2.1:
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+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"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
is-core-module@^2.13.0, is-core-module@^2.5.0:
version "2.13.1"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
@@ -2447,7 +2565,7 @@ is-fullwidth-code-point@^4.0.0:
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88"
integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
-is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
+is-glob@^4.0.0, 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"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
@@ -2505,6 +2623,11 @@ jackspeak@^2.3.5:
optionalDependencies:
"@pkgjs/parseargs" "^0.11.0"
+jiti@^1.19.1:
+ version "1.21.0"
+ resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d"
+ integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==
+
"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"
@@ -2610,11 +2733,16 @@ levn@^0.4.1:
prelude-ls "^1.2.1"
type-check "~0.4.0"
-lilconfig@2.1.0:
+lilconfig@2.1.0, lilconfig@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
+lilconfig@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3"
+ integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==
+
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"
@@ -2901,7 +3029,7 @@ mhchemparser@^4.1.0:
resolved "https://registry.yarnpkg.com/mhchemparser/-/mhchemparser-4.2.1.tgz#d73982e66bc06170a85b1985600ee9dabe157cb0"
integrity sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==
-micromatch@4.0.5, micromatch@^4.0.4:
+micromatch@4.0.5, micromatch@^4.0.4, micromatch@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
@@ -2972,11 +3100,25 @@ mj-context-menu@^0.6.1:
resolved "https://registry.yarnpkg.com/mj-context-menu/-/mj-context-menu-0.6.1.tgz#a043c5282bf7e1cf3821de07b13525ca6f85aa69"
integrity sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==
+moment@^2.30.1:
+ version "2.30.1"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae"
+ integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
+
ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+mz@^2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+ 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.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
@@ -3019,6 +3161,16 @@ normalize-package-data@^3.0.0:
semver "^7.3.4"
validate-npm-package-license "^3.0.1"
+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"
+ 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"
+ integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+
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"
@@ -3040,6 +3192,16 @@ nth-check@^2.0.1, nth-check@^2.1.1:
dependencies:
boolbase "^1.0.0"
+object-assign@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ 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"
+ integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
+
once@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
@@ -3178,7 +3340,7 @@ picocolors@^1.0.0:
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
-picomatch@^2.3.1:
+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"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
@@ -3188,11 +3350,60 @@ pidtree@0.6.0:
resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c"
integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==
+pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ 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"
+ integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
+
popper.js@^1.16.1:
version "1.16.1"
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b"
integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==
+postcss-import@^15.1.0:
+ version "15.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70"
+ 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.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2"
+ 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"
+ integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==
+ dependencies:
+ lilconfig "^3.0.0"
+ yaml "^2.3.4"
+
+postcss-nested@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c"
+ integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==
+ dependencies:
+ postcss-selector-parser "^6.0.11"
+
+postcss-selector-parser@^6.0.11:
+ version "6.0.16"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04"
+ integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
postcss-selector-parser@^6.0.13:
version "6.0.13"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b"
@@ -3201,19 +3412,24 @@ postcss-selector-parser@^6.0.13:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
-postcss@^8.4.32:
- version "8.4.33"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742"
- integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==
+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"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss@^8.4.23, postcss@^8.4.35:
+ version "8.4.35"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7"
+ integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==
dependencies:
nanoid "^3.3.7"
picocolors "^1.0.0"
source-map-js "^1.0.2"
-postcss@^8.4.35:
- version "8.4.35"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7"
- integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==
+postcss@^8.4.32:
+ version "8.4.33"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742"
+ integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==
dependencies:
nanoid "^3.3.7"
picocolors "^1.0.0"
@@ -3269,6 +3485,13 @@ react@^18.2.0:
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"
+ integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==
+ dependencies:
+ pify "^2.3.0"
+
read-pkg-up@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
@@ -3297,6 +3520,13 @@ readable-stream@3, readable-stream@^3.0.0:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
redent@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
@@ -3337,7 +3567,7 @@ resolve-global@1.0.0, resolve-global@^1.0.0:
dependencies:
global-dirs "^0.1.1"
-resolve@^1.10.0:
+resolve@^1.1.7, resolve@^1.10.0, resolve@^1.22.2:
version "1.22.8"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
@@ -3569,6 +3799,7 @@ string-argv@0.3.2:
integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+ name string-width-cjs
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -3594,6 +3825,7 @@ string_decoder@^1.1.1:
safe-buffer "~5.2.0"
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ name strip-ansi-cjs
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -3634,6 +3866,19 @@ strip-json-comments@^3.1.1, strip-json-comments@~3.1.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+sucrase@^3.32.0:
+ version "3.35.0"
+ resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263"
+ 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.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@@ -3658,6 +3903,34 @@ tabbable@^6.2.0:
resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
+tailwindcss@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d"
+ integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==
+ 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.19.1"
+ 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"
+
text-extensions@^1.0.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"
@@ -3668,6 +3941,20 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+thenify-all@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ 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"
+ integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
+ dependencies:
+ any-promise "^1.0.0"
+
through2@^4.0.0:
version "4.0.2"
resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
@@ -3712,6 +3999,11 @@ ts-api-utils@^1.0.1:
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331"
integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==
+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"
+ integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
+
ts-node@^10.8.1:
version "10.9.1"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
@@ -3969,6 +4261,7 @@ wicked-good-xpath@1.3.0:
integrity sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
+ name wrap-ansi-cjs
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -4021,6 +4314,11 @@ yaml@2.3.1:
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b"
integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==
+yaml@^2.3.4:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed"
+ integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==
+
yargs-parser@^20.2.3:
version "20.2.9"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"