UNPKG

@metamask/utils

Version:

Various JavaScript/TypeScript utilities of wide relevance to the MetaMask codebase

464 lines (294 loc) 17.9 kB
# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [11.4.0] ### Changed - Deprecate local `exactOptional` implementation ([#244](https://github.com/MetaMask/utils/pull/244)) - Use the one from `@metamask/superstruct@>=3.2.0` instead. ## [11.3.0] ### Added - Add default JSON-RPC generics that extend `Json` to `Json` ([#241](https://github.com/MetaMask/utils/pull/241)) ### Changed - Deprecate `Keyring` types ([#236](https://github.com/MetaMask/utils/pull/236)) - These should now be imported from `@metamask/keyring-utils`. ## [11.2.0] ### Added - Add optional `signEip7702Authorization` method to `Keyring` type ([#231](https://github.com/MetaMask/utils/pull/231)) ## [11.1.0] ### Added - Add additional CAIP-19 types (`CaipAsset{Namespace,Reference,TokenId}` support ([#227](https://github.com/MetaMask/utils/pull/227)) - Add CAIP-19 `CaipAssetTypeOrId` ([#229](https://github.com/MetaMask/utils/pull/229)) - This one combines both `CaipAssetType` and `CaipAssetId` to avoid relying on `superstruct.union`, resulting in better error messages. - Add `definePattern` superstruct helper ([#228](https://github.com/MetaMask/utils/pull/228)) - Allow to define a `superstruct.pattern` while naming the struct and enforcing its type. ### Changed - Use named structs for all CAIP types ([#228](https://github.com/MetaMask/utils/pull/228)) ## [11.0.1] ### Fixed - Improve error message for invalid JSON values ([#224](https://github.com/MetaMask/utils/pull/224)) ## [11.0.0] ### Changed - **BREAKING:** `generateRandomMnemonic` now returns `Promise<void>` instead of `void` ([#222](https://github.com/MetaMask/utils/pull/222)) ## [10.0.1] ### Added - Add Solana CAIP namespace ([#219](https://github.com/MetaMask/utils/pull/219)) ## [10.0.0] ### Changed - **BREAKING:** Drop support for Node.js versions 16, 21 ([#212](https://github.com/MetaMask/utils/pull/212)) - Improve JSON validation performance ([#218](https://github.com/MetaMask/utils/pull/218)) ## [9.3.0] ### Added - Add support for CAIP-19 ([#183](https://github.com/MetaMask/utils/pull/183)) - Add `Bip122` member to `KnownCaipNamespace` ([#213](https://github.com/MetaMask/utils/pull/213)) ## [9.2.1] ### Fixed - Fix wrong types for CAIP-2 and CAIP-10 structs ([#210](https://github.com/MetaMask/utils/pull/210)) ## [9.2.0] ### Added - Add `Wallet` member to `KnownCaipNamespace` enum ([#207](https://github.com/MetaMask/utils/pull/207)) ## [9.1.0] ### Added - Add `PublicInterface` type ([#197](https://github.com/MetaMask/utils/pull/197)) ## [9.0.0] ### Changed - **BREAKING:** The return types of functions `getChecksumAddress`, `numberToHex`, `bigIntToHex` are narrowed from `string` to `Hex` ([#193](https://github.com/MetaMask/utils/pull/193)) ### Fixed - Bump `@metamask/superstruct` from `^3.0.0` to `^3.1.0` ([#194](https://github.com/MetaMask/utils/pull/194)) - If `@metamask/utils` `<=8.5.0` is used with `@metamask/superstruct` `>=3.1.0` the following error may be encountered: ```ts error TS2742: The inferred type of 'ExampleType' cannot be named without a reference to '@metamask/utils/node_modules/@metamask/superstruct'. This is likely not portable. A type annotation is necessary. ``` This can be resolved by updating `@metamask/utils` to `>=9.0.0`. ## [8.5.0] ### Changed - Bump dependency `semver` from `^5.7.1` to `^7.6.0` ([#181](https://github.com/MetaMask/utils/pull/181)). ### Fixed - Replace dependency `superstruct` `^1.0.3` with ESM-compatible `@metamask/superstruct` `^3.0.0` ([#185](https://github.com/MetaMask/utils/pull/185)). - This fixes the issue of this package being unusable by any TypeScript project that uses `Node16` or `NodeNext` as its `moduleResolution` option. - Produce and export ESM-compatible TypeScript type declaration files in addition to CommonJS-compatible declaration files ([#182](https://github.com/MetaMask/utils/pull/182)) - Previously, this package shipped with only one variant of type declaration files, and these files were only CommonJS-compatible, and the `exports` field in `package.json` linked to these files. This is an anti-pattern and was rightfully flagged by the ["Are the Types Wrong?"](https://arethetypeswrong.github.io/) tool as ["masquerading as CJS"](https://github.com/arethetypeswrong/arethetypeswrong.github.io/blob/main/docs/problems/FalseCJS.md). All of the ATTW checks now pass. - Remove chunk files ([#182](https://github.com/MetaMask/utils/pull/182)). - Previously, the build tool we used to generate JavaScript files extracted common code to "chunk" files. While this was intended to make this package more tree-shakeable, it also made debugging more difficult for our development teams. These chunk files are no longer present. ## [8.4.0] ### Added - Add `toCaipChainId` utility function ([#175](https://github.com/MetaMask/utils/pull/175)) - Add `KnownCaipNamespace` enum ([#175](https://github.com/MetaMask/utils/pull/175)) ### Changed - Update docs for `createDeferredPromise` to caution against using `suppressUnhandledRejection` ([#174](https://github.com/MetaMask/utils/pull/174)) ### Fixed - Fix `createSandbox` to assign a unique name to the sandbox directory, so that it can be used in multiple concurrently running Jest tests ([#171](https://github.com/MetaMask/utils/pull/171)) ## [8.3.0] ### Added - Add `createDeferredPromise` ([#164](https://github.com/MetaMask/utils/pull/164)) ## [8.2.1] ### Fixed - Fix issue with source maps where line numbers were incorrect for src/error.ts ([#156](https://github.com/MetaMask/utils/pull/156)) ## [8.2.0] ### Added - Add struct utils for validating JSON objects with optional values ([#136](https://github.com/MetaMask/utils/pull/136)) - Add filesystem utils ([#148](https://github.com/MetaMask/utils/pull/148)) - Add error utils ([#146](https://github.com/MetaMask/utils/pull/146), [#151](https://github.com/MetaMask/utils/pull/151)) - Add base64 encoding and decoding functions ([#145](https://github.com/MetaMask/utils/pull/145)) ### Changed - Use `tsup` for bundling ([#144](https://github.com/MetaMask/utils/pull/144)) - This makes the package fully compliant with ES modules. - Bump `@ethereumjs/tx` from `4.1.2` to `4.2.0` ([#133](https://github.com/MetaMask/utils/pull/133)) ## [8.1.0] ### Changed - Make types for JSON-RPC-related structs more accurate ([#134](https://github.com/MetaMask/utils/pull/134)) - Aligning `JsonRpcParams` to be optional, yet not `undefined`. - Updated types: - `InferWithParams` - `JsonRpcNotificationStruct` - `JsonRpcParamsStruct` - `JsonRpcRequestStruct` ## [8.0.0] ### Changed - **BREAKING:** `JsonRpcParams` type no longer accepts `undefined` as value, as `undefined` is not a valid JSON type ([#130](https://github.com/MetaMask/utils/pull/130)) ## [7.1.0] ### Added - Add CAIP-2 and CAIP-10 types ([#116](https://github.com/MetaMask/utils/pull/116)) ## [7.0.0] ### Added - Add `getKnownPropertyNames` function ([#111](https://github.com/MetaMask/utils/pull/111)) ### Changed - **BREAKING:** Build the package as both CJS and ESM ([#115](https://github.com/MetaMask/utils/pull/115), [#124](https://github.com/MetaMask/utils/pull/124)) - It's no longer possible to import from the `dist` folder. Everything must be imported from `@metamask/utils`. - Bump `semver` to `^7.5.4` ([#123](https://github.com/MetaMask/utils/pull/123)) ## [6.2.0] ### Added - Add address related utils ([#112](https://github.com/MetaMask/utils/pull/112)) - `isValidHexAddress` has been added to check the validity of an hex address - `getChecksumAddress` has been added to calculate the ERC-55 mixed-case checksum of an hex address - `isValidChecksumAddress` has been added to check the validity of an ERC-55 mixed-case checksum address ## [6.1.0] ### Added - Add optional `destroy` method to `Keyring` type ([#108](https://github.com/MetaMask/utils/pull/108)) ## [6.0.1] ### Fixed - Strip `__proto__` and `constructor` JSON properties in `getSafeJson` ([#105](https://github.com/MetaMask/utils/pull/105)) ## [6.0.0] ### Changed - **BREAKING:** Bump minimum Node version to 16 ([#102](https://github.com/MetaMask/utils/pull/102)) - **BREAKING:** Target `ES2020` ([#102](https://github.com/MetaMask/utils/pull/102)) ### Fixed - Fix JSON validation security issue ([#103](https://github.com/MetaMask/utils/pull/103)) - This adds a new function `getSafeJson` which validates and returns sanitized JSON. ## [5.0.2] ### Changed - The `Keyring` exposes a new optional method `init` ([#99](https://github.com/MetaMask/utils/pull/99)) ### Fixed - Bump `@ethereumjs/tx` to `4.1.2` to address runtime compatibility issues ([#100](https://github.com/MetaMask/utils/pull/100)) ## [5.0.1] ### Fixed - Keep original type when using `hasProperty` if defined ([#94](https://github.com/MetaMask/utils/pull/94)) ## [5.0.0] ### Changed - **BREAKING:** Update `Keyring` type ([#89](https://github.com/MetaMask/utils/pull/89)) - The `Keyring` class now uses the data types `TypedTransaction` and `TxData` from `@ethereumjs/tx` (`v4.1.1`). - The `Keyring` now exposes a new optional method called `generateRandomMnemonic`. ## [4.0.0] ### Changed - Export new modules (`keyring`, `transaction-types`, and `encryption-types`) ([#86](https://github.com/MetaMask/utils/pull/86)) - **BREAKING:** Improve JSON validation ([#85](https://github.com/MetaMask/utils/pull/85)) - Fixes edge cases in our JSON validation logic. - The previous function used for JSON validation (`validateJsonAndGetSize`) was removed. - The `isValidJson` function now uses the new JSON validation logic. - To get the size of a JSON value, you can use the `getJsonSize` function. ## [3.6.0] ### Added - Add `Keyring` types ([#74](https://github.com/MetaMask/utils/pull/74)) - New data types added. These are `Keyring`, `Transaction` (`LegacyTransaction`, `EIP2930Transaction`, `EIP1559Transaction`), `SignedTransaction`, `Signature`, and `Eip1024EncryptedData`. ## [3.5.0] ### Changed - Improve the `hasProperty` function ([#79](https://github.com/MetaMask/utils/pull/79), [#80](https://github.com/MetaMask/utils/pull/80)) - This function now acts as a type guard, informing TypeScript that the property exists. - The function is now compatible with more types of objects, such as Errors and class instances. ## [3.4.1] ### Fixed - Bump `superstruct` to `^1.0.3` ([#71](https://github.com/MetaMask/utils/pull/71)) ## [3.4.0] ### Added - Add types and utility functions for validating versions and checksums ([#67](https://github.com/MetaMask/utils/pull/67), [#69](https://github.com/MetaMask/utils/pull/69)) ### Fixed - JSON-RPC types now have a default generic `Params` value ([#54](https://github.com/MetaMask/utils/pull/54)) ## [3.3.1] ### Fixed - JSON-RPC parameters are now properly cast to Json upon validation ([#51](https://github.com/MetaMask/utils/pull/51)) ## [3.3.0] ### Added - Add more assertion utils ([#49](https://github.com/MetaMask/utils/pull/49)) - Add JSON-RPC error validation functions ([#46](https://github.com/MetaMask/utils/pull/46)) - Add convenience function for creating a `DataView` ([#45](https://github.com/MetaMask/utils/pull/45)) ### Fixed - Update JSON validation logic ([#47](https://github.com/MetaMask/utils/pull/47)) - Validation would previously allow for `undefined` values, which is not a standard JSON type ## [3.2.0] ### Added - Add `PendingJsonRpcResponse` type ([#43](https://github.com/MetaMask/utils/pull/43)) - Add utils for converting between numbers and hex ([#41](https://github.com/MetaMask/utils/pull/41)) - Add coercion utils ([#38](https://github.com/MetaMask/utils/pull/38)) ## [3.1.0] ### Added - Add assertion utils ([#33](https://github.com/MetaMask/utils/pull/33)) - Add util functions for encoding and decoding bytes ([#34](https://github.com/MetaMask/utils/pull/34)) ### Fixed - Make JSON-RPC error `data` property optional ([#31](https://github.com/MetaMask/utils/pull/31)) - Don't include test files in dist folder ([#35](https://github.com/MetaMask/utils/pull/35)) - Fix typo in README ([#28](https://github.com/MetaMask/utils/pull/28)) ## [3.0.3] ### Fixed - Allow omitting JSON-RPC params when params can be undefined ([#29](https://github.com/MetaMask/utils/pull/29)) ## [3.0.2] ### Fixed - Bump `superstruct` to ^0.16.5 ([#26](https://github.com/MetaMask/utils/pull/26)) - `superstruct`s 0.16.1 through 0.16.4 were not compatible with Node 14; this restores that compatibility. ## [3.0.1] ### Fixed - Promote `@types/debug` from development dependencies to production dependencies ([#23](https://github.com/MetaMask/utils/pull/23)) ## [3.0.0] ### Added - Add logging functions ([#20](https://github.com/MetaMask/utils/pull/20)) - Add frozen collections (implemented in [#5](https://github.com/MetaMask/utils/pull/5) but exported in [#19](https://github.com/MetaMask/utils/pull/19)) ### Changed - **BREAKING:** Improve types and type validation ([#19](https://github.com/MetaMask/utils/pull/19)) - Various type changes have been made that might be breaking: - The `JsonRpcRequest` and `JsonRpcNotification` types now include a generic constraint requiring that the `Params` type extends the `JsonRpcParams` type. - The `JsonRpcSuccess` and `JsonRpcResponse` types now include a generic contraint for the `Result` type, requiring that it extends the `Json` type. - Various validation functions now accept `unknown` parameters rather than specific types. This should not be breaking except that it may affect type inference for the parameters passed in. - New JSON-related functions have been added: - `assertIsJsonRpcResponse` - `isJsonRpcResponse` - `InferWithParams` - `JsonRpcParams` - New JSON Struct types have been added: - `JsonRpcErrorStruct` - `JsonRpcFailureStruct` - `JsonRpcIdStruct` - `JsonRpcParamsStruct` - `JsonRpcRequestStruct` - `JsonRpcResponseStruct` - `JsonRpcSuccessStruct` - `JsonRpcVersionStruct` - `JsonStruct` ## [2.1.0] ### Added - Add JSON storage validation and limit utilities ([#14](https://github.com/MetaMask/utils/pull/14)) - Adds a new function `validateJsonAndGetSize`. ## [2.0.0] ### Added - Add more JSON utils ([#8](https://github.com/MetaMask/utils/pull/8)) ### Changed - **BREAKING:** Refactor and expand time utils ([#9](https://github.com/MetaMask/utils/pull/9)) - Adds a new function, `inMilliseconds`, and moves the time constants into a TypeScript `enum`. ## [1.0.0] ### Added - Initial release [Unreleased]: https://github.com/MetaMask/utils/compare/v11.4.0...HEAD [11.4.0]: https://github.com/MetaMask/utils/compare/v11.3.0...v11.4.0 [11.3.0]: https://github.com/MetaMask/utils/compare/v11.2.0...v11.3.0 [11.2.0]: https://github.com/MetaMask/utils/compare/v11.1.0...v11.2.0 [11.1.0]: https://github.com/MetaMask/utils/compare/v11.0.1...v11.1.0 [11.0.1]: https://github.com/MetaMask/utils/compare/v11.0.0...v11.0.1 [11.0.0]: https://github.com/MetaMask/utils/compare/v10.0.1...v11.0.0 [10.0.1]: https://github.com/MetaMask/utils/compare/v10.0.0...v10.0.1 [10.0.0]: https://github.com/MetaMask/utils/compare/v9.3.0...v10.0.0 [9.3.0]: https://github.com/MetaMask/utils/compare/v9.2.1...v9.3.0 [9.2.1]: https://github.com/MetaMask/utils/compare/v9.2.0...v9.2.1 [9.2.0]: https://github.com/MetaMask/utils/compare/v9.1.0...v9.2.0 [9.1.0]: https://github.com/MetaMask/utils/compare/v9.0.0...v9.1.0 [9.0.0]: https://github.com/MetaMask/utils/compare/v8.5.0...v9.0.0 [8.5.0]: https://github.com/MetaMask/utils/compare/v8.4.0...v8.5.0 [8.4.0]: https://github.com/MetaMask/utils/compare/v8.3.0...v8.4.0 [8.3.0]: https://github.com/MetaMask/utils/compare/v8.2.1...v8.3.0 [8.2.1]: https://github.com/MetaMask/utils/compare/v8.2.0...v8.2.1 [8.2.0]: https://github.com/MetaMask/utils/compare/v8.1.0...v8.2.0 [8.1.0]: https://github.com/MetaMask/utils/compare/v8.0.0...v8.1.0 [8.0.0]: https://github.com/MetaMask/utils/compare/v7.1.0...v8.0.0 [7.1.0]: https://github.com/MetaMask/utils/compare/v7.0.0...v7.1.0 [7.0.0]: https://github.com/MetaMask/utils/compare/v6.2.0...v7.0.0 [6.2.0]: https://github.com/MetaMask/utils/compare/v6.1.0...v6.2.0 [6.1.0]: https://github.com/MetaMask/utils/compare/v6.0.1...v6.1.0 [6.0.1]: https://github.com/MetaMask/utils/compare/v6.0.0...v6.0.1 [6.0.0]: https://github.com/MetaMask/utils/compare/v5.0.2...v6.0.0 [5.0.2]: https://github.com/MetaMask/utils/compare/v5.0.1...v5.0.2 [5.0.1]: https://github.com/MetaMask/utils/compare/v5.0.0...v5.0.1 [5.0.0]: https://github.com/MetaMask/utils/compare/v4.0.0...v5.0.0 [4.0.0]: https://github.com/MetaMask/utils/compare/v3.6.0...v4.0.0 [3.6.0]: https://github.com/MetaMask/utils/compare/v3.5.0...v3.6.0 [3.5.0]: https://github.com/MetaMask/utils/compare/v3.4.1...v3.5.0 [3.4.1]: https://github.com/MetaMask/utils/compare/v3.4.0...v3.4.1 [3.4.0]: https://github.com/MetaMask/utils/compare/v3.3.1...v3.4.0 [3.3.1]: https://github.com/MetaMask/utils/compare/v3.3.0...v3.3.1 [3.3.0]: https://github.com/MetaMask/utils/compare/v3.2.0...v3.3.0 [3.2.0]: https://github.com/MetaMask/utils/compare/v3.1.0...v3.2.0 [3.1.0]: https://github.com/MetaMask/utils/compare/v3.0.3...v3.1.0 [3.0.3]: https://github.com/MetaMask/utils/compare/v3.0.2...v3.0.3 [3.0.2]: https://github.com/MetaMask/utils/compare/v3.0.1...v3.0.2 [3.0.1]: https://github.com/MetaMask/utils/compare/v3.0.0...v3.0.1 [3.0.0]: https://github.com/MetaMask/utils/compare/v2.1.0...v3.0.0 [2.1.0]: https://github.com/MetaMask/utils/compare/v2.0.0...v2.1.0 [2.0.0]: https://github.com/MetaMask/utils/compare/v1.0.0...v2.0.0 [1.0.0]: https://github.com/MetaMask/utils/releases/tag/v1.0.0