From 77d1e00855dab7a26596f9b2c43d941348bb1042 Mon Sep 17 00:00:00 2001 From: Tomek Marciniak Date: Fri, 8 Nov 2024 23:23:48 +0100 Subject: [PATCH] feat(extension): add sandbox for running smart contracts --- apps/extension/manifest.ts | 13 ++ apps/extension/package.json | 33 ++-- apps/extension/postcss.config.mjs | 2 +- apps/extension/prompt.html | 1 + apps/extension/sandbox.html | 13 ++ apps/extension/src/app.tsx | 4 +- .../src/background/handlers/wallet.ts | 6 +- .../src/background/handlers/web-provider.ts | 2 +- apps/extension/src/background/index.ts | 2 +- apps/extension/src/prompt.tsx | 4 +- apps/extension/src/sandbox/index.ts | 11 ++ apps/extension/tailwind.config.mjs | 2 +- apps/extension/vite.config.ts | 6 + bun.lockb | Bin 657152 -> 558856 bytes package.json | 9 +- packages/_template/README.md | 2 +- packages/_template/package.json | 4 +- packages/_template/tsconfig.json | 2 +- packages/_template/tsup.config.ts | 2 +- packages/common/README.md | 2 +- packages/common/package.json | 2 +- packages/contracts/package.json | 25 +++ packages/contracts/src/add/add.spec.ts | 26 +++ packages/contracts/src/add/add.ts | 25 +++ packages/contracts/src/index.ts | 1 + packages/contracts/tsconfig.json | 29 ++++ packages/contracts/tsup.config.ts | 12 ++ packages/features/package.json | 33 ++-- packages/features/src/@types/i18next.d.ts | 9 -- packages/features/src/@types/resources.ts | 9 -- .../features/src/common/hooks/use-account.ts | 6 +- .../src/common/hooks/use-transaction.ts | 2 +- .../src/common/hooks/use-transactions.ts | 4 +- packages/features/src/common/lib/tx.ts | 2 +- .../features/src/common/store/address-book.ts | 2 +- packages/features/src/common/store/app.ts | 2 +- .../features/src/common/store/transaction.ts | 2 +- packages/features/src/common/types.ts | 2 +- .../src/components/address-dropdown.tsx | 2 +- .../features/src/components/hash-dropdown.tsx | 2 +- .../features/src/components/menu-drawer.tsx | 2 +- .../src/components/settings-page-layout.tsx | 2 +- .../src/error-renderer/views/error.tsx | 1 - packages/features/src/i18n/index.ts | 26 --- packages/features/src/index.ts | 4 +- packages/features/src/lib/i18n.ts | 23 +++ .../src/{i18n => lib}/locales/en/en.json | 0 .../src/{i18n => lib}/locales/tr/tr.json | 0 .../src/lock/routes/unlock-wallet.tsx | 4 +- .../src/onboarding/routes/create-wallet.tsx | 2 +- .../routes/seed-backup-confirmation.tsx | 8 +- .../src/onboarding/routes/seed-import.tsx | 10 +- .../features/src/onboarding/routes/start.tsx | 2 +- .../src/onboarding/views/seed-import.tsx | 2 +- packages/features/src/router.tsx | 148 +++++++++--------- .../src/send/components/send-form.tsx | 2 +- .../hooks/use-transaction-confirmation.tsx | 8 +- packages/features/src/send/routes/send.tsx | 2 +- .../src/staking/components/delegate-form.tsx | 2 +- .../src/transactions/components/tx-tile.tsx | 2 +- .../src/transactions/index.stories.tsx | 2 +- .../src/transactions/routes/transactions.tsx | 4 +- .../utils/structurize-transactions.ts | 2 +- .../views/transaction-details.tsx | 2 +- .../src/transactions/views/transactions.tsx | 2 +- .../features/src/wallet/routes/networks.tsx | 2 +- .../features/src/wallet/routes/overview.tsx | 2 +- .../features/src/wallet/views/overview.tsx | 2 +- .../src/web-connector/views/web-connector.tsx | 24 +++ packages/features/tsup.config.ts | 2 +- packages/key-management/package.json | 10 +- .../src/chains/Mina/credentialDerivation.ts | 2 +- .../key-management/src/chains/Mina/guards.ts | 2 +- .../src/chains/Mina/keyDerivationUtils.ts | 2 +- .../key-management/src/chains/Mina/types.ts | 4 +- packages/key-management/src/chains/README.md | 4 +- packages/key-management/src/types.ts | 4 +- .../test/mina/in-memory-key-agent.test.ts | 6 +- .../mina/key-agent-base-zkapp-command.test.ts | 6 +- .../test/mina/key-agent-base.test.ts | 6 +- .../key-management/test/util/guards.test.ts | 2 +- packages/key-management/tsconfig.json | 2 +- packages/key-management/tsup.config.ts | 2 +- packages/mina-core/README.md | 14 +- packages/mina-core/package.json | 10 +- packages/mina-core/src/Mina/Block.ts | 2 +- packages/mina-core/src/Mina/Transaction.ts | 2 +- .../Providers/chain-history-provider/types.ts | 2 +- packages/mina-core/tsconfig.json | 2 +- packages/mina-core/tsup.config.ts | 2 +- packages/offchain-data/README.md | 2 +- packages/offchain-data/package.json | 4 +- packages/offchain-data/tsconfig.json | 2 +- packages/offchain-data/tsup.config.ts | 2 +- packages/pallad-core/README.md | 14 +- packages/pallad-core/package.json | 16 +- .../Providers/account-info-provider/types.ts | 2 +- .../Providers/chain-history-provider/types.ts | 4 +- .../Providers/tx-submit-provider/types.ts | 2 +- .../Mina/Providers/unified-mina-provider.ts | 2 +- .../providers/account-info-provider/types.ts | 2 +- .../providers/tx-submit-provider/types.ts | 2 +- .../pallad-core/src/Pallad/providers/types.ts | 2 +- packages/pallad-core/tsconfig.json | 2 +- packages/pallad-core/tsup.config.ts | 2 +- packages/providers/README.md | 4 +- packages/providers/package.json | 23 +-- .../chain-history/chain-history-provider.ts | 4 +- .../account-info/account-info-provider.ts | 2 +- .../src/mina-node/account-info/queries.ts | 2 +- .../block-listener/BlockListenerProvider.ts | 2 +- .../chain-history/chain-history-provider.ts | 2 +- .../node-status/node-status-provider.ts | 2 +- packages/providers/src/mina-node/types.ts | 2 +- .../account-info-provider.ts | 2 +- .../chain-history-provider.ts | 2 +- .../unified-providers/node-status-provider.ts | 2 +- .../src/unified-providers/unified-provider.ts | 2 +- .../chain-history/chain-history-provider.ts | 4 +- .../blockberry/chain-history-provider.test.ts | 2 +- .../account-info-provider.test.ts | 2 +- .../chain-history-provider.test.ts | 2 +- .../submit-tx-provider.test.ts | 6 +- .../account-info-provider.test.ts | 2 +- .../submit-tx-provider.test.ts | 6 +- .../individual-providers/util.ts | 2 +- .../account-info-provider.test.ts | 2 +- .../chain-history-provider.test.ts | 2 +- .../unified-provider.test.ts | 4 +- .../zeko-scan/chain-history-provider.test.ts | 2 +- packages/providers/tsconfig.json | 2 +- packages/providers/tsup.config.ts | 2 +- packages/util/README.md | 2 +- packages/util/package.json | 8 +- packages/util/tsconfig.json | 2 +- packages/util/tsup.config.ts | 2 +- packages/vault/README.md | 10 +- packages/vault/package.json | 21 +-- packages/vault/src/account/accountState.ts | 4 +- .../vault/src/credentials/credentialsState.ts | 2 +- packages/vault/src/keyAgent/README.md | 4 +- packages/vault/src/keyAgent/keyAgentState.ts | 2 +- packages/vault/src/keyAgent/keyAgentStore.ts | 2 +- packages/vault/src/lib/utils.ts | 2 +- packages/vault/src/network-info/default.ts | 2 +- .../src/network-info/network-info-state.ts | 2 +- .../vault/utils/get-wallet-account-info.ts | 4 +- .../vault/utils/get-wallet-transactions.ts | 2 +- .../vault/src/vault/utils/restore-wallet.ts | 4 +- packages/vault/src/vault/utils/sign.ts | 2 +- .../src/vault/utils/sync-account-info.ts | 2 +- .../src/vault/utils/sync-transactions.ts | 4 +- packages/vault/src/vault/utils/sync-wallet.ts | 4 +- packages/vault/src/vault/vaultState.ts | 8 +- packages/vault/src/vault/vaultStore.ts | 4 +- .../vault/test/account/accountStore.test.ts | 2 +- .../test/credentials/credentialsStore.test.ts | 4 +- .../vault/test/keyAgent/keyAgentStore.test.ts | 8 +- .../vault/test/objects/objectsStore.test.ts | 4 +- packages/vault/test/wallet/walletFlow.test.ts | 6 +- packages/vault/tsconfig.json | 2 +- packages/vault/tsup.config.ts | 2 +- packages/web-provider/README.md | 4 +- packages/web-provider/package.json | 20 +-- .../src/mina-network/mina-provider.ts | 4 +- .../web-provider/src/mina-network/utils.ts | 4 +- .../web-provider/src/vault-service/types.ts | 6 +- .../src/vault-service/vault-service.ts | 10 +- packages/web-provider/tsconfig.json | 2 +- packages/web-provider/tsup.config.ts | 2 +- 170 files changed, 564 insertions(+), 463 deletions(-) create mode 100644 apps/extension/sandbox.html create mode 100644 apps/extension/src/sandbox/index.ts create mode 100644 packages/contracts/package.json create mode 100644 packages/contracts/src/add/add.spec.ts create mode 100644 packages/contracts/src/add/add.ts create mode 100644 packages/contracts/src/index.ts create mode 100644 packages/contracts/tsconfig.json create mode 100644 packages/contracts/tsup.config.ts delete mode 100644 packages/features/src/@types/i18next.d.ts delete mode 100644 packages/features/src/@types/resources.ts delete mode 100644 packages/features/src/i18n/index.ts create mode 100644 packages/features/src/lib/i18n.ts rename packages/features/src/{i18n => lib}/locales/en/en.json (100%) rename packages/features/src/{i18n => lib}/locales/tr/tr.json (100%) diff --git a/apps/extension/manifest.ts b/apps/extension/manifest.ts index fe576768..a125a2e8 100644 --- a/apps/extension/manifest.ts +++ b/apps/extension/manifest.ts @@ -17,6 +17,9 @@ export const manifest: chrome.runtime.ManifestV3 = { version: packageJson.version, action: { default_title: "Click to open panel" }, side_panel: { default_path: "index.html" }, + sandbox: { + pages: ["sandbox.html"], + }, permissions: ["storage", "activeTab", "background", "sidePanel"], background: { service_worker: "src/background/index.ts", @@ -48,4 +51,14 @@ export const manifest: chrome.runtime.ManifestV3 = { description: "Open the Pallad extension", }, }, + content_security_policy: { + sandbox: + "sandbox allow-scripts allow-forms allow-popups allow-modals; script-src 'self' 'unsafe-eval' 'wasm-unsafe-eval'; worker-src blob: 'self'; child-src blob: 'self'", + }, + cross_origin_embedder_policy: { + value: "require-corp", + }, + cross_origin_opener_policy: { + value: "same-origin", + }, } diff --git a/apps/extension/package.json b/apps/extension/package.json index 906d9e9d..bc7ff7fa 100644 --- a/apps/extension/package.json +++ b/apps/extension/package.json @@ -1,5 +1,5 @@ { - "name": "@palladxyz/extension", + "name": "@palladco/extension", "version": "0.6.2", "type": "module", "scripts": { @@ -16,29 +16,24 @@ }, "dependencies": { "@mina-js/providers": "https://pkg.pr.new/palladians/mina-js/@mina-js/providers@a51d3b4", - "@palladxyz/common": "workspace:*", - "@palladxyz/features": "workspace:*", - "@palladxyz/key-management": "workspace:*", - "@palladxyz/vault": "workspace:*", - "@palladxyz/web-provider": "workspace:*", - "@plasmohq/messaging": "0.6.2", - "buffer": "6.0.3", + "@palladco/common": "workspace:*", + "@palladco/contracts": "workspace:*", + "@palladco/features": "workspace:*", + "@palladco/key-management": "workspace:*", + "@palladco/vault": "workspace:*", + "@palladco/web-provider": "workspace:*", "mitt": "3.0.1", "next-themes": "0.3.0", "p-debounce": "4.0.0", "react": "18.3.1", "react-dom": "18.3.1", "serialize-error": "11.0.3", - "tailwindcss-animate": "1.0.7", - "vite-plugin-node-stdlib-browser": "0.2.1", + "ts-pattern": "^5.5.0", "webext-bridge": "6.0.1", "webextension-polyfill": "0.12.0", "zod": "3.23.8" }, "devDependencies": { - "@esbuild-plugins/node-globals-polyfill": "0.2.3", - "@esbuild-plugins/node-modules-polyfill": "0.2.2", - "@originjs/vite-plugin-commonjs": "1.0.3", "@playwright/test": "1.45.3", "@total-typescript/ts-reset": "0.5.1", "@tsconfig/vite-react": "3.0.2", @@ -47,20 +42,10 @@ "@types/react-dom": "18.3.0", "@types/webextension-polyfill": "0.10.7", "@vitejs/plugin-react-swc": "3.7.0", - "dedent": "1.5.3", - "path": "0.12.7", - "rollup-plugin-node-polyfills": "0.2.1", - "rollup-plugin-polyfill-node": "0.13.0", - "type-fest": "4.23.0", "vite": "5.3.5", - "vite-plugin-commonjs": "0.10.1", "vite-plugin-node-polyfills": "0.17.0", - "vite-plugin-require-transform": "1.0.21", "vite-plugin-svgr": "4.2.0", - "vite-plugin-top-level-await": "1.4.2", - "vite-plugin-wasm": "3.3.0", "vite-plugin-web-extension": "4.1.6", - "web-ext": "8.2.0", - "write-json-file": "6.0.0" + "web-ext": "8.2.0" } } diff --git a/apps/extension/postcss.config.mjs b/apps/extension/postcss.config.mjs index 8e0202ee..917debfd 100644 --- a/apps/extension/postcss.config.mjs +++ b/apps/extension/postcss.config.mjs @@ -1,3 +1,3 @@ -import postcssConfig from "@palladxyz/features/postcss.config.mjs" +import postcssConfig from "@palladco/features/postcss.config.mjs" export default postcssConfig diff --git a/apps/extension/prompt.html b/apps/extension/prompt.html index da43c9b4..046b1d82 100644 --- a/apps/extension/prompt.html +++ b/apps/extension/prompt.html @@ -18,6 +18,7 @@ +
diff --git a/apps/extension/sandbox.html b/apps/extension/sandbox.html new file mode 100644 index 00000000..3896516c --- /dev/null +++ b/apps/extension/sandbox.html @@ -0,0 +1,13 @@ + + + + + + Pallad + + + +
+ + + diff --git a/apps/extension/src/app.tsx b/apps/extension/src/app.tsx index 2f460632..77eeeda4 100644 --- a/apps/extension/src/app.tsx +++ b/apps/extension/src/app.tsx @@ -1,7 +1,7 @@ -import "@palladxyz/features/dist/index.css" +import "@palladco/features/dist/index.css" import "./assets/app.css" -import { Router } from "@palladxyz/features" +import { Router } from "@palladco/features" import { ThemeProvider } from "next-themes" import { useEffect } from "react" diff --git a/apps/extension/src/background/handlers/wallet.ts b/apps/extension/src/background/handlers/wallet.ts index cc4ec202..d76225d6 100644 --- a/apps/extension/src/background/handlers/wallet.ts +++ b/apps/extension/src/background/handlers/wallet.ts @@ -1,6 +1,6 @@ -import { useVault } from "@palladxyz/vault" -import type { NetworkId } from "@palladxyz/vault" -import { createMinaProvider } from "@palladxyz/web-provider" +import { useVault } from "@palladco/vault" +import type { NetworkId } from "@palladco/vault" +import { createMinaProvider } from "@palladco/web-provider" import { serializeError } from "serialize-error" import type { Handler } from "./" diff --git a/apps/extension/src/background/handlers/web-provider.ts b/apps/extension/src/background/handlers/web-provider.ts index 74109615..f466f073 100644 --- a/apps/extension/src/background/handlers/web-provider.ts +++ b/apps/extension/src/background/handlers/web-provider.ts @@ -13,7 +13,7 @@ import { SignTransactionRequestParamsSchema, SwitchChainRequestParamsSchema, } from "@mina-js/providers" -import { createMinaProvider } from "@palladxyz/web-provider" +import { createMinaProvider } from "@palladco/web-provider" import { serializeError } from "serialize-error" import { z } from "zod" import type { Handler } from "." diff --git a/apps/extension/src/background/index.ts b/apps/extension/src/background/index.ts index 3d2f7768..5df35834 100644 --- a/apps/extension/src/background/index.ts +++ b/apps/extension/src/background/index.ts @@ -1,4 +1,4 @@ -import { createMinaProvider } from "@palladxyz/web-provider" +import { createMinaProvider } from "@palladco/web-provider" import { onMessage, sendMessage } from "webext-bridge/background" import { runtime, tabs } from "webextension-polyfill" import { diff --git a/apps/extension/src/prompt.tsx b/apps/extension/src/prompt.tsx index 2344de3d..b121a73d 100644 --- a/apps/extension/src/prompt.tsx +++ b/apps/extension/src/prompt.tsx @@ -1,7 +1,7 @@ -import "@palladxyz/features/dist/index.css" +import "@palladco/features/dist/index.css" import "@total-typescript/ts-reset" -import { WebConnectorRoute } from "@palladxyz/features" +import { WebConnectorRoute } from "@palladco/features" import { ThemeProvider } from "next-themes" import React from "react" import ReactDOM from "react-dom/client" diff --git a/apps/extension/src/sandbox/index.ts b/apps/extension/src/sandbox/index.ts new file mode 100644 index 00000000..e578a426 --- /dev/null +++ b/apps/extension/src/sandbox/index.ts @@ -0,0 +1,11 @@ +import { Add } from "@palladco/contracts" +import { match } from "ts-pattern" + +window.addEventListener("message", async (event) => { + return match(event.data.type) + .with("compile", async () => { + await Add.compile() + window.parent.postMessage({ type: "compiled" }, "*") + }) + .run() +}) diff --git a/apps/extension/tailwind.config.mjs b/apps/extension/tailwind.config.mjs index 49263ede..9e11954a 100644 --- a/apps/extension/tailwind.config.mjs +++ b/apps/extension/tailwind.config.mjs @@ -1,4 +1,4 @@ -import tailwindConfig from "@palladxyz/features/tailwind.config.mjs" +import tailwindConfig from "@palladco/features/tailwind.config.mjs" export default { content: [ diff --git a/apps/extension/vite.config.ts b/apps/extension/vite.config.ts index 0aefa25e..f2513c36 100644 --- a/apps/extension/vite.config.ts +++ b/apps/extension/vite.config.ts @@ -24,5 +24,11 @@ export default defineConfig(() => { chunkSizeWarningLimit: 5000, emptyOutDir: true, }, + server: { + headers: { + "Cross-Origin-Embedder-Policy": "require-corp", + "Cross-Origin-Opener-Policy": "same-origin", + }, + }, } }) diff --git a/bun.lockb b/bun.lockb index 1405fd00985fe62d62eddbc77e166184b4df1448..3bc627a35ad386558fb104bbf17055915e8825e6 100755 GIT binary patch delta 108785 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 z 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 { + beforeAll(async () => { + await Add.compile() + }) + + it("works lol", async () => { + const Local = await Mina.LocalBlockchain({ proofsEnabled: true }) + Mina.setActiveInstance(Local) + const [deployerAccount] = Local.testAccounts + const zkAppPrivateKey = PrivateKey.random() + const zkAppAddress = zkAppPrivateKey.toPublicKey() + const zkApp = new Add(zkAppAddress) + const txn = await Mina.transaction(deployerAccount, async () => { + AccountUpdate.fundNewAccount(deployerAccount) + await zkApp.deploy() + }) + await txn.prove() + await txn.sign([deployerAccount.key, zkAppPrivateKey]).send() + const num = zkApp.num.get() + expect(num).toEqual(Field(1)) + }) +}) diff --git a/packages/contracts/src/add/add.ts b/packages/contracts/src/add/add.ts new file mode 100644 index 00000000..3e5f2567 --- /dev/null +++ b/packages/contracts/src/add/add.ts @@ -0,0 +1,25 @@ +import { Field, SmartContract, State, method, state } from "o1js" + +/** + * Basic Example + * See https://docs.minaprotocol.com/zkapps for more info. + * + * The Add contract initializes the state variable 'num' to be a Field(1) value by default when deployed. + * When the 'update' method is called, the Add contract adds Field(2) to its 'num' contract state. + * + * This file is safe to delete and replace with your own contract. + */ +export class Add extends SmartContract { + @state(Field) num = State() + + init() { + super.init() + this.num.set(Field(1)) + } + + @method async update() { + const currentState = this.num.getAndRequireEquals() + const newState = currentState.add(2) + this.num.set(newState) + } +} diff --git a/packages/contracts/src/index.ts b/packages/contracts/src/index.ts new file mode 100644 index 00000000..7ab1c15e --- /dev/null +++ b/packages/contracts/src/index.ts @@ -0,0 +1 @@ +export { Add } from "./add/add" diff --git a/packages/contracts/tsconfig.json b/packages/contracts/tsconfig.json new file mode 100644 index 00000000..c27e5d1d --- /dev/null +++ b/packages/contracts/tsconfig.json @@ -0,0 +1,29 @@ +{ + "extends": "@palladco/common/tsconfig.json", + "compilerOptions": { + // "experimentalDecorators": true, + // "noImplicitOverride": false, + // "strictPropertyInitialization": false, + // "skipLibCheck": true, + // "emitDecoratorMetadata": true, + // "useDefineForClassFields": false, + "target": "es2020", + "module": "es2022", + "strictPropertyInitialization": false, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, + "moduleResolution": "node", + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "allowJs": true, + "declaration": true, + "sourceMap": true, + "noFallthroughCasesInSwitch": true, + "allowSyntheticDefaultImports": true, + "useDefineForClassFields": false, + "noImplicitOverride": false, + "outDir": "dist" + }, + "include": ["src"] +} diff --git a/packages/contracts/tsup.config.ts b/packages/contracts/tsup.config.ts new file mode 100644 index 00000000..10fb07d9 --- /dev/null +++ b/packages/contracts/tsup.config.ts @@ -0,0 +1,12 @@ +import { baseTsupConfig } from "@palladco/common" +import { defineConfig } from "tsup" + +import packageJson from "./package.json" + +export default defineConfig([ + { + ...baseTsupConfig, + name: packageJson.name, + splitting: false, + }, +]) diff --git a/packages/features/package.json b/packages/features/package.json index 7330373f..44a8268f 100644 --- a/packages/features/package.json +++ b/packages/features/package.json @@ -1,5 +1,5 @@ { - "name": "@palladxyz/features", + "name": "@palladco/features", "version": "0.6.2", "description": "", "type": "module", @@ -37,35 +37,27 @@ "@headlessui/react": "2.1.2", "@hookform/resolvers": "3.9.0", "@noble/hashes": "1.4.0", - "@palladxyz/key-management": "workspace:*", - "@palladxyz/mina-core": "workspace:*", - "@palladxyz/offchain-data": "workspace:*", - "@palladxyz/pallad-core": "workspace:*", - "@palladxyz/vault": "workspace:*", + "@palladco/key-management": "workspace:*", + "@palladco/mina-core": "workspace:*", + "@palladco/offchain-data": "workspace:*", + "@palladco/pallad-core": "workspace:*", + "@palladco/vault": "workspace:*", "@total-typescript/ts-reset": "0.5.1", "@zxcvbn-ts/core": "3.0.4", "array-shuffle": "3.0.0", - "class-variance-authority": "0.7.0", "clsx": "2.1.1", - "cmdk": "1.0.0", "dayjs": "1.11.12", "easy-mesh-gradient": "0.0.5", "i18next": "^23.16.0", "i18next-browser-languagedetector": "^8.0.0", "immer": "10.1.1", - "js-beautify": "1.15.1", "lucide-react": "0.417.0", "match-sorter": "6.3.4", - "merge-refs": "1.3.0", "next-themes": "0.3.0", "rambda": "9.2.1", - "react": "18.3.1", - "react-day-picker": "9.0.4", - "react-dom": "18.3.1", "react-error-boundary": "4.0.13", "react-hook-form": "7.52.1", "react-i18next": "^15.0.3", - "react-mixpanel-browser": "4.1.0", "react-qr-code": "2.0.15", "react-router": "6.25.1", "react-router-dom": "6.25.1", @@ -73,8 +65,6 @@ "react-twc": "1.4.1", "recharts": "2.12.7", "sonner": "1.5.0", - "superjson": "2.2.1", - "tailwind-merge": "2.4.0", "tailwindcss-animate": "1.0.7", "webext-bridge": "6.0.1", "webextension-polyfill": "0.12.0", @@ -84,13 +74,9 @@ }, "devDependencies": { "@ladle/react": "4.1.0", - "@palladxyz/common": "workspace:*", - "@svgr/rollup": "8.1.0", - "@trpc/server": "10.45.2", - "@tsconfig/recommended": "1.0.7", + "@palladco/common": "workspace:*", "@tsconfig/vite-react": "3.0.2", "@types/chrome": "0.0.269", - "@types/js-beautify": "1.14.3", "@types/react": "18.3.3", "@types/react-dom": "18.3.0", "@types/webextension-polyfill": "0.10.7", @@ -98,7 +84,6 @@ "esbuild-plugin-polyfill-node": "0.3.0", "esbuild-plugin-svgr": "2.1.0", "graphql-request": "7.1.0", - "mina-signer": "3.0.7", "swr": "2.2.5", "vite": "5.3.5", "vite-plugin-node-polyfills": "0.17.0", @@ -107,7 +92,7 @@ "zod": "3.23.8" }, "peerDependencies": { - "react": "18.2.0", - "react-dom": "18.2.0" + "react": "18.3.1", + "react-dom": "18.3.1" } } diff --git a/packages/features/src/@types/i18next.d.ts b/packages/features/src/@types/i18next.d.ts deleted file mode 100644 index 18292a02..00000000 --- a/packages/features/src/@types/i18next.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import "i18next" -import resources from "./resources" -const { ns1, ns2 } = resources - -declare module "i18next" { - interface CustomTypeOptions { - defaultNS: "ns1" - } -} diff --git a/packages/features/src/@types/resources.ts b/packages/features/src/@types/resources.ts deleted file mode 100644 index f2aa9c24..00000000 --- a/packages/features/src/@types/resources.ts +++ /dev/null @@ -1,9 +0,0 @@ -import ns1 from "../i18n/locales/en/en.json" -import ns2 from "../i18n/locales/tr/tr.json" - -const resources = { - ns1, - ns2, -} as const - -export default resources diff --git a/packages/features/src/common/hooks/use-account.ts b/packages/features/src/common/hooks/use-account.ts index 41e3949b..9cc6028f 100644 --- a/packages/features/src/common/hooks/use-account.ts +++ b/packages/features/src/common/hooks/use-account.ts @@ -1,6 +1,6 @@ -import { Network, getAccountProperties } from "@palladxyz/pallad-core" -import { sessionPersistence } from "@palladxyz/vault" -import { getPublicKey, isDelegated, useVault } from "@palladxyz/vault" +import { Network, getAccountProperties } from "@palladco/pallad-core" +import { sessionPersistence } from "@palladco/vault" +import { getPublicKey, isDelegated, useVault } from "@palladco/vault" import easyMeshGradient from "easy-mesh-gradient" import { useMemo } from "react" import { useNavigate } from "react-router-dom" diff --git a/packages/features/src/common/hooks/use-transaction.ts b/packages/features/src/common/hooks/use-transaction.ts index 97357511..99803e65 100644 --- a/packages/features/src/common/hooks/use-transaction.ts +++ b/packages/features/src/common/hooks/use-transaction.ts @@ -1,4 +1,4 @@ -import { getPublicKey, useVault } from "@palladxyz/vault" +import { getPublicKey, useVault } from "@palladco/vault" import useSWR from "swr" export const useTransaction = ({ hash }: { hash: string }) => { diff --git a/packages/features/src/common/hooks/use-transactions.ts b/packages/features/src/common/hooks/use-transactions.ts index 9247255b..6deb7aaf 100644 --- a/packages/features/src/common/hooks/use-transactions.ts +++ b/packages/features/src/common/hooks/use-transactions.ts @@ -1,5 +1,5 @@ -import type { Mina } from "@palladxyz/mina-core" -import { getPublicKey, useVault } from "@palladxyz/vault" +import type { Mina } from "@palladco/mina-core" +import { getPublicKey, useVault } from "@palladco/vault" import useSWR from "swr" export const useTransactions = () => { diff --git a/packages/features/src/common/lib/tx.ts b/packages/features/src/common/lib/tx.ts index 0adabc46..e2237a09 100644 --- a/packages/features/src/common/lib/tx.ts +++ b/packages/features/src/common/lib/tx.ts @@ -1,4 +1,4 @@ -import { Mina } from "@palladxyz/mina-core" +import { Mina } from "@palladco/mina-core" type TxSide = "outgoing" | "incoming" diff --git a/packages/features/src/common/store/address-book.ts b/packages/features/src/common/store/address-book.ts index 058047d4..11ee3aaf 100644 --- a/packages/features/src/common/store/address-book.ts +++ b/packages/features/src/common/store/address-book.ts @@ -1,4 +1,4 @@ -import { localPersistence } from "@palladxyz/vault" +import { localPersistence } from "@palladco/vault" import { create } from "zustand" import { createJSONStorage, persist } from "zustand/middleware" diff --git a/packages/features/src/common/store/app.ts b/packages/features/src/common/store/app.ts index 84874172..fb46e795 100644 --- a/packages/features/src/common/store/app.ts +++ b/packages/features/src/common/store/app.ts @@ -1,4 +1,4 @@ -import { localPersistence } from "@palladxyz/vault" +import { localPersistence } from "@palladco/vault" import { create } from "zustand" import { createJSONStorage, persist } from "zustand/middleware" diff --git a/packages/features/src/common/store/transaction.ts b/packages/features/src/common/store/transaction.ts index 14857466..a2258118 100644 --- a/packages/features/src/common/store/transaction.ts +++ b/packages/features/src/common/store/transaction.ts @@ -1,4 +1,4 @@ -import { Mina } from "@palladxyz/mina-core" +import { Mina } from "@palladco/mina-core" import { create } from "zustand" import type { OutgoingTransaction } from "../types" diff --git a/packages/features/src/common/types.ts b/packages/features/src/common/types.ts index ed077cf9..d70f74f0 100644 --- a/packages/features/src/common/types.ts +++ b/packages/features/src/common/types.ts @@ -1,4 +1,4 @@ -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" type TokenId = number type Nonce = number diff --git a/packages/features/src/components/address-dropdown.tsx b/packages/features/src/components/address-dropdown.tsx index ee6ec023..a8da80d2 100644 --- a/packages/features/src/components/address-dropdown.tsx +++ b/packages/features/src/components/address-dropdown.tsx @@ -1,5 +1,5 @@ import { truncateString } from "@/common/lib/string" -import { useVault } from "@palladxyz/vault" +import { useVault } from "@palladco/vault" import clsx from "clsx" import { CopyIcon, ExternalLinkIcon, UserPlusIcon } from "lucide-react" import { Link } from "react-router-dom" diff --git a/packages/features/src/components/hash-dropdown.tsx b/packages/features/src/components/hash-dropdown.tsx index f4754612..8633f454 100644 --- a/packages/features/src/components/hash-dropdown.tsx +++ b/packages/features/src/components/hash-dropdown.tsx @@ -1,4 +1,4 @@ -import { useVault } from "@palladxyz/vault" +import { useVault } from "@palladco/vault" import clsx from "clsx" import { CopyIcon, ExternalLinkIcon } from "lucide-react" import { toast } from "sonner" diff --git a/packages/features/src/components/menu-drawer.tsx b/packages/features/src/components/menu-drawer.tsx index 6044a8e7..cb0a24cf 100644 --- a/packages/features/src/components/menu-drawer.tsx +++ b/packages/features/src/components/menu-drawer.tsx @@ -1,6 +1,6 @@ import Logo from "@/common/assets/logo.svg?react" import MenuIcon from "@/common/assets/menu.svg?react" -import { useVault } from "@palladxyz/vault" +import { useVault } from "@palladco/vault" import { ChevronDownIcon, XIcon } from "lucide-react" import { Link, useNavigate } from "react-router-dom" diff --git a/packages/features/src/components/settings-page-layout.tsx b/packages/features/src/components/settings-page-layout.tsx index adf6370f..b1dbd9d5 100644 --- a/packages/features/src/components/settings-page-layout.tsx +++ b/packages/features/src/components/settings-page-layout.tsx @@ -1,4 +1,4 @@ -import { useVault } from "@palladxyz/vault" +import { useVault } from "@palladco/vault" import type { ReactNode } from "react" import { MenuBar } from "./menu-bar" diff --git a/packages/features/src/error-renderer/views/error.tsx b/packages/features/src/error-renderer/views/error.tsx index 8ddffef4..8699891e 100644 --- a/packages/features/src/error-renderer/views/error.tsx +++ b/packages/features/src/error-renderer/views/error.tsx @@ -1,6 +1,5 @@ import type { FallbackProps } from "react-error-boundary" import { useTranslation } from "react-i18next" -//import { useMixpanel } from "react-mixpanel-browser" export const ErrorView = ({ error, resetErrorBoundary }: FallbackProps) => { const stringifiedError = JSON.stringify( diff --git a/packages/features/src/i18n/index.ts b/packages/features/src/i18n/index.ts deleted file mode 100644 index 73e50353..00000000 --- a/packages/features/src/i18n/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -import i18next from "i18next" -import LanguageDetector from "i18next-browser-languagedetector" -import { initReactI18next } from "react-i18next" -import ns1 from "./locales/en/en.json" -import ns2 from "./locales/tr/tr.json" - -const defaultNS = "ns1" - -const resources = { - en: { - ns1, - }, - tr: { - ns2, - }, -} - -i18next - .use(LanguageDetector) - .use(initReactI18next) - .init({ - debug: false, - fallbackLng: ["en", "tr"], - resources: resources, - defaultNS, - }) diff --git a/packages/features/src/index.ts b/packages/features/src/index.ts index 17a3ca55..5fac75db 100644 --- a/packages/features/src/index.ts +++ b/packages/features/src/index.ts @@ -3,9 +3,9 @@ import "@total-typescript/ts-reset" import type {} from "graphql-request" import type {} from "swr" export { useAppStore } from "./common/store/app" -export { usePendingTransactionStore } from "@palladxyz/vault" +export { usePendingTransactionStore } from "@palladco/vault" export { Router } from "./router" export { WebConnectorRoute } from "./web-connector/routes/web-connector" export * as Icons from "lucide-react" -import "./i18n" +export { i18n } from "./lib/i18n" import "./globals.css" diff --git a/packages/features/src/lib/i18n.ts b/packages/features/src/lib/i18n.ts new file mode 100644 index 00000000..9d5ff578 --- /dev/null +++ b/packages/features/src/lib/i18n.ts @@ -0,0 +1,23 @@ +import i18n from "i18next" +import LanguageDetector from "i18next-browser-languagedetector" +import { initReactI18next } from "react-i18next" +import en from "./locales/en/en.json" +import tr from "./locales/tr/tr.json" + +const resources = { + en: { translation: en }, + tr: { translation: tr }, +} + +i18n + .use(LanguageDetector) + .use(initReactI18next) + .init({ + fallbackLng: "en", + resources, + interpolation: { + escapeValue: false, + }, + }) + +export { i18n } diff --git a/packages/features/src/i18n/locales/en/en.json b/packages/features/src/lib/locales/en/en.json similarity index 100% rename from packages/features/src/i18n/locales/en/en.json rename to packages/features/src/lib/locales/en/en.json diff --git a/packages/features/src/i18n/locales/tr/tr.json b/packages/features/src/lib/locales/tr/tr.json similarity index 100% rename from packages/features/src/i18n/locales/tr/tr.json rename to packages/features/src/lib/locales/tr/tr.json diff --git a/packages/features/src/lock/routes/unlock-wallet.tsx b/packages/features/src/lock/routes/unlock-wallet.tsx index 8a317284..d022cd22 100644 --- a/packages/features/src/lock/routes/unlock-wallet.tsx +++ b/packages/features/src/lock/routes/unlock-wallet.tsx @@ -1,6 +1,6 @@ import { zodResolver } from "@hookform/resolvers/zod" -import { securePersistence, sessionPersistence } from "@palladxyz/vault" -import { useVault } from "@palladxyz/vault" +import { securePersistence, sessionPersistence } from "@palladco/vault" +import { useVault } from "@palladco/vault" import { type FormEvent, useEffect, useState } from "react" import { useForm } from "react-hook-form" import { useNavigate } from "react-router-dom" diff --git a/packages/features/src/onboarding/routes/create-wallet.tsx b/packages/features/src/onboarding/routes/create-wallet.tsx index b6190b65..9fee221f 100644 --- a/packages/features/src/onboarding/routes/create-wallet.tsx +++ b/packages/features/src/onboarding/routes/create-wallet.tsx @@ -1,4 +1,4 @@ -import { generateMnemonicWords } from "@palladxyz/key-management" +import { generateMnemonicWords } from "@palladco/key-management" import { useNavigate } from "react-router-dom" import { shallow } from "zustand/shallow" diff --git a/packages/features/src/onboarding/routes/seed-backup-confirmation.tsx b/packages/features/src/onboarding/routes/seed-backup-confirmation.tsx index 8470ba0e..e15e6faa 100644 --- a/packages/features/src/onboarding/routes/seed-backup-confirmation.tsx +++ b/packages/features/src/onboarding/routes/seed-backup-confirmation.tsx @@ -1,8 +1,8 @@ import { utf8ToBytes } from "@noble/hashes/utils" -import type { ChainDerivationArgs } from "@palladxyz/key-management" -import { Network } from "@palladxyz/pallad-core" -import { sessionPersistence } from "@palladxyz/vault" -import { DEFAULT_NETWORK, KeyAgents, useVault } from "@palladxyz/vault" +import type { ChainDerivationArgs } from "@palladco/key-management" +import { Network } from "@palladco/pallad-core" +import { sessionPersistence } from "@palladco/vault" +import { DEFAULT_NETWORK, KeyAgents, useVault } from "@palladco/vault" import { useMemo, useState } from "react" import { useForm } from "react-hook-form" import { useNavigate } from "react-router-dom" diff --git a/packages/features/src/onboarding/routes/seed-import.tsx b/packages/features/src/onboarding/routes/seed-import.tsx index f8324ce3..8743214d 100644 --- a/packages/features/src/onboarding/routes/seed-import.tsx +++ b/packages/features/src/onboarding/routes/seed-import.tsx @@ -1,8 +1,8 @@ -import { validateMnemonic, wordlist } from "@palladxyz/key-management" -import type { ChainDerivationArgs } from "@palladxyz/key-management" -import { Network } from "@palladxyz/pallad-core" -import { sessionPersistence } from "@palladxyz/vault" -import { DEFAULT_NETWORK, KeyAgents, useVault } from "@palladxyz/vault" +import { validateMnemonic, wordlist } from "@palladco/key-management" +import type { ChainDerivationArgs } from "@palladco/key-management" +import { Network } from "@palladco/pallad-core" +import { sessionPersistence } from "@palladco/vault" +import { DEFAULT_NETWORK, KeyAgents, useVault } from "@palladco/vault" import { useState } from "react" import { type SubmitHandler, useForm } from "react-hook-form" import { useNavigate } from "react-router-dom" diff --git a/packages/features/src/onboarding/routes/start.tsx b/packages/features/src/onboarding/routes/start.tsx index 1afe132f..f824065d 100644 --- a/packages/features/src/onboarding/routes/start.tsx +++ b/packages/features/src/onboarding/routes/start.tsx @@ -1,4 +1,4 @@ -import { securePersistence, sessionPersistence } from "@palladxyz/vault" +import { securePersistence, sessionPersistence } from "@palladco/vault" import { useEffect, useState } from "react" import { useNavigate } from "react-router-dom" diff --git a/packages/features/src/onboarding/views/seed-import.tsx b/packages/features/src/onboarding/views/seed-import.tsx index 9261c5de..b09fdbf8 100644 --- a/packages/features/src/onboarding/views/seed-import.tsx +++ b/packages/features/src/onboarding/views/seed-import.tsx @@ -1,4 +1,4 @@ -import { wordlist } from "@palladxyz/key-management" +import { wordlist } from "@palladco/key-management" import { Loader2Icon } from "lucide-react" import type { UseFormReturn } from "react-hook-form" diff --git a/packages/features/src/router.tsx b/packages/features/src/router.tsx index f98bb0f1..30a3ad4a 100644 --- a/packages/features/src/router.tsx +++ b/packages/features/src/router.tsx @@ -3,10 +3,12 @@ import { MemoryRouter, Outlet, Route, Routes } from "react-router-dom" import dayjs from "dayjs" import relativeTime from "dayjs/plugin/relativeTime" import { ErrorBoundary } from "react-error-boundary" +import { I18nextProvider } from "react-i18next" import { Toaster } from "sonner" import { AddressBookRoute } from "./address-book/routes/address-book" import { NewAddressRoute } from "./address-book/routes/new-address" import { ErrorView } from "./error-renderer/views/error" +import { i18n } from "./lib/i18n" import { UnlockWalletRoute } from "./lock/routes/unlock-wallet" import { NotFoundRoute } from "./not-found/routes/not-found" import { CreateWalletRoute } from "./onboarding/routes/create-wallet" @@ -44,85 +46,87 @@ dayjs.extend(relativeTime) export const Router = () => { return ( - -

- - - - } /> - } /> - } /> - } /> - } /> - } - /> - } - /> - } - /> - } - /> - } /> - } /> - } /> - } - /> - }> - } /> - } /> - - }> - } /> - } /> - } /> + + +
+ + + + } /> + } /> + } /> + } /> + } /> } + path="/transactions/summary" + element={} /> - } /> } + path="/transactions/success" + element={} /> } + path="/transactions/error" + element={} /> - } /> - - } /> - }> - } /> - }> - } /> - } /> - } /> - - }> - } /> - } /> - } /> - } + path="/transactions/:hash" + element={} + /> + } /> + } /> + } /> + } /> - } /> - - } /> - - -
-
+ }> + } /> + } /> + + }> + } /> + } /> + } /> + } + /> + } /> + } + /> + } + /> + } /> + + } /> + }> + } /> + }> + } /> + } /> + } /> + + }> + } /> + } /> + } /> + + } + /> + } /> + + } /> +
+
+
+ + ) } diff --git a/packages/features/src/send/components/send-form.tsx b/packages/features/src/send/components/send-form.tsx index d9f63bda..01fbaba4 100644 --- a/packages/features/src/send/components/send-form.tsx +++ b/packages/features/src/send/components/send-form.tsx @@ -10,7 +10,7 @@ import { FormError } from "@/components/form-error" import MinaIcon from "@/common/assets/mina.svg?react" import { formatCurrency } from "@/common/lib/currency" import { FeePicker, TransactionFeeShort } from "@/components/fee-picker" -import { TransactionType } from "@palladxyz/mina-core" +import { TransactionType } from "@palladco/mina-core" import { ChevronRightIcon, SearchIcon } from "lucide-react" import { SendFormSchema, type SendFormSchemaProps } from "./send-form.schema" diff --git a/packages/features/src/send/hooks/use-transaction-confirmation.tsx b/packages/features/src/send/hooks/use-transaction-confirmation.tsx index 2e5f8ff6..99822740 100644 --- a/packages/features/src/send/hooks/use-transaction-confirmation.tsx +++ b/packages/features/src/send/hooks/use-transaction-confirmation.tsx @@ -1,6 +1,6 @@ -import type { ChainOperationArgs } from "@palladxyz/key-management" -import { TransactionType } from "@palladxyz/mina-core" -import { useVault } from "@palladxyz/vault" +import type { ChainOperationArgs } from "@palladco/key-management" +import { TransactionType } from "@palladco/mina-core" +import { useVault } from "@palladco/vault" import dayjs from "dayjs" import type { SubmitHandler, UseFormReturn } from "react-hook-form" import { useNavigate } from "react-router-dom" @@ -8,7 +8,7 @@ import type { z } from "zod" import { useAccount } from "@/common/hooks/use-account" import { useTransactionStore } from "@/common/store/transaction" -import { usePendingTransactionStore } from "@palladxyz/vault" +import { usePendingTransactionStore } from "@palladco/vault" import type { SignedTransaction, TransactionBody } from "@mina-js/utils" import { utf8ToBytes } from "@noble/hashes/utils" diff --git a/packages/features/src/send/routes/send.tsx b/packages/features/src/send/routes/send.tsx index d49f32eb..bccbada4 100644 --- a/packages/features/src/send/routes/send.tsx +++ b/packages/features/src/send/routes/send.tsx @@ -1,7 +1,7 @@ import { useNavigate } from "react-router-dom" import { useAccount } from "@/common/hooks/use-account" -import { useFiatPrice } from "@palladxyz/offchain-data" +import { useFiatPrice } from "@palladco/offchain-data" import { useState } from "react" import { SendView } from "../views/send" diff --git a/packages/features/src/staking/components/delegate-form.tsx b/packages/features/src/staking/components/delegate-form.tsx index f8eb3cf7..75007be8 100644 --- a/packages/features/src/staking/components/delegate-form.tsx +++ b/packages/features/src/staking/components/delegate-form.tsx @@ -9,7 +9,7 @@ import { FormError } from "@/components/form-error" import { FeePicker, TransactionFeeShort } from "@/components/fee-picker" import type { SendFormSchemaProps } from "@/send/components/send-form.schema" -import { TransactionType } from "@palladxyz/mina-core" +import { TransactionType } from "@palladco/mina-core" import { ExternalLinkIcon } from "lucide-react" import { useTranslation } from "react-i18next" import { DelegateFormSchema } from "./delegate-form.schema" diff --git a/packages/features/src/transactions/components/tx-tile.tsx b/packages/features/src/transactions/components/tx-tile.tsx index aeef294b..01e8fca7 100644 --- a/packages/features/src/transactions/components/tx-tile.tsx +++ b/packages/features/src/transactions/components/tx-tile.tsx @@ -1,6 +1,6 @@ import { getTxKind } from "@/common/lib/tx" import { TxIcon } from "@/components/tx-icon" -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import { clsx } from "clsx" import { useTranslation } from "react-i18next" import { Link } from "react-router-dom" diff --git a/packages/features/src/transactions/index.stories.tsx b/packages/features/src/transactions/index.stories.tsx index c9070049..e23027d2 100644 --- a/packages/features/src/transactions/index.stories.tsx +++ b/packages/features/src/transactions/index.stories.tsx @@ -1,5 +1,5 @@ import { type StoryDefault, action } from "@ladle/react" -import { Mina } from "@palladxyz/mina-core" +import { Mina } from "@palladco/mina-core" import { TransactionDetailsView } from "./views/transaction-details" import { TransactionsView } from "./views/transactions" diff --git a/packages/features/src/transactions/routes/transactions.tsx b/packages/features/src/transactions/routes/transactions.tsx index 34bbc9fb..7d535b89 100644 --- a/packages/features/src/transactions/routes/transactions.tsx +++ b/packages/features/src/transactions/routes/transactions.tsx @@ -2,9 +2,9 @@ import { useEffect } from "react" import { useAccount } from "@/common/hooks/use-account" import { useTransactions } from "@/common/hooks/use-transactions" -import { usePendingTransactionStore, useVault } from "@palladxyz/vault" +import { usePendingTransactionStore, useVault } from "@palladco/vault" -import { useFiatPrice } from "@palladxyz/offchain-data" +import { useFiatPrice } from "@palladco/offchain-data" import { TransactionsView } from "../views/transactions" export const TransactionsRoute = () => { diff --git a/packages/features/src/transactions/utils/structurize-transactions.ts b/packages/features/src/transactions/utils/structurize-transactions.ts index 7161f635..504a5e6f 100644 --- a/packages/features/src/transactions/utils/structurize-transactions.ts +++ b/packages/features/src/transactions/utils/structurize-transactions.ts @@ -1,4 +1,4 @@ -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import dayjs from "dayjs" import { groupBy, map, pipe } from "rambda" diff --git a/packages/features/src/transactions/views/transaction-details.tsx b/packages/features/src/transactions/views/transaction-details.tsx index 38c7bd53..15b19f0e 100644 --- a/packages/features/src/transactions/views/transaction-details.tsx +++ b/packages/features/src/transactions/views/transaction-details.tsx @@ -1,4 +1,4 @@ -import { Mina } from "@palladxyz/mina-core" +import { Mina } from "@palladco/mina-core" import { AppLayout } from "@/components/app-layout" import dayjs from "dayjs" diff --git a/packages/features/src/transactions/views/transactions.tsx b/packages/features/src/transactions/views/transactions.tsx index a6ca034b..eb083d8e 100644 --- a/packages/features/src/transactions/views/transactions.tsx +++ b/packages/features/src/transactions/views/transactions.tsx @@ -1,4 +1,4 @@ -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import { Filter, X } from "lucide-react" import { groupBy } from "rambda" import { Link } from "react-router-dom" diff --git a/packages/features/src/wallet/routes/networks.tsx b/packages/features/src/wallet/routes/networks.tsx index 267ebc28..b4a28889 100644 --- a/packages/features/src/wallet/routes/networks.tsx +++ b/packages/features/src/wallet/routes/networks.tsx @@ -1,5 +1,5 @@ import { useAccount } from "@/common/hooks/use-account" -import { useVault } from "@palladxyz/vault" +import { useVault } from "@palladco/vault" import { useNavigate } from "react-router-dom" import { sendMessage } from "webext-bridge/popup" import { NetworksView } from "../views/networks" diff --git a/packages/features/src/wallet/routes/overview.tsx b/packages/features/src/wallet/routes/overview.tsx index 5df3530b..0520d307 100644 --- a/packages/features/src/wallet/routes/overview.tsx +++ b/packages/features/src/wallet/routes/overview.tsx @@ -1,4 +1,4 @@ -import { useFiatPrice } from "@palladxyz/offchain-data" +import { useFiatPrice } from "@palladco/offchain-data" import { useAccount } from "@/common/hooks/use-account" import { useTransactions } from "@/common/hooks/use-transactions" diff --git a/packages/features/src/wallet/views/overview.tsx b/packages/features/src/wallet/views/overview.tsx index c5c32d9f..2b06031a 100644 --- a/packages/features/src/wallet/views/overview.tsx +++ b/packages/features/src/wallet/views/overview.tsx @@ -2,7 +2,7 @@ import ArrowRightIcon from "@/common/assets/arrow-right.svg?react" import { AppLayout } from "@/components/app-layout" import { MenuBar } from "@/components/menu-bar" import { Skeleton } from "@/components/skeleton" -import type { Tx } from "@palladxyz/pallad-core" +import type { Tx } from "@palladco/pallad-core" import { useTranslation } from "react-i18next" import { Link } from "react-router-dom" import SlotCounter from "react-slot-counter" diff --git a/packages/features/src/web-connector/views/web-connector.tsx b/packages/features/src/web-connector/views/web-connector.tsx index 8e94110c..38dc2bb3 100644 --- a/packages/features/src/web-connector/views/web-connector.tsx +++ b/packages/features/src/web-connector/views/web-connector.tsx @@ -1,6 +1,7 @@ import { AppLayout } from "@/components/app-layout" import { MenuBar } from "@/components/menu-bar" import { Skeleton } from "@/components/skeleton" +import { useEffect } from "react" import type { SubmitHandler } from "react-hook-form" import { ConfirmationForm } from "../components/confirmation-form" import { InputForm } from "../components/input-form" @@ -19,6 +20,10 @@ type WebConnectorViewProps = { loading: boolean } +const eventListener = (event: MessageEvent) => { + console.log(">>>P_EVENT", event.data) +} + export const WebConnectorView = ({ title, payload, @@ -35,10 +40,29 @@ export const WebConnectorView = ({ onReject() onDecline() } + const compileAdd = async () => { + const sandbox = document.querySelector( + "#o1sandbox", + ) as HTMLIFrameElement | null + if (!sandbox) return + sandbox.contentWindow?.postMessage( + { type: "compile", payload: payload }, + "*", + ) + } + useEffect(() => { + window.addEventListener("message", eventListener) + return () => { + window.removeEventListener("message", eventListener) + } + }, []) return (
+
diff --git a/packages/features/tsup.config.ts b/packages/features/tsup.config.ts index 76688060..92b3fb56 100644 --- a/packages/features/tsup.config.ts +++ b/packages/features/tsup.config.ts @@ -1,4 +1,4 @@ -import { baseTsupConfig } from "@palladxyz/common" +import { baseTsupConfig } from "@palladco/common" import { polyfillNode } from "esbuild-plugin-polyfill-node" import svgr from "esbuild-plugin-svgr" import { defineConfig } from "tsup" diff --git a/packages/key-management/package.json b/packages/key-management/package.json index 7f26c57d..8d6daca5 100644 --- a/packages/key-management/package.json +++ b/packages/key-management/package.json @@ -1,5 +1,5 @@ { - "name": "@palladxyz/key-management", + "name": "@palladco/key-management", "description": "An agnostic key management package for Pallad", "version": "0.0.1", "type": "module", @@ -21,17 +21,15 @@ "dependencies": { "@noble/ciphers": "0.5.3", "@noble/hashes": "1.4.0", - "@noble/secp256k1": "2.1.0", - "@palladxyz/mina-core": "workspace:*", - "@palladxyz/pallad-core": "workspace:*", + "@palladco/mina-core": "workspace:*", + "@palladco/pallad-core": "workspace:*", "@scure/base": "1.1.7", "@scure/bip32": "1.4.0", "@scure/bip39": "1.3.0", - "buffer": "6.0.3", "mina-signer": "3.0.7", "ts-custom-error": "3.3.1" }, "devDependencies": { - "@palladxyz/common": "workspace:*" + "@palladco/common": "workspace:*" } } diff --git a/packages/key-management/src/chains/Mina/credentialDerivation.ts b/packages/key-management/src/chains/Mina/credentialDerivation.ts index b46d249b..fbac6ba2 100644 --- a/packages/key-management/src/chains/Mina/credentialDerivation.ts +++ b/packages/key-management/src/chains/Mina/credentialDerivation.ts @@ -1,4 +1,4 @@ -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import Client from "mina-signer" import type { diff --git a/packages/key-management/src/chains/Mina/guards.ts b/packages/key-management/src/chains/Mina/guards.ts index baafa76b..929c1d58 100644 --- a/packages/key-management/src/chains/Mina/guards.ts +++ b/packages/key-management/src/chains/Mina/guards.ts @@ -1,5 +1,5 @@ import { TransactionBodySchema } from "@mina-js/utils" -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" export function isConstructedTransaction(payload: any) { const transaction = TransactionBodySchema.parse(payload) diff --git a/packages/key-management/src/chains/Mina/keyDerivationUtils.ts b/packages/key-management/src/chains/Mina/keyDerivationUtils.ts index 8325595a..169d8843 100644 --- a/packages/key-management/src/chains/Mina/keyDerivationUtils.ts +++ b/packages/key-management/src/chains/Mina/keyDerivationUtils.ts @@ -1,4 +1,4 @@ -import { Network } from "@palladxyz/pallad-core" +import { Network } from "@palladco/pallad-core" import type { MinaDerivationArgs } from "./types" diff --git a/packages/key-management/src/chains/Mina/types.ts b/packages/key-management/src/chains/Mina/types.ts index 6d5cd67a..3d4e42cf 100644 --- a/packages/key-management/src/chains/Mina/types.ts +++ b/packages/key-management/src/chains/Mina/types.ts @@ -1,5 +1,5 @@ -import type { Mina } from "@palladxyz/mina-core" -import { Network } from "@palladxyz/pallad-core" +import type { Mina } from "@palladco/mina-core" +import { Network } from "@palladco/pallad-core" import type { Nullifier, diff --git a/packages/key-management/src/chains/README.md b/packages/key-management/src/chains/README.md index 910dda55..c2d92ce0 100644 --- a/packages/key-management/src/chains/README.md +++ b/packages/key-management/src/chains/README.md @@ -1,6 +1,6 @@ -# `@palladxyz/key-management` Package - `chains` Subfolder Documentation +# `@palladco/key-management` Package - `chains` Subfolder Documentation -The `chains` subfolder of the `@palladxyz/key-management` package contains TypeScript modules that provide functionality related to key management, including credential derivation, key derivation, and signing operations specific to the Mina protocol. Each chain's folder follows a specific strucutre, below is an overview of each file for this strucutre within the `mina` subfolder as an example: +The `chains` subfolder of the `@palladco/key-management` package contains TypeScript modules that provide functionality related to key management, including credential derivation, key derivation, and signing operations specific to the Mina protocol. Each chain's folder follows a specific strucutre, below is an overview of each file for this strucutre within the `mina` subfolder as an example: ## `credentialDerivation.ts` diff --git a/packages/key-management/src/types.ts b/packages/key-management/src/types.ts index dc34d7cd..c3a04733 100644 --- a/packages/key-management/src/types.ts +++ b/packages/key-management/src/types.ts @@ -1,5 +1,5 @@ -import type { Mina } from "@palladxyz/mina-core" -import { Network } from "@palladxyz/pallad-core" +import type { Mina } from "@palladco/mina-core" +import { Network } from "@palladco/pallad-core" import { deriveMinaCredentials, diff --git a/packages/key-management/test/mina/in-memory-key-agent.test.ts b/packages/key-management/test/mina/in-memory-key-agent.test.ts index 3c36bf30..daef60b0 100644 --- a/packages/key-management/test/mina/in-memory-key-agent.test.ts +++ b/packages/key-management/test/mina/in-memory-key-agent.test.ts @@ -1,6 +1,6 @@ -import { mnemonic } from "@palladxyz/common" -import type { Mina } from "@palladxyz/mina-core" -import { Network } from "@palladxyz/pallad-core" +import { mnemonic } from "@palladco/common" +import type { Mina } from "@palladco/mina-core" +import { Network } from "@palladco/pallad-core" import * as bip32 from "@scure/bip32" import Client from "mina-signer" diff --git a/packages/key-management/test/mina/key-agent-base-zkapp-command.test.ts b/packages/key-management/test/mina/key-agent-base-zkapp-command.test.ts index 02343890..f4bd7e7f 100644 --- a/packages/key-management/test/mina/key-agent-base-zkapp-command.test.ts +++ b/packages/key-management/test/mina/key-agent-base-zkapp-command.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it } from "bun:test" -import { mnemonic } from "@palladxyz/common" -import type { Mina } from "@palladxyz/mina-core" -import { Network } from "@palladxyz/pallad-core" +import { mnemonic } from "@palladco/common" +import type { Mina } from "@palladco/mina-core" +import { Network } from "@palladco/pallad-core" import Client from "mina-signer" import { utf8ToBytes } from "@noble/hashes/utils" diff --git a/packages/key-management/test/mina/key-agent-base.test.ts b/packages/key-management/test/mina/key-agent-base.test.ts index c1a955f4..d042a81f 100644 --- a/packages/key-management/test/mina/key-agent-base.test.ts +++ b/packages/key-management/test/mina/key-agent-base.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it } from "bun:test" -import { mnemonic } from "@palladxyz/common" -import type { Mina } from "@palladxyz/mina-core" -import { Network } from "@palladxyz/pallad-core" +import { mnemonic } from "@palladco/common" +import type { Mina } from "@palladco/mina-core" +import { Network } from "@palladco/pallad-core" import * as bip32 from "@scure/bip32" import Client from "mina-signer" diff --git a/packages/key-management/test/util/guards.test.ts b/packages/key-management/test/util/guards.test.ts index ac37dd66..e11bc8db 100644 --- a/packages/key-management/test/util/guards.test.ts +++ b/packages/key-management/test/util/guards.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "bun:test" -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import { isConstructedTransaction, diff --git a/packages/key-management/tsconfig.json b/packages/key-management/tsconfig.json index f4e2e06e..ffab31d1 100644 --- a/packages/key-management/tsconfig.json +++ b/packages/key-management/tsconfig.json @@ -1,3 +1,3 @@ { - "extends": "@palladxyz/common/tsconfig.json" + "extends": "@palladco/common/tsconfig.json" } diff --git a/packages/key-management/tsup.config.ts b/packages/key-management/tsup.config.ts index 8449a56d..3325517c 100644 --- a/packages/key-management/tsup.config.ts +++ b/packages/key-management/tsup.config.ts @@ -1,4 +1,4 @@ -import { baseTsupConfig } from "@palladxyz/common" +import { baseTsupConfig } from "@palladco/common" import { defineConfig } from "tsup" import packageJson from "./package.json" diff --git a/packages/mina-core/README.md b/packages/mina-core/README.md index 9e45f402..08d7471a 100644 --- a/packages/mina-core/README.md +++ b/packages/mina-core/README.md @@ -1,13 +1,13 @@ -# @palladxyz/mina-core +# @palladco/mina-core -@palladxyz/mina-core is a TypeScript package designed for helping other libraries to interact with Mina. It provides interfaces & types for many the main data strcutures of Mina that are relevant for wallets and applications. This includes providers that retrieve account information, process transaction history, submit transactions, and fetch health checks. +@palladco/mina-core is a TypeScript package designed for helping other libraries to interact with Mina. It provides interfaces & types for many the main data strcutures of Mina that are relevant for wallets and applications. This includes providers that retrieve account information, process transaction history, submit transactions, and fetch health checks. ## Installation Install the package via npm: ```bash -npm install @palladxyz/mina-core +npm install @palladco/mina-core ``` ## Usage @@ -17,7 +17,7 @@ npm install @palladxyz/mina-core The `AccountInfoProvider` interface is used to fetch account information based on a public key. ```ts -import { AccountInfoProvider } from "@palladxyz/mina-core"; +import { AccountInfoProvider } from "@palladco/mina-core"; async function getAccountInfo(provider: AccountInfoProvider) { const accountInfo = await provider.getAccountInfo({ publicKey: "..." }); @@ -29,7 +29,7 @@ async function getAccountInfo(provider: AccountInfoProvider) { The `ChainHistoryProvider` interface provides methods to fetch transactions either by addresses or by hashes. ```ts -import { ChainHistoryProvider } from "@palladxyz/mina-core"; +import { ChainHistoryProvider } from "@palladco/mina-core"; async function getTransactionsByAddresses(provider: ChainHistoryProvider) { const transactions = await provider.transactionsByAddresses({ @@ -47,7 +47,7 @@ async function getTransactionsByHashes(provider: ChainHistoryProvider) { The `TxSubmitProvider` interface allows you to submit signed transactions to the network. ```ts -import { TxSubmitProvider } from "@palladxyz/mina-core"; +import { TxSubmitProvider } from "@palladco/mina-core"; async function submitTx(provider: TxSubmitProvider) { const signedTx = // Prepare your signed transaction here @@ -60,7 +60,7 @@ async function submitTx(provider: TxSubmitProvider) { All provider types extend the base Provider interface, which provides a health check method to verify if the provider is operational. ```ts -import { Provider } from "@palladxyz/mina-core"; +import { Provider } from "@palladco/mina-core"; async function checkHealth(provider: Provider) { const healthCheckResponse = await provider.healthCheck(); diff --git a/packages/mina-core/package.json b/packages/mina-core/package.json index 7920b221..4271ec77 100644 --- a/packages/mina-core/package.json +++ b/packages/mina-core/package.json @@ -1,5 +1,5 @@ { - "name": "@palladxyz/mina-core", + "name": "@palladco/mina-core", "version": "0.0.1", "type": "module", "description": "Core Mina Package SDK for Pallad", @@ -17,13 +17,9 @@ "cleanup": "bunx --bun rimraf node_modules dist .turbo" }, "dependencies": { - "@palladxyz/util": "workspace:*", - "bs58check": "4.0.0", - "buffer": "6.0.3", - "mina-signer": "3.0.7" + "@palladco/util": "workspace:*" }, "devDependencies": { - "@palladxyz/common": "workspace:*", - "@types/secp256k1": "4.0.6" + "@palladco/common": "workspace:*" } } diff --git a/packages/mina-core/src/Mina/Block.ts b/packages/mina-core/src/Mina/Block.ts index fba12961..323467ac 100644 --- a/packages/mina-core/src/Mina/Block.ts +++ b/packages/mina-core/src/Mina/Block.ts @@ -1,4 +1,4 @@ -import type { OpaqueNumber } from "@palladxyz/util" +import type { OpaqueNumber } from "@palladco/util" /** * The block number. diff --git a/packages/mina-core/src/Mina/Transaction.ts b/packages/mina-core/src/Mina/Transaction.ts index f32e5f88..e646a50a 100644 --- a/packages/mina-core/src/Mina/Transaction.ts +++ b/packages/mina-core/src/Mina/Transaction.ts @@ -1,4 +1,4 @@ -import { InvalidStringError, type OpaqueString } from "@palladxyz/util" +import { InvalidStringError, type OpaqueString } from "@palladco/util" import type { BorrowedTypes } from ".." diff --git a/packages/mina-core/src/Providers/chain-history-provider/types.ts b/packages/mina-core/src/Providers/chain-history-provider/types.ts index c48a2cb4..b3865816 100644 --- a/packages/mina-core/src/Providers/chain-history-provider/types.ts +++ b/packages/mina-core/src/Providers/chain-history-provider/types.ts @@ -1,4 +1,4 @@ -import type { Range } from "@palladxyz/util" +import type { Range } from "@palladco/util" import type { Mina, Provider } from "../.." diff --git a/packages/mina-core/tsconfig.json b/packages/mina-core/tsconfig.json index f4e2e06e..ffab31d1 100644 --- a/packages/mina-core/tsconfig.json +++ b/packages/mina-core/tsconfig.json @@ -1,3 +1,3 @@ { - "extends": "@palladxyz/common/tsconfig.json" + "extends": "@palladco/common/tsconfig.json" } diff --git a/packages/mina-core/tsup.config.ts b/packages/mina-core/tsup.config.ts index 8449a56d..3325517c 100644 --- a/packages/mina-core/tsup.config.ts +++ b/packages/mina-core/tsup.config.ts @@ -1,4 +1,4 @@ -import { baseTsupConfig } from "@palladxyz/common" +import { baseTsupConfig } from "@palladco/common" import { defineConfig } from "tsup" import packageJson from "./package.json" diff --git a/packages/offchain-data/README.md b/packages/offchain-data/README.md index af2c116a..ad431d20 100644 --- a/packages/offchain-data/README.md +++ b/packages/offchain-data/README.md @@ -1,3 +1,3 @@ -# @palladxyz/offchain-data +# @palladco/offchain-data Package for fetching off-chain data like fiat prices. diff --git a/packages/offchain-data/package.json b/packages/offchain-data/package.json index 40970057..5b081f1e 100644 --- a/packages/offchain-data/package.json +++ b/packages/offchain-data/package.json @@ -1,5 +1,5 @@ { - "name": "@palladxyz/offchain-data", + "name": "@palladco/offchain-data", "description": "Off-chain data fetching services.", "type": "module", "version": "1.0.0", @@ -21,6 +21,6 @@ "swr": "2.2.5" }, "devDependencies": { - "@palladxyz/common": "workspace:*" + "@palladco/common": "workspace:*" } } diff --git a/packages/offchain-data/tsconfig.json b/packages/offchain-data/tsconfig.json index f4e2e06e..ffab31d1 100644 --- a/packages/offchain-data/tsconfig.json +++ b/packages/offchain-data/tsconfig.json @@ -1,3 +1,3 @@ { - "extends": "@palladxyz/common/tsconfig.json" + "extends": "@palladco/common/tsconfig.json" } diff --git a/packages/offchain-data/tsup.config.ts b/packages/offchain-data/tsup.config.ts index 8449a56d..3325517c 100644 --- a/packages/offchain-data/tsup.config.ts +++ b/packages/offchain-data/tsup.config.ts @@ -1,4 +1,4 @@ -import { baseTsupConfig } from "@palladxyz/common" +import { baseTsupConfig } from "@palladco/common" import { defineConfig } from "tsup" import packageJson from "./package.json" diff --git a/packages/pallad-core/README.md b/packages/pallad-core/README.md index 09d88d82..82cd6bcd 100644 --- a/packages/pallad-core/README.md +++ b/packages/pallad-core/README.md @@ -1,13 +1,13 @@ -# @palladxyz/mina-core +# @palladco/mina-core -@palladxyz/mina-core is a TypeScript package designed for interacting with the Mina Protocol. It provides interfaces for retrieving account information, processing transaction history, submitting transactions, and provider health checks. The package also includes the core types that represent the main data structures of the Mina Protocol. +@palladco/mina-core is a TypeScript package designed for interacting with the Mina Protocol. It provides interfaces for retrieving account information, processing transaction history, submitting transactions, and provider health checks. The package also includes the core types that represent the main data structures of the Mina Protocol. ## Installation Install the package via npm: ```bash -npm install @palladxyz/mina-core +npm install @palladco/mina-core ``` ## Usage @@ -17,7 +17,7 @@ npm install @palladxyz/mina-core The `AccountInfoProvider` interface is used to fetch account information based on a public key. ```ts -import { AccountInfoProvider } from "@palladxyz/mina-core"; +import { AccountInfoProvider } from "@palladco/mina-core"; async function getAccountInfo(provider: AccountInfoProvider) { const accountInfo = await provider.getAccountInfo({ publicKey: "..." }); @@ -29,7 +29,7 @@ async function getAccountInfo(provider: AccountInfoProvider) { The `ChainHistoryProvider` interface provides methods to fetch transactions either by addresses or by hashes. ```ts -import { ChainHistoryProvider } from "@palladxyz/mina-core"; +import { ChainHistoryProvider } from "@palladco/mina-core"; async function getTransactionsByAddresses(provider: ChainHistoryProvider) { const transactions = await provider.transactionsByAddresses({ @@ -47,7 +47,7 @@ async function getTransactionsByHashes(provider: ChainHistoryProvider) { The `TxSubmitProvider` interface allows you to submit signed transactions to the network. ```ts -import { TxSubmitProvider } from "@palladxyz/mina-core"; +import { TxSubmitProvider } from "@palladco/mina-core"; async function submitTx(provider: TxSubmitProvider) { const signedTx = // Prepare your signed transaction here @@ -60,7 +60,7 @@ async function submitTx(provider: TxSubmitProvider) { All provider types extend the base Provider interface, which provides a health check method to verify if the provider is operational. ```ts -import { Provider } from "@palladxyz/mina-core"; +import { Provider } from "@palladco/mina-core"; async function checkHealth(provider: Provider) { const healthCheckResponse = await provider.healthCheck(); diff --git a/packages/pallad-core/package.json b/packages/pallad-core/package.json index 7a8bfc4b..35007f82 100644 --- a/packages/pallad-core/package.json +++ b/packages/pallad-core/package.json @@ -1,5 +1,5 @@ { - "name": "@palladxyz/pallad-core", + "name": "@palladco/pallad-core", "version": "0.0.1", "type": "module", "description": "Core Pallad Package", @@ -18,17 +18,11 @@ "cleanup": "bunx --bun rimraf node_modules dist .turbo" }, "dependencies": { - "@palladxyz/mina-core": "workspace:*", - "@palladxyz/util": "workspace:*", - "bs58check": "4.0.0", - "buffer": "6.0.3", - "mina-signer": "3.0.7", - "viem": "2.18.4", - "vite-plugin-top-level-await": "1.4.2", - "vite-plugin-wasm": "3.3.0" + "@palladco/mina-core": "workspace:*", + "@palladco/util": "workspace:*", + "viem": "2.18.4" }, "devDependencies": { - "@palladxyz/common": "workspace:*", - "@types/secp256k1": "4.0.6" + "@palladco/common": "workspace:*" } } diff --git a/packages/pallad-core/src/Mina/Providers/account-info-provider/types.ts b/packages/pallad-core/src/Mina/Providers/account-info-provider/types.ts index d8471c6a..e130a22a 100644 --- a/packages/pallad-core/src/Mina/Providers/account-info-provider/types.ts +++ b/packages/pallad-core/src/Mina/Providers/account-info-provider/types.ts @@ -1,4 +1,4 @@ -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import type { Provider } from "../.." diff --git a/packages/pallad-core/src/Mina/Providers/chain-history-provider/types.ts b/packages/pallad-core/src/Mina/Providers/chain-history-provider/types.ts index 01691b13..b14532d5 100644 --- a/packages/pallad-core/src/Mina/Providers/chain-history-provider/types.ts +++ b/packages/pallad-core/src/Mina/Providers/chain-history-provider/types.ts @@ -1,5 +1,5 @@ -import type { Mina } from "@palladxyz/mina-core" -import type { Range } from "@palladxyz/util" +import type { Mina } from "@palladco/mina-core" +import type { Range } from "@palladco/util" import type { Provider } from "../.." diff --git a/packages/pallad-core/src/Mina/Providers/tx-submit-provider/types.ts b/packages/pallad-core/src/Mina/Providers/tx-submit-provider/types.ts index dee20380..c049ef92 100644 --- a/packages/pallad-core/src/Mina/Providers/tx-submit-provider/types.ts +++ b/packages/pallad-core/src/Mina/Providers/tx-submit-provider/types.ts @@ -1,4 +1,4 @@ -import type { BorrowedTypes, Mina } from "@palladxyz/mina-core" +import type { BorrowedTypes, Mina } from "@palladco/mina-core" import type { Provider } from "../provider" diff --git a/packages/pallad-core/src/Mina/Providers/unified-mina-provider.ts b/packages/pallad-core/src/Mina/Providers/unified-mina-provider.ts index 6a02c6a2..2f3f8a2d 100644 --- a/packages/pallad-core/src/Mina/Providers/unified-mina-provider.ts +++ b/packages/pallad-core/src/Mina/Providers/unified-mina-provider.ts @@ -1,4 +1,4 @@ -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import type { AccountInfo, AccountInfoArgs } from "./account-info-provider" import type { diff --git a/packages/pallad-core/src/Pallad/providers/account-info-provider/types.ts b/packages/pallad-core/src/Pallad/providers/account-info-provider/types.ts index df725e52..4ef41fec 100644 --- a/packages/pallad-core/src/Pallad/providers/account-info-provider/types.ts +++ b/packages/pallad-core/src/Pallad/providers/account-info-provider/types.ts @@ -1,4 +1,4 @@ -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import type { Address, Chain } from "viem" import type { Provider } from "../" diff --git a/packages/pallad-core/src/Pallad/providers/tx-submit-provider/types.ts b/packages/pallad-core/src/Pallad/providers/tx-submit-provider/types.ts index cb9fea6e..9d177463 100644 --- a/packages/pallad-core/src/Pallad/providers/tx-submit-provider/types.ts +++ b/packages/pallad-core/src/Pallad/providers/tx-submit-provider/types.ts @@ -1,4 +1,4 @@ -import type { BorrowedTypes, Mina } from "@palladxyz/mina-core" +import type { BorrowedTypes, Mina } from "@palladco/mina-core" import type { Provider } from "../provider" diff --git a/packages/pallad-core/src/Pallad/providers/types.ts b/packages/pallad-core/src/Pallad/providers/types.ts index 188dcc4e..011df823 100644 --- a/packages/pallad-core/src/Pallad/providers/types.ts +++ b/packages/pallad-core/src/Pallad/providers/types.ts @@ -1,4 +1,4 @@ -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import type { Address, GetTransactionReturnType, Hash } from "viem" export type TransactionHash = Mina.TxId[] | Hash[] diff --git a/packages/pallad-core/tsconfig.json b/packages/pallad-core/tsconfig.json index f4e2e06e..ffab31d1 100644 --- a/packages/pallad-core/tsconfig.json +++ b/packages/pallad-core/tsconfig.json @@ -1,3 +1,3 @@ { - "extends": "@palladxyz/common/tsconfig.json" + "extends": "@palladco/common/tsconfig.json" } diff --git a/packages/pallad-core/tsup.config.ts b/packages/pallad-core/tsup.config.ts index 8449a56d..3325517c 100644 --- a/packages/pallad-core/tsup.config.ts +++ b/packages/pallad-core/tsup.config.ts @@ -1,4 +1,4 @@ -import { baseTsupConfig } from "@palladxyz/common" +import { baseTsupConfig } from "@palladco/common" import { defineConfig } from "tsup" import packageJson from "./package.json" diff --git a/packages/providers/README.md b/packages/providers/README.md index 1af83fcc..c44946ff 100644 --- a/packages/providers/README.md +++ b/packages/providers/README.md @@ -1,4 +1,4 @@ -# @palladxyz/providers +# @palladco/providers This TypeScript library creates Providers that can read and write (mutate) data to Mina via a set of API providers such as Minascan. @@ -6,7 +6,7 @@ A Provider is an abstraction that encapsulates the functionality for interacting ## Implementation Detail -While these providers can be used individually, they are more functional in nature than the founding `@palladxyz/mina-graphql` providers, removing the object oriented design in many of them (full set to be determined). Each provider is scoped to specifically either read, write, or listen; not focusing on specifically storing data themselves they are an abstraction for an application. In Pallad's case, the `vault` requires this abstraction as it stores the arguments for each provider. +While these providers can be used individually, they are more functional in nature than the founding `@palladco/mina-graphql` providers, removing the object oriented design in many of them (full set to be determined). Each provider is scoped to specifically either read, write, or listen; not focusing on specifically storing data themselves they are an abstraction for an application. In Pallad's case, the `vault` requires this abstraction as it stores the arguments for each provider. ### Provider Sources diff --git a/packages/providers/package.json b/packages/providers/package.json index 8dde595b..3b687fa0 100644 --- a/packages/providers/package.json +++ b/packages/providers/package.json @@ -1,5 +1,5 @@ { - "name": "@palladxyz/providers", + "name": "@palladco/providers", "version": "0.0.1", "description": "Proivder Package SDK for Pallad.", "type": "module", @@ -19,26 +19,19 @@ }, "dependencies": { "@noble/hashes": "1.4.0", - "@palladxyz/key-management": "workspace:*", - "@palladxyz/mina-core": "workspace:*", - "@palladxyz/pallad-core": "workspace:*", - "@palladxyz/util": "workspace:*", - "bs58check": "4.0.0", - "buffer": "6.0.3", - "events": "3.3.0", + "@palladco/key-management": "workspace:*", + "@palladco/mina-core": "workspace:*", + "@palladco/pallad-core": "workspace:*", + "@palladco/util": "workspace:*", "graphql": "16.9.0", "graphql-request": "7.1.0", "json-bigint": "1.0.0", "mina-signer": "3.0.7", - "subscriptions-transport-ws": "0.11.0", - "viem": "2.18.4", - "ws": "8.18.0" + "subscriptions-transport-ws": "0.11.0" }, "devDependencies": { - "@palladxyz/common": "workspace:*", - "@types/events": "3.0.3", + "@palladco/common": "workspace:*", "@types/json-bigint": "1.0.4", - "esbuild-plugin-polyfill-node": "0.3.0", - "msw": "2.3.4" + "esbuild-plugin-polyfill-node": "0.3.0" } } diff --git a/packages/providers/src/blockberry-provider/chain-history/chain-history-provider.ts b/packages/providers/src/blockberry-provider/chain-history/chain-history-provider.ts index 0dc1ebce..438a6420 100644 --- a/packages/providers/src/blockberry-provider/chain-history/chain-history-provider.ts +++ b/packages/providers/src/blockberry-provider/chain-history/chain-history-provider.ts @@ -1,9 +1,9 @@ -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import type { ChainHistoryProvider, TransactionsByAddressesArgs, Tx, -} from "@palladxyz/pallad-core" +} from "@palladco/pallad-core" //import { healthCheck } from "../utils/health-check-utils"; diff --git a/packages/providers/src/mina-node/account-info/account-info-provider.ts b/packages/providers/src/mina-node/account-info/account-info-provider.ts index 719096b1..4318503c 100644 --- a/packages/providers/src/mina-node/account-info/account-info-provider.ts +++ b/packages/providers/src/mina-node/account-info/account-info-provider.ts @@ -2,7 +2,7 @@ import type { AccountInfo, AccountInfoArgs, AccountInfoProvider, -} from "@palladxyz/pallad-core" +} from "@palladco/pallad-core" import { createGraphQLRequest } from "../utils/fetch-utils" import { healthCheck } from "../utils/health-check-utils" diff --git a/packages/providers/src/mina-node/account-info/queries.ts b/packages/providers/src/mina-node/account-info/queries.ts index e533c374..347f9867 100644 --- a/packages/providers/src/mina-node/account-info/queries.ts +++ b/packages/providers/src/mina-node/account-info/queries.ts @@ -17,7 +17,7 @@ export const getAccountBalance = ` } } ` -import type { TokenIdMap } from "@palladxyz/mina-core" +import type { TokenIdMap } from "@palladco/mina-core" export function getTokenAccountInfoQuery(tokenIds: TokenIdMap): string { // Start with the base part of the query diff --git a/packages/providers/src/mina-node/block-listener/BlockListenerProvider.ts b/packages/providers/src/mina-node/block-listener/BlockListenerProvider.ts index 21409358..160bb4b9 100644 --- a/packages/providers/src/mina-node/block-listener/BlockListenerProvider.ts +++ b/packages/providers/src/mina-node/block-listener/BlockListenerProvider.ts @@ -1,4 +1,4 @@ -import type { AccountInfo, AccountInfoArgs } from "@palladxyz/mina-core" +import type { AccountInfo, AccountInfoArgs } from "@palladco/mina-core" import type { ExecutionResult } from "graphql" import { GraphQLClient, gql } from "graphql-request" import { SubscriptionClient } from "subscriptions-transport-ws" diff --git a/packages/providers/src/mina-node/chain-history/chain-history-provider.ts b/packages/providers/src/mina-node/chain-history/chain-history-provider.ts index 222a16b0..f0e03a8a 100644 --- a/packages/providers/src/mina-node/chain-history/chain-history-provider.ts +++ b/packages/providers/src/mina-node/chain-history/chain-history-provider.ts @@ -3,7 +3,7 @@ import type { TransactionsByAddressesArgs, TransactionsByHashesArgs, Tx, -} from "@palladxyz/pallad-core" +} from "@palladco/pallad-core" import { createGraphQLRequest } from "../utils/fetch-utils" import { diff --git a/packages/providers/src/mina-node/node-status/node-status-provider.ts b/packages/providers/src/mina-node/node-status/node-status-provider.ts index f6756643..9d364c83 100644 --- a/packages/providers/src/mina-node/node-status/node-status-provider.ts +++ b/packages/providers/src/mina-node/node-status/node-status-provider.ts @@ -1,4 +1,4 @@ -import type { NodeStatus, NodeStatusProvider } from "@palladxyz/pallad-core" +import type { NodeStatus, NodeStatusProvider } from "@palladco/pallad-core" import { createGraphQLRequest } from "../utils/fetch-utils" import { healthCheck } from "../utils/health-check-utils" diff --git a/packages/providers/src/mina-node/types.ts b/packages/providers/src/mina-node/types.ts index 10aaee8a..1a80d91f 100644 --- a/packages/providers/src/mina-node/types.ts +++ b/packages/providers/src/mina-node/types.ts @@ -8,7 +8,7 @@ import type { TransactionsByIdsArgs, TxStatus, TxStatusArgs, -} from "@palladxyz/mina-core" +} from "@palladco/mina-core" /** * An interface that abstracts over Mina node queries. */ diff --git a/packages/providers/src/unified-providers/account-info-provider.ts b/packages/providers/src/unified-providers/account-info-provider.ts index c3247843..47620fad 100644 --- a/packages/providers/src/unified-providers/account-info-provider.ts +++ b/packages/providers/src/unified-providers/account-info-provider.ts @@ -3,7 +3,7 @@ import type { AccountInfoArgs, AccountInfoProvider, HealthCheckResponse, -} from "@palladxyz/pallad-core" +} from "@palladco/pallad-core" import { createAccountInfoProvider as mn } from "../mina-node" import type { ProviderConfig } from "./types" diff --git a/packages/providers/src/unified-providers/chain-history-provider.ts b/packages/providers/src/unified-providers/chain-history-provider.ts index 961759cc..193675d3 100644 --- a/packages/providers/src/unified-providers/chain-history-provider.ts +++ b/packages/providers/src/unified-providers/chain-history-provider.ts @@ -4,7 +4,7 @@ import type { TransactionsByAddressesArgs, TransactionsByHashesArgs, Tx, -} from "@palladxyz/pallad-core" +} from "@palladco/pallad-core" import { createChainHistoryProvider as ms } from "../blockberry-provider" import { createChainHistoryProvider as zs } from "../zeko-scan" diff --git a/packages/providers/src/unified-providers/node-status-provider.ts b/packages/providers/src/unified-providers/node-status-provider.ts index 1e2f9ba8..9adac7a7 100644 --- a/packages/providers/src/unified-providers/node-status-provider.ts +++ b/packages/providers/src/unified-providers/node-status-provider.ts @@ -2,7 +2,7 @@ import type { HealthCheckResponse, NodeStatus, NodeStatusProvider, -} from "@palladxyz/pallad-core" +} from "@palladco/pallad-core" import { createNodeStatusProvider as mn } from "../mina-node" import type { ProviderConfig } from "./types" diff --git a/packages/providers/src/unified-providers/unified-provider.ts b/packages/providers/src/unified-providers/unified-provider.ts index 771e7a3c..25fa9db9 100644 --- a/packages/providers/src/unified-providers/unified-provider.ts +++ b/packages/providers/src/unified-providers/unified-provider.ts @@ -5,7 +5,7 @@ import type { TransactionsByAddressesArgs, Tx, UnifiedChainProviderType, -} from "@palladxyz/pallad-core" +} from "@palladco/pallad-core" import { createAccountInfoProvider } from "./account-info-provider" import { createChainHistoryProvider } from "./chain-history-provider" diff --git a/packages/providers/src/zeko-scan/chain-history/chain-history-provider.ts b/packages/providers/src/zeko-scan/chain-history/chain-history-provider.ts index 514ddd9a..9ded1260 100644 --- a/packages/providers/src/zeko-scan/chain-history/chain-history-provider.ts +++ b/packages/providers/src/zeko-scan/chain-history/chain-history-provider.ts @@ -1,9 +1,9 @@ -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import type { ChainHistoryProvider, TransactionsByAddressesArgs, Tx, -} from "@palladxyz/pallad-core" +} from "@palladco/pallad-core" const convertToTransactionBody = ( data: any[], diff --git a/packages/providers/test/blockberry/chain-history-provider.test.ts b/packages/providers/test/blockberry/chain-history-provider.test.ts index f1f75248..db02d0db 100644 --- a/packages/providers/test/blockberry/chain-history-provider.test.ts +++ b/packages/providers/test/blockberry/chain-history-provider.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from "bun:test" -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import { Blockberry } from "../../src" diff --git a/packages/providers/test/mina-node/l1-mina-node/individual-providers/account-info-provider.test.ts b/packages/providers/test/mina-node/l1-mina-node/individual-providers/account-info-provider.test.ts index 0df31a0e..576c1289 100644 --- a/packages/providers/test/mina-node/l1-mina-node/individual-providers/account-info-provider.test.ts +++ b/packages/providers/test/mina-node/l1-mina-node/individual-providers/account-info-provider.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from "bun:test" -import type { TokenIdMap } from "@palladxyz/mina-core" +import type { TokenIdMap } from "@palladco/mina-core" import { MinaNode } from "../../../../src" diff --git a/packages/providers/test/mina-node/l1-mina-node/individual-providers/chain-history-provider.test.ts b/packages/providers/test/mina-node/l1-mina-node/individual-providers/chain-history-provider.test.ts index 73ee1667..0867a6ca 100644 --- a/packages/providers/test/mina-node/l1-mina-node/individual-providers/chain-history-provider.test.ts +++ b/packages/providers/test/mina-node/l1-mina-node/individual-providers/chain-history-provider.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from "bun:test" -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import { MinaNode } from "../../../../src" const nodeUrl = diff --git a/packages/providers/test/mina-node/l1-mina-node/individual-providers/submit-tx-provider.test.ts b/packages/providers/test/mina-node/l1-mina-node/individual-providers/submit-tx-provider.test.ts index c6e6080b..3cde1675 100644 --- a/packages/providers/test/mina-node/l1-mina-node/individual-providers/submit-tx-provider.test.ts +++ b/packages/providers/test/mina-node/l1-mina-node/individual-providers/submit-tx-provider.test.ts @@ -6,9 +6,9 @@ import { type FromBip39MnemonicWordsProps, InMemoryKeyAgent, type MinaSpecificArgs, -} from "@palladxyz/key-management" -import { Mina, type TokenIdMap } from "@palladxyz/mina-core" -import { Network } from "@palladxyz/pallad-core" +} from "@palladco/key-management" +import { Mina, type TokenIdMap } from "@palladco/mina-core" +import { Network } from "@palladco/pallad-core" import type { Payment, SignedLegacy, diff --git a/packages/providers/test/mina-node/zeko-sequencer/individual-providers/account-info-provider.test.ts b/packages/providers/test/mina-node/zeko-sequencer/individual-providers/account-info-provider.test.ts index 50cc6afc..c867ce46 100644 --- a/packages/providers/test/mina-node/zeko-sequencer/individual-providers/account-info-provider.test.ts +++ b/packages/providers/test/mina-node/zeko-sequencer/individual-providers/account-info-provider.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from "bun:test" -import type { TokenIdMap } from "@palladxyz/mina-core" +import type { TokenIdMap } from "@palladco/mina-core" import { MinaNode } from "../../../../src" const nodeUrl = process.env.NODE_URL || "https://devnet.zeko.io/graphql" diff --git a/packages/providers/test/mina-node/zeko-sequencer/individual-providers/submit-tx-provider.test.ts b/packages/providers/test/mina-node/zeko-sequencer/individual-providers/submit-tx-provider.test.ts index 75d32ff3..b37a2258 100644 --- a/packages/providers/test/mina-node/zeko-sequencer/individual-providers/submit-tx-provider.test.ts +++ b/packages/providers/test/mina-node/zeko-sequencer/individual-providers/submit-tx-provider.test.ts @@ -6,9 +6,9 @@ import { type GroupedCredentials, InMemoryKeyAgent, type MinaSpecificArgs, -} from "@palladxyz/key-management" -import { type AccountInfo, Mina, type TokenIdMap } from "@palladxyz/mina-core" -import { Network } from "@palladxyz/pallad-core" +} from "@palladco/key-management" +import { type AccountInfo, Mina, type TokenIdMap } from "@palladco/mina-core" +import { Network } from "@palladco/pallad-core" import type { Payment, SignedLegacy, diff --git a/packages/providers/test/mina-node/zeko-sequencer/individual-providers/util.ts b/packages/providers/test/mina-node/zeko-sequencer/individual-providers/util.ts index c7c1f2e6..9aac9106 100644 --- a/packages/providers/test/mina-node/zeko-sequencer/individual-providers/util.ts +++ b/packages/providers/test/mina-node/zeko-sequencer/individual-providers/util.ts @@ -1,4 +1,4 @@ -import { Mina } from "@palladxyz/mina-core" +import { Mina } from "@palladco/mina-core" import Client from "mina-signer" import type { Payment, diff --git a/packages/providers/test/unified-providers/individual-providers/account-info-provider.test.ts b/packages/providers/test/unified-providers/individual-providers/account-info-provider.test.ts index 369dc544..5266fd8b 100644 --- a/packages/providers/test/unified-providers/individual-providers/account-info-provider.test.ts +++ b/packages/providers/test/unified-providers/individual-providers/account-info-provider.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from "bun:test" -import type { TokenIdMap } from "@palladxyz/mina-core" +import type { TokenIdMap } from "@palladco/mina-core" import { type ProviderConfig, createAccountInfoProvider } from "../../../src" diff --git a/packages/providers/test/unified-providers/individual-providers/chain-history-provider.test.ts b/packages/providers/test/unified-providers/individual-providers/chain-history-provider.test.ts index dc7c0da9..fc59ab80 100644 --- a/packages/providers/test/unified-providers/individual-providers/chain-history-provider.test.ts +++ b/packages/providers/test/unified-providers/individual-providers/chain-history-provider.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from "bun:test" -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import { type ProviderConfig, createChainHistoryProvider } from "../../../src" diff --git a/packages/providers/test/unified-providers/unified-provider.test.ts b/packages/providers/test/unified-providers/unified-provider.test.ts index 78f8a7c1..0ba46bc2 100644 --- a/packages/providers/test/unified-providers/unified-provider.test.ts +++ b/packages/providers/test/unified-providers/unified-provider.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it } from "bun:test" -import type { TokenIdMap } from "@palladxyz/mina-core" -import type { Tx } from "@palladxyz/pallad-core" +import type { TokenIdMap } from "@palladco/mina-core" +import type { Tx } from "@palladco/pallad-core" import { type ProviderConfig, createChainProvider } from "../../src" diff --git a/packages/providers/test/zeko-scan/chain-history-provider.test.ts b/packages/providers/test/zeko-scan/chain-history-provider.test.ts index 6128936f..2f0181d7 100644 --- a/packages/providers/test/zeko-scan/chain-history-provider.test.ts +++ b/packages/providers/test/zeko-scan/chain-history-provider.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from "bun:test" -import type { Mina } from "@palladxyz/mina-core" +import type { Mina } from "@palladco/mina-core" import { ZekoScan } from "../../src" diff --git a/packages/providers/tsconfig.json b/packages/providers/tsconfig.json index f4e2e06e..ffab31d1 100644 --- a/packages/providers/tsconfig.json +++ b/packages/providers/tsconfig.json @@ -1,3 +1,3 @@ { - "extends": "@palladxyz/common/tsconfig.json" + "extends": "@palladco/common/tsconfig.json" } diff --git a/packages/providers/tsup.config.ts b/packages/providers/tsup.config.ts index 3d31da11..0673190e 100644 --- a/packages/providers/tsup.config.ts +++ b/packages/providers/tsup.config.ts @@ -1,4 +1,4 @@ -import { baseTsupConfig } from "@palladxyz/common" +import { baseTsupConfig } from "@palladco/common" import { polyfillNode } from "esbuild-plugin-polyfill-node" import { defineConfig } from "tsup" diff --git a/packages/util/README.md b/packages/util/README.md index d3381be1..f54b84ff 100644 --- a/packages/util/README.md +++ b/packages/util/README.md @@ -1,3 +1,3 @@ -# @palladxyz/util +# @palladco/util This TypeScript library provides util functions for other Pallad SDK packages. diff --git a/packages/util/package.json b/packages/util/package.json index 9647b9a0..f88dfd3d 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,5 +1,5 @@ { - "name": "@palladxyz/util", + "name": "@palladco/util", "version": "0.0.1", "type": "module", "description": "Util Package SDK for Pallad", @@ -18,13 +18,9 @@ "cleanup": "bunx --bun rimraf node_modules dist .turbo" }, "dependencies": { - "bs58check": "4.0.0", - "buffer": "6.0.3", - "mina-signer": "3.0.7", "ts-custom-error": "3.3.1" }, "devDependencies": { - "@palladxyz/common": "workspace:*", - "@types/secp256k1": "4.0.6" + "@palladco/common": "workspace:*" } } diff --git a/packages/util/tsconfig.json b/packages/util/tsconfig.json index f4e2e06e..ffab31d1 100644 --- a/packages/util/tsconfig.json +++ b/packages/util/tsconfig.json @@ -1,3 +1,3 @@ { - "extends": "@palladxyz/common/tsconfig.json" + "extends": "@palladco/common/tsconfig.json" } diff --git a/packages/util/tsup.config.ts b/packages/util/tsup.config.ts index 8449a56d..3325517c 100644 --- a/packages/util/tsup.config.ts +++ b/packages/util/tsup.config.ts @@ -1,4 +1,4 @@ -import { baseTsupConfig } from "@palladxyz/common" +import { baseTsupConfig } from "@palladco/common" import { defineConfig } from "tsup" import packageJson from "./package.json" diff --git a/packages/vault/README.md b/packages/vault/README.md index 87da0c59..1e8c014f 100644 --- a/packages/vault/README.md +++ b/packages/vault/README.md @@ -1,12 +1,12 @@ -# @palladxyz/vault +# @palladco/vault ## Introduction -The `@palladxyz/vault` package offers a robust solution for managing key agents, credentials, and accounts within the wallet. +The `@palladco/vault` package offers a robust solution for managing key agents, credentials, and accounts within the wallet. ## `useVault`: Central Interface for Wallet Management -The `useVault` hook is the core interface of the `@palladxyz/vault` package, encapsulating the functionalities of account, credential, and key agent management in an integrated manner. It utilizes `zustand` for state management and `immer` for immutable state updates. +The `useVault` hook is the core interface of the `@palladco/vault` package, encapsulating the functionalities of account, credential, and key agent management in an integrated manner. It utilizes `zustand` for state management and `immer` for immutable state updates. ## Features @@ -17,8 +17,8 @@ The `useVault` hook is the core interface of the `@palladxyz/vault` package, enc ## Example Usage ```ts -import { useVault } from '@palladxyz/vault'; -import { Network } from '@palladxyz/key-management'; +import { useVault } from '@palladco/vault'; +import { Network } from '@palladco/key-management'; // Example usage within a component or function const MyComponent = () => { diff --git a/packages/vault/package.json b/packages/vault/package.json index 01904957..a8a8da49 100644 --- a/packages/vault/package.json +++ b/packages/vault/package.json @@ -1,5 +1,5 @@ { - "name": "@palladxyz/vault", + "name": "@palladco/vault", "version": "0.0.1", "type": "module", "description": "A Vault for the Mina Wallet Package for Pallad", @@ -20,27 +20,20 @@ "dependencies": { "@mina-js/klesia-sdk": "https://pkg.pr.new/palladians/mina-js/@mina-js/klesia-sdk@a51d3b4", "@noble/hashes": "1.4.0", - "@palladxyz/key-management": "workspace:*", - "@palladxyz/mina-core": "workspace:*", - "@palladxyz/pallad-core": "workspace:*", - "@palladxyz/providers": "workspace:*", - "@palladxyz/util": "workspace:*", + "@palladco/key-management": "workspace:*", + "@palladco/mina-core": "workspace:*", + "@palladco/pallad-core": "workspace:*", + "@palladco/providers": "workspace:*", + "@palladco/util": "workspace:*", "@plasmohq/storage": "1.11.0", - "bs58check": "4.0.0", - "buffer": "6.0.3", "dayjs": "1.11.12", "immer": "10.1.1", - "rambda": "9.2.1", - "redux-logger": "3.0.6", "superjson": "2.2.1", "unique-names-generator": "4.7.1", "zustand": "4.5.4" }, "devDependencies": { - "@palladxyz/common": "workspace:*", - "@types/secp256k1": "4.0.6", - "mina-signer": "3.0.7", - "msw": "2.3.4", + "@palladco/common": "workspace:*", "vite": "5.3.5" } } diff --git a/packages/vault/src/account/accountState.ts b/packages/vault/src/account/accountState.ts index e2c55920..685ea003 100644 --- a/packages/vault/src/account/accountState.ts +++ b/packages/vault/src/account/accountState.ts @@ -1,5 +1,5 @@ -import type { ChainAddress } from "@palladxyz/key-management" -import type { AccountInfo, Tx } from "@palladxyz/pallad-core" +import type { ChainAddress } from "@palladco/key-management" +import type { AccountInfo, Tx } from "@palladco/pallad-core" export type SingleAccountState = { accountInfo: Record diff --git a/packages/vault/src/credentials/credentialsState.ts b/packages/vault/src/credentials/credentialsState.ts index 922cba78..64f29614 100644 --- a/packages/vault/src/credentials/credentialsState.ts +++ b/packages/vault/src/credentials/credentialsState.ts @@ -2,7 +2,7 @@ * @file Represents the state definitions related to credentials specific to keyAgents & accounts. */ -import type { GroupedCredentials } from "@palladxyz/key-management" +import type { GroupedCredentials } from "@palladco/key-management" import type { KeyAgentName } from "../keyAgent" import type { SearchQuery } from "../utils/utils" diff --git a/packages/vault/src/keyAgent/README.md b/packages/vault/src/keyAgent/README.md index a64e396d..183a7b40 100644 --- a/packages/vault/src/keyAgent/README.md +++ b/packages/vault/src/keyAgent/README.md @@ -1,6 +1,6 @@ # Key Agent Store -This TypeScript module provides a state management store for cryptographic key agents using Zustand, Immer, and the `@palladxyz/key-management` package. It is the key agent store for Pallad and it offers a robust set of functionalities to manage key agents securely in memory. +This TypeScript module provides a state management store for cryptographic key agents using Zustand, Immer, and the `@palladco/key-management` package. It is the key agent store for Pallad and it offers a robust set of functionalities to manage key agents securely in memory. ## Key Files - `key-agent-store.ts`: Contains the core logic for the Zustand store slice managing the state of key agents. @@ -35,4 +35,4 @@ useStore.getState().initialiseKeyAgent("myKeyAgent", KeyAgents.InMemory, { mnemonicWords, getPassphrase: async () => "yourSecurePassphrase" }); -``` \ No newline at end of file +``` diff --git a/packages/vault/src/keyAgent/keyAgentState.ts b/packages/vault/src/keyAgent/keyAgentState.ts index 19a06062..bdaa50be 100644 --- a/packages/vault/src/keyAgent/keyAgentState.ts +++ b/packages/vault/src/keyAgent/keyAgentState.ts @@ -12,7 +12,7 @@ import type { GroupedCredentials, InMemoryKeyAgent, SerializableInMemoryKeyAgentData, -} from "@palladxyz/key-management" +} from "@palladco/key-management" export type KeyAgentName = string export enum KeyAgents { diff --git a/packages/vault/src/keyAgent/keyAgentStore.ts b/packages/vault/src/keyAgent/keyAgentStore.ts index cf9f9020..04e17f3f 100644 --- a/packages/vault/src/keyAgent/keyAgentStore.ts +++ b/packages/vault/src/keyAgent/keyAgentStore.ts @@ -1,7 +1,7 @@ import { type FromBip39MnemonicWordsProps, InMemoryKeyAgent, -} from "@palladxyz/key-management" +} from "@palladco/key-management" import { produce } from "immer" import type { StateCreator } from "zustand" diff --git a/packages/vault/src/lib/utils.ts b/packages/vault/src/lib/utils.ts index 8d56f53d..9c0ac276 100644 --- a/packages/vault/src/lib/utils.ts +++ b/packages/vault/src/lib/utils.ts @@ -1,4 +1,4 @@ -import type { CredentialName } from "@palladxyz/vault" +import type { CredentialName } from "@palladco/vault" import { type Config, adjectives, diff --git a/packages/vault/src/network-info/default.ts b/packages/vault/src/network-info/default.ts index 184097fc..8a47acf8 100644 --- a/packages/vault/src/network-info/default.ts +++ b/packages/vault/src/network-info/default.ts @@ -1,4 +1,4 @@ -import type { ProviderConfig } from "@palladxyz/providers" +import type { ProviderConfig } from "@palladco/providers" import type { NetworkId } from "./network-info-state" diff --git a/packages/vault/src/network-info/network-info-state.ts b/packages/vault/src/network-info/network-info-state.ts index 7271190d..91428807 100644 --- a/packages/vault/src/network-info/network-info-state.ts +++ b/packages/vault/src/network-info/network-info-state.ts @@ -3,7 +3,7 @@ * @typedef {Object} NetworkInfoStore */ -import type { ProviderConfig } from "@palladxyz/providers" +import type { ProviderConfig } from "@palladco/providers" export type NetworkId = string diff --git a/packages/vault/src/vault/utils/get-wallet-account-info.ts b/packages/vault/src/vault/utils/get-wallet-account-info.ts index d767edf9..684c8fc7 100644 --- a/packages/vault/src/vault/utils/get-wallet-account-info.ts +++ b/packages/vault/src/vault/utils/get-wallet-account-info.ts @@ -1,5 +1,5 @@ -import type { GroupedCredentials } from "@palladxyz/key-management" -import type { Network } from "@palladxyz/pallad-core" +import type { GroupedCredentials } from "@palladco/key-management" +import type { Network } from "@palladco/pallad-core" import type { SingleCredentialState } from "../../credentials" import { NetworkError, WalletError } from "../../lib/Errors" diff --git a/packages/vault/src/vault/utils/get-wallet-transactions.ts b/packages/vault/src/vault/utils/get-wallet-transactions.ts index 6b2c737c..de25fc9f 100644 --- a/packages/vault/src/vault/utils/get-wallet-transactions.ts +++ b/packages/vault/src/vault/utils/get-wallet-transactions.ts @@ -1,4 +1,4 @@ -import type { GroupedCredentials } from "@palladxyz/key-management" +import type { GroupedCredentials } from "@palladco/key-management" import { AddressError, NetworkError, WalletError } from "../../lib/Errors" diff --git a/packages/vault/src/vault/utils/restore-wallet.ts b/packages/vault/src/vault/utils/restore-wallet.ts index adbf0f9a..0b973a90 100644 --- a/packages/vault/src/vault/utils/restore-wallet.ts +++ b/packages/vault/src/vault/utils/restore-wallet.ts @@ -1,8 +1,8 @@ import type { ChainDerivationArgs, FromBip39MnemonicWordsProps, -} from "@palladxyz/key-management" -import { createChainProvider } from "@palladxyz/providers" +} from "@palladco/key-management" +import { createChainProvider } from "@palladco/providers" import type { CredentialName, SingleCredentialState } from "../../credentials" import type { KeyAgentName, KeyAgents } from "../../keyAgent" diff --git a/packages/vault/src/vault/utils/sign.ts b/packages/vault/src/vault/utils/sign.ts index 18614f30..87d92437 100644 --- a/packages/vault/src/vault/utils/sign.ts +++ b/packages/vault/src/vault/utils/sign.ts @@ -4,7 +4,7 @@ import type { GetPassphrase, GroupedCredentials, InMemoryKeyAgent, -} from "@palladxyz/key-management" +} from "@palladco/key-management" import { WalletError } from "../../lib/Errors" diff --git a/packages/vault/src/vault/utils/sync-account-info.ts b/packages/vault/src/vault/utils/sync-account-info.ts index ce566353..6a5c358c 100644 --- a/packages/vault/src/vault/utils/sync-account-info.ts +++ b/packages/vault/src/vault/utils/sync-account-info.ts @@ -1,4 +1,4 @@ -import { type ProviderConfig, createChainProvider } from "@palladxyz/providers" +import { type ProviderConfig, createChainProvider } from "@palladco/providers" export async function syncAccountHelper( get: any, diff --git a/packages/vault/src/vault/utils/sync-transactions.ts b/packages/vault/src/vault/utils/sync-transactions.ts index bb83d040..b36ebdee 100644 --- a/packages/vault/src/vault/utils/sync-transactions.ts +++ b/packages/vault/src/vault/utils/sync-transactions.ts @@ -1,5 +1,5 @@ -import type { Tx } from "@palladxyz/pallad-core" -import { type ProviderConfig, createChainProvider } from "@palladxyz/providers" +import type { Tx } from "@palladco/pallad-core" +import { type ProviderConfig, createChainProvider } from "@palladco/providers" export async function syncTransactionHelper( get: any, diff --git a/packages/vault/src/vault/utils/sync-wallet.ts b/packages/vault/src/vault/utils/sync-wallet.ts index 2e2cf83f..ce279d6d 100644 --- a/packages/vault/src/vault/utils/sync-wallet.ts +++ b/packages/vault/src/vault/utils/sync-wallet.ts @@ -1,5 +1,5 @@ -import { createChainProvider } from "@palladxyz/providers" -import type { ProviderConfig } from "@palladxyz/providers" +import { createChainProvider } from "@palladco/providers" +import type { ProviderConfig } from "@palladco/providers" import { AddressError } from "../../lib/Errors" diff --git a/packages/vault/src/vault/vaultState.ts b/packages/vault/src/vault/vaultState.ts index fb9c4fb6..8002dbe0 100644 --- a/packages/vault/src/vault/vaultState.ts +++ b/packages/vault/src/vault/vaultState.ts @@ -4,15 +4,15 @@ import type { ChainOperationArgs, ChainSignablePayload, FromBip39MnemonicWordsProps, -} from "@palladxyz/key-management" -import type { GetPassphrase } from "@palladxyz/key-management" +} from "@palladco/key-management" +import type { GetPassphrase } from "@palladco/key-management" import type { AccountInfo, Network, SubmitTxArgs, Tx, -} from "@palladxyz/pallad-core" -import type { ProviderConfig } from "@palladxyz/providers" +} from "@palladco/pallad-core" +import type { ProviderConfig } from "@palladco/providers" import type { TransactionBody } from "@mina-js/utils" import type { diff --git a/packages/vault/src/vault/vaultStore.ts b/packages/vault/src/vault/vaultStore.ts index b244de2a..b37a1a06 100644 --- a/packages/vault/src/vault/vaultStore.ts +++ b/packages/vault/src/vault/vaultStore.ts @@ -1,5 +1,5 @@ -import { generateMnemonicWords } from "@palladxyz/key-management" -import { Network } from "@palladxyz/pallad-core" +import { generateMnemonicWords } from "@palladco/key-management" +import { Network } from "@palladco/pallad-core" import { produce } from "immer" import { create } from "zustand" import { createJSONStorage, persist } from "zustand/middleware" diff --git a/packages/vault/test/account/accountStore.test.ts b/packages/vault/test/account/accountStore.test.ts index ba373509..cbba9b43 100644 --- a/packages/vault/test/account/accountStore.test.ts +++ b/packages/vault/test/account/accountStore.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it } from "bun:test" -import { type AccountInfo, Mina } from "@palladxyz/mina-core" +import { type AccountInfo, Mina } from "@palladco/mina-core" import { act, renderHook } from "@testing-library/react" import { initialSingleAccountState } from "../../src" diff --git a/packages/vault/test/credentials/credentialsStore.test.ts b/packages/vault/test/credentials/credentialsStore.test.ts index f52b5068..74edbdba 100644 --- a/packages/vault/test/credentials/credentialsStore.test.ts +++ b/packages/vault/test/credentials/credentialsStore.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it } from "bun:test" -import type { GroupedCredentials } from "@palladxyz/key-management" -import { Network } from "@palladxyz/pallad-core" +import type { GroupedCredentials } from "@palladco/key-management" +import { Network } from "@palladco/pallad-core" import { act, renderHook } from "@testing-library/react" import { diff --git a/packages/vault/test/keyAgent/keyAgentStore.test.ts b/packages/vault/test/keyAgent/keyAgentStore.test.ts index 63aea268..8b4350d0 100644 --- a/packages/vault/test/keyAgent/keyAgentStore.test.ts +++ b/packages/vault/test/keyAgent/keyAgentStore.test.ts @@ -1,15 +1,15 @@ import { afterEach, beforeEach, describe, expect, it } from "bun:test" import { utf8ToBytes } from "@noble/hashes/utils" -import { mnemonic } from "@palladxyz/common" +import { mnemonic } from "@palladco/common" import { type ChainOperationArgs, type FromBip39MnemonicWordsProps, type GroupedCredentials, type MinaDerivationArgs, generateMnemonicWords, -} from "@palladxyz/key-management" -import type { Mina } from "@palladxyz/mina-core" -import { Network } from "@palladxyz/pallad-core" +} from "@palladco/key-management" +import type { Mina } from "@palladco/mina-core" +import { Network } from "@palladco/pallad-core" import { act, renderHook } from "@testing-library/react" import { KeyAgents } from "../../src" diff --git a/packages/vault/test/objects/objectsStore.test.ts b/packages/vault/test/objects/objectsStore.test.ts index 3972cc41..f3ca8f2f 100644 --- a/packages/vault/test/objects/objectsStore.test.ts +++ b/packages/vault/test/objects/objectsStore.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it } from "bun:test" -import type { GroupedCredentials } from "@palladxyz/key-management" -import { Network } from "@palladxyz/pallad-core" +import type { GroupedCredentials } from "@palladco/key-management" +import { Network } from "@palladco/pallad-core" import { act, renderHook } from "@testing-library/react" import type { Json } from "@mina-js/utils" diff --git a/packages/vault/test/wallet/walletFlow.test.ts b/packages/vault/test/wallet/walletFlow.test.ts index 08556692..9290f9f3 100644 --- a/packages/vault/test/wallet/walletFlow.test.ts +++ b/packages/vault/test/wallet/walletFlow.test.ts @@ -1,11 +1,11 @@ import { beforeEach, describe, expect, it } from "bun:test" import { utf8ToBytes } from "@noble/hashes/utils" -import { mnemonic } from "@palladxyz/common" +import { mnemonic } from "@palladco/common" import type { ChainDerivationArgs, FromBip39MnemonicWordsProps, -} from "@palladxyz/key-management" -import { Network } from "@palladxyz/pallad-core" +} from "@palladco/key-management" +import { Network } from "@palladco/pallad-core" import { act, renderHook } from "@testing-library/react" import { type CredentialName, KeyAgents } from "../../src" diff --git a/packages/vault/tsconfig.json b/packages/vault/tsconfig.json index 83805819..e0cdff40 100644 --- a/packages/vault/tsconfig.json +++ b/packages/vault/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@palladxyz/common/tsconfig.json", + "extends": "@palladco/common/tsconfig.json", "compilerOptions": { "target": "esnext", "module": "esnext", diff --git a/packages/vault/tsup.config.ts b/packages/vault/tsup.config.ts index 639c8868..6a7ed6fa 100644 --- a/packages/vault/tsup.config.ts +++ b/packages/vault/tsup.config.ts @@ -1,4 +1,4 @@ -import { baseTsupConfig } from "@palladxyz/common" +import { baseTsupConfig } from "@palladco/common" import { defineConfig } from "tsup" import packageJson from "./package.json" diff --git a/packages/web-provider/README.md b/packages/web-provider/README.md index 6ae83cf2..d4763389 100644 --- a/packages/web-provider/README.md +++ b/packages/web-provider/README.md @@ -1,4 +1,4 @@ -# @palladxyz/web-extension +# @palladco/web-extension 🚧 This package is a WIP & implementation of RFC-0008/-0009 🚧 @@ -8,7 +8,7 @@ This is a typescript package that allows applications to interact with the walle ## Implementation & Testing -For implementation of this package, you should investigate the `apps/extension` folder. In there you can view the background script, the injected script, and the content script together allow Pallad to interact with applications. See the e2e tests for a good test suite of this provider's implementation. +For implementation of this package, you should investigate the `apps/extension` folder. In there you can view the background script, the injected script, and the content script together allow Pallad to interact with applications. See the e2e tests for a good test suite of this provider's implementation. ## Current Design diff --git a/packages/web-provider/package.json b/packages/web-provider/package.json index 0cd9d7e6..eafa765b 100644 --- a/packages/web-provider/package.json +++ b/packages/web-provider/package.json @@ -1,5 +1,5 @@ { - "name": "@palladxyz/web-provider", + "name": "@palladco/web-provider", "version": "0.0.1", "type": "module", "description": "A web-provider for Mina wallets", @@ -20,24 +20,18 @@ "@mina-js/klesia-sdk": "https://pkg.pr.new/palladians/mina-js/@mina-js/klesia-sdk@a51d3b4", "@mina-js/providers": "https://pkg.pr.new/palladians/mina-js/@mina-js/providers@a51d3b4", "@noble/hashes": "1.4.0", - "@palladxyz/key-management": "workspace:*", - "@palladxyz/mina-core": "workspace:*", - "@palladxyz/providers": "workspace:*", - "@palladxyz/vault": "workspace:*", + "@palladco/key-management": "workspace:*", + "@palladco/mina-core": "workspace:*", + "@palladco/providers": "workspace:*", + "@palladco/vault": "workspace:*", "dayjs": "1.11.12", - "eventemitter3": "5.0.1", "mina-signer": "3.0.7", "mitt": "3.0.1", - "superjson": "2.2.1", "ts-pattern": "5.5.0", - "webext-bridge": "6.0.1", - "webextension-polyfill": "0.12.0", "zod": "3.23.8" }, "devDependencies": { - "@palladxyz/common": "workspace:*", - "@types/chrome": "0.0.269", - "@types/webextension-polyfill": "0.10.7", - "type-fest": "4.23.0" + "@palladco/common": "workspace:*", + "@types/chrome": "0.0.269" } } diff --git a/packages/web-provider/src/mina-network/mina-provider.ts b/packages/web-provider/src/mina-network/mina-provider.ts index 9a72729d..e5d25a2c 100644 --- a/packages/web-provider/src/mina-network/mina-provider.ts +++ b/packages/web-provider/src/mina-network/mina-provider.ts @@ -12,8 +12,8 @@ import { utf8ToBytes } from "@noble/hashes/utils" import type { ChainOperationArgs, ChainSignablePayload, -} from "@palladxyz/key-management" -import type { SearchQuery } from "@palladxyz/vault" +} from "@palladco/key-management" +import type { SearchQuery } from "@palladco/vault" import mitt from "mitt" import { P, match } from "ts-pattern" import { showUserPrompt } from "../utils/prompts" diff --git a/packages/web-provider/src/mina-network/utils.ts b/packages/web-provider/src/mina-network/utils.ts index 28c725b6..45878487 100644 --- a/packages/web-provider/src/mina-network/utils.ts +++ b/packages/web-provider/src/mina-network/utils.ts @@ -1,5 +1,5 @@ -import type { MinaSignablePayload } from "@palladxyz/key-management" -import type { BorrowedTypes } from "@palladxyz/mina-core" +import type { MinaSignablePayload } from "@palladco/key-management" +import type { BorrowedTypes } from "@palladco/mina-core" export const serializeField = (field: BorrowedTypes.Field) => { if (typeof field === "bigint" || typeof field === "number") { diff --git a/packages/web-provider/src/vault-service/types.ts b/packages/web-provider/src/vault-service/types.ts index e7c45d24..e5918bff 100644 --- a/packages/web-provider/src/vault-service/types.ts +++ b/packages/web-provider/src/vault-service/types.ts @@ -2,11 +2,11 @@ import type { ChainOperationArgs, ChainSignablePayload, GetPassphrase, -} from "@palladxyz/key-management" +} from "@palladco/key-management" import type { Json, Sendable } from "@mina-js/utils" -import type { ProviderConfig } from "@palladxyz/providers" -import type { SearchQuery, StoredObject } from "@palladxyz/vault" +import type { ProviderConfig } from "@palladco/providers" +import type { SearchQuery, StoredObject } from "@palladco/vault" export interface IVaultService { getAccounts(): Promise diff --git a/packages/web-provider/src/vault-service/vault-service.ts b/packages/web-provider/src/vault-service/vault-service.ts index 7607c58e..3072334d 100644 --- a/packages/web-provider/src/vault-service/vault-service.ts +++ b/packages/web-provider/src/vault-service/vault-service.ts @@ -1,9 +1,9 @@ import { createClient } from "@mina-js/klesia-sdk" -import type { ChainOperationArgs } from "@palladxyz/key-management" -import type { ProviderConfig } from "@palladxyz/providers" -import { securePersistence, sessionPersistence } from "@palladxyz/vault" -import { usePendingTransactionStore } from "@palladxyz/vault" -import { useVault } from "@palladxyz/vault" +import type { ChainOperationArgs } from "@palladco/key-management" +import type { ProviderConfig } from "@palladco/providers" +import { securePersistence, sessionPersistence } from "@palladco/vault" +import { usePendingTransactionStore } from "@palladco/vault" +import { useVault } from "@palladco/vault" import dayjs from "dayjs" import Client from "mina-signer" diff --git a/packages/web-provider/tsconfig.json b/packages/web-provider/tsconfig.json index 7d1358d6..6fc060ac 100644 --- a/packages/web-provider/tsconfig.json +++ b/packages/web-provider/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@palladxyz/common/tsconfig.json", + "extends": "@palladco/common/tsconfig.json", "compilerOptions": { "types": ["@types/chrome"] } diff --git a/packages/web-provider/tsup.config.ts b/packages/web-provider/tsup.config.ts index 8449a56d..3325517c 100644 --- a/packages/web-provider/tsup.config.ts +++ b/packages/web-provider/tsup.config.ts @@ -1,4 +1,4 @@ -import { baseTsupConfig } from "@palladxyz/common" +import { baseTsupConfig } from "@palladco/common" import { defineConfig } from "tsup" import packageJson from "./package.json"