rebrand(lethean): update branding, ports, and config for Lethean blockchain

- Coin: Zano → Lethean, ticker: ZAN/ZANO → LTHN
- Ports: 11211 → 36941 (mainnet RPC), 46941 (testnet RPC)
- Wallet: 11212 → 36944/46944
- Address prefix: iTHN
- URLs: zano.org → lethean.io
- Explorer links: explorer.lthn.io

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude 2026-04-01 22:24:13 +01:00
parent 5b5e5209ca
commit b0106a4837
No known key found for this signature in database
GPG key ID: AF404715446AEB41
37 changed files with 194 additions and 223 deletions

View file

@ -1,5 +1,5 @@
{
"cSpell.words": [
"zano"
"lethean"
]
}

24
Dockerfile Normal file
View file

@ -0,0 +1,24 @@
# Build-only: produces the Chrome extension bundle via webpack
# The local dep lethean_web3 (file:../zano_web3) must be pre-built
FROM node:22-alpine AS builder
WORKDIR /workspace
# Build the lethean_web3 dependency first
COPY zano_web3/package.json zano_web3/package-lock.json ./zano_web3/
RUN cd zano_web3 && npm ci
COPY zano_web3/ ./zano_web3/
RUN cd zano_web3 && npm run build
# Now build the extension
COPY zano-extension/package.json zano-extension/package-lock.json ./zano-extension/
RUN cd zano-extension && npm ci
COPY zano-extension/ ./zano-extension/
RUN cd zano-extension && npm run build
# Export stage: only the built extension artefact
FROM scratch AS export
COPY --from=builder /workspace/zano-extension/build /build

View file

@ -1,25 +1,25 @@
# Zano Companion
# Lethean Companion
Zano Companion is a browser extension that enhances your experience with Zano-based dApps by providing seamless wallet integration, transaction signing, and more.
Lethean Companion is a browser extension that enhances your experience with Lethean-based dApps by providing seamless wallet integration, transaction signing, and more.
## Features
- Connect your Zano wallet to web applications securely.
- Connect your Lethean wallet to web applications securely.
- Sign transactions and messages directly from the extension.
- Easily access your balance and transaction history.
- Compatible with dApps in the Zano ecosystem.
- Compatible with dApps in the Lethean ecosystem.
## Installation
### Chrome Web Store
Install Zano Companion from the [Chrome Web Store](https://chromewebstore.google.com/detail/zano-companion/akcgnllhhhkcpmlenfpicmcpgfpindlb)
Install Lethean Companion from the Chrome Web Store.
### Manual Installation
If you prefer to install manually:
- Download the latest release from [GitHub Releases](https://github.com/hyle-team/zano-extension/releases).
- Download the latest release from [GitHub Releases](https://github.com/lethean-io/lethean-extension/releases).
- Extract the archive.
- Open Chrome and navigate to chrome://extensions/.
- Enable Developer mode (top-right corner).
@ -27,7 +27,7 @@ If you prefer to install manually:
## Usage
Open the extension and connect your Zano wallet.
Open the extension and connect your Lethean wallet.
Approve connection requests from supported dApps.
Sign transactions securely.

155
package-lock.json generated
View file

@ -1,11 +1,11 @@
{
"name": "zano-extension",
"name": "lethean-extension",
"version": "0.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "zano-extension",
"name": "lethean-extension",
"version": "0.1.0",
"dependencies": {
"@testing-library/jest-dom": "^5.16.5",
@ -18,14 +18,14 @@
"decimal.js": "^10.4.3",
"dompurify": "^3.3.1",
"json-bigint": "^1.0.0",
"lethean_web3": "file:../zano_web3",
"node-forge": "^1.3.2",
"react": "^18.2.0",
"react-chrome-extension-router": "^1.4.0",
"react-dom": "^18.2.0",
"react-id-generator": "^3.0.2",
"sha256": "^0.2.0",
"web-vitals": "^2.1.4",
"zano_web3": "^9.2.2"
"web-vitals": "^2.1.4"
},
"devDependencies": {
"@babel/cli": "^7.21.0",
@ -66,6 +66,25 @@
"webpack-merge": "^5.8.0"
}
},
"../zano_web3": {
"name": "lethean_web3",
"version": "9.2.2",
"license": "ISC",
"dependencies": {
"@types/big.js": "^6.2.2",
"@types/node": "^20.14.12",
"@types/node-forge": "^1.3.11",
"@types/react": "^18.3.3",
"@types/uuid": "^10.0.0",
"axios": "^1.7.2",
"big.js": "^6.2.1",
"decimal.js": "^10.4.3",
"node-forge": "^1.3.1",
"react": "^18.3.1",
"typescript": "^5.5.4",
"uuid": "^10.0.0"
}
},
"node_modules/@adobe/css-tools": {
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz",
@ -4125,6 +4144,7 @@
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/@types/big.js/-/big.js-6.2.2.tgz",
"integrity": "sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/body-parser": {
@ -4393,6 +4413,7 @@
"version": "1.3.11",
"resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
"integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
@ -4530,12 +4551,6 @@
"devOptional": true,
"license": "MIT"
},
"node_modules/@types/uuid": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
"integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==",
"license": "MIT"
},
"node_modules/@types/ws": {
"version": "8.18.1",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
@ -5499,7 +5514,8 @@
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"dev": true
},
"node_modules/at-least-node": {
"version": "1.0.0",
@ -5568,33 +5584,6 @@
"node": ">=4"
}
},
"node_modules/axios": {
"version": "1.13.5",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz",
"integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.11",
"form-data": "^4.0.5",
"proxy-from-env": "^1.1.0"
}
},
"node_modules/axios/node_modules/form-data": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
"integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0",
"hasown": "^2.0.2",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/axobject-query": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz",
@ -6315,6 +6304,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
@ -6812,6 +6802,7 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dev": true,
"dependencies": {
"delayed-stream": "~1.0.0"
},
@ -7902,6 +7893,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
@ -8173,6 +8165,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
@ -8402,6 +8395,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@ -8411,6 +8405,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@ -8446,6 +8441,7 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
@ -8458,6 +8454,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
@ -9747,6 +9744,7 @@
"version": "1.15.11",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
"dev": true,
"funding": [
{
"type": "individual",
@ -9975,6 +9973,7 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@ -10045,6 +10044,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
@ -10084,6 +10084,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"dev": true,
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
@ -10250,6 +10251,7 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@ -10358,6 +10360,7 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@ -10370,6 +10373,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"dev": true,
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.3"
@ -10385,6 +10389,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
@ -13780,6 +13785,10 @@
"shell-quote": "^1.7.3"
}
},
"node_modules/lethean_web3": {
"resolved": "../zano_web3",
"link": true
},
"node_modules/leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@ -14324,6 +14333,7 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@ -14422,6 +14432,7 @@
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dev": true,
"engines": {
"node": ">= 0.6"
}
@ -14430,6 +14441,7 @@
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dev": true,
"dependencies": {
"mime-db": "1.52.0"
},
@ -16881,12 +16893,6 @@
"node": ">= 0.10"
}
},
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
"license": "MIT"
},
"node_modules/psl": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
@ -21039,67 +21045,6 @@
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/zano_web3": {
"version": "9.2.2",
"resolved": "https://registry.npmjs.org/zano_web3/-/zano_web3-9.2.2.tgz",
"integrity": "sha512-WDTgMEZ8p5fpR/TJjq/J7c8bfo7Gn5mD0pQHmvR8PCsVpwzdgHNa0PGvuzw9j1WjA6IiMnCk5MMhK6JPHfvHgA==",
"license": "ISC",
"dependencies": {
"@types/big.js": "^6.2.2",
"@types/node": "^20.14.12",
"@types/node-forge": "^1.3.11",
"@types/react": "^18.3.3",
"@types/uuid": "^10.0.0",
"axios": "^1.7.2",
"big.js": "^6.2.1",
"decimal.js": "^10.4.3",
"node-forge": "^1.3.1",
"react": "^18.3.1",
"typescript": "^5.5.4",
"uuid": "^10.0.0"
}
},
"node_modules/zano_web3/node_modules/@types/node": {
"version": "20.19.33",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz",
"integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==",
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
}
},
"node_modules/zano_web3/node_modules/typescript": {
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=14.17"
}
},
"node_modules/zano_web3/node_modules/undici-types": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"license": "MIT"
},
"node_modules/zano_web3/node_modules/uuid": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
"integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
"funding": [
"https://github.com/sponsors/broofa",
"https://github.com/sponsors/ctavan"
],
"license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
}
}
}

View file

@ -1,5 +1,5 @@
{
"name": "zano-extension",
"name": "lethean-extension",
"version": "0.1.0",
"private": true,
"dependencies": {
@ -20,7 +20,7 @@
"react-id-generator": "^3.0.2",
"sha256": "^0.2.0",
"web-vitals": "^2.1.4",
"zano_web3": "^9.2.2"
"lethean_web3": "file:../zano_web3"
},
"scripts": {
"start": "react-scripts start",

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View file

@ -4,10 +4,10 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta name="description" content="Zano browser walslet extension" />
<meta name="description" content="Lethean browser wallet extension" />
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<title>Zano extension</title>
<title>Lethean extension</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>

View file

@ -1,18 +1,18 @@
{
"manifest_version": 3,
"name": "Zano Companion",
"name": "Lethean Companion",
"version": "1.1.10",
"description": "A browser extension for Zano wallet app",
"description": "A browser extension for Lethean wallet app",
"permissions": ["storage", "network"],
"content_security_policy": {
"extension_pages": "script-src 'self'; object-src 'self'; connect-src 'self' http://localhost:* https://api.coingecko.com https://api.zano.org https://explorer.zano.org;"
"extension_pages": "script-src 'self'; object-src 'self'; connect-src 'self' http://localhost:* https://api.coingecko.com https://explorer.lthn.io https://trade.lthn.io;"
},
"action": {
"default_popup": "index.html",
"default_icon": {
"16": "images/zano_16px.png",
"48": "images/zano_48px.png",
"128": "images/zano_128px.png"
"16": "images/lethean_16px.png",
"48": "images/lethean_48px.png",
"128": "images/lethean_128px.png"
}
},
"background": {
@ -20,19 +20,19 @@
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"matches": ["https://trade.lthn.io/*", "https://explorer.lthn.io/*", "https://*.lethean.io/*", "http://localhost:*/*"],
"js": ["static/js/content.bundle.js"]
},
{
"world": "MAIN",
"js": ["static/js/inject.bundle.js"],
"matches": ["<all_urls>"],
"matches": ["https://trade.lthn.io/*", "https://explorer.lthn.io/*", "https://*.lethean.io/*", "http://localhost:*/*"],
"run_at": "document_start"
}
],
"icons": {
"16": "images/zano_16px.png",
"48": "images/zano_48px.png",
"128": "images/zano_128px.png"
"16": "images/lethean_16px.png",
"48": "images/lethean_48px.png",
"128": "images/lethean_128px.png"
}
}

View file

@ -30,7 +30,7 @@ import {
setWhiteList,
} from './store/actions';
import { Store } from './store/store-reducer';
import { getZanoPrice } from './api/coingecko';
import { getLetheanPrice } from './api/coingecko';
import './styles/App.scss';
import PasswordPage from './components/PasswordPage/PasswordPage';
import MessageSignPage from './components/MessageSignPage/MessageSignPage';
@ -188,7 +188,7 @@ function App() {
}, []);
useEffect(() => {
getZanoPrice().then((priceData) => {
getLetheanPrice().then((priceData) => {
console.log('price data', priceData);
updatePriceData(dispatch as dispatchType, priceData);
});

View file

@ -1,5 +1,5 @@
export const getZanoPrice = async () => {
const coinId = 'zano';
export const getLetheanPrice = async () => {
const coinId = 'lethean';
const vsCurrency = 'usd';
// Fetch current price
@ -16,7 +16,7 @@ export const getZanoPrice = async () => {
const coinData = await coinResponse.json();
const priceChange24h = coinData.market_data.price_change_percentage_24h;
console.log(`Current price of Zano: $${currentPrice}`);
console.log(`Current price of Lethean: $${currentPrice}`);
console.log(`24-hour price change: ${priceChange24h.toFixed(2)}%`);
return { price: currentPrice, change: priceChange24h.toFixed(2) };

View file

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View file

@ -71,7 +71,7 @@ export default function AliasCreatePage() {
</h5>
<p className={`${styles.fee__value} ${notEnoughFee ? styles.error : ''}`}>
{fee} ZANO
{fee} LTHN
</p>
</div>

View file

@ -96,7 +96,7 @@ const AliasManagePage = ({ mode = 'create' }) => {
</h5>
<p className={`${styles.fee__value} ${notEnoughFee ? styles.error : ''}`}>
{fee} ZANO
{fee} LTHN
</p>
</div>

View file

@ -89,7 +89,7 @@ const AliasTransfer = () => {
</h5>
<p className={`${styles.fee__value} ${notEnoughFee ? styles.error : ''}`}>
{fee} ZANO
{fee} LTHN
</p>
</div>

View file

@ -19,7 +19,7 @@ const AppPlug: React.FC<AppPlugProps> = (props) => {
const btnClasses = state.isLoading ? [s.plugButton, s.hidden].join(' ') : s.plugButton;
const openDocs = () => {
window.open('https://docs.zano.org/docs/use/companion', '_blank');
window.open('https://docs.lethean.io/docs/use/companion', '_blank');
};
return (
@ -28,7 +28,7 @@ const AppPlug: React.FC<AppPlugProps> = (props) => {
<div className={s.plug}>
<div className={`${s.plugBody} container`}>
<div className={s.plugLogo}>
<img src={logo} alt="zano logo" />
<img src={logo} alt="lethean logo" />
</div>
<div className={s.plugContent}>

View file

@ -100,7 +100,7 @@ export default function ConnectPage({
return (
<div className={s.connect}>
<img className={s.logoImage} src={logo} alt="Zano" />
<img className={s.logoImage} src={logo} alt="Lethean" />
<div className={s.connectCodeContent}>
<div className={s.input}>
<MyInput

View file

@ -74,7 +74,7 @@ const Header = () => {
)}
</div>
<div className={s.dropdownBalance}>
{censorValue(Number(wallet.balance).toFixed(2))} ZANO
{censorValue(Number(wallet.balance).toFixed(2))} LTHN
</div>
</button>
))}

View file

@ -7,7 +7,7 @@ import { fetchBackground, shortenAddress } from '../../utils/utils';
import arrowIcon from '../../assets/svg/arrow-blue.svg';
import InfoTooltip from '../UI/InfoTooltip';
import { BurnAssetDataType } from '../../../types';
import { ZANO_ASSET_ID } from '../../../constants';
import { LTHN_ASSET_ID } from '../../../constants';
import { Store } from '../../store/store-reducer';
import WhitelistIconImage from '../UI/WhitelistIconImage';
@ -93,7 +93,7 @@ const OuterConfirmation = () => {
const fee = 0.01;
const balance = new Decimal(state.wallet?.balance || 0);
const locked = new Decimal(state.wallet?.lockedBalance || 0);
const zanoBalance = balance.minus(locked);
const letheanBalance = balance.minus(locked);
const rawTotalAmount = isMultipleDestinations
? destinations.reduce(
(sum: Decimal, dest: { amount: string }) => sum.plus(new Decimal(dest.amount || 0)),
@ -102,35 +102,35 @@ const OuterConfirmation = () => {
: new Decimal(transactionParams.Amount || 0);
const assetBalance =
assetId === ZANO_ASSET_ID
? zanoBalance
assetId === LTHN_ASSET_ID
? letheanBalance
: new Decimal(state.wallet?.assets?.find((a) => a.assetId === assetId)?.balance || 0);
const feeBig = new Decimal(fee);
const swapAmount = new Decimal(sendingAmount || 0);
const notEnoughFee = useMemo(() => {
return zanoBalance.lessThan(feeBig);
}, [zanoBalance, feeBig]);
return letheanBalance.lessThan(feeBig);
}, [letheanBalance, feeBig]);
const notEnoughAmount = useMemo(() => {
if (!isTransferMethod) return false;
if (assetId === ZANO_ASSET_ID) {
return zanoBalance.lessThan(rawTotalAmount.plus(feeBig));
if (assetId === LTHN_ASSET_ID) {
return letheanBalance.lessThan(rawTotalAmount.plus(feeBig));
}
return assetBalance.lessThan(rawTotalAmount);
}, [isTransferMethod, assetId, zanoBalance, assetBalance, rawTotalAmount, feeBig]);
}, [isTransferMethod, assetId, letheanBalance, assetBalance, rawTotalAmount, feeBig]);
const notEnoughSwapAmount = useMemo(() => {
if (!isIonicSwapMethod) return false;
if (assetId === ZANO_ASSET_ID) {
return zanoBalance.lessThan(swapAmount.plus(feeBig));
if (assetId === LTHN_ASSET_ID) {
return letheanBalance.lessThan(swapAmount.plus(feeBig));
}
return assetBalance.lessThan(swapAmount);
}, [isIonicSwapMethod, assetId, assetBalance, swapAmount, zanoBalance, feeBig]);
}, [isIonicSwapMethod, assetId, assetBalance, swapAmount, letheanBalance, feeBig]);
const disabled = accepting || denying;
const insufficientBalance =
@ -379,7 +379,7 @@ const OuterConfirmation = () => {
Transaction fee <InfoTooltip title="Total network fee" />
</h5>
<p className={`${styles.value} ${notEnoughFee ? styles.error : ''}`}>
{fee} ZANO
{fee} LTHN
</p>
</div>

View file

@ -26,7 +26,7 @@ function PasswordPage(props: PasswordPageProps) {
return (
<div className={s.passwordPage}>
<img className={s.logoImage} src={logo} alt="Zano" />
<img className={s.logoImage} src={logo} alt="Lethean" />
<p>Enter your password</p>
<div className={s.inputPanel}>
<MyInput

View file

@ -4,7 +4,7 @@ import WhitelistIconImage from '../../UI/WhitelistIconImage';
import { useCensorDigits } from '../../../hooks/useCensorDigits';
import { Store } from '../../../store/store-reducer';
import s from './Assets.module.scss';
import { ZANO_ASSET_ID } from '../../../../constants';
import { LTHN_ASSET_ID } from '../../../../constants';
function AssetPrice({ assetId, balance }: { assetId: string; balance: number }) {
const { state } = useContext(Store);
@ -13,12 +13,12 @@ function AssetPrice({ assetId, balance }: { assetId: string; balance: number })
const [assetPrice, setAssetPrice] = React.useState<number | null>(null);
useEffect(() => {
if (assetId === ZANO_ASSET_ID) {
if (assetId === LTHN_ASSET_ID) {
setAssetPrice(state.priceData.price);
return;
}
fetch(`https://explorer.zano.org/api/price?asset_id=${assetId}`)
fetch(`https://explorer.lethean.io/api/price?asset_id=${assetId}`)
.then((response) => response.json())
.then((response) => {
if (response.data && response.data.usd) {

View file

@ -8,7 +8,7 @@ import TransactionDetails from '../../TransactionDetails/TransactionDetails';
import s from './History.module.scss';
import NavLink from '../../UI/NavLink/NavLink';
import useGetAsset from '../../../hooks/useGetAsset';
import { ZANO_ASSET_ID } from '../../../../constants';
import { LTHN_ASSET_ID } from '../../../../constants';
interface HistoryItemProps {
transfer: {
@ -37,7 +37,7 @@ const HistoryItem = ({ transfer, fee, isInitiator }: HistoryItemProps) => {
if (amount === undefined) {
displayAmount = 'N/A';
} else if (transfer.assetId === ZANO_ASSET_ID) {
} else if (transfer.assetId === LTHN_ASSET_ID) {
if (!isInitiator || transfer.incoming) {
displayAmount = amount.toFixed();
} else {

View file

@ -7,7 +7,7 @@ import { useCopy } from '../../hooks/useCopy';
import RoutersNav from '../UI/RoutersNav/RoutersNav';
import { Store } from '../../store/store-reducer';
import styles from './TransactionDetails.module.scss';
import { ZANO_ASSET_ID } from '../../../constants';
import { LTHN_ASSET_ID } from '../../../constants';
type Transfer = {
amount: string;
@ -84,11 +84,11 @@ const TransactionDetails: React.FC<TransactionDetailsProps> = (props) => {
<div key={index} className={styles.transaction__transfer}>
<p className="table__value">
{(() => {
const isZano = transfer.assetId === ZANO_ASSET_ID;
const isLethean = transfer.assetId === LTHN_ASSET_ID;
let amountText: string;
if (isZano) {
if (isLethean) {
if (!props.isInitiator) {
amountText = amount.toFixed();
} else {
@ -124,7 +124,7 @@ const TransactionDetails: React.FC<TransactionDetailsProps> = (props) => {
})}
</div>
</TableRow>
<TableRow label="Fee" value={`${props.fee} ZANO`} />
<TableRow label="Fee" value={`${props.fee} LTHN`} />
{props.addresses && (
<TableRow label="Remote address" value={props.addresses[0]} copyButton />
)}

View file

@ -1,8 +1,8 @@
import DOMPurify from 'dompurify';
import React, { useEffect, useMemo, useState } from 'react';
import { BANDIT_ASSET_ID, ZANO_ASSET_ID } from '../../../../constants';
import { BANDIT_ASSET_ID, LTHN_ASSET_ID } from '../../../../constants';
import customTokenIcon from '../../../assets/tokens-svg/custom-token.svg';
import zanoIcon from '../../../assets/tokens-svg/zano.svg';
import letheanIcon from '../../../assets/tokens-svg/lethean.svg';
import banditIcon from '../../../assets/tokens-svg/bandit-icon.svg';
import { WhitelistIconImageProps } from './types';
@ -12,7 +12,7 @@ function WhitelistIconImage({ asset, width, height, className }: WhitelistIconIm
} | null>(null);
useEffect(() => {
fetch('https://api.zano.org/assets_whitelist.json')
fetch('https://api.lethean.io/assets_whitelist.json')
.then((response) => response.json())
.then(setWhitelistData)
.catch((error) => console.error('Error fetching asset whitelist:', error));
@ -45,8 +45,8 @@ function WhitelistIconImage({ asset, width, height, className }: WhitelistIconIm
);
}
if (ZANO_ASSET_ID === asset.assetId) {
return <img src={zanoIcon} alt="ZanoIcon" className={className} style={style} />;
if (LTHN_ASSET_ID === asset.assetId) {
return <img src={letheanIcon} alt="LetheanIcon" className={className} style={style} />;
}
if (BANDIT_ASSET_ID === asset.assetId) {

View file

@ -21,7 +21,7 @@ import WalletSend from '../WalletSend/WalletSend';
import s from './Wallet.module.scss';
import NavLink from '../UI/NavLink/NavLink';
import { classNames } from '../../utils/classNames';
import { ZANO_ASSET_ID } from '../../../constants';
import { LTHN_ASSET_ID } from '../../../constants';
import AliasManagePage from '../AliasManagePage';
import AliasTransfer from '../AliasTransfer';
@ -56,13 +56,13 @@ const Wallet = ({ setConnectOpened }: { setConnectOpened: Dispatch<SetStateActio
.toDecimalPlaces(6, Decimal.ROUND_DOWN)
.toFixed(),
)}{' '}
ZANO
LTHN
</span>
);
};
const getUnlockedBalance = () =>
state.wallet.assets.find((asset) => asset.assetId === ZANO_ASSET_ID)?.unlockedBalance;
state.wallet.assets.find((asset) => asset.assetId === LTHN_ASSET_ID)?.unlockedBalance;
const flipDisplay = () => {
updateDisplay(dispatch as DispatchFunction, !state.displayUsd as never);
@ -145,7 +145,7 @@ const Wallet = ({ setConnectOpened }: { setConnectOpened: Dispatch<SetStateActio
{lockedBalanceDisplay !== undefined && (
<div className={s.lockedBalanceWrapper}>
<img src={lockedIcon} alt="locked icon" />
<span className={s.lockedBalanceText}>{lockedBalanceDisplay} ZANO</span>
<span className={s.lockedBalanceText}>{lockedBalanceDisplay} LTHN</span>
</div>
)}
</div>

View file

@ -5,7 +5,7 @@ import {
validateTokensInput,
// @ts-expect-error - Disabling TS error while importing /shared submodule
// due to global tsconfig "moduleResolution" prop is set to "node"
} from 'zano_web3/shared';
} from 'lethean_web3/shared';
import failedImage from '../../assets/images/failed-round.png';
import successImage from '../../assets/images/success-round.png';
@ -114,7 +114,7 @@ const WalletSend = () => {
const openExplorer = (txId: string) => {
// eslint-disable-next-line no-undef
chrome.tabs.create({
url: `https://testnet-explorer.zano.org/block/${txId}`,
url: `https://testnet-explorer.lethean.io/block/${txId}`,
});
};
@ -157,12 +157,12 @@ const WalletSend = () => {
let isValid = false;
try {
const isValidZanoAssetAmount = validateTokensInput(
const isValidLetheanAssetAmount = validateTokensInput(
amount.value,
Number(asset.decimalPoint),
).valid;
isValid = isValidZanoAssetAmount && isAmountAvailable;
isValid = isValidLetheanAssetAmount && isAmountAvailable;
} catch {
isValid = false;
}

View file

@ -2,7 +2,7 @@ import React, { Dispatch, SetStateAction, useContext, useEffect, useRef, useStat
import bitcoinIcon from '../../../../assets/tokens-svg/bitcoin.svg';
import customTokenIcon from '../../../../assets/tokens-svg/custom-token.svg';
import ethIcon from '../../../../assets/tokens-svg/eth.svg';
import zanoIcon from '../../../../assets/tokens-svg/zano.svg';
import letheanIcon from '../../../../assets/tokens-svg/lethean.svg';
import arrowIcon from '../../../../assets/svg/arrow-select.svg';
import { Store } from '../../../../store/store-reducer';
import mainStyles from '../../WalletSend.module.scss';

View file

@ -1,10 +1,10 @@
import { ZANO_ASSET_ID } from '../../constants';
import { LTHN_ASSET_ID } from '../../constants';
export const whitelistedAssets = [
{
asset_id: ZANO_ASSET_ID,
ticker: 'ZANO',
full_name: 'Zano',
asset_id: LTHN_ASSET_ID,
ticker: 'LTHN',
full_name: 'Lethean',
},
{
asset_id: 'e03a140b8447d2895290022b25c06bdabea514e2475ae56ce5bcbc554ab9865c',
@ -13,4 +13,4 @@ export const whitelistedAssets = [
},
];
export const defaultPort = 11211;
export const defaultPort = 46941;

View file

@ -103,7 +103,7 @@ const initialState: State = {
isConfirmed: true,
incoming: true,
amount: 100,
ticker: 'ZANO',
ticker: 'LTHN',
address:
'ZxDTZ8LJ88ZK6Ja1P9iqDNgCiBM6FhiBKdDoTAoEp9nY9q8d846iePAGYGjNvrU9uFHDXD3by5CooSBrsXBDfE9M11WBwAxQ9',
},
@ -111,7 +111,7 @@ const initialState: State = {
isConfirmed: false,
incoming: false,
value: 17,
ticker: 'ZANO',
ticker: 'LTHN',
address:
'ZxDTZ8LJ88ZK6Ja1P9iqDNgCiBM6FhiBKdDoTAoEp9nY9q8d846iePAGYGjNvrU9uFHDXD3by5CooSBrsXBDfE9M11WBwAxQ9',
},

View file

@ -1,5 +1,5 @@
import JSONbig from 'json-bigint';
import { ZANO_ASSET_ID } from '../constants';
import { LTHN_ASSET_ID } from '../constants';
import { BurnAssetDataType, ionicSwapType, RequestType, TransferDataType } from '../types/index';
import {
fetchData,
@ -26,7 +26,7 @@ import { truncateToDecimals } from '../app/utils/utils';
const POPUP_HEIGHT = 630;
const POPUP_WIDTH = 370;
const ZANO_ID = ZANO_ASSET_ID;
const LTHN_ID = LTHN_ASSET_ID;
interface PopupRequest {
windowId?: number;
@ -176,7 +176,7 @@ interface Credentials {
}
const defaultCredentials: Credentials = {
port: 11211,
port: 46941,
};
export let apiCredentials: Credentials = { ...defaultCredentials };
@ -465,7 +465,7 @@ async function processRequest(request: RequestType, sender: Sender, sendResponse
const { address } = walletData;
console.log('asset to transfer:', asset);
request.asset = asset || (await getAsset(ZANO_ID));
request.asset = asset || (await getAsset(LTHN_ID));
request.sender = address || '';
const decimal_point = request.asset?.decimal_point ?? 12;

View file

@ -3,7 +3,7 @@ import { Buffer } from 'buffer';
import JSONbig from 'json-bigint';
import { apiCredentials } from './background';
import { addZeros, removeZeros } from '../app/utils/utils';
import { ZANO_ASSET_ID } from '../constants';
import { LTHN_ASSET_ID } from '../constants';
import {
BurnAssetDataType,
ionicSwapType,
@ -58,7 +58,7 @@ function generateAccessToken(httpBody: string) {
// Example payload
const payload = {
body_hash: bodyHash,
user: 'zano_extension',
user: 'lethean_extension',
salt: generateRandomString(64),
exp: Math.floor(Date.now() / 1000) + 60, // Expires in 1 minute
};
@ -90,7 +90,7 @@ export const fetchData = async (
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Zano-Access-Token': generateAccessToken(httpBody),
'Lethean-Access-Token': generateAccessToken(httpBody),
},
body: httpBody,
});
@ -145,7 +145,7 @@ export const getWallets = async () => {
data.result.wallets.map(async (wallet: WalletRaw) => {
const alias = await getAlias(wallet.wi.address);
const balanceRaw =
wallet?.wi?.balances?.find((asset) => asset.asset_info.asset_id === ZANO_ASSET_ID)
wallet?.wi?.balances?.find((asset) => asset.asset_info.asset_id === LTHN_ASSET_ID)
?.total || '0';
return {
@ -184,8 +184,8 @@ export const getWalletData = async () => {
unlockedBalance: removeZeros(asset.unlocked, asset.asset_info.decimal_point),
}))
.sort((a, b) => {
if (a.assetId === ZANO_ASSET_ID) return -1;
if (b.assetId === ZANO_ASSET_ID) return 1;
if (a.assetId === LTHN_ASSET_ID) return -1;
if (b.assetId === LTHN_ASSET_ID) return 1;
return 0;
});
@ -194,7 +194,7 @@ export const getWalletData = async () => {
}
const balance = removeZeros(
balanceParsed.result.balances.find((asset) => asset.asset_info.asset_id === ZANO_ASSET_ID)
balanceParsed.result.balances.find((asset) => asset.asset_info.asset_id === LTHN_ASSET_ID)
?.total || '0',
);
@ -340,7 +340,7 @@ export const getAliasByAddress = async (address: string) => {
};
export const transfer = async (
assetId = ZANO_ASSET_ID,
assetId = LTHN_ASSET_ID,
destination: string | undefined,
amount: string | undefined,
decimalPoint: number,
@ -395,7 +395,7 @@ export const burnBridge = async (
amount: string,
destinationAddress: string,
destinationChainId: string,
assetId = ZANO_ASSET_ID,
assetId = LTHN_ASSET_ID,
) => {
const bodyData = {
service_id: 'B',
@ -487,15 +487,15 @@ export const getSwapProposalInfo = async (hex: string | undefined) => {
};
export async function getWhiteList() {
const fetchedWhiteList = await fetch('https://api.zano.org/assets_whitelist.json')
const fetchedWhiteList = await fetch('https://api.lethean.io/assets_whitelist.json')
.then((response) => response.json())
.then((data) => data.assets);
if (fetchedWhiteList.every((e: { asset_id: string }) => e.asset_id !== ZANO_ASSET_ID)) {
if (fetchedWhiteList.every((e: { asset_id: string }) => e.asset_id !== LTHN_ASSET_ID)) {
fetchedWhiteList.push({
asset_id: ZANO_ASSET_ID,
ticker: 'ZANO',
full_name: 'Zano',
asset_id: LTHN_ASSET_ID,
ticker: 'LTHN',
full_name: 'Lethean',
decimal_point: 12,
});
}
@ -516,11 +516,11 @@ export async function getAssetInfo(assetId: string) {
}
export async function getAsset(assetId: string): Promise<IAsset | undefined> {
if (assetId === ZANO_ASSET_ID) {
if (assetId === LTHN_ASSET_ID) {
return {
asset_id: ZANO_ASSET_ID,
ticker: 'ZANO',
full_name: 'Zano',
asset_id: LTHN_ASSET_ID,
ticker: 'LTHN',
full_name: 'Lethean',
decimal_point: 12,
};
}

View file

@ -1,4 +1,6 @@
export const ZANO_ASSET_ID = 'd6329b5b1f7c0805b5c345f4957554002a2f557845f64d7645dae0e051a6498a';
export const LTHN_ASSET_ID = 'd6329b5b1f7c0805b5c345f4957554002a2f557845f64d7645dae0e051a6498a';
/** @deprecated Use LTHN_ASSET_ID */
export const LETHEAN_ASSET_ID = LTHN_ASSET_ID;
export const BANDIT_ASSET_ID = '55a8e0a730b133fb83915ba0e4335a680ae9d07a99642b17774460560f3b003d';
export const WETH_ASSET_ID = '93da681503353509367e241cda3234299dedbbad9ec851de31e900490807bf0c';
export const WBTC_ASSET_ID = '040a180aca4194a158c17945dd115db42086f6f074c1f77838621a4927fffa91';

View file

@ -1,22 +1,22 @@
interface ZanoRequestData {
interface LetheanRequestData {
method: string;
listenerID: string;
timeout?: number | null;
[key: string]: string | number | boolean | null | undefined;
}
interface DocumentEventMap {
zano_request: CustomEvent<ZanoRequestData>;
lethean_request: CustomEvent<LetheanRequestData>;
}
interface ZanoResponse {
interface LetheanResponse {
error?: string;
[key: string]: string | number | boolean | null | undefined;
}
async function fetchData(data: ZanoRequestData): Promise<ZanoResponse> {
async function fetchData(data: LetheanRequestData): Promise<LetheanResponse> {
return new Promise((resolve, reject) => {
try {
chrome.runtime.sendMessage(data, (response: ZanoResponse) => {
chrome.runtime.sendMessage(data, (response: LetheanResponse) => {
if (chrome.runtime.lastError) {
reject(chrome.runtime.lastError);
} else {
@ -29,20 +29,20 @@ async function fetchData(data: ZanoRequestData): Promise<ZanoResponse> {
});
}
document.addEventListener('zano_request', async (e: CustomEvent<ZanoRequestData>) => {
document.addEventListener('lethean_request', async (e: CustomEvent<LetheanRequestData>) => {
const data = e.detail;
try {
const response = await fetchData(data);
document.dispatchEvent(
new CustomEvent(`zano_response_${data.listenerID}`, {
new CustomEvent(`lethean_response_${data.listenerID}`, {
detail: response,
}),
);
} catch (error) {
document.dispatchEvent(
new CustomEvent(`zano_response_${data.listenerID}`, {
new CustomEvent(`lethean_response_${data.listenerID}`, {
detail: { error: error instanceof Error ? error.message : String(error) },
}),
);

View file

@ -1,4 +1,4 @@
class Zano {
class Lethean {
async request(
method: string,
params: Record<string, unknown>,
@ -25,20 +25,20 @@ class Zano {
? setTimeout(() => {
reject(new Error('Request timeout exceeded'));
document.removeEventListener(
`zano_response_${listenerID}`,
`lethean_response_${listenerID}`,
handleResponse as EventListener,
);
}, timeoutMs)
: undefined;
document.addEventListener(
`zano_response_${listenerID}`,
`lethean_response_${listenerID}`,
handleResponse as EventListener,
);
function handleResponse(e: CustomEvent) {
document.removeEventListener(
`zano_response_${listenerID}`,
`lethean_response_${listenerID}`,
handleResponse as EventListener,
);
if (timeout) {
@ -48,7 +48,7 @@ class Zano {
}
document.dispatchEvent(
new CustomEvent('zano_request', {
new CustomEvent('lethean_request', {
detail: {
method,
listenerID,
@ -61,4 +61,4 @@ class Zano {
}
}
window.zano = new Zano();
window.lethean = new Lethean();

2
src/global.d.ts vendored
View file

@ -1,5 +1,5 @@
interface Window {
zano: Zano;
lethean: Lethean;
}
declare module '*.scss' {
const content: { [className: string]: string };

View file

@ -4,7 +4,7 @@ module.exports = {
module: {
rules: [
{
include: /node_modules[\\/]zano_web3[\\/]/,
include: /node_modules[\\/]lethean_web3[\\/]/,
resolve: {
fullySpecified: false,
},