diff --git a/token-swap/.gitignore b/token-swap/.gitignore new file mode 100644 index 00000000..a65b4177 --- /dev/null +++ b/token-swap/.gitignore @@ -0,0 +1 @@ +lib diff --git a/token-swap/js/babel.rollup.config.json b/token-swap/js/babel.rollup.config.json new file mode 100644 index 00000000..ee7e6955 --- /dev/null +++ b/token-swap/js/babel.rollup.config.json @@ -0,0 +1,18 @@ +{ + "presets": [ + [ + "@babel/preset-env", + { + "modules": false, + "targets": { + "node": "10" + } + } + ], + "@babel/preset-flow" + ], + "plugins": [ + "@babel/plugin-transform-runtime", + "@babel/plugin-proposal-class-properties" + ] +} diff --git a/token-swap/js/module.d.ts b/token-swap/js/module.d.ts new file mode 100644 index 00000000..9f78a1d8 --- /dev/null +++ b/token-swap/js/module.d.ts @@ -0,0 +1,114 @@ +declare module '@solana/spl-token-swap' { + import { Buffer } from 'buffer'; + import { PublicKey, TransactionInstruction, TransactionSignature, Connection, Account } from "@solana/web3.js"; + import BN from 'bn.js'; + + // === client/token-swap.js === + export class Numberu64 extends BN { + toBuffer(): Buffer; + static fromBuffer(buffer: Buffer): Numberu64; + } + + export type TokenSwapInfo = { + nonce: number, + tokenAccountA: PublicKey, + tokenAccountB: PublicKey, + tokenPool: PublicKey, + feesNumerator: Numberu64, + feesDenominator: Numberu64, + feeRatio: number, + }; + + export class TokenSwap { + constructor(connection: Connection, tokenSwap: PublicKey, programId: PublicKey, payer: Account); + + static getMinBalanceRentForExemptTokenSwap( + connection: Connection, + ): Promise; + + static createTokenSwap( + connection: Connection, + payer: Account, + tokenSwapAccount: Account, + authority: PublicKey, + tokenAccountA: PublicKey, + tokenAccountB: PublicKey, + tokenPool: PublicKey, + tokenAccountPool: PublicKey, + tokenProgramId: PublicKey, + nonce: number, + feeNumerator: number, + feeDenominator: number, + programId: PublicKey, + ): Promise + + getInfo(): Promise + swap( + authority: PublicKey, + source: PublicKey, + swap_source: PublicKey, + swap_destination: PublicKey, + destination: PublicKey, + tokenProgramId: PublicKey, + amount: number | Numberu64, + ): Promise + + swapInstruction( + authority: PublicKey, + source: PublicKey, + swap_source: PublicKey, + swap_destination: PublicKey, + destination: PublicKey, + tokenProgramId: PublicKey, + amount: number | Numberu64, + ): TransactionInstruction + + deposit( + authority: PublicKey, + sourceA: PublicKey, + sourceB: PublicKey, + intoA: PublicKey, + intoB: PublicKey, + poolToken: PublicKey, + poolAccount: PublicKey, + tokenProgramId: PublicKey, + amount: number | Numberu64, + ): Promise + + depositInstruction( + authority: PublicKey, + sourceA: PublicKey, + sourceB: PublicKey, + intoA: PublicKey, + intoB: PublicKey, + poolToken: PublicKey, + poolAccount: PublicKey, + tokenProgramId: PublicKey, + amount: number | Numberu64, + ): TransactionInstruction + + withdraw( + authority: PublicKey, + poolMint: PublicKey, + sourcePoolAccount: PublicKey, + fromA: PublicKey, + fromB: PublicKey, + userAccountA: PublicKey, + userAccountB: PublicKey, + tokenProgramId: PublicKey, + amount: number | Numberu64, + ): Promise + + withdrawInstruction( + authority: PublicKey, + poolMint: PublicKey, + sourcePoolAccount: PublicKey, + fromA: PublicKey, + fromB: PublicKey, + userAccountA: PublicKey, + userAccountB: PublicKey, + tokenProgramId: PublicKey, + amount: number | Numberu64, + ): TransactionInstruction + } +} diff --git a/token-swap/js/module.flow.js b/token-swap/js/module.flow.js new file mode 100644 index 00000000..1450c06e --- /dev/null +++ b/token-swap/js/module.flow.js @@ -0,0 +1,117 @@ +/** + * Flow Library definition for spl-token-swap + * + * This file is manually maintained + * + */ + +declare module '@solana/spl-token-swap' { + // === client/token-swap.js === + declare export class Numberu64 extends BN { + toBuffer(): Buffer; + static fromBuffer(buffer: Buffer): Numberu64; + } + + declare export type TokenSwapInfo = {| + nonce: number, + tokenAccountA: PublicKey, + tokenAccountB: PublicKey, + tokenPool: PublicKey, + feesNumerator: Numberu64, + feesDenominator: Numberu64, + feeRatio: number, + |}; + + declare export class TokenSwap { + constructor(connection: Connection, tokenSwap: PublicKey, programId: PublicKey, payer: Account): TokenSwap; + + static getMinBalanceRentForExemptTokenSwap( + connection: Connection, + ): Promise; + + static createTokenSwap( + connection: Connection, + payer: Account, + tokenSwapAccount: Account, + authority: PublicKey, + tokenAccountA: PublicKey, + tokenAccountB: PublicKey, + tokenPool: PublicKey, + tokenAccountPool: PublicKey, + tokenProgramId: PublicKey, + nonce: number, + feeNumerator: number, + feeDenominator: number, + programId: PublicKey, + ): Promise; + + getInfo(): Promise; + swap( + authority: PublicKey, + source: PublicKey, + swap_source: PublicKey, + swap_destination: PublicKey, + destination: PublicKey, + tokenProgramId: PublicKey, + amount: number | Numberu64, + ): Promise; + + swapInstruction( + authority: PublicKey, + source: PublicKey, + swap_source: PublicKey, + swap_destination: PublicKey, + destination: PublicKey, + tokenProgramId: PublicKey, + amount: number | Numberu64, + ): TransactionInstruction; + + deposit( + authority: PublicKey, + sourceA: PublicKey, + sourceB: PublicKey, + intoA: PublicKey, + intoB: PublicKey, + poolToken: PublicKey, + poolAccount: PublicKey, + tokenProgramId: PublicKey, + amount: number | Numberu64, + ): Promise; + + depositInstruction( + authority: PublicKey, + sourceA: PublicKey, + sourceB: PublicKey, + intoA: PublicKey, + intoB: PublicKey, + poolToken: PublicKey, + poolAccount: PublicKey, + tokenProgramId: PublicKey, + amount: number | Numberu64, + ): TransactionInstruction; + + withdraw( + authority: PublicKey, + poolMint: PublicKey, + sourcePoolAccount: PublicKey, + fromA: PublicKey, + fromB: PublicKey, + userAccountA: PublicKey, + userAccountB: PublicKey, + tokenProgramId: PublicKey, + amount: number | Numberu64, + ): Promise; + + withdrawInstruction( + authority: PublicKey, + poolMint: PublicKey, + sourcePoolAccount: PublicKey, + fromA: PublicKey, + fromB: PublicKey, + userAccountA: PublicKey, + userAccountB: PublicKey, + tokenProgramId: PublicKey, + amount: number | Numberu64, + ): TransactionInstruction; + } +} diff --git a/token-swap/js/package-lock.json b/token-swap/js/package-lock.json index ac3623d0..827a2350 100644 --- a/token-swap/js/package-lock.json +++ b/token-swap/js/package-lock.json @@ -1502,6 +1502,32 @@ } } }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, "@octokit/auth-token": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.2.tgz", @@ -1679,6 +1705,50 @@ "@types/node": ">= 8" } }, + "@rollup/plugin-babel": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.2.1.tgz", + "integrity": "sha512-Jd7oqFR2dzZJ3NWANDyBjwTtX/lYbZpVcmkHrfQcpvawHs9E4c0nYk5U2mfZ6I/DZcIvy506KZJi54XK/jxH7A==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-commonjs": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-15.0.0.tgz", + "integrity": "sha512-8uAdikHqVyrT32w1zB9VhW6uGwGjhKgnDNP4pQJsjdnyF4FgCj6/bmv24c7v2CuKhq32CcyCwRzMPEElaKkn0w==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "dependencies": { + "estree-walker": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.1.tgz", + "integrity": "sha512-tF0hv+Yi2Ot1cwj9eYHtxC0jB9bmjacjQs6ZBTj82H8JwUywFuc+7E83NWfNMwHXZc11mjfFcVXPe9gEP4B8dg==", + "dev": true + } + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, "@sindresorhus/is": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz", @@ -1742,6 +1812,12 @@ "@types/node": "*" } }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, "@types/express-serve-static-core": { "version": "4.17.12", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.12.tgz", @@ -1752,6 +1828,25 @@ "@types/range-parser": "*" } }, + "@types/fs-extra": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.1.tgz", + "integrity": "sha512-TcUlBem321DFQzBNuz8p0CLLKp0VvF/XH9E4KHNmgwyp4E3AfgI5cjiIVZWlbfThBop2qxFIh4+LeY6hVWWZ2w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "@types/http-cache-semantics": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", @@ -1778,6 +1873,12 @@ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.161.tgz", "integrity": "sha512-EP6O3Jkr7bXvZZSZYlsgt5DIjiGr0dXP1/jVEwVLTFgg0d+3lWVQkRavYVQszV7dYUwvg0B8R0MBDpcmXg7XIA==" }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, "@types/node": { "version": "12.12.53", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.53.tgz", @@ -1924,6 +2025,12 @@ "is-string": "^1.0.5" } }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -2518,6 +2625,12 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -2761,6 +2874,23 @@ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -3263,6 +3393,12 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3441,6 +3577,74 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -3453,6 +3657,15 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "file-entry-cache": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", @@ -3775,6 +3988,36 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, "got": { "version": "10.7.0", "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz", @@ -4129,6 +4372,15 @@ "isobject": "^3.0.1" } }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, "is-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", @@ -4480,6 +4732,15 @@ "integrity": "sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg==", "dev": true }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -4543,6 +4804,12 @@ "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -5044,6 +5311,12 @@ "pify": "^3.0.0" } }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, "pidtree": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", @@ -5409,6 +5682,12 @@ "dev": true, "optional": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -5418,6 +5697,65 @@ "glob": "^7.1.3" } }, + "rollup": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.27.1.tgz", + "integrity": "sha512-GiWHQvnmMgBktSpY/1+nrGpwPsTw4b9P28og2uedfeq4JZ16rzAmnQ5Pm/E0/BEmDNia1ZbY7+qu3nBgNa19Hg==", + "dev": true, + "requires": { + "fsevents": "~2.1.2" + }, + "dependencies": { + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + } + } + }, + "rollup-plugin-copy": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.3.0.tgz", + "integrity": "sha512-euDjCUSBXZa06nqnwCNADbkAcYDfzwowfZQkto9K/TFhiH+QG7I4PUsEMwM9tDgomGWJc//z7KLW8t+tZwxADA==", + "dev": true, + "requires": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + } + } + }, "rpc-websockets": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.4.2.tgz", @@ -5440,6 +5778,12 @@ } } }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -5694,6 +6038,12 @@ "dev": true, "optional": true }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", diff --git a/token-swap/js/package.json b/token-swap/js/package.json index 17809648..2c06b00a 100644 --- a/token-swap/js/package.json +++ b/token-swap/js/package.json @@ -1,13 +1,30 @@ { - "name": "spl-token-swap", + "name": "@solana/spl-token-swap", "version": "0.0.1", - "description": "", + "description": "SPL Token Swap JavaScript API", + "license": "MIT", + "author": "Solana Maintainers ", + "homepage": "https://solana.com/", "repository": { "type": "git", "url": "https://github.com/solana-labs/solana-program-library" }, + "bugs": { + "url": "https://github.com/solana-labs/solana-program-library/issues" + }, + "publishConfig": { + "access": "public" + }, + "main": "lib/index.cjs.js", + "module": "lib/index.esm.js", + "types": "lib/index.d.ts", + "files": [ + "/lib", + "/module.flow.js" + ], "testnetDefaultChannel": "v1.3.9", "scripts": { + "build": "rollup -c", "start": "babel-node --ignore node_modules cli/main.js", "lint": "npm run pretty && eslint .", "lint:fix": "npm run lint -- --fix", @@ -25,8 +42,6 @@ "pretty": "prettier --write '{,src/**/}*.js'" }, "keywords": [], - "author": "", - "license": "MIT", "dependencies": { "@babel/runtime": "^7.11.2", "@solana/web3.js": "^0.75.2", @@ -44,6 +59,8 @@ "@babel/plugin-transform-runtime": "^7.11.5", "@babel/preset-env": "^7.11.0", "@babel/preset-flow": "^7.10.4", + "@rollup/plugin-babel": "^5.2.1", + "@rollup/plugin-commonjs": "^15.0.0", "babel-eslint": "^10.1.0", "eslint": "^7.9.0", "eslint-plugin-import": "^2.22.0", @@ -51,6 +68,8 @@ "flow-typed": "^3.2.0", "mz": "^2.7.0", "prettier": "^2.1.2", + "rollup": "^2.27.1", + "rollup-plugin-copy": "^3.3.0", "semver": "^7.0.0", "watch": "^1.0.2" }, diff --git a/token-swap/js/rollup.config.js b/token-swap/js/rollup.config.js new file mode 100644 index 00000000..67888535 --- /dev/null +++ b/token-swap/js/rollup.config.js @@ -0,0 +1,74 @@ +import babel from '@rollup/plugin-babel'; +import commonjs from '@rollup/plugin-commonjs'; +import copy from 'rollup-plugin-copy'; + +function generateConfig(configType) { + const config = { + input: 'client/token-swap.js', + plugins: [ + babel({ + configFile: './babel.rollup.config.json', + exclude: 'node_modules/**', + babelHelpers: 'runtime', + }), + commonjs(), + copy({ + targets: [{src: 'module.d.ts', dest: 'lib', rename: 'index.d.ts'}], + }), + ], + }; + + switch (configType) { + case 'browser': + // TODO: Add support + break; + case 'node': + config.output = [ + { + file: 'lib/index.cjs.js', + format: 'cjs', + sourcemap: true, + }, + { + file: 'lib/index.esm.js', + format: 'es', + sourcemap: true, + }, + ]; + + // Quash 'Unresolved dependencies' complaints for modules listed in the + // package.json "dependencies" section. Unfortunately this list is manually + // maintained. + config.external = [ + 'assert', + '@babel/runtime/core-js/get-iterator', + '@babel/runtime/core-js/json/stringify', + '@babel/runtime/core-js/object/assign', + '@babel/runtime/core-js/object/get-prototype-of', + '@babel/runtime/core-js/object/keys', + '@babel/runtime/core-js/promise', + '@babel/runtime/helpers/asyncToGenerator', + '@babel/runtime/helpers/classCallCheck', + '@babel/runtime/helpers/createClass', + '@babel/runtime/helpers/defineProperty', + '@babel/runtime/helpers/get', + '@babel/runtime/helpers/getPrototypeOf', + '@babel/runtime/helpers/inherits', + '@babel/runtime/helpers/possibleConstructorReturn', + '@babel/runtime/helpers/slicedToArray', + '@babel/runtime/helpers/toConsumableArray', + '@babel/runtime/helpers/typeof', + '@babel/runtime/regenerator', + 'bn.js', + 'buffer-layout', + '@solana/web3.js', + ]; + break; + default: + throw new Error(`Unknown configType: ${configType}`); + } + + return config; +} + +export default [generateConfig('node')]; diff --git a/token/js/package.json b/token/js/package.json index d71e11ac..b1bfd96c 100644 --- a/token/js/package.json +++ b/token/js/package.json @@ -44,7 +44,7 @@ }, "dependencies": { "@babel/runtime": "^7.10.5", - "@solana/web3.js": "^0.75.0", + "@solana/web3.js": "^0.75.1", "bn.js": "^5.0.0", "buffer-layout": "^1.2.0", "dotenv": "8.2.0",