From f085e4e15cf4bb237bbd45cfe5f95fc3c39ba407 Mon Sep 17 00:00:00 2001 From: Evan Gray Date: Sun, 21 Nov 2021 19:18:37 -0500 Subject: [PATCH] sdk/js: esm and cjs builds Change-Id: I9ddb372ac872675f5b906d523ff5237e4f65ecb1 --- .../components/Migration/SolanaWorkflow.tsx | 6 +- .../src/components/NFTOriginVerifier.tsx | 2 +- bridge_ui/src/components/Recovery.tsx | 2 +- .../TokenSelectors/EvmTokenPicker.tsx | 2 +- .../src/hooks/useCheckIfWormholeWrapped.ts | 2 +- bridge_ui/src/hooks/useFetchTargetAsset.ts | 2 +- bridge_ui/src/hooks/useHandleNFTRedeem.tsx | 4 +- bridge_ui/src/hooks/useHandleNFTTransfer.tsx | 2 +- bridge_ui/src/hooks/useOriginalAsset.ts | 2 +- sdk/js/CHANGELOG.md | 6 +- sdk/js/package.json | 10 +- sdk/js/scripts/copyEthersTypes.js | 32 +++-- sdk/js/scripts/copyWasm.js | 130 +++++++++--------- sdk/js/src/rpc/index.ts | 1 + .../src/token_bridge/__tests__/integration.ts | 2 +- sdk/js/tsconfig-cjs.json | 7 + sdk/js/tsconfig.json | 2 +- 17 files changed, 115 insertions(+), 99 deletions(-) create mode 100644 sdk/js/tsconfig-cjs.json diff --git a/bridge_ui/src/components/Migration/SolanaWorkflow.tsx b/bridge_ui/src/components/Migration/SolanaWorkflow.tsx index 94aae648..468aa829 100644 --- a/bridge_ui/src/components/Migration/SolanaWorkflow.tsx +++ b/bridge_ui/src/components/Migration/SolanaWorkflow.tsx @@ -1,7 +1,7 @@ import { CHAIN_ID_SOLANA } from "@certusone/wormhole-sdk"; -import migrateTokensTx from "@certusone/wormhole-sdk/lib/migration/migrateTokens"; -import getPoolAddress from "@certusone/wormhole-sdk/lib/migration/poolAddress"; -import getToCustodyAddress from "@certusone/wormhole-sdk/lib/migration/toCustodyAddress"; +import migrateTokensTx from "@certusone/wormhole-sdk/lib/esm/migration/migrateTokens"; +import getPoolAddress from "@certusone/wormhole-sdk/lib/esm/migration/poolAddress"; +import getToCustodyAddress from "@certusone/wormhole-sdk/lib/esm/migration/toCustodyAddress"; import { makeStyles, Typography } from "@material-ui/core"; import { ASSOCIATED_TOKEN_PROGRAM_ID, diff --git a/bridge_ui/src/components/NFTOriginVerifier.tsx b/bridge_ui/src/components/NFTOriginVerifier.tsx index bc044374..eff41def 100644 --- a/bridge_ui/src/components/NFTOriginVerifier.tsx +++ b/bridge_ui/src/components/NFTOriginVerifier.tsx @@ -10,7 +10,7 @@ import { getOriginalAssetEth, getOriginalAssetSol, WormholeWrappedNFTInfo, -} from "@certusone/wormhole-sdk/lib/nft_bridge"; +} from "@certusone/wormhole-sdk/lib/esm/nft_bridge"; import { Button, Card, diff --git a/bridge_ui/src/components/Recovery.tsx b/bridge_ui/src/components/Recovery.tsx index cd615074..9df38198 100644 --- a/bridge_ui/src/components/Recovery.tsx +++ b/bridge_ui/src/components/Recovery.tsx @@ -290,7 +290,7 @@ export default function Recovery() { (async () => { try { const { parse_vaa } = await import( - "@certusone/wormhole-sdk/lib/solana/core/bridge" + "@certusone/wormhole-sdk/lib/esm/solana/core/bridge" ); const parsedVAA = parse_vaa(hexToUint8Array(recoverySignedVAA)); if (!cancelled) { diff --git a/bridge_ui/src/components/TokenSelectors/EvmTokenPicker.tsx b/bridge_ui/src/components/TokenSelectors/EvmTokenPicker.tsx index b3b42fd3..f9701081 100644 --- a/bridge_ui/src/components/TokenSelectors/EvmTokenPicker.tsx +++ b/bridge_ui/src/components/TokenSelectors/EvmTokenPicker.tsx @@ -4,7 +4,7 @@ import { NFTImplementation, TokenImplementation, } from "@certusone/wormhole-sdk"; -import { WormholeAbi__factory } from "@certusone/wormhole-sdk/lib/ethers-contracts/abi"; +import { WormholeAbi__factory } from "@certusone/wormhole-sdk/lib/esm/ethers-contracts/abi"; import { getAddress as getEthAddress } from "@ethersproject/address"; import React, { useCallback } from "react"; import { useSelector } from "react-redux"; diff --git a/bridge_ui/src/hooks/useCheckIfWormholeWrapped.ts b/bridge_ui/src/hooks/useCheckIfWormholeWrapped.ts index 0f76fad9..a23c42c0 100644 --- a/bridge_ui/src/hooks/useCheckIfWormholeWrapped.ts +++ b/bridge_ui/src/hooks/useCheckIfWormholeWrapped.ts @@ -11,7 +11,7 @@ import { import { getOriginalAssetEth as getOriginalAssetEthNFT, getOriginalAssetSol as getOriginalAssetSolNFT, -} from "@certusone/wormhole-sdk/lib/nft_bridge"; +} from "@certusone/wormhole-sdk/lib/esm/nft_bridge"; import { Connection } from "@solana/web3.js"; import { LCDClient } from "@terra-money/terra.js"; import { useEffect } from "react"; diff --git a/bridge_ui/src/hooks/useFetchTargetAsset.ts b/bridge_ui/src/hooks/useFetchTargetAsset.ts index cd2cd568..08658e0d 100644 --- a/bridge_ui/src/hooks/useFetchTargetAsset.ts +++ b/bridge_ui/src/hooks/useFetchTargetAsset.ts @@ -11,7 +11,7 @@ import { import { getForeignAssetEth as getForeignAssetEthNFT, getForeignAssetSol as getForeignAssetSolNFT, -} from "@certusone/wormhole-sdk/lib/nft_bridge"; +} from "@certusone/wormhole-sdk/lib/esm/nft_bridge"; import { BigNumber } from "@ethersproject/bignumber"; import { arrayify } from "@ethersproject/bytes"; import { Connection } from "@solana/web3.js"; diff --git a/bridge_ui/src/hooks/useHandleNFTRedeem.tsx b/bridge_ui/src/hooks/useHandleNFTRedeem.tsx index 4676fcc4..dd1f5018 100644 --- a/bridge_ui/src/hooks/useHandleNFTRedeem.tsx +++ b/bridge_ui/src/hooks/useHandleNFTRedeem.tsx @@ -12,7 +12,7 @@ import { isNFTVAASolanaNative, redeemOnEth, redeemOnSolana, -} from "@certusone/wormhole-sdk/lib/nft_bridge"; +} from "@certusone/wormhole-sdk/lib/esm/nft_bridge"; import { arrayify } from "@ethersproject/bytes"; import { Alert } from "@material-ui/lab"; import { WalletContextState } from "@solana/wallet-adapter-react"; @@ -106,7 +106,7 @@ async function solana( const isNative = await isNFTVAASolanaNative(signedVAA); if (!isNative) { const { parse_vaa } = await import( - "@certusone/wormhole-sdk/lib/solana/core/bridge" + "@certusone/wormhole-sdk/lib/esm/solana/core/bridge" ); const parsedVAA = parse_vaa(signedVAA); const { originChain, originAddress, tokenId } = parseNFTPayload( diff --git a/bridge_ui/src/hooks/useHandleNFTTransfer.tsx b/bridge_ui/src/hooks/useHandleNFTTransfer.tsx index 3ee710b8..b299ddf4 100644 --- a/bridge_ui/src/hooks/useHandleNFTTransfer.tsx +++ b/bridge_ui/src/hooks/useHandleNFTTransfer.tsx @@ -11,7 +11,7 @@ import { import { transferFromEth, transferFromSolana, -} from "@certusone/wormhole-sdk/lib/nft_bridge"; +} from "@certusone/wormhole-sdk/lib/esm/nft_bridge"; import { Alert } from "@material-ui/lab"; import { WalletContextState } from "@solana/wallet-adapter-react"; import { Connection } from "@solana/web3.js"; diff --git a/bridge_ui/src/hooks/useOriginalAsset.ts b/bridge_ui/src/hooks/useOriginalAsset.ts index 5e7f23db..726e3b34 100644 --- a/bridge_ui/src/hooks/useOriginalAsset.ts +++ b/bridge_ui/src/hooks/useOriginalAsset.ts @@ -13,7 +13,7 @@ import { getOriginalAssetEth as getOriginalAssetEthNFT, getOriginalAssetSol as getOriginalAssetSolNFT, WormholeWrappedNFTInfo, -} from "@certusone/wormhole-sdk/lib/nft_bridge"; +} from "@certusone/wormhole-sdk/lib/esm/nft_bridge"; import { Web3Provider } from "@certusone/wormhole-sdk/node_modules/@ethersproject/providers"; import { ethers } from "@certusone/wormhole-sdk/node_modules/ethers"; import { Connection } from "@solana/web3.js"; diff --git a/sdk/js/CHANGELOG.md b/sdk/js/CHANGELOG.md index 5be75be1..95a14f2d 100644 --- a/sdk/js/CHANGELOG.md +++ b/sdk/js/CHANGELOG.md @@ -1,11 +1,15 @@ # Changelog -## 0.0.11 +## 0.1.0 ### Added +separate cjs and esm builds + updateWrappedOnSolana +top-level export getSignedVAAWithRetry + ## 0.0.10 ### Added diff --git a/sdk/js/package.json b/sdk/js/package.json index 919aeb25..906f3f18 100644 --- a/sdk/js/package.json +++ b/sdk/js/package.json @@ -1,19 +1,19 @@ { "name": "@certusone/wormhole-sdk", - "version": "0.0.10", + "version": "0.1.0", "description": "SDK for interacting with Wormhole", "homepage": "https://wormholenetwork.com", - "main": "lib/index.js", - "types": "lib/index.d.ts", + "main": "./lib/cjs/index.js", + "module": "./lib/esm/index.js", "files": [ - "lib/**/*" + "./lib/**/*" ], "repository": "https://github.com/certusone/wormhole/tree/dev.v2/sdk/js", "scripts": { "build-contracts": "npm run build --prefix ../../ethereum && node scripts/copyContracts.js && typechain --target=ethers-v5 --out-dir=src/ethers-contracts contracts/*.json", "build-abis": "typechain --target=ethers-v5 --out-dir=src/ethers-contracts/abi src/abi/Wormhole.abi.json", "build-deps": "npm run build-abis && npm run build-contracts", - "build-lib": "tsc && node scripts/copyEthersTypes.js && node scripts/copyWasm.js", + "build-lib": "tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && node scripts/copyEthersTypes.js && node scripts/copyWasm.js", "build-all": "npm run build-deps && npm run build-lib", "test": "jest --config jestconfig.json --verbose", "build": "npm run build-all", diff --git a/sdk/js/scripts/copyEthersTypes.js b/sdk/js/scripts/copyEthersTypes.js index a641f9d9..c41364d3 100644 --- a/sdk/js/scripts/copyEthersTypes.js +++ b/sdk/js/scripts/copyEthersTypes.js @@ -1,18 +1,20 @@ const fs = require("fs"); -fs.readdirSync("src/ethers-contracts").forEach((file) => { - if (file.endsWith(".d.ts")) { - fs.copyFileSync( - `src/ethers-contracts/${file}`, - `lib/ethers-contracts/${file}` - ); - } -}); +["lib/esm", "lib/cjs"].forEach((buildPath) => { + fs.readdirSync("src/ethers-contracts").forEach((file) => { + if (file.endsWith(".d.ts")) { + fs.copyFileSync( + `src/ethers-contracts/${file}`, + `${buildPath}/ethers-contracts/${file}` + ); + } + }); -fs.readdirSync("src/ethers-contracts/abi").forEach((file) => { - if (file.endsWith(".d.ts")) { - fs.copyFileSync( - `src/ethers-contracts/abi/${file}`, - `lib/ethers-contracts/abi/${file}` - ); - } + fs.readdirSync("src/ethers-contracts/abi").forEach((file) => { + if (file.endsWith(".d.ts")) { + fs.copyFileSync( + `src/ethers-contracts/abi/${file}`, + `${buildPath}/ethers-contracts/abi/${file}` + ); + } + }); }); diff --git a/sdk/js/scripts/copyWasm.js b/sdk/js/scripts/copyWasm.js index f7e4963c..5e15f2c2 100644 --- a/sdk/js/scripts/copyWasm.js +++ b/sdk/js/scripts/copyWasm.js @@ -1,65 +1,67 @@ const fs = require("fs"); -fs.copyFileSync( - "src/solana/core/bridge_bg.wasm", - "lib/solana/core/bridge_bg.wasm" -); -fs.copyFileSync( - "src/solana/core-node/bridge_bg.wasm", - "lib/solana/core-node/bridge_bg.wasm" -); -fs.copyFileSync( - "src/solana/core/bridge_bg.wasm.d.ts", - "lib/solana/core/bridge_bg.wasm.d.ts" -); -fs.copyFileSync( - "src/solana/core-node/bridge_bg.wasm.d.ts", - "lib/solana/core-node/bridge_bg.wasm.d.ts" -); -fs.copyFileSync( - "src/solana/nft/nft_bridge_bg.wasm", - "lib/solana/nft/nft_bridge_bg.wasm" -); -fs.copyFileSync( - "src/solana/nft-node/nft_bridge_bg.wasm", - "lib/solana/nft-node/nft_bridge_bg.wasm" -); -fs.copyFileSync( - "src/solana/nft/nft_bridge_bg.wasm.d.ts", - "lib/solana/nft/nft_bridge_bg.wasm.d.ts" -); -fs.copyFileSync( - "src/solana/nft-node/nft_bridge_bg.wasm.d.ts", - "lib/solana/nft-node/nft_bridge_bg.wasm.d.ts" -); -fs.copyFileSync( - "src/solana/token/token_bridge_bg.wasm", - "lib/solana/token/token_bridge_bg.wasm" -); -fs.copyFileSync( - "src/solana/token-node/token_bridge_bg.wasm", - "lib/solana/token-node/token_bridge_bg.wasm" -); -fs.copyFileSync( - "src/solana/token/token_bridge_bg.wasm.d.ts", - "lib/solana/token/token_bridge_bg.wasm.d.ts" -); -fs.copyFileSync( - "src/solana/token-node/token_bridge_bg.wasm.d.ts", - "lib/solana/token-node/token_bridge_bg.wasm.d.ts" -); -fs.copyFileSync( - "src/solana/migration/wormhole_migration_bg.wasm", - "lib/solana/migration/wormhole_migration_bg.wasm" -); -fs.copyFileSync( - "src/solana/migration-node/wormhole_migration_bg.wasm", - "lib/solana/migration-node/wormhole_migration_bg.wasm" -); -fs.copyFileSync( - "src/solana/migration/wormhole_migration_bg.wasm.d.ts", - "lib/solana/migration/wormhole_migration_bg.wasm.d.ts" -); -fs.copyFileSync( - "src/solana/migration-node/wormhole_migration_bg.wasm.d.ts", - "lib/solana/migration-node/wormhole_migration_bg.wasm.d.ts" -); +["lib/esm", "lib/cjs"].forEach((buildPath) => { + fs.copyFileSync( + `src/solana/core/bridge_bg.wasm`, + `${buildPath}/solana/core/bridge_bg.wasm` + ); + fs.copyFileSync( + `src/solana/core-node/bridge_bg.wasm`, + `${buildPath}/solana/core-node/bridge_bg.wasm` + ); + fs.copyFileSync( + `src/solana/core/bridge_bg.wasm.d.ts`, + `${buildPath}/solana/core/bridge_bg.wasm.d.ts` + ); + fs.copyFileSync( + `src/solana/core-node/bridge_bg.wasm.d.ts`, + `${buildPath}/solana/core-node/bridge_bg.wasm.d.ts` + ); + fs.copyFileSync( + `src/solana/nft/nft_bridge_bg.wasm`, + `${buildPath}/solana/nft/nft_bridge_bg.wasm` + ); + fs.copyFileSync( + `src/solana/nft-node/nft_bridge_bg.wasm`, + `${buildPath}/solana/nft-node/nft_bridge_bg.wasm` + ); + fs.copyFileSync( + `src/solana/nft/nft_bridge_bg.wasm.d.ts`, + `${buildPath}/solana/nft/nft_bridge_bg.wasm.d.ts` + ); + fs.copyFileSync( + `src/solana/nft-node/nft_bridge_bg.wasm.d.ts`, + `${buildPath}/solana/nft-node/nft_bridge_bg.wasm.d.ts` + ); + fs.copyFileSync( + `src/solana/token/token_bridge_bg.wasm`, + `${buildPath}/solana/token/token_bridge_bg.wasm` + ); + fs.copyFileSync( + `src/solana/token-node/token_bridge_bg.wasm`, + `${buildPath}/solana/token-node/token_bridge_bg.wasm` + ); + fs.copyFileSync( + `src/solana/token/token_bridge_bg.wasm.d.ts`, + `${buildPath}/solana/token/token_bridge_bg.wasm.d.ts` + ); + fs.copyFileSync( + `src/solana/token-node/token_bridge_bg.wasm.d.ts`, + `${buildPath}/solana/token-node/token_bridge_bg.wasm.d.ts` + ); + fs.copyFileSync( + `src/solana/migration/wormhole_migration_bg.wasm`, + `${buildPath}/solana/migration/wormhole_migration_bg.wasm` + ); + fs.copyFileSync( + `src/solana/migration-node/wormhole_migration_bg.wasm`, + `${buildPath}/solana/migration-node/wormhole_migration_bg.wasm` + ); + fs.copyFileSync( + `src/solana/migration/wormhole_migration_bg.wasm.d.ts`, + `${buildPath}/solana/migration/wormhole_migration_bg.wasm.d.ts` + ); + fs.copyFileSync( + `src/solana/migration-node/wormhole_migration_bg.wasm.d.ts`, + `${buildPath}/solana/migration-node/wormhole_migration_bg.wasm.d.ts` + ); +}); diff --git a/sdk/js/src/rpc/index.ts b/sdk/js/src/rpc/index.ts index 474ca685..2fc4bf25 100644 --- a/sdk/js/src/rpc/index.ts +++ b/sdk/js/src/rpc/index.ts @@ -1 +1,2 @@ export * from "./getSignedVAA"; +export * from "./getSignedVAAWithRetry"; diff --git a/sdk/js/src/token_bridge/__tests__/integration.ts b/sdk/js/src/token_bridge/__tests__/integration.ts index 559e0628..6147dc77 100644 --- a/sdk/js/src/token_bridge/__tests__/integration.ts +++ b/sdk/js/src/token_bridge/__tests__/integration.ts @@ -383,7 +383,7 @@ describe("Integration Tests", () => { } catch (e) { console.error(e); done( - "An error occurred while trying to attest from Solana to Ethereum" + "An error occurred while trying to send from Solana to Ethereum" ); } })(); diff --git a/sdk/js/tsconfig-cjs.json b/sdk/js/tsconfig-cjs.json new file mode 100644 index 00000000..945c51f2 --- /dev/null +++ b/sdk/js/tsconfig-cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "CommonJS", + "outDir": "./lib/cjs" + } +} diff --git a/sdk/js/tsconfig.json b/sdk/js/tsconfig.json index b44fc04e..857c9585 100644 --- a/sdk/js/tsconfig.json +++ b/sdk/js/tsconfig.json @@ -4,7 +4,7 @@ "module": "esnext", "moduleResolution": "node", "declaration": true, - "outDir": "./lib", + "outDir": "./lib/esm", "strict": true, "esModuleInterop": true, "downlevelIteration": true,