diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..ca31e54 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,26 @@ +name: Build SDK + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: "18" + + - name: Install dependencies + run: npm install + + - name: Build package + run: npm run build # Replace with your build script diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index 6345b92..a66301b 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -3,7 +3,7 @@ name: Publish package to npm on: push: branches: - - main # Set this to the branch you want to trigger the publish action + - main # Set this to the branch you want to trigger the publish action jobs: build: @@ -11,19 +11,19 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Use Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: - node-version: '14' # Specify the Node.js version - registry-url: 'https://registry.npmjs.org/' + node-version: "18" # Specify the Node.js version + registry-url: "https://registry.npmjs.org/" - name: Install dependencies run: npm install - name: Build package - run: npm run build # Replace with your build script + run: npm run build # Replace with your build script - name: Publish to npm run: npm publish --access public diff --git a/package-lock.json b/package-lock.json index 1c7c928..6bab5fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,27 +1,32 @@ { "name": "@hop.ag/sdk", - "version": "1.0.2", + "version": "1.0.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@hop.ag/sdk", - "version": "1.0.2", + "version": "1.0.3", "license": "ISC", "dependencies": { - "@mysten/sui.js": "^0.52.0", - "axios": "^1.6.8" + "cross-fetch": "^4.0.0", + "tslib": "^2.6.2", + "zod": "^3.23.8" }, "devDependencies": { - "dotenv": "^16.4.5", + "@mysten/sui.js": "^0.52.0", "prettier": "3.2.5", "typescript": "^5.4.5" + }, + "peerDependencies": { + "@mysten/sui.js": "^0.52.0" } }, "node_modules/@0no-co/graphql.web": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.0.7.tgz", "integrity": "sha512-E3Qku4mTzdrlwVWGPxklDnME5ANrEGetvYw4i2GCRlppWXXE4QD66j7pwb8HelZwS6LnqEChhrSOGCXpbiu6MQ==", + "dev": true, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" }, @@ -35,6 +40,7 @@ "version": "1.12.2", "resolved": "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.12.2.tgz", "integrity": "sha512-bUYuwoHuvlTIZZpt2l0furjcNMpd80T5JB4YzmOdcv+wlndHpRWeFwgnGH7qgyy986oGKxgomS0oBXjxmEMtYg==", + "dev": true, "dependencies": { "@gql.tada/internal": "^0.3.0", "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", @@ -49,6 +55,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@gql.tada/internal/-/internal-0.3.3.tgz", "integrity": "sha512-lBOiN0c/Fx5eY5KGwkzB5+6asUv9IAoD6f5rZjN8r9h4hvSk4V5Kuuu6EfKixF6h5/o/xDRgA/BU3355udnK3g==", + "dev": true, "dependencies": { "@0no-co/graphql.web": "^1.0.5" }, @@ -61,6 +68,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -74,6 +82,7 @@ "version": "7.24.5", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", + "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -85,6 +94,7 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/@gql.tada/cli-utils/-/cli-utils-1.3.4.tgz", "integrity": "sha512-IHDJypDIIScs25pmsOrwlPy1MDnOwwzUKN+C9nLsQW0cW2c1S/L8K7FT9XUWH9qOjt7Q5K13GKWD3clfzlByuQ==", + "dev": true, "dependencies": { "@0no-co/graphqlsp": "^1.12.1", "@gql.tada/internal": "0.4.0", @@ -102,6 +112,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/@gql.tada/internal/-/internal-0.4.0.tgz", "integrity": "sha512-VPJkuGcFu6dd6WPjhDK/FKcrCWtmSfb6KIFStSJc8yENLJeDkRBXm/H41lETPACHoP9N3WDh+VWgwuUAubcAVQ==", + "dev": true, "dependencies": { "@0no-co/graphql.web": "^1.0.5" }, @@ -114,6 +125,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "dev": true, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } @@ -122,6 +134,7 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, "peer": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -136,6 +149,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "peer": true, "engines": { "node": ">=6.0.0" @@ -145,6 +159,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, "peer": true, "engines": { "node": ">=6.0.0" @@ -154,12 +169,14 @@ "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true, "peer": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -170,6 +187,7 @@ "version": "0.11.1", "resolved": "https://registry.npmjs.org/@mysten/bcs/-/bcs-0.11.1.tgz", "integrity": "sha512-xP85isNSYUCHd3O/g+TmZYmg4wK6cU8q/n/MebkIGP4CYVJZz2wU/G24xIZ3wI+0iTop4dfgA5kYrg/DQKCUzA==", + "dev": true, "dependencies": { "bs58": "^5.0.0" } @@ -178,6 +196,7 @@ "version": "0.52.0", "resolved": "https://registry.npmjs.org/@mysten/sui.js/-/sui.js-0.52.0.tgz", "integrity": "sha512-oqfA0O/STWDJgnxvu07HsDRybG8yD3pfqAhADFawZTthbPdl6U01qJQVCzW7yf2OqG9AkYWHT+392rVcVjbcnw==", + "dev": true, "dependencies": { "@graphql-typed-document-node/core": "^3.2.0", "@mysten/bcs": "0.11.1", @@ -200,6 +219,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", + "dev": true, "dependencies": { "@noble/hashes": "1.4.0" }, @@ -211,6 +231,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, "engines": { "node": ">= 16" }, @@ -222,6 +243,7 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.6.tgz", "integrity": "sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==", + "dev": true, "funding": { "url": "https://paulmillr.com/funding/" } @@ -230,6 +252,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "dev": true, "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -243,6 +266,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "dev": true, "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" @@ -254,18 +278,21 @@ "node_modules/@suchipi/femver": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@suchipi/femver/-/femver-1.0.0.tgz", - "integrity": "sha512-bprE8+K5V+DPX7q2e2K57ImqNBdfGHDIWaGI5xHxZoxbKOuQZn4wzPiUxOAHnsUr3w3xHrWXwN7gnG/iIuEMIg==" + "integrity": "sha512-bprE8+K5V+DPX7q2e2K57ImqNBdfGHDIWaGI5xHxZoxbKOuQZn4wzPiUxOAHnsUr3w3xHrWXwN7gnG/iIuEMIg==", + "dev": true }, "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==", + "dev": true, "peer": true }, "node_modules/@volar/language-core": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.2.1.tgz", "integrity": "sha512-iHJAZKcYldZgyS8gx6DfIZApViVBeqbf6iPhqoZpG5A6F4zsZiFldKfwaKaBA3/wnOTWE2i8VUbXywI1WywCPg==", + "dev": true, "dependencies": { "@volar/source-map": "2.2.1" } @@ -274,6 +301,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.2.1.tgz", "integrity": "sha512-w1Bgpguhbp7YTr7VUFu6gb4iAZjeEPsOX4zpgiuvlldbzvIWDWy4t0jVifsIsxZ99HAu+c3swiME7wt+GeNqhA==", + "dev": true, "dependencies": { "muggle-string": "^0.4.0" } @@ -282,6 +310,7 @@ "version": "3.4.27", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", + "dev": true, "dependencies": { "@babel/parser": "^7.24.4", "@vue/shared": "3.4.27", @@ -294,6 +323,7 @@ "version": "3.4.27", "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", + "dev": true, "dependencies": { "@vue/compiler-core": "3.4.27", "@vue/shared": "3.4.27" @@ -303,6 +333,7 @@ "version": "2.0.16", "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.16.tgz", "integrity": "sha512-Bc2sexRH99pznOph8mLw2BlRZ9edm7tW51kcBXgx8adAoOcZUWJj3UNSsdQ6H9Y8meGz7BoazVrVo/jUukIsPw==", + "dev": true, "dependencies": { "@volar/language-core": "~2.2.0", "@vue/compiler-dom": "^3.4.0", @@ -324,12 +355,14 @@ "node_modules/@vue/shared": { "version": "3.4.27", "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", - "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" + "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==", + "dev": true }, "node_modules/acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, "peer": true, "bin": { "acorn": "bin/acorn" @@ -342,30 +375,17 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, "peer": true, "dependencies": { "dequal": "^2.0.3" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/axobject-query": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "dev": true, "peer": true, "dependencies": { "dequal": "^2.0.3" @@ -374,22 +394,26 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base-x": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==", + "dev": true }, "node_modules/bech32": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", - "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==", + "dev": true }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -398,6 +422,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "dev": true, "dependencies": { "base-x": "^4.0.0" } @@ -406,6 +431,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "dev": true, "peer": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", @@ -419,31 +445,31 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, "peer": true, "dependencies": { "@types/estree": "^1.0.0" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/computeds": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", - "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==" + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true + }, + "node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "dependencies": { + "node-fetch": "^2.6.12" + } }, "node_modules/css-tree": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, "peer": true, "dependencies": { "mdn-data": "2.0.30", @@ -456,46 +482,30 @@ "node_modules/de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==" + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true }, "node_modules/dedent-js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", - "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==" - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", + "dev": true }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, "peer": true, "engines": { "node": ">=6" } }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, "engines": { "node": ">=0.12" }, @@ -506,44 +516,14 @@ "node_modules/estree-walker": { "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==" - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true }, "node_modules/gql.tada": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/gql.tada/-/gql.tada-1.7.0.tgz", "integrity": "sha512-kOtyb949T1oqMCf3KTR9DYg0hWturvSlz0N2r2ePlAJVJ3fvuu07iP7SwSML0E8ltnSPLQDTvFBeaM8ZmJop9Q==", + "dev": true, "dependencies": { "@0no-co/graphql.web": "^1.0.5", "@gql.tada/cli-utils": "1.3.4", @@ -561,6 +541,7 @@ "version": "16.8.1", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -569,6 +550,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, "bin": { "he": "bin/he" } @@ -577,6 +559,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dev": true, "peer": true, "dependencies": { "@types/estree": "*" @@ -586,12 +569,14 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true, "peer": true }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, "dependencies": { "tslib": "^2.0.3" } @@ -600,6 +585,7 @@ "version": "0.30.10", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "dev": true, "peer": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -609,31 +595,14 @@ "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, "peer": true }, - "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/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/minimatch": { "version": "9.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -647,12 +616,14 @@ "node_modules/muggle-string": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==" + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -681,6 +652,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -689,12 +661,14 @@ "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true }, "node_modules/periscopic": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dev": true, "peer": true, "dependencies": { "@types/estree": "^1.0.0", @@ -706,6 +680,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, "peer": true, "dependencies": { "@types/estree": "^1.0.0" @@ -726,15 +701,11 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, "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==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -743,6 +714,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", + "dev": true, "engines": { "node": ">=14.0.0" } @@ -751,6 +723,7 @@ "version": "4.2.15", "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.15.tgz", "integrity": "sha512-j9KJSccHgLeRERPlhMKrCXpk2TqL2m5Z+k+OBTQhZOhIdCCd3WfqV+ylPWeipEwq17P/ekiSFWwrVQv93i3bsg==", + "dev": true, "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.1", @@ -776,6 +749,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, "peer": true, "dependencies": { "@types/estree": "^1.0.0" @@ -785,6 +759,7 @@ "version": "0.7.8", "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.8.tgz", "integrity": "sha512-ABK3RDFcy59AqAiU1N5Kxu1RnKrb1GDMrQjLgNgJfE8Q+coCKpjCAPtUVKQM2HnmuqeNWcT3NqfXbE+ZmN5Pow==", + "dev": true, "dependencies": { "dedent-js": "^1.0.1", "pascal-case": "^3.1.1" @@ -807,12 +782,14 @@ "node_modules/tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true }, "node_modules/typescript": { "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -825,6 +802,7 @@ "version": "2.7.16", "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, "dependencies": { "de-indent": "^1.0.2", "he": "^1.2.0" @@ -843,6 +821,14 @@ "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } }, "dependencies": { @@ -850,12 +836,14 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.0.7.tgz", "integrity": "sha512-E3Qku4mTzdrlwVWGPxklDnME5ANrEGetvYw4i2GCRlppWXXE4QD66j7pwb8HelZwS6LnqEChhrSOGCXpbiu6MQ==", + "dev": true, "requires": {} }, "@0no-co/graphqlsp": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.12.2.tgz", "integrity": "sha512-bUYuwoHuvlTIZZpt2l0furjcNMpd80T5JB4YzmOdcv+wlndHpRWeFwgnGH7qgyy986oGKxgomS0oBXjxmEMtYg==", + "dev": true, "requires": { "@gql.tada/internal": "^0.3.0", "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", @@ -866,6 +854,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@gql.tada/internal/-/internal-0.3.3.tgz", "integrity": "sha512-lBOiN0c/Fx5eY5KGwkzB5+6asUv9IAoD6f5rZjN8r9h4hvSk4V5Kuuu6EfKixF6h5/o/xDRgA/BU3355udnK3g==", + "dev": true, "requires": { "@0no-co/graphql.web": "^1.0.5" } @@ -876,6 +865,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, "peer": true, "requires": { "@jridgewell/gen-mapping": "^0.3.5", @@ -885,12 +875,14 @@ "@babel/parser": { "version": "7.24.5", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", - "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==" + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", + "dev": true }, "@gql.tada/cli-utils": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/@gql.tada/cli-utils/-/cli-utils-1.3.4.tgz", "integrity": "sha512-IHDJypDIIScs25pmsOrwlPy1MDnOwwzUKN+C9nLsQW0cW2c1S/L8K7FT9XUWH9qOjt7Q5K13GKWD3clfzlByuQ==", + "dev": true, "requires": { "@0no-co/graphqlsp": "^1.12.1", "@gql.tada/internal": "0.4.0", @@ -904,6 +896,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/@gql.tada/internal/-/internal-0.4.0.tgz", "integrity": "sha512-VPJkuGcFu6dd6WPjhDK/FKcrCWtmSfb6KIFStSJc8yENLJeDkRBXm/H41lETPACHoP9N3WDh+VWgwuUAubcAVQ==", + "dev": true, "requires": { "@0no-co/graphql.web": "^1.0.5" } @@ -912,12 +905,14 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "dev": true, "requires": {} }, "@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, "peer": true, "requires": { "@jridgewell/set-array": "^1.2.1", @@ -929,24 +924,28 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "peer": true }, "@jridgewell/set-array": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, "peer": true }, "@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true, "peer": true }, "@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, "peer": true, "requires": { "@jridgewell/resolve-uri": "^3.1.0", @@ -957,6 +956,7 @@ "version": "0.11.1", "resolved": "https://registry.npmjs.org/@mysten/bcs/-/bcs-0.11.1.tgz", "integrity": "sha512-xP85isNSYUCHd3O/g+TmZYmg4wK6cU8q/n/MebkIGP4CYVJZz2wU/G24xIZ3wI+0iTop4dfgA5kYrg/DQKCUzA==", + "dev": true, "requires": { "bs58": "^5.0.0" } @@ -965,6 +965,7 @@ "version": "0.52.0", "resolved": "https://registry.npmjs.org/@mysten/sui.js/-/sui.js-0.52.0.tgz", "integrity": "sha512-oqfA0O/STWDJgnxvu07HsDRybG8yD3pfqAhADFawZTthbPdl6U01qJQVCzW7yf2OqG9AkYWHT+392rVcVjbcnw==", + "dev": true, "requires": { "@graphql-typed-document-node/core": "^3.2.0", "@mysten/bcs": "0.11.1", @@ -984,6 +985,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", + "dev": true, "requires": { "@noble/hashes": "1.4.0" } @@ -991,17 +993,20 @@ "@noble/hashes": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==" + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true }, "@scure/base": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.6.tgz", - "integrity": "sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==" + "integrity": "sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==", + "dev": true }, "@scure/bip32": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "dev": true, "requires": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -1012,6 +1017,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "dev": true, "requires": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" @@ -1020,18 +1026,21 @@ "@suchipi/femver": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@suchipi/femver/-/femver-1.0.0.tgz", - "integrity": "sha512-bprE8+K5V+DPX7q2e2K57ImqNBdfGHDIWaGI5xHxZoxbKOuQZn4wzPiUxOAHnsUr3w3xHrWXwN7gnG/iIuEMIg==" + "integrity": "sha512-bprE8+K5V+DPX7q2e2K57ImqNBdfGHDIWaGI5xHxZoxbKOuQZn4wzPiUxOAHnsUr3w3xHrWXwN7gnG/iIuEMIg==", + "dev": true }, "@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==", + "dev": true, "peer": true }, "@volar/language-core": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.2.1.tgz", "integrity": "sha512-iHJAZKcYldZgyS8gx6DfIZApViVBeqbf6iPhqoZpG5A6F4zsZiFldKfwaKaBA3/wnOTWE2i8VUbXywI1WywCPg==", + "dev": true, "requires": { "@volar/source-map": "2.2.1" } @@ -1040,6 +1049,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.2.1.tgz", "integrity": "sha512-w1Bgpguhbp7YTr7VUFu6gb4iAZjeEPsOX4zpgiuvlldbzvIWDWy4t0jVifsIsxZ99HAu+c3swiME7wt+GeNqhA==", + "dev": true, "requires": { "muggle-string": "^0.4.0" } @@ -1048,6 +1058,7 @@ "version": "3.4.27", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", + "dev": true, "requires": { "@babel/parser": "^7.24.4", "@vue/shared": "3.4.27", @@ -1060,6 +1071,7 @@ "version": "3.4.27", "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", + "dev": true, "requires": { "@vue/compiler-core": "3.4.27", "@vue/shared": "3.4.27" @@ -1069,6 +1081,7 @@ "version": "2.0.16", "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.16.tgz", "integrity": "sha512-Bc2sexRH99pznOph8mLw2BlRZ9edm7tW51kcBXgx8adAoOcZUWJj3UNSsdQ6H9Y8meGz7BoazVrVo/jUukIsPw==", + "dev": true, "requires": { "@volar/language-core": "~2.2.0", "@vue/compiler-dom": "^3.4.0", @@ -1082,42 +1095,31 @@ "@vue/shared": { "version": "3.4.27", "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", - "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" + "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==", + "dev": true }, "acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, "peer": true }, "aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, "peer": true, "requires": { "dequal": "^2.0.3" } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", - "requires": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "axobject-query": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "dev": true, "peer": true, "requires": { "dequal": "^2.0.3" @@ -1126,22 +1128,26 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "base-x": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==", + "dev": true }, "bech32": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", - "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==", + "dev": true }, "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "requires": { "balanced-match": "^1.0.0" } @@ -1150,6 +1156,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "dev": true, "requires": { "base-x": "^4.0.0" } @@ -1158,6 +1165,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "dev": true, "peer": true, "requires": { "@jridgewell/sourcemap-codec": "^1.4.15", @@ -1171,6 +1179,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, "peer": true, "requires": { "@types/estree": "^1.0.0" @@ -1178,23 +1187,25 @@ } } }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, "computeds": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", - "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==" + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true + }, + "cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "requires": { + "node-fetch": "^2.6.12" + } }, "css-tree": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, "peer": true, "requires": { "mdn-data": "2.0.30", @@ -1204,59 +1215,39 @@ "de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==" + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true }, "dedent-js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", - "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", + "dev": true }, "dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, "peer": true }, - "dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "dev": true - }, "entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true }, "estree-walker": { "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==" - }, - "follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true }, "gql.tada": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/gql.tada/-/gql.tada-1.7.0.tgz", "integrity": "sha512-kOtyb949T1oqMCf3KTR9DYg0hWturvSlz0N2r2ePlAJVJ3fvuu07iP7SwSML0E8ltnSPLQDTvFBeaM8ZmJop9Q==", + "dev": true, "requires": { "@0no-co/graphql.web": "^1.0.5", "@gql.tada/cli-utils": "1.3.4", @@ -1266,17 +1257,20 @@ "graphql": { "version": "16.8.1", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", - "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==" + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "dev": true }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true }, "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==", + "dev": true, "peer": true, "requires": { "@types/estree": "*" @@ -1286,12 +1280,14 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true, "peer": true }, "lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, "requires": { "tslib": "^2.0.3" } @@ -1300,6 +1296,7 @@ "version": "0.30.10", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "dev": true, "peer": true, "requires": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -1309,25 +1306,14 @@ "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, "peer": true }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "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==", - "requires": { - "mime-db": "1.52.0" - } - }, "minimatch": { "version": "9.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, "requires": { "brace-expansion": "^2.0.1" } @@ -1335,12 +1321,14 @@ "muggle-string": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==" + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true }, "no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, "requires": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -1358,6 +1346,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, "requires": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -1366,12 +1355,14 @@ "path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true }, "periscopic": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dev": true, "peer": true, "requires": { "@types/estree": "^1.0.0", @@ -1383,6 +1374,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, "peer": true, "requires": { "@types/estree": "^1.0.0" @@ -1396,25 +1388,23 @@ "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, "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==" + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true }, "superstruct": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", - "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==" + "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", + "dev": true }, "svelte": { "version": "4.2.15", "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.15.tgz", "integrity": "sha512-j9KJSccHgLeRERPlhMKrCXpk2TqL2m5Z+k+OBTQhZOhIdCCd3WfqV+ylPWeipEwq17P/ekiSFWwrVQv93i3bsg==", + "dev": true, "peer": true, "requires": { "@ampproject/remapping": "^2.2.1", @@ -1437,6 +1427,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, "peer": true, "requires": { "@types/estree": "^1.0.0" @@ -1448,6 +1439,7 @@ "version": "0.7.8", "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.8.tgz", "integrity": "sha512-ABK3RDFcy59AqAiU1N5Kxu1RnKrb1GDMrQjLgNgJfE8Q+coCKpjCAPtUVKQM2HnmuqeNWcT3NqfXbE+ZmN5Pow==", + "dev": true, "requires": { "dedent-js": "^1.0.1", "pascal-case": "^3.1.1" @@ -1466,17 +1458,20 @@ "tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true }, "typescript": { "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==" + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true }, "vue-template-compiler": { "version": "2.7.16", "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, "requires": { "de-indent": "^1.0.2", "he": "^1.2.0" @@ -1495,6 +1490,11 @@ "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } + }, + "zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==" } } } diff --git a/package.json b/package.json index fab6176..4a6d595 100644 --- a/package.json +++ b/package.json @@ -1,23 +1,36 @@ { "name": "@hop.ag/sdk", - "version": "1.0.3", + "version": "1.1.1", "description": "Official Hop SDK to access Hop Aggregator", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "type": "module", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", + "exports": { + ".": { + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js" + } + }, "scripts": { "test:quote": "npx tsx src/tests/quote.test.ts", "test:tx": "npx tsx src/tests/tx.test.ts", - "build": "tsc", - "pretty": "npx prettier . --write" + "build": "tsc && tsc --project tsconfig.cjs.json", + "pretty": "prettier . --write" }, "author": "Hop Aggregator", "license": "ISC", "devDependencies": { "prettier": "3.2.5", - "typescript": "^5.4.5" + "typescript": "^5.4.5", + "@mysten/sui.js": "^0.52.0" }, "dependencies": { - "@mysten/sui.js": "^0.52.0", - "axios": "^1.6.8" + "cross-fetch": "^4.0.0", + "tslib": "^2.6.2", + "zod": "^3.23.8" + }, + "peerDependencies": { + "@mysten/sui.js": "^0.52.0" } } diff --git a/readme.md b/readme.md index 46827b3..f528aa2 100644 --- a/readme.md +++ b/readme.md @@ -7,22 +7,23 @@ Use this library to interact with [Hop Aggregator](hop.ag)'s swap. #### Initialize ```typescript -import { HopApi } from "hop-ag-sdk"; +import { HopApi, HopApiOptions } from "@hop.ag/sdk"; import { getFullnodeUrl } from "@mysten/sui.js/client"; const rpc_url = getFullNodeUrl("mainnet"); -const hop_api_options = { +const hop_api_options: HopApiOptions = { api_key: "", fee_bps: 0, - fee_wallet: "0xsuiwallet" + fee_wallet: "0xsuiwallet", }; -const sdk = HopApi(rpc_url, hop_ap_options); +const sdk = HopApi(rpc_url, hop_api_options); ``` To use the Hop Aggregator API, please create an api key [here](https://hop.ag) first. #### Get a Swap Quote + Call this first to display the expected amount out. ```typescript @@ -34,17 +35,19 @@ const quote = await sdk.fetchQuote({ ``` #### Get a Swap Transaction + Call this when a user clicks trade and wants to execute a transaction. ```typescript const tx = await sdk.fetchTx({ trade: quote.trade, sui_address: "0x123", - + gas_budget: 1e9, // optional default is 1e9 max_slippage_bps: 100, // optional default is 1% }); ``` #### Attribution -Please link to and/or mention `Powered by Hop` if you are using this SDK. \ No newline at end of file + +Please link to and/or mention `Powered by Hop` if you are using this SDK. diff --git a/src/index.ts b/src/index.ts index 948681e..fd706bc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,2 @@ -import { HopApi } from "./sdk/api"; - -export const HopSdk = { - HopApi -}; +export { HopApi } from "./sdk/api.js"; +export type { HopApiOptions } from "./sdk/api.js"; diff --git a/src/sdk/api.ts b/src/sdk/api.ts index 7e8d3d2..ded96e4 100644 --- a/src/sdk/api.ts +++ b/src/sdk/api.ts @@ -1,15 +1,19 @@ import { SuiClient } from "@mysten/sui.js/client"; -import { fetchQuote, GetQuoteParams, GetQuoteResponse } from "./routes/quote"; -import { fetchTx, GetTxParams, GetTxResponse } from "./routes/tx"; - -interface HopApiOptions { +import { + fetchQuote, + GetQuoteParams, + GetQuoteResponse, +} from "./routes/quote.js"; +import { fetchTx, GetTxParams, GetTxResponse } from "./routes/tx.js"; + +export interface HopApiOptions { api_key: string; fee_bps: number; // fee to charge in bps (50% split with Hop / max fee of 5%) fee_wallet?: string; // sui address hop_server_url?: string; } -class HopApi { +export class HopApi { readonly client: SuiClient; readonly options: HopApiOptions; @@ -34,10 +38,10 @@ class HopApi { private validate_fee() { let fee_bps = this.options.fee_bps; - if(fee_bps < 0) { - console.error('> fee_bps must be positive.'); - } else if(fee_bps > 500) { - console.error('> fee_bps must be less than or equal to 5% (500 bps).'); + if (fee_bps < 0) { + console.error("> fee_bps must be positive."); + } else if (fee_bps > 500) { + console.error("> fee_bps must be less than or equal to 5% (500 bps)."); } this.options.fee_bps = Math.max(this.options.fee_bps, 0); @@ -57,5 +61,3 @@ class HopApi { return fetchTx(this, tx); } } - -export { HopApi, HopApiOptions }; diff --git a/src/sdk/constants.ts b/src/sdk/constants.ts index 3e3cb5f..de2dff7 100644 --- a/src/sdk/constants.ts +++ b/src/sdk/constants.ts @@ -1,3 +1,3 @@ -export const API_SERVER_PREFIX = - "https://d2getbh8qk7p99.cloudfront.net/api/v2"; -export const FEE_DENOMINATOR: bigint = 10_000n; \ No newline at end of file +export const API_SERVER_PREFIX = "https://d2getbh8qk7p99.cloudfront.net/api/v2"; + +export const FEE_DENOMINATOR: bigint = 10_000n; diff --git a/src/sdk/routes/quote.ts b/src/sdk/routes/quote.ts index c2c9bd4..ca46eca 100644 --- a/src/sdk/routes/quote.ts +++ b/src/sdk/routes/quote.ts @@ -1,37 +1,47 @@ -import { HopApi } from "../api"; -import { getAmountOutWithCommission, makeRequest, Trade } from "../util"; +import { HopApi } from "../api.js"; +import { swapAPIResponseSchema } from "../types/api.js"; +import { Trade } from "../types/trade.js"; +import { getAmountOutWithCommission, makeAPIRequest } from "../util.js"; -interface GetQuoteParams { +export interface GetQuoteParams { token_in: string; token_out: string; amount_in: bigint; } -interface GetQuoteResponse { +export interface GetQuoteResponse { amount_out_with_fee: bigint; trade: Trade; } -async function fetchQuote(client: HopApi, params: GetQuoteParams): Promise { - let response = await makeRequest("quote", { - hop_server_url: client.options.hop_server_url, - api_key: client.options.api_key, - data: { - token_in: params.token_in, - token_out: params.token_out, - amount_in: params.amount_in.toString() +export async function fetchQuote( + client: HopApi, + params: GetQuoteParams, +): Promise { + const response = await makeAPIRequest({ + route: "quote", + options: { + hop_server_url: client.options.hop_server_url, + api_key: client.options.api_key, + data: { + token_in: params.token_in, + token_out: params.token_out, + amount_in: params.amount_in.toString(), + }, + method: "post", }, - method: 'post' + responseSchema: swapAPIResponseSchema, }); - if(response != null) { + if (response?.trade) { return { - amount_out_with_fee: getAmountOutWithCommission(response.trade.amount_out.amount, client.options.fee_bps), + amount_out_with_fee: getAmountOutWithCommission( + response.trade.amount_out.amount, + client.options.fee_bps, + ), trade: response.trade, }; } - return null; + throw new Error("Unable to get quote"); } - -export { GetQuoteParams, GetQuoteResponse, fetchQuote }; diff --git a/src/sdk/routes/tx.ts b/src/sdk/routes/tx.ts index d2f167d..e61e4e7 100644 --- a/src/sdk/routes/tx.ts +++ b/src/sdk/routes/tx.ts @@ -1,9 +1,11 @@ import { TransactionBlock } from "@mysten/sui.js/transactions"; import { CoinStruct } from "@mysten/sui.js/client"; -import { HopApi } from "../api"; -import { getAmountOutWithCommission, makeRequest, Trade } from "../util"; +import { HopApi } from "../api.js"; +import { makeAPIRequest } from "../util.js"; +import { compileRequestSchema, compileResponseSchema } from "../types/api.js"; +import { Trade } from "../types/trade.js"; -interface GetTxParams { +export interface GetTxParams { trade: Trade; sui_address: string; @@ -11,7 +13,7 @@ interface GetTxParams { max_slippage_bps?: number; } -interface GetTxResponse { +export interface GetTxResponse { transaction: TransactionBlock; } @@ -66,16 +68,22 @@ async function fetchCoins( })); } -async function fetchTx( +export async function fetchTx( client: HopApi, params: GetTxParams, -): Promise { +): Promise { // get input coins let user_input_coins: InputToken[] = await fetchCoins( client, params.sui_address, params.trade.amount_in.token, ); + if (user_input_coins.length == 0) { + throw new Error( + `HopApi > Error: sui address ${params.sui_address} does not have any input coins for tx.`, + ); + } + // add any input coins that match user type let single_output_coin: InputToken[] = await fetchCoins( client, @@ -97,36 +105,46 @@ async function fetchTx( } else { gas_coins = user_input_coins.map((struct) => struct.object_id); } + if (gas_coins.length === 0) { + throw new Error( + `HopApi > Error: sui address ${params.sui_address} does not have any gas coins for tx.`, + ); + } + + const compileRequest = compileRequestSchema.parse({ + trade: params.trade, + builder_request: { + sender_address: params.sui_address, + user_input_coins, + gas_coins, - const response = await makeRequest("tx/compile", { - hop_server_url: client.options.hop_server_url, - api_key: client.options.api_key, - data: { - trade: params.trade, - builder_request: { - sender_address: params.sui_address, - user_input_coins, - gas_coins, - - gas_budget: params.gas_budget | 1e9, - max_slippage_bps: params.max_slippage_bps, - - api_fee_wallet: client.options.fee_wallet, - api_fee_bps: client.options.fee_bps, - }, + gas_budget: params.gas_budget ?? 1e9, + max_slippage_bps: params.max_slippage_bps, + + api_fee_wallet: client.options.fee_wallet, + api_fee_bps: client.options.fee_bps, }, - method: "post", }); - if (response != null) { - const tx_block = createFrontendTxBlock(response.tx); + const response = await makeAPIRequest({ + route: "tx/compile", + options: { + hop_server_url: client.options.hop_server_url, + api_key: client.options.api_key, + data: compileRequest, + method: "post", + }, + responseSchema: compileResponseSchema, + }); + if (response.tx) { + const tx_block = createFrontendTxBlock(response.tx); return { transaction: tx_block, }; } - return null; + throw new Error("Could not construct transaction"); } const createFrontendTxBlock = (serialized: string): TransactionBlock => { @@ -154,5 +172,3 @@ const createFrontendTxBlock = (serialized: string): TransactionBlock => { }), ); }; - -export { GetTxParams, GetTxResponse, fetchTx }; diff --git a/src/sdk/types/api.ts b/src/sdk/types/api.ts new file mode 100644 index 0000000..36a5250 --- /dev/null +++ b/src/sdk/types/api.ts @@ -0,0 +1,47 @@ +import { z } from "zod"; +import { tradeSchema } from "./trade.js"; + +const coinIdSchema = z.object({ + object_id: z.string(), + version: z.string(), + digest: z.string(), +}); + +export const builderRequestSchema = z.object({ + sender_address: z.string(), + user_input_coins: z.array( + z.object({ + object_id: coinIdSchema, + coin_type: z.string(), + amount: z.string(), + }), + ), + gas_coins: z.array(coinIdSchema), + gas_budget: z.number(), + max_slippage_bps: z.optional(z.number()), + api_fee_bps: z.optional(z.number()), + api_fee_wallet: z.optional(z.string()), +}); + +export type BuilderRequest = z.infer; + +export const compileRequestSchema = z.object({ + trade: tradeSchema, + builder_request: builderRequestSchema, +}); + +export type CompileRequest = z.infer; + +export const swapAPIResponseSchema = z.object({ + total_tests: z.number(), + errors: z.number(), + trade: tradeSchema.nullable(), +}); + +export type SwapAPIResponse = z.infer; + +export const compileResponseSchema = z.object({ + tx: z.string(), +}); + +export type CompileResponse = z.infer; diff --git a/src/sdk/types/trade.ts b/src/sdk/types/trade.ts new file mode 100644 index 0000000..e786188 --- /dev/null +++ b/src/sdk/types/trade.ts @@ -0,0 +1,77 @@ +import { z } from "zod"; + +export enum SuiExchange { + CETUS = "CETUS", + FLOWX = "FLOWX", + TURBOS = "TURBOS", + AFTERMATH = "AFTERMATH", + KRIYA = "KRIYA", + BLUEMOVE = "BLUEMOVE", + DEEPBOOK = "DEEPBOOK", + SUISWAP = "SUISWAP", +} + +const poolExtraSchema = z.union([ + z.object({ + AFTERMATH: z.object({ + lp_coin_type: z.string(), + }), + }), + z.object({ + DEEPBOOK: z.object({ + pool_type: z.string(), + lot_size: z.coerce.bigint(), + }), + }), + z.object({ + TURBOS: z.object({ + coin_type_a: z.string(), + coin_type_b: z.string(), + fee_type: z.string(), + tick_spacing: z.number(), + tick_current_index: z.number(), + }), + }), + z.object({ + CETUS: z.object({ + coin_type_a: z.string(), + coin_type_b: z.string(), + }), + }), +]); + +export type PoolExtra = z.infer; + +const tradePoolSchema = z.object({ + object_id: z.string(), + initial_shared_version: z.number().nullable(), + sui_exchange: z.nativeEnum(SuiExchange), + tokens: z.array(z.string()).nonempty(), + is_active: z.boolean(), + extra: poolExtraSchema.nullable(), +}); + +export type TradePool = z.infer; + +const tokenAmountSchema = z.object({ + token: z.string(), + amount: z.coerce.bigint(), +}); + +const tradeNodeSchema = z.object({ + pool: tradePoolSchema, + weight: z.number().nonnegative(), + amount_in: tokenAmountSchema, + amount_out: tokenAmountSchema, +}); + +export type TradeNode = z.infer; + +export const tradeSchema = z.object({ + nodes: z.record(tradeNodeSchema), + edges: z.record(z.array(z.string())), + amount_in: tokenAmountSchema, + amount_out: tokenAmountSchema, +}); + +export type Trade = z.infer; diff --git a/src/sdk/util.ts b/src/sdk/util.ts index 84e5175..11000d7 100644 --- a/src/sdk/util.ts +++ b/src/sdk/util.ts @@ -1,73 +1,71 @@ -import axios from "axios"; -import { API_SERVER_PREFIX, FEE_DENOMINATOR } from "./constants"; +import fetch from "cross-fetch"; +import { z } from "zod"; +import { API_SERVER_PREFIX, FEE_DENOMINATOR } from "./constants.js"; -interface RequestParams { - hop_server_url?: string, - api_key: string, - data: object, - method: 'get' | 'post' +export interface RequestParams { + hop_server_url?: string; + api_key: string; + data: object; + method: "get" | "post"; } -interface TokenAmount { - token: string, - amount: string -} - -export interface Trade { - amount_in: TokenAmount, - amount_out: TokenAmount, - nodes: any, - edges: any -} - -interface SwapAPIResponse { - total_tests: number, - errors: number, - trade: Trade | null, - tx: string | null -} - -async function makeRequest( - route: string, - options: RequestParams -): Promise { +export async function makeAPIRequest({ + route, + options, + responseSchema, +}: { + route: string; + options: RequestParams; + responseSchema: z.ZodSchema; +}): Promise { try { - const response = await axios({ - method: options.method, - url: `${options.hop_server_url || API_SERVER_PREFIX}/${route}`, - data: { - ...options.data, - "api_key": options.api_key - } - }); + const response = await fetch( + `${options.hop_server_url ?? API_SERVER_PREFIX}/${route}`, + { + method: options.method, + body: JSON.stringify( + { + ...options.data, + api_key: options.api_key, + }, + (_, v) => (typeof v === "bigint" ? parseInt(v.toString()) : v), + ), + headers: { + "Content-Type": "application/json", + }, + }, + ); - if(response.status != 200) { - console.error(`HopApi > Error on request '/${route}' : ${response.statusText}`); - return null; + if (response.status !== 200) { + throw new Error( + `HopApi > Error on request '/${route}' : ${response.statusText}`, + ); } - return response.data as SwapAPIResponse; - } catch(error) { + const result = responseSchema.safeParse(await response.json()); + if (result.success) { + return result.data; + } else { + console.error(result.error); + throw new Error(`Invalid response: ${result.error.message}`); + } + } catch (error) { console.error(error); - console.error(`HopApi > Error on request '/${route}' : ${error.response.data}`); + throw new Error( + `HopApi > Error on request '/${route}' : ${(error as Error).message}`, + ); } - - return null; } -function getAmountOutWithCommission( - amount_out: string, - fee_bps: number +export function getAmountOutWithCommission( + amount_out: bigint, + fee_bps: number, ): bigint { - if(fee_bps == 0) { - return BigInt(amount_out); + if (fee_bps == 0) { + return amount_out; } - return BigInt(((BigInt(amount_out) * (FEE_DENOMINATOR - BigInt(fee_bps))) / BigInt(FEE_DENOMINATOR)).toString()); + return ( + (amount_out * (FEE_DENOMINATOR - BigInt(fee_bps))) / BigInt(FEE_DENOMINATOR) + ); } - -export { - RequestParams, - makeRequest, - getAmountOutWithCommission -} \ No newline at end of file diff --git a/src/tests/quote.test.ts b/src/tests/quote.test.ts index 527641b..e30f423 100644 --- a/src/tests/quote.test.ts +++ b/src/tests/quote.test.ts @@ -6,17 +6,17 @@ async function quoteTest() { const api = new HopApi(getFullnodeUrl("mainnet"), { api_key: "", fee_bps: 0, - hop_server_url: "http://localhost:3002/api/v2" }); const result = await api.fetchQuote({ // @ts-ignore amount_in: 1_000_000_000n, token_in: "0x2::sui::SUI", - token_out: "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN" + token_out: + "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN", }); - console.log('result', result); + console.log("result", result); } -quoteTest() \ No newline at end of file +quoteTest(); diff --git a/src/tests/tx.test.ts b/src/tests/tx.test.ts index 2139396..e3e61fa 100644 --- a/src/tests/tx.test.ts +++ b/src/tests/tx.test.ts @@ -12,17 +12,17 @@ async function txTest(): Promise { // @ts-ignore amount_in: 1_000_000_000n, token_in: "0x2::sui::SUI", - token_out: "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN" + token_out: + "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN", }); - console.log('quote_result', quote_result); + console.log("quote_result", quote_result); const tx_result = await api.fetchTx({ // @ts-ignore trade: quote_result.trade, sui_address: "0x4466fe25550f648a4acd6823a90e1f96c77e1d37257ee3ed2d6e02a694984f73", - gas_budget: 1e6, }); console.log("result", tx_result); diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json new file mode 100644 index 0000000..f327d9e --- /dev/null +++ b/tsconfig.cjs.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "CommonJS", + "moduleResolution": "node", + "target": "es2020", + "skipLibCheck": false, + "outDir": "./dist/cjs" + }, + "include": ["src/**/*"], + "exclude": ["src/tests"] +} diff --git a/tsconfig.json b/tsconfig.json index b0ce3e1..6468d72 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,10 +1,36 @@ { "compilerOptions": { - "module": "commonjs", - "target": "es2020", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2020", + "outDir": "./dist/esm", + + // build + "types": [], + "esModuleInterop": true, + "preserveConstEnums": true, + "skipLibCheck": true, + "importHelpers": true, + "resolveJsonModule": true, + "isolatedModules": true, + "allowJs": true, + "checkJs": true, + + // linting + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitOverride": true, + "noUncheckedIndexedAccess": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "noErrorTruncation": true, + + // sources + "sourceMap": true, "declaration": true, - "outDir": "./dist", - "esModuleInterop": true + "declarationMap": true, + "inlineSources": true }, "include": ["src/**/*"], "exclude": ["src/tests"]