From 9cc32c1032cfa4a9d75e461884bd3d45d28548a4 Mon Sep 17 00:00:00 2001 From: "fryorcraken.eth" Date: Wed, 2 Nov 2022 22:25:47 +1100 Subject: [PATCH] tests: fix karma --- package-lock.json | 201 +++++++++++++++++- packages/byte-utils/package.json | 4 +- packages/core/src/lib/crypto.ts | 24 --- packages/dns-discovery/.eslintrc.cjs | 6 + packages/dns-discovery/.prettierignore | 4 + packages/enr/.eslintrc.cjs | 6 + packages/enr/.mocharc.json | 11 + packages/enr/.prettierignore | 4 + packages/enr/karma.conf.cjs | 45 ++++ packages/enr/package.json | 12 +- packages/enr/src/crypto.ts | 61 ++++++ packages/enr/src/enr.spec.ts | 13 +- packages/enr/src/enr.ts | 16 +- packages/enr/src/index.ts | 10 +- packages/enr/src/keypair/index.ts | 8 +- packages/enr/src/keypair/secp256k1.ts | 4 +- .../enr/src/multiaddr_from_fields.spec.ts | 2 +- packages/enr/src/multiaddrs_codec.spec.ts | 2 +- packages/enr/src/multiaddrs_codec.ts | 2 +- packages/enr/src/v4.ts | 7 +- packages/enr/src/waku2_codec.spec.ts | 2 +- packages/enr/tsconfig.karma.json | 6 + 22 files changed, 388 insertions(+), 62 deletions(-) create mode 100644 packages/dns-discovery/.eslintrc.cjs create mode 100644 packages/dns-discovery/.prettierignore create mode 100644 packages/enr/.eslintrc.cjs create mode 100644 packages/enr/.mocharc.json create mode 100644 packages/enr/.prettierignore create mode 100644 packages/enr/karma.conf.cjs create mode 100644 packages/enr/src/crypto.ts create mode 100644 packages/enr/tsconfig.karma.json diff --git a/package-lock.json b/package-lock.json index 75ea293c1a..77cd735401 100644 --- a/package-lock.json +++ b/package-lock.json @@ -182,9 +182,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.0.tgz", - "integrity": "sha512-G9VgAhEaICnz8iiJeGJQyVl6J2nTjbW0xeisva0PK6XcKsga7BIaqm4ZF8Rg1Wbaqmy6znspNqhPaPkyukujzg==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.1.tgz", + "integrity": "sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -5272,6 +5272,10 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "node_modules/@waku/byte-utils": { + "resolved": "packages/byte-utils", + "link": true + }, "node_modules/@waku/core": { "resolved": "packages/core", "link": true @@ -22353,6 +22357,64 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/byte-utils": { + "name": "@waku/byte-utils", + "version": "0.0.1", + "license": "MIT OR Apache-2.0", + "dependencies": { + "uint8arrays": "^4.0.2" + }, + "devDependencies": { + "@rollup/plugin-commonjs": "^22.0.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.3.0", + "@semantic-release/changelog": "^6.0.1", + "@semantic-release/commit-analyzer": "^9.0.2", + "@semantic-release/git": "^10.0.1", + "@semantic-release/github": "^8.0.6", + "@semantic-release/npm": "^9.0.1", + "@semantic-release/release-notes-generator": "^10.0.3", + "@typescript-eslint/eslint-plugin": "^5.8.1", + "@typescript-eslint/parser": "^5.8.1", + "cspell": "^5.14.0", + "eslint": "^8.6.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-functional": "^4.0.2", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-prettier": "^4.0.0", + "npm-run-all": "^4.1.5", + "prettier": "^2.1.1", + "rollup": "^2.75.0", + "semantic-release": "^19.0.5", + "semantic-release-monorepo": "^7.0.5", + "typescript": "^4.6.3" + }, + "engines": { + "node": ">=16" + } + }, + "packages/byte-utils/node_modules/multiformats": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-10.0.2.tgz", + "integrity": "sha512-nJEHLFOYhO4L+aNApHhCnWqa31FyqAHv9Q77AhmwU3KsM2f1j7tuJpCk5ByZ33smzycNCpSG5klNIejIyfFx2A==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "packages/byte-utils/node_modules/uint8arrays": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.2.tgz", + "integrity": "sha512-8CWXXZdOvVrIL4SeY/Gnp+idxxiGK4XFkP4FY26Sx/fpTz/b6vv4BVWELMDzQweSyyhdcuAcU14H6izzB6k1Cw==", + "dependencies": { + "multiformats": "^10.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "packages/core": { "name": "@waku/core", "version": "0.0.1", @@ -22525,6 +22587,7 @@ } }, "packages/dns-discovery": { + "name": "@waku/dns-discovery", "version": "0.0.1", "license": "MIT OR Apache-2.0", "devDependencies": { @@ -22558,8 +22621,15 @@ } }, "packages/enr": { + "name": "@waku/enr", "version": "0.0.1", "license": "MIT OR Apache-2.0", + "dependencies": { + "@libp2p/crypto": "^1.0.4", + "@multiformats/multiaddr": "^11.0.6", + "@noble/secp256k1": "^1.7.0", + "@waku/byte-utils": "*" + }, "devDependencies": { "@rollup/plugin-commonjs": "^22.0.0", "@rollup/plugin-json": "^4.1.0", @@ -22572,6 +22642,7 @@ "@semantic-release/release-notes-generator": "^10.0.3", "@typescript-eslint/eslint-plugin": "^5.8.1", "@typescript-eslint/parser": "^5.8.1", + "chai": "^4.3.6", "cspell": "^5.14.0", "eslint": "^8.6.0", "eslint-config-prettier": "^8.3.0", @@ -22584,12 +22655,51 @@ "rollup": "^2.75.0", "semantic-release": "^19.0.5", "semantic-release-monorepo": "^7.0.5", + "ts-loader": "^9.4.1", "typescript": "^4.6.3" }, "engines": { "node": ">=16" } }, + "packages/enr/node_modules/@multiformats/multiaddr": { + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-11.0.6.tgz", + "integrity": "sha512-5TvEdCc5uFqcwGA+IwSw49swyHtUbwjhjwF3WQcV9vkzTv1C8oEWhoD2QcsiomDRk8rdqqRyDH6wlZExvLnxjw==", + "dependencies": { + "@chainsafe/is-ip": "^1.0.0", + "dns-over-http-resolver": "^2.1.0", + "err-code": "^3.0.1", + "multiformats": "^10.0.0", + "uint8arrays": "^4.0.2", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "packages/enr/node_modules/multiformats": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-10.0.2.tgz", + "integrity": "sha512-nJEHLFOYhO4L+aNApHhCnWqa31FyqAHv9Q77AhmwU3KsM2f1j7tuJpCk5ByZ33smzycNCpSG5klNIejIyfFx2A==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "packages/enr/node_modules/uint8arrays": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.2.tgz", + "integrity": "sha512-8CWXXZdOvVrIL4SeY/Gnp+idxxiGK4XFkP4FY26Sx/fpTz/b6vv4BVWELMDzQweSyyhdcuAcU14H6izzB6k1Cw==", + "dependencies": { + "multiformats": "^10.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "packages/interfaces": { "name": "@waku/interfaces", "version": "0.0.1", @@ -22839,9 +22949,9 @@ } }, "@babel/parser": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.0.tgz", - "integrity": "sha512-G9VgAhEaICnz8iiJeGJQyVl6J2nTjbW0xeisva0PK6XcKsga7BIaqm4ZF8Rg1Wbaqmy6znspNqhPaPkyukujzg==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.1.tgz", + "integrity": "sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw==", "dev": true }, "@chainsafe/is-ip": { @@ -26909,6 +27019,51 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "@waku/byte-utils": { + "version": "file:packages/byte-utils", + "requires": { + "@rollup/plugin-commonjs": "^22.0.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.3.0", + "@semantic-release/changelog": "^6.0.1", + "@semantic-release/commit-analyzer": "^9.0.2", + "@semantic-release/git": "^10.0.1", + "@semantic-release/github": "^8.0.6", + "@semantic-release/npm": "^9.0.1", + "@semantic-release/release-notes-generator": "^10.0.3", + "@typescript-eslint/eslint-plugin": "^5.8.1", + "@typescript-eslint/parser": "^5.8.1", + "cspell": "^5.14.0", + "eslint": "^8.6.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-functional": "^4.0.2", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-prettier": "^4.0.0", + "npm-run-all": "^4.1.5", + "prettier": "^2.1.1", + "rollup": "^2.75.0", + "semantic-release": "^19.0.5", + "semantic-release-monorepo": "^7.0.5", + "typescript": "^4.6.3", + "uint8arrays": "^4.0.2" + }, + "dependencies": { + "multiformats": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-10.0.2.tgz", + "integrity": "sha512-nJEHLFOYhO4L+aNApHhCnWqa31FyqAHv9Q77AhmwU3KsM2f1j7tuJpCk5ByZ33smzycNCpSG5klNIejIyfFx2A==" + }, + "uint8arrays": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.2.tgz", + "integrity": "sha512-8CWXXZdOvVrIL4SeY/Gnp+idxxiGK4XFkP4FY26Sx/fpTz/b6vv4BVWELMDzQweSyyhdcuAcU14H6izzB6k1Cw==", + "requires": { + "multiformats": "^10.0.0" + } + } + } + }, "@waku/core": { "version": "file:packages/core", "requires": { @@ -27090,6 +27245,9 @@ "@waku/enr": { "version": "file:packages/enr", "requires": { + "@libp2p/crypto": "^1.0.4", + "@multiformats/multiaddr": "^11.0.6", + "@noble/secp256k1": "^1.7.0", "@rollup/plugin-commonjs": "^22.0.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^13.3.0", @@ -27101,6 +27259,8 @@ "@semantic-release/release-notes-generator": "^10.0.3", "@typescript-eslint/eslint-plugin": "^5.8.1", "@typescript-eslint/parser": "^5.8.1", + "@waku/byte-utils": "*", + "chai": "^4.3.6", "cspell": "^5.14.0", "eslint": "^8.6.0", "eslint-config-prettier": "^8.3.0", @@ -27113,7 +27273,36 @@ "rollup": "^2.75.0", "semantic-release": "^19.0.5", "semantic-release-monorepo": "^7.0.5", + "ts-loader": "^9.4.1", "typescript": "^4.6.3" + }, + "dependencies": { + "@multiformats/multiaddr": { + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-11.0.6.tgz", + "integrity": "sha512-5TvEdCc5uFqcwGA+IwSw49swyHtUbwjhjwF3WQcV9vkzTv1C8oEWhoD2QcsiomDRk8rdqqRyDH6wlZExvLnxjw==", + "requires": { + "@chainsafe/is-ip": "^1.0.0", + "dns-over-http-resolver": "^2.1.0", + "err-code": "^3.0.1", + "multiformats": "^10.0.0", + "uint8arrays": "^4.0.2", + "varint": "^6.0.0" + } + }, + "multiformats": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-10.0.2.tgz", + "integrity": "sha512-nJEHLFOYhO4L+aNApHhCnWqa31FyqAHv9Q77AhmwU3KsM2f1j7tuJpCk5ByZ33smzycNCpSG5klNIejIyfFx2A==" + }, + "uint8arrays": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.2.tgz", + "integrity": "sha512-8CWXXZdOvVrIL4SeY/Gnp+idxxiGK4XFkP4FY26Sx/fpTz/b6vv4BVWELMDzQweSyyhdcuAcU14H6izzB6k1Cw==", + "requires": { + "multiformats": "^10.0.0" + } + } } }, "@waku/interfaces": { diff --git a/packages/byte-utils/package.json b/packages/byte-utils/package.json index a832ebe6d0..7b3acaec8b 100644 --- a/packages/byte-utils/package.json +++ b/packages/byte-utils/package.json @@ -50,7 +50,9 @@ "engines": { "node": ">=16" }, - "dependencies": {}, + "dependencies": { + "uint8arrays": "^4.0.2" + }, "devDependencies": { "@rollup/plugin-commonjs": "^22.0.0", "@rollup/plugin-json": "^4.1.0", diff --git a/packages/core/src/lib/crypto.ts b/packages/core/src/lib/crypto.ts index 321574606d..095b41e9a7 100644 --- a/packages/core/src/lib/crypto.ts +++ b/packages/core/src/lib/crypto.ts @@ -74,27 +74,3 @@ export async function sign( export function keccak256(input: Uint8Array): Uint8Array { return new Uint8Array(sha3.keccak256.arrayBuffer(input)); } - -export function compressPublicKey(publicKey: Uint8Array): Uint8Array { - if (publicKey.length === 64) { - publicKey = concat([new Uint8Array([4]), publicKey], 65); - } - const point = secp.Point.fromHex(publicKey); - return point.toRawBytes(true); -} - -/** - * Verify an ECDSA signature. - */ -export function verifySignature( - signature: Uint8Array, - message: Uint8Array | string, - publicKey: Uint8Array -): boolean { - try { - const _signature = secp.Signature.fromCompact(signature.slice(0, 64)); - return secp.verify(_signature, message, publicKey); - } catch { - return false; - } -} diff --git a/packages/dns-discovery/.eslintrc.cjs b/packages/dns-discovery/.eslintrc.cjs new file mode 100644 index 0000000000..324f1f526d --- /dev/null +++ b/packages/dns-discovery/.eslintrc.cjs @@ -0,0 +1,6 @@ +module.exports = { + parserOptions: { + tsconfigRootDir: __dirname, + project: "./tsconfig.dev.json", + }, +}; diff --git a/packages/dns-discovery/.prettierignore b/packages/dns-discovery/.prettierignore new file mode 100644 index 0000000000..fecb37a393 --- /dev/null +++ b/packages/dns-discovery/.prettierignore @@ -0,0 +1,4 @@ +build +bundle +dist +node_modules diff --git a/packages/enr/.eslintrc.cjs b/packages/enr/.eslintrc.cjs new file mode 100644 index 0000000000..324f1f526d --- /dev/null +++ b/packages/enr/.eslintrc.cjs @@ -0,0 +1,6 @@ +module.exports = { + parserOptions: { + tsconfigRootDir: __dirname, + project: "./tsconfig.dev.json", + }, +}; diff --git a/packages/enr/.mocharc.json b/packages/enr/.mocharc.json new file mode 100644 index 0000000000..db9dd73531 --- /dev/null +++ b/packages/enr/.mocharc.json @@ -0,0 +1,11 @@ +{ + "extension": ["ts"], + "spec": "src/**/*.spec.ts", + "require": ["ts-node/register", "isomorphic-fetch", "jsdom-global/register"], + "loader": "ts-node/esm", + "node-option": [ + "experimental-specifier-resolution=node", + "loader=ts-node/esm" + ], + "exit": true +} diff --git a/packages/enr/.prettierignore b/packages/enr/.prettierignore new file mode 100644 index 0000000000..fecb37a393 --- /dev/null +++ b/packages/enr/.prettierignore @@ -0,0 +1,4 @@ +build +bundle +dist +node_modules diff --git a/packages/enr/karma.conf.cjs b/packages/enr/karma.conf.cjs new file mode 100644 index 0000000000..8ee5033706 --- /dev/null +++ b/packages/enr/karma.conf.cjs @@ -0,0 +1,45 @@ +process.env.CHROME_BIN = require("puppeteer").executablePath(); +const webpack = require("webpack"); + +module.exports = function (config) { + config.set({ + frameworks: ["webpack", "mocha"], + files: ["src/**/*.ts"], + preprocessors: { + "src/**/*.ts": ["webpack"], + }, + envPreprocessor: ["CI"], + reporters: ["progress"], + browsers: ["ChromeHeadless"], + singleRun: true, + client: { + mocha: { + timeout: 6000, // Default is 2s + }, + }, + webpack: { + mode: "development", + module: { + rules: [{ test: /\.([cm]?ts|tsx)$/, loader: "ts-loader" }], + }, + plugins: [ + new webpack.DefinePlugin({ + "process.env.CI": process.env.CI || false, + }), + new webpack.ProvidePlugin({ + process: "process/browser.js", + }), + ], + resolve: { + extensions: [".ts", ".tsx", ".js"], + extensionAlias: { + ".js": [".js", ".ts"], + ".cjs": [".cjs", ".cts"], + ".mjs": [".mjs", ".mts"], + }, + }, + stats: { warnings: false }, + devtool: "inline-source-map", + }, + }); +}; diff --git a/packages/enr/package.json b/packages/enr/package.json index a6c37c6731..711cc52564 100644 --- a/packages/enr/package.json +++ b/packages/enr/package.json @@ -43,6 +43,9 @@ "check:prettier": "prettier . --list-different", "check:spelling": "cspell \"{README.md,src/**/*.ts}\"", "check:tsc": "tsc -p tsconfig.dev.json", + "test": "run-s test:*", + "test:node": "TS_NODE_PROJECT=./tsconfig.dev.json mocha", + "test:browser": "karma start karma.conf.cjs", "prepublish": "npm run build", "reset-hard": "git clean -dfx -e .idea && git reset --hard && npm i && npm run build", "release": "semantic-release" @@ -50,7 +53,12 @@ "engines": { "node": ">=16" }, - "dependencies": {}, + "dependencies": { + "@libp2p/crypto": "^1.0.4", + "@multiformats/multiaddr": "^11.0.6", + "@noble/secp256k1": "^1.7.0", + "@waku/byte-utils": "*" + }, "devDependencies": { "@rollup/plugin-commonjs": "^22.0.0", "@rollup/plugin-json": "^4.1.0", @@ -63,6 +71,7 @@ "@semantic-release/release-notes-generator": "^10.0.3", "@typescript-eslint/eslint-plugin": "^5.8.1", "@typescript-eslint/parser": "^5.8.1", + "chai": "^4.3.6", "cspell": "^5.14.0", "eslint": "^8.6.0", "eslint-config-prettier": "^8.3.0", @@ -75,6 +84,7 @@ "rollup": "^2.75.0", "semantic-release": "^19.0.5", "semantic-release-monorepo": "^7.0.5", + "ts-loader": "^9.4.1", "typescript": "^4.6.3" }, "release": { diff --git a/packages/enr/src/crypto.ts b/packages/enr/src/crypto.ts new file mode 100644 index 0000000000..39020a4c1a --- /dev/null +++ b/packages/enr/src/crypto.ts @@ -0,0 +1,61 @@ +import * as secp from "@noble/secp256k1"; +import { concat } from "@waku/byte-utils"; +import sha3 from "js-sha3"; + +export const randomBytes = secp.utils.randomBytes; + +/** + * Return the public key for the given private key, to be used for asymmetric + * encryption. + */ +export const getPublicKey = secp.getPublicKey; + +/** + * ECDSA Sign a message with the given private key. + * + * @param message The message to sign, usually a hash. + * @param privateKey The ECDSA private key to use to sign the message. + * + * @returns The signature and the recovery id concatenated. + */ +export async function sign( + message: Uint8Array, + privateKey: Uint8Array +): Promise { + const [signature, recoveryId] = await secp.sign(message, privateKey, { + recovered: true, + der: false, + }); + return concat( + [signature, new Uint8Array([recoveryId])], + signature.length + 1 + ); +} + +export function keccak256(input: Uint8Array): Uint8Array { + return new Uint8Array(sha3.keccak256.arrayBuffer(input)); +} + +export function compressPublicKey(publicKey: Uint8Array): Uint8Array { + if (publicKey.length === 64) { + publicKey = concat([new Uint8Array([4]), publicKey], 65); + } + const point = secp.Point.fromHex(publicKey); + return point.toRawBytes(true); +} + +/** + * Verify an ECDSA signature. + */ +export function verifySignature( + signature: Uint8Array, + message: Uint8Array | string, + publicKey: Uint8Array +): boolean { + try { + const _signature = secp.Signature.fromCompact(signature.slice(0, 64)); + return secp.verify(_signature, message, publicKey); + } catch { + return false; + } +} diff --git a/packages/enr/src/enr.spec.ts b/packages/enr/src/enr.spec.ts index 0db843eae0..df23ab397f 100644 --- a/packages/enr/src/enr.spec.ts +++ b/packages/enr/src/enr.spec.ts @@ -1,15 +1,14 @@ import { createSecp256k1PeerId } from "@libp2p/peer-id-factory"; import { multiaddr } from "@multiformats/multiaddr"; +import { bytesToHex, hexToBytes, utf8ToBytes } from "@waku/byte-utils"; import { assert, expect } from "chai"; import { equals } from "uint8arrays/equals"; -import { getPublicKey } from "../crypto"; -import { bytesToHex, hexToBytes, utf8ToBytes } from "../utils"; - -import { ERR_INVALID_ID } from "./constants"; -import { ENR } from "./enr"; -import { createKeypairFromPeerId, IKeypair } from "./keypair"; -import { Waku2 } from "./waku2_codec"; +import { ERR_INVALID_ID } from "./constants.js"; +import { getPublicKey } from "./crypto.js"; +import { ENR } from "./enr.js"; +import { createKeypairFromPeerId, IKeypair } from "./keypair/index.js"; +import { Waku2 } from "./waku2_codec.js"; describe("ENR", function () { describe("Txt codec", () => { diff --git a/packages/enr/src/enr.ts b/packages/enr/src/enr.ts index 7718a71b33..439d26e148 100644 --- a/packages/enr/src/enr.ts +++ b/packages/enr/src/enr.ts @@ -5,14 +5,22 @@ import { convertToBytes, convertToString, } from "@multiformats/multiaddr/convert"; +import { + bytesToHex, + bytesToUtf8, + hexToBytes, + utf8ToBytes, +} from "@waku/byte-utils"; import debug from "debug"; import { fromString } from "uint8arrays/from-string"; import { toString } from "uint8arrays/to-string"; -import { compressPublicKey, keccak256, verifySignature } from "../crypto"; -import { bytesToHex, bytesToUtf8, hexToBytes, utf8ToBytes } from "../utils"; - -import { ERR_INVALID_ID, ERR_NO_SIGNATURE, MAX_RECORD_SIZE } from "./constants"; +import { + ERR_INVALID_ID, + ERR_NO_SIGNATURE, + MAX_RECORD_SIZE, +} from "./constants.js"; +import { compressPublicKey, keccak256, verifySignature } from "./crypto.js"; import { createKeypair, createKeypairFromPeerId, diff --git a/packages/enr/src/index.ts b/packages/enr/src/index.ts index 32d56e1f6e..b1b0ba86e3 100644 --- a/packages/enr/src/index.ts +++ b/packages/enr/src/index.ts @@ -1,5 +1,5 @@ -export * from "./constants"; -export * from "./enr"; -export * from "./types"; -export * from "./keypair"; -export * from "./waku2_codec"; +export * from "./constants.js"; +export * from "./enr.js"; +export * from "./types.js"; +export * from "./keypair/index.js"; +export * from "./waku2_codec.js"; diff --git a/packages/enr/src/keypair/index.ts b/packages/enr/src/keypair/index.ts index cc1a0c6e2f..addd1dad34 100644 --- a/packages/enr/src/keypair/index.ts +++ b/packages/enr/src/keypair/index.ts @@ -3,12 +3,12 @@ import { supportedKeys } from "@libp2p/crypto/keys"; import type { PeerId } from "@libp2p/interface-peer-id"; import { peerIdFromKeys } from "@libp2p/peer-id"; -import { Secp256k1Keypair } from "./secp256k1"; -import { IKeypair, KeypairType } from "./types"; +import { Secp256k1Keypair } from "./secp256k1.js"; +import { IKeypair, KeypairType } from "./types.js"; export const ERR_TYPE_NOT_IMPLEMENTED = "Keypair type not implemented"; -export * from "./types"; -export * from "./secp256k1"; +export * from "./types.js"; +export * from "./secp256k1.js"; export function createKeypair( type: KeypairType, diff --git a/packages/enr/src/keypair/secp256k1.ts b/packages/enr/src/keypair/secp256k1.ts index bac7be7967..b658cb5421 100644 --- a/packages/enr/src/keypair/secp256k1.ts +++ b/packages/enr/src/keypair/secp256k1.ts @@ -1,8 +1,8 @@ import * as secp from "@noble/secp256k1"; -import { compressPublicKey, randomBytes } from "../../crypto"; +import { compressPublicKey, randomBytes } from "../crypto.js"; -import { IKeypair, KeypairType } from "./types"; +import { IKeypair, KeypairType } from "./types.js"; export class Secp256k1Keypair implements IKeypair { readonly type: KeypairType; diff --git a/packages/enr/src/multiaddr_from_fields.spec.ts b/packages/enr/src/multiaddr_from_fields.spec.ts index 51250e2d3c..6c08f6003c 100644 --- a/packages/enr/src/multiaddr_from_fields.spec.ts +++ b/packages/enr/src/multiaddr_from_fields.spec.ts @@ -1,7 +1,7 @@ import { convertToBytes } from "@multiformats/multiaddr/convert"; import { expect } from "chai"; -import { multiaddrFromFields } from "./multiaddr_from_fields"; +import { multiaddrFromFields } from "./multiaddr_from_fields.js"; describe("Multiaddr from fields", () => { it("tcp ip4 address", function () { diff --git a/packages/enr/src/multiaddrs_codec.spec.ts b/packages/enr/src/multiaddrs_codec.spec.ts index c430e8f9e7..ed92411a4d 100644 --- a/packages/enr/src/multiaddrs_codec.spec.ts +++ b/packages/enr/src/multiaddrs_codec.spec.ts @@ -1,7 +1,7 @@ import { multiaddr } from "@multiformats/multiaddr"; import { expect } from "chai"; -import { decodeMultiaddrs, encodeMultiaddrs } from "./multiaddrs_codec"; +import { decodeMultiaddrs, encodeMultiaddrs } from "./multiaddrs_codec.js"; describe("ENR multiaddrs codec", function () { it("Sample", async () => { diff --git a/packages/enr/src/multiaddrs_codec.ts b/packages/enr/src/multiaddrs_codec.ts index 3bd489b0da..76ed1d26a0 100644 --- a/packages/enr/src/multiaddrs_codec.ts +++ b/packages/enr/src/multiaddrs_codec.ts @@ -1,7 +1,7 @@ import { multiaddr } from "@multiformats/multiaddr"; import type { Multiaddr } from "@multiformats/multiaddr"; -import { MULTIADDR_LENGTH_SIZE } from "./constants"; +import { MULTIADDR_LENGTH_SIZE } from "./constants.js"; export function decodeMultiaddrs(bytes: Uint8Array): Multiaddr[] { const multiaddrs = []; diff --git a/packages/enr/src/v4.ts b/packages/enr/src/v4.ts index 296347a849..5a1a1fe0ec 100644 --- a/packages/enr/src/v4.ts +++ b/packages/enr/src/v4.ts @@ -1,9 +1,8 @@ import * as secp from "@noble/secp256k1"; +import { bytesToHex } from "@waku/byte-utils"; -import { keccak256 } from "../crypto"; -import { bytesToHex } from "../utils"; - -import { NodeId } from "./types"; +import { keccak256 } from "./crypto.js"; +import { NodeId } from "./types.js"; export async function sign( privKey: Uint8Array, diff --git a/packages/enr/src/waku2_codec.spec.ts b/packages/enr/src/waku2_codec.spec.ts index 7d65d10793..1dfc2b7cb2 100644 --- a/packages/enr/src/waku2_codec.spec.ts +++ b/packages/enr/src/waku2_codec.spec.ts @@ -1,6 +1,6 @@ import { expect } from "chai"; -import { decodeWaku2, encodeWaku2, Waku2 } from "./waku2_codec"; +import { decodeWaku2, encodeWaku2, Waku2 } from "./waku2_codec.js"; const waku2FieldEncodings = { relay: 1, diff --git a/packages/enr/tsconfig.karma.json b/packages/enr/tsconfig.karma.json new file mode 100644 index 0000000000..c540c783ff --- /dev/null +++ b/packages/enr/tsconfig.karma.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.dev", + "compilerOptions": { + "noEmit": false + } +}