From 35eb49bce3978fa93cef611c623332099f8bbcdb Mon Sep 17 00:00:00 2001 From: Timo Glastra Date: Fri, 21 Nov 2025 18:55:39 +0545 Subject: [PATCH 1/7] chore: update dependencies, add vite, support node 24 Signed-off-by: Timo Glastra --- .github/workflows/ci.yml | 4 +- .github/workflows/release.yml | 4 +- README.md | 2 +- lerna.json | 10 - package.json | 8 +- packages/askar-nodejs/README.md | 4 +- packages/askar-nodejs/package.json | 16 +- packages/askar-nodejs/src/ffi/alloc.ts | 2 +- packages/askar-nodejs/src/ffi/callback.ts | 4 +- packages/askar-nodejs/src/ffi/conversion.ts | 6 +- packages/askar-nodejs/src/ffi/primitives.ts | 2 +- packages/askar-nodejs/src/ffi/serialize.ts | 2 +- packages/askar-nodejs/src/ffi/structures.ts | 6 +- packages/askar-nodejs/src/library/bindings.ts | 2 +- packages/askar-nodejs/src/library/register.ts | 10 +- packages/askar-nodejs/tests/cryptoBox.test.ts | 5 +- packages/askar-nodejs/tests/error.test.ts | 6 +- .../tests/indy_wallet_sqlite_upgraded.db | Bin 106496 -> 106496 bytes packages/askar-nodejs/tests/joseEcdh.test.ts | 6 +- packages/askar-nodejs/tests/kdf.test.ts | 5 +- packages/askar-nodejs/tests/keys.test.ts | 7 +- packages/askar-nodejs/tests/migration.test.ts | 9 +- packages/askar-nodejs/tests/setup.ts | 3 + packages/askar-nodejs/tests/store.test.ts | 6 +- .../askar-nodejs/tests/utils/initialize.ts | 5 - packages/askar-shared/package.json | 2 +- pnpm-lock.yaml | 1122 +++++++++++++++-- pnpm-workspace.yaml | 2 +- vitest.config.ts | 10 + 29 files changed, 1080 insertions(+), 190 deletions(-) delete mode 100644 lerna.json create mode 100644 packages/askar-nodejs/tests/setup.ts create mode 100644 vitest.config.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fd1cdfda..110f99a3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ jobs: - name: Setup NodeJS uses: actions/setup-node@v5 with: - node-version: 22 + node-version: 24 cache: "pnpm" - name: Install dependencies @@ -43,7 +43,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18, 20, 22] + node-version: [20, 22, 24] steps: - name: Checkout Repo diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7ad195fc..0c0bbbac 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ jobs: - name: Setup NodeJS uses: actions/setup-node@v5 with: - node-version: 22 + node-version: 24 cache: "pnpm" - name: Install Dependencies @@ -62,7 +62,7 @@ jobs: - name: Setup NodeJS uses: actions/setup-node@v5 with: - node-version: 20 + node-version: 24 cache: "pnpm" - name: Install Dependencies diff --git a/README.md b/README.md index 68a83613..c2b51511 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Wrapper for Node.js and React Native around [https://github.com/openwallet-found ## Requirements -This library requires and has been tested with Node.js version `18.x`, `20.x` and `22.x`, or React Native version `0.75.x` and `0.76.x`. Newer versions might also work, but they have not been tested. +This library requires and has been tested with Node.js version `20.x`, `22.x`, and `24.x` or React Native version `0.75.x` and `0.76.x`. Newer versions might also work, but they have not been tested. ## Setup diff --git a/lerna.json b/lerna.json deleted file mode 100644 index fb0746e7..00000000 --- a/lerna.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "node_modules/lerna/schemas/lerna-schema.json", - "version": "0.3.1", - "npmClient": "pnpm", - "command": { - "version": { - "allowBranch": "main" - } - } -} diff --git a/package.json b/package.json index 56fd95d4..c4dcc38f 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "url": "https://github.com/openwallet-foundation/askar-wrapper-javascript" }, "engines": { - "node": ">= 18" + "node": ">= 20" }, "scripts": { "style:check": "biome check --unsafe .", @@ -15,7 +15,7 @@ "types:check": "pnpm -r types:check", "build": "pnpm -r build", "clean": "pnpm -r clean", - "test": "node --import tsx --test packages/**/tests/*.test.ts", + "test": "vitest", "release": "pnpm build && pnpm changeset publish --no-git-tag", "changeset-version": "pnpm changeset version && pnpm style:fix" }, @@ -25,7 +25,9 @@ "@types/node": "catalog:", "rimraf": "catalog:", "tsx": "catalog:", - "typescript": "catalog:" + "typescript": "catalog:", + "vite-tsconfig-paths": "^5.1.4", + "vitest": "^4.0.12" }, "packageManager": "pnpm@9.15.3+sha256.c1da43727ccbc1ed42aff4fd6bdb4b1e91e65a818e6efff5b240fbf070ba4eaf" } diff --git a/packages/askar-nodejs/README.md b/packages/askar-nodejs/README.md index d96b415c..0cb112d4 100644 --- a/packages/askar-nodejs/README.md +++ b/packages/askar-nodejs/README.md @@ -2,11 +2,11 @@ Wrapper for Node.Js around Askar -See the [project README](https://github.com/openwallet-foundation/askar-wrapper-javascript) for version compatability between Askar and this JavaScript Wrapper. +See the [project README](https://github.com/openwallet-foundation/askar-wrapper-javascript) for version compatibility between Askar and this JavaScript Wrapper. ## Requirements -This library requires and has been tested with Node.js version `18.x`, `20.x` and `22.x`. Newer versions might also work, but they have not been tested. +This library requires and has been tested with Node.js version `20.x`, `22.x`, and `24.x`. Newer versions might also work, but they have not been tested. ## Installation diff --git a/packages/askar-nodejs/package.json b/packages/askar-nodejs/package.json index 440bbcdb..091bd8a7 100644 --- a/packages/askar-nodejs/package.json +++ b/packages/askar-nodejs/package.json @@ -24,16 +24,18 @@ "install": "node scripts/install.js" }, "dependencies": { - "@2060.io/ffi-napi": "^4.0.9", - "@2060.io/ref-napi": "^3.0.6", + "@napi-ffi/ffi-napi": "^4.0.3", + "@napi-ffi/ref-napi": "^3.0.5", "@openwallet-foundation/askar-shared": "workspace:*", - "ref-array-di": "^1.2.2", - "ref-struct-di": "^1.1.1" + "@napi-ffi/ref-array-di": "^1.2.2", + "@napi-ffi/ref-struct-di": "^1.1.1" }, "devDependencies": { "@types/node": "catalog:", - "@types/ref-array-di": "^1.2.3", - "@types/ref-struct-di": "^1.1.6", + "@types/napi-ffi__ref-array-di": "npm:@types/ref-array-di@^1.2.3", + "@types/napi-ffi__ref-struct-di": "npm:@types/ref-struct-di@^1.1.6", + "@types/napi-ffi__ffi-napi": "npm:@types/ffi-napi@^4.0.10", + "@types/napi-ffi__ref-napi": "npm:@types/ref-napi@^3.0.12", "typescript": "catalog:" }, "binary": { @@ -42,6 +44,6 @@ "packageName": "library-{platform}-{arch}.tar.gz" }, "engines": { - "node": ">= 18" + "node": ">= 20" } } diff --git a/packages/askar-nodejs/src/ffi/alloc.ts b/packages/askar-nodejs/src/ffi/alloc.ts index 2a031a34..d7d54f59 100644 --- a/packages/askar-nodejs/src/ffi/alloc.ts +++ b/packages/askar-nodejs/src/ffi/alloc.ts @@ -1,4 +1,4 @@ -import { alloc } from '@2060.io/ref-napi' +import { alloc } from '@napi-ffi/ref-napi' import { FFI_INT8, FFI_INT32, FFI_POINTER, FFI_STRING } from './primitives' import { AeadParamsStruct, EncryptedBufferStruct, SecretBufferStruct } from './structures' diff --git a/packages/askar-nodejs/src/ffi/callback.ts b/packages/askar-nodejs/src/ffi/callback.ts index 2e391b24..b87e46b7 100644 --- a/packages/askar-nodejs/src/ffi/callback.ts +++ b/packages/askar-nodejs/src/ffi/callback.ts @@ -1,5 +1,5 @@ -import { Callback } from '@2060.io/ffi-napi' -import { refType } from '@2060.io/ref-napi' +import { Callback } from '@napi-ffi/ffi-napi' +import { refType } from '@napi-ffi/ref-napi' import { allocateCallbackBuffer } from './alloc' import { FFI_CALLBACK_ID, FFI_ERROR_CODE, FFI_INT32, FFI_STRING, FFI_VOID } from './primitives' diff --git a/packages/askar-nodejs/src/ffi/conversion.ts b/packages/askar-nodejs/src/ffi/conversion.ts index 1626a2c8..625da9ae 100644 --- a/packages/askar-nodejs/src/ffi/conversion.ts +++ b/packages/askar-nodejs/src/ffi/conversion.ts @@ -1,7 +1,7 @@ -import type { Pointer } from '@2060.io/ref-napi' -import { reinterpret } from '@2060.io/ref-napi' +import type { TypedArray } from '@napi-ffi/ref-array-di' +import type { Pointer } from '@napi-ffi/ref-napi' +import { reinterpret } from '@napi-ffi/ref-napi' import { EncryptedBuffer } from '@openwallet-foundation/askar-shared' -import type { TypedArray } from 'ref-array-di' import type { ByteBufferType, EncryptedBufferType } from './structures' import { ByteBufferStruct } from './structures' diff --git a/packages/askar-nodejs/src/ffi/primitives.ts b/packages/askar-nodejs/src/ffi/primitives.ts index 58a0c484..6e3de9e2 100644 --- a/packages/askar-nodejs/src/ffi/primitives.ts +++ b/packages/askar-nodejs/src/ffi/primitives.ts @@ -1,4 +1,4 @@ -import { refType } from '@2060.io/ref-napi' +import { refType } from '@napi-ffi/ref-napi' // Primitives diff --git a/packages/askar-nodejs/src/ffi/serialize.ts b/packages/askar-nodejs/src/ffi/serialize.ts index 6b9ef0d1..3d68afcc 100644 --- a/packages/askar-nodejs/src/ffi/serialize.ts +++ b/packages/askar-nodejs/src/ffi/serialize.ts @@ -1,4 +1,4 @@ -import { NULL } from '@2060.io/ref-napi' +import { NULL } from '@napi-ffi/ref-napi' import { ArcHandle, Jwk, Key, ScanHandle, SessionHandle, StoreHandle } from '@openwallet-foundation/askar-shared' import { uint8arrayToByteBufferStruct } from './conversion' import type { ByteBufferStruct, SecretBufferStruct } from './structures' diff --git a/packages/askar-nodejs/src/ffi/structures.ts b/packages/askar-nodejs/src/ffi/structures.ts index 9fd21094..f1c2f7e6 100644 --- a/packages/askar-nodejs/src/ffi/structures.ts +++ b/packages/askar-nodejs/src/ffi/structures.ts @@ -1,6 +1,6 @@ -import { default as ref, refType } from '@2060.io/ref-napi' -import refArray from 'ref-array-di' -import refStruct from 'ref-struct-di' +import refArray from '@napi-ffi/ref-array-di' +import { default as ref, refType } from '@napi-ffi/ref-napi' +import refStruct from '@napi-ffi/ref-struct-di' import { FFI_INT32, FFI_INT64, FFI_UINT8 } from './primitives' const CStruct = refStruct(ref) diff --git a/packages/askar-nodejs/src/library/bindings.ts b/packages/askar-nodejs/src/library/bindings.ts index 0634ad39..6fe84eb8 100644 --- a/packages/askar-nodejs/src/library/bindings.ts +++ b/packages/askar-nodejs/src/library/bindings.ts @@ -1,4 +1,4 @@ -import { refType } from '@2060.io/ref-napi' +import { refType } from '@napi-ffi/ref-napi' import { AeadParamsStructPtr, ByteBufferStruct, diff --git a/packages/askar-nodejs/src/library/register.ts b/packages/askar-nodejs/src/library/register.ts index d2c24a53..7c978bd3 100644 --- a/packages/askar-nodejs/src/library/register.ts +++ b/packages/askar-nodejs/src/library/register.ts @@ -1,7 +1,7 @@ import fs from 'node:fs' import os from 'node:os' import path from 'node:path' -import { Library } from '@2060.io/ffi-napi' +import { Library } from '@napi-ffi/ffi-napi' import type { NativeMethods } from './NativeBindingInterface' import { nativeBindings } from './bindings' @@ -50,17 +50,17 @@ const getLibrary = () => { if (pathFromEnvironment) platformPaths.unshift(pathFromEnvironment) // Create the path + file - const libaries = platformPaths.map((p) => + const libraries = platformPaths.map((p) => path.join(p, `${extensions[platform].prefix ?? ''}${LIBNAME}${extensions[platform].extension}`) ) // Gaurd so we quit if there is no valid path for the library - if (!libaries.some(doesPathExist)) - throw new Error(`Could not find ${LIBNAME} with these paths: ${libaries.join(' ')}`) + if (!libraries.some((libraryPath) => doesPathExist(libraryPath))) + throw new Error(`Could not find ${LIBNAME} with these paths: ${libraries.join(' ')}`) // Get the first valid library // Casting here as a string because there is a guard of none of the paths - const validLibraryPath = libaries.find((l) => doesPathExist(l)) as string + const validLibraryPath = libraries.find((l) => doesPathExist(l)) as string // TODO fix the typing conversion // eslint-disable-next-line @typescript-eslint/ban-ts-comment diff --git a/packages/askar-nodejs/tests/cryptoBox.test.ts b/packages/askar-nodejs/tests/cryptoBox.test.ts index a22e0411..04c752c1 100644 --- a/packages/askar-nodejs/tests/cryptoBox.test.ts +++ b/packages/askar-nodejs/tests/cryptoBox.test.ts @@ -1,11 +1,8 @@ import { deepStrictEqual } from 'node:assert' -import { before, describe, test } from 'node:test' import { CryptoBox, Key, KeyAlgorithm } from '@openwallet-foundation/askar-shared' -import { setup } from './utils/initialize' +import { describe, test } from 'vitest' describe('CryptoBox', () => { - before(setup) - test('seal', () => { const x25519Key = Key.generate(KeyAlgorithm.X25519) diff --git a/packages/askar-nodejs/tests/error.test.ts b/packages/askar-nodejs/tests/error.test.ts index 6110a172..9881d137 100644 --- a/packages/askar-nodejs/tests/error.test.ts +++ b/packages/askar-nodejs/tests/error.test.ts @@ -1,11 +1,9 @@ import { doesNotReject, doesNotThrow, rejects, throws } from 'node:assert' -import { before, describe, test } from 'node:test' import { AskarError, KeyAlgorithm, askar } from '@openwallet-foundation/askar-shared' -import { setup, setupWallet } from './utils' +import { describe, test } from 'vitest' +import { setupWallet } from './utils' describe('Error', () => { - before(setup) - test('set error code to 0 after correct call', () => { doesNotThrow(() => askar.keyGenerate({ diff --git a/packages/askar-nodejs/tests/indy_wallet_sqlite_upgraded.db b/packages/askar-nodejs/tests/indy_wallet_sqlite_upgraded.db index 070a5441c8886651b9cb68a58c01925cdc928dd7..bb329b0e1738eb837821a58b952659515c0fd636 100644 GIT binary patch delta 281 zcmV+!0p|XIzy^T827t5y`3`?#fH`bOll0+XOLig(9c_yIaUkg?MAlL~qF#Qd5+4Dj zc5Z;?GbUSU4C~!7_R?i7mwf4Jr`I_Da6h9xN*oEGuybFLRM5-d*>E|AQ1ooa?(ZQ2 zcRE+5gBUdtnq9WAPKWn%?A;h#T!He!x%{^R0YVmtJ$2F>5@9j<*Li>Gz`jx`Bqy=Q zn-r{UqOFp+2oH9`69aUNi^4KWA%AFnS_wZgqNyR5bue}$LM-0kp-u1bc*lG)GuH*! z``=n0jfuVGRofuZUw~J1>+(a-Tq+KJ!DQ%Pnq5v?io!ub+}3lTvcHAOPH fMxD`e;oa-@(UD{4UxEog>w@Xyf!arYrVs&;(BOuu delta 281 zcmV+!0p|XIzy^T827t5y`3`@OGqd6}(_8sbTvT3+1jwiY-4N-sw2sEu4Hp^FJf&;w z<9ARGdxoUG=|rq0U)7*?fHw{uxK_+_OruMKohGx|PN4Yp!o;b?J|+ZWmk~aP%@Nae z@(n#k;ytu?N5KDw9%T-((0P>v#(3NTEPt$pBC2Xxl^&~aGy#>2>PLSPY5BpIZy0Lb zTl^#q@2+jT0bj`~5aC}V@n}Aif7-!D@HC8m;A2TXq>mZy-5ez#8DKhneUw3tjLk>~ zFjg{5;ih$`J4Ec6QPyKr9HM;?9=!)9W)iI8os4s=rJG3D?J^eE!qF;iR=GKp`7F_f f_rXhe0e~U9UB-PkYMKd=hSc8dI)tajrVs&;o4$t! diff --git a/packages/askar-nodejs/tests/joseEcdh.test.ts b/packages/askar-nodejs/tests/joseEcdh.test.ts index 342b8fa2..6e1a214f 100644 --- a/packages/askar-nodejs/tests/joseEcdh.test.ts +++ b/packages/askar-nodejs/tests/joseEcdh.test.ts @@ -1,11 +1,9 @@ import { deepStrictEqual, strictEqual } from 'node:assert' -import { before, describe, test } from 'node:test' import { Ecdh1PU, EcdhEs, Jwk, Key, KeyAlgorithm } from '@openwallet-foundation/askar-shared' -import { base64url, setup } from './utils' +import { describe, test } from 'vitest' +import { base64url } from './utils' describe('jose ecdh', () => { - before(setup) - test('ecdh es direct', () => { const bobKey = Key.generate(KeyAlgorithm.EcSecp256r1) const bobJwk = bobKey.jwkPublic diff --git a/packages/askar-nodejs/tests/kdf.test.ts b/packages/askar-nodejs/tests/kdf.test.ts index 2e79367d..8faeaa85 100644 --- a/packages/askar-nodejs/tests/kdf.test.ts +++ b/packages/askar-nodejs/tests/kdf.test.ts @@ -1,11 +1,8 @@ import { ok } from 'node:assert' -import { before, describe, test } from 'node:test' import { Argon2, Argon2Parameters } from '@openwallet-foundation/askar-shared' -import { setup } from './utils' +import { describe, test } from 'vitest' describe('Argon2', () => { - before(setup) - test('derive password', () => { const password = 'my password' const salt = 'long enough salt' diff --git a/packages/askar-nodejs/tests/keys.test.ts b/packages/askar-nodejs/tests/keys.test.ts index 27a420c8..2aef09dd 100644 --- a/packages/askar-nodejs/tests/keys.test.ts +++ b/packages/askar-nodejs/tests/keys.test.ts @@ -1,12 +1,9 @@ import { deepStrictEqual, ok, strictEqual } from 'node:assert' -import { before, describe, test } from 'node:test' -import { Jwk, Key, KeyAlgorithm, KeyMethod } from '@openwallet-foundation/askar-shared' +import { Jwk, Key, KeyAlgorithm } from '@openwallet-foundation/askar-shared' +import { describe, test } from 'vitest' import { askarNodeJS } from '../src' -import { setup } from './utils' describe('keys', () => { - before(setup) - test('supported backends', () => { const backends = askarNodeJS.keyGetSupportedBackends() diff --git a/packages/askar-nodejs/tests/migration.test.ts b/packages/askar-nodejs/tests/migration.test.ts index 388c365b..1394f3a7 100644 --- a/packages/askar-nodejs/tests/migration.test.ts +++ b/packages/askar-nodejs/tests/migration.test.ts @@ -1,22 +1,19 @@ import { doesNotReject, rejects } from 'node:assert' import fs from 'node:fs' import path from 'node:path' -import { before, beforeEach, describe, test } from 'node:test' -import { AskarError, Migration } from '@openwallet-foundation/askar-shared' -import { setup } from './utils' +import { Migration } from '@openwallet-foundation/askar-shared' +import { beforeEach, describe, test } from 'vitest' const DB_TEMPLATE_PATH = path.join(__dirname, 'indy_wallet_sqlite.db') const DB_UPGRADE_PATH = path.join(__dirname, 'indy_wallet_sqlite_upgraded.db') describe('migration', () => { - before(setup) - beforeEach(() => { const tplPaths = [DB_TEMPLATE_PATH, `${DB_TEMPLATE_PATH}-shm`, `${DB_TEMPLATE_PATH}-wal`] const updPaths = [DB_UPGRADE_PATH, `${DB_UPGRADE_PATH}-shm`, `${DB_UPGRADE_PATH}-wal`] - for (let i = 0; i <= 3; i++) { + for (let i = 0; i < 3; i++) { const tplPath = tplPaths[i] const updPath = updPaths[i] diff --git a/packages/askar-nodejs/tests/setup.ts b/packages/askar-nodejs/tests/setup.ts new file mode 100644 index 00000000..9be6942a --- /dev/null +++ b/packages/askar-nodejs/tests/setup.ts @@ -0,0 +1,3 @@ +// this registers askar +import { askar } from '@openwallet-foundation/askar-nodejs' +askar.setDefaultLogger() diff --git a/packages/askar-nodejs/tests/store.test.ts b/packages/askar-nodejs/tests/store.test.ts index 86b58498..adf20500 100644 --- a/packages/askar-nodejs/tests/store.test.ts +++ b/packages/askar-nodejs/tests/store.test.ts @@ -1,14 +1,12 @@ import { deepStrictEqual, doesNotReject, ok, rejects, strictEqual } from 'node:assert' import { promises } from 'node:fs' -import { afterEach, before, beforeEach, describe, test } from 'node:test' import { AskarError, KdfMethod, Key, KeyAlgorithm, Store, StoreKeyMethod } from '@openwallet-foundation/askar-shared' -import { firstEntry, getRawKey, secondEntry, setup, setupWallet, testStoreUri } from './utils' +import { afterEach, beforeEach, describe, test } from 'vitest' +import { firstEntry, getRawKey, secondEntry, setupWallet, testStoreUri } from './utils' describe('Store and Session', () => { let store: Store - before(setup) - beforeEach(async () => { store = await setupWallet() }) diff --git a/packages/askar-nodejs/tests/utils/initialize.ts b/packages/askar-nodejs/tests/utils/initialize.ts index f89ddfd3..7be7cf76 100644 --- a/packages/askar-nodejs/tests/utils/initialize.ts +++ b/packages/askar-nodejs/tests/utils/initialize.ts @@ -15,9 +15,4 @@ export const setupWallet = async () => { }) } -export const setup = () => { - registerAskar({ askar: new NodeJSAskar() }) - askar.setDefaultLogger() -} - export const base64url = (str: string) => Buffer.from(str).toString('base64url') diff --git a/packages/askar-shared/package.json b/packages/askar-shared/package.json index 1ebd0a9a..a2abc1ef 100644 --- a/packages/askar-shared/package.json +++ b/packages/askar-shared/package.json @@ -25,7 +25,7 @@ }, "dependencies": { "buffer": "^6.0.3", - "tar": "^7.4.3" + "tar": "^7.5.2" }, "devDependencies": { "typescript": "catalog:" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b0f812f0..8d6b53f7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,8 +13,8 @@ catalogs: specifier: ^2.27.12 version: 2.27.12 '@types/node': - specifier: ^20.12.11 - version: 20.17.16 + specifier: ^24.10.1 + version: 24.10.1 rimraf: specifier: ^5.0.5 version: 5.0.10 @@ -37,7 +37,7 @@ importers: version: 2.27.12 '@types/node': specifier: 'catalog:' - version: 20.17.16 + version: 24.10.1 rimraf: specifier: 'catalog:' version: 5.0.10 @@ -47,6 +47,12 @@ importers: typescript: specifier: 'catalog:' version: 5.4.5 + vite-tsconfig-paths: + specifier: ^5.1.4 + version: 5.1.4(typescript@5.4.5)(vite@7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2)) + vitest: + specifier: ^4.0.12 + version: 4.0.12(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2) examples/askar-react-native-example: dependencies: @@ -81,31 +87,37 @@ importers: packages/askar-nodejs: dependencies: - '@2060.io/ffi-napi': - specifier: ^4.0.9 - version: 4.0.9 - '@2060.io/ref-napi': - specifier: ^3.0.6 - version: 3.0.6 - '@openwallet-foundation/askar-shared': - specifier: workspace:* - version: link:../askar-shared - ref-array-di: + '@napi-ffi/ffi-napi': + specifier: ^4.0.3 + version: 4.0.3 + '@napi-ffi/ref-array-di': specifier: ^1.2.2 version: 1.2.2 - ref-struct-di: + '@napi-ffi/ref-napi': + specifier: ^3.0.5 + version: 3.0.5 + '@napi-ffi/ref-struct-di': specifier: ^1.1.1 version: 1.1.1 + '@openwallet-foundation/askar-shared': + specifier: workspace:* + version: link:../askar-shared devDependencies: + '@types/napi-ffi__ffi-napi': + specifier: npm:@types/ffi-napi@^4.0.10 + version: '@types/ffi-napi@4.0.10' + '@types/napi-ffi__ref-array-di': + specifier: npm:@types/ref-array-di@^1.2.3 + version: '@types/ref-array-di@1.2.8' + '@types/napi-ffi__ref-napi': + specifier: npm:@types/ref-napi@^3.0.12 + version: '@types/ref-napi@3.0.12' + '@types/napi-ffi__ref-struct-di': + specifier: npm:@types/ref-struct-di@^1.1.6 + version: '@types/ref-struct-di@1.1.12' '@types/node': specifier: 'catalog:' - version: 20.17.16 - '@types/ref-array-di': - specifier: ^1.2.3 - version: 1.2.8 - '@types/ref-struct-di': - specifier: ^1.1.6 - version: 1.1.12 + version: 24.10.1 typescript: specifier: 'catalog:' version: 5.4.5 @@ -132,8 +144,8 @@ importers: specifier: ^6.0.3 version: 6.0.3 tar: - specifier: ^7.4.3 - version: 7.4.3 + specifier: ^7.5.2 + version: 7.5.2 devDependencies: typescript: specifier: 'catalog:' @@ -149,14 +161,6 @@ packages: graphql: optional: true - '@2060.io/ffi-napi@4.0.9': - resolution: {integrity: sha512-JfVREbtkJhMXSUpya3JCzDumdjeZDCKv4PemiWK+pts5CYgdoMidxeySVlFeF5pHqbBpox4I0Be7sDwAq4N0VQ==} - engines: {node: '>=18'} - - '@2060.io/ref-napi@3.0.6': - resolution: {integrity: sha512-8VAIXLdKL85E85jRYpPcZqATBL6fGnC/XjBGNeSgRSMJtrAMSmfRksqIq5AmuZkA2eeJXMWCiN6UQOUdozcymg==} - engines: {node: '>= 18.0'} - '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -986,144 +990,300 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.23.1': resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.23.1': resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.23.1': resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.23.1': resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.23.1': resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.23.1': resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.23.1': resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.23.1': resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.23.1': resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.23.1': resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.23.1': resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.23.1': resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.23.1': resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.23.1': resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.23.1': resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.23.1': resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.23.1': resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.23.1': resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.23.1': resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/sunos-x64@0.23.1': resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.23.1': resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.23.1': resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.23.1': resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} engines: {node: '>=18'} cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@expo/bunyan@4.0.1': resolution: {integrity: sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==} engines: {node: '>=0.10.0'} @@ -1256,6 +1416,9 @@ packages: '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -1265,6 +1428,27 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@napi-ffi/ffi-napi@4.0.3': + resolution: {integrity: sha512-q4oNihranYHab9kxVW3Yh7A5knw/+SCUlgyXY2p0msRDePyIhZldbMkY6hILPbX59kqCf0cIq5OPpjd46z7zhA==} + engines: {node: '>=10'} + + '@napi-ffi/get-symbol-from-current-process-h@1.0.4': + resolution: {integrity: sha512-omxOvN73y1aSxO79IQ3bxkqpEoln9yzsy9btBKJG3Sm8lIUms3I9wM/eySPsWkKOFN2BBpqFxeB8BYJ2Tt8TfQ==} + engines: {node: '>=18.0.0'} + + '@napi-ffi/get-uv-event-loop-napi-h@1.0.6': + resolution: {integrity: sha512-++/FRO2Rog0U2CZpnCMr4yLORiV1h+AmJlXN0IKmZoqEcYiOg33AToh32QPHxakAqcXxEzqRdkGBudVwWTSqvw==} + + '@napi-ffi/ref-array-di@1.2.2': + resolution: {integrity: sha512-efTNFFSxLGeGXLfukzjR79OEM2rQgj13g3j2IQ1kvnm6yUkd9ifPiw8hWtsHTIAJHxNFMwWTVvWXJiew9uvFWw==} + + '@napi-ffi/ref-napi@3.0.5': + resolution: {integrity: sha512-Oxmr7OUyZpEu0m3eEjHuTOPqnDmAPZPAZcLAfhxhKf7a2mQV2/t0DwCMgx+QDpZLBiFZRHy7oba9fvWEXS469w==} + engines: {node: '>= 20.0'} + + '@napi-ffi/ref-struct-di@1.1.1': + resolution: {integrity: sha512-4+QAerLVGUIVOp5C8tNA2MWy+iMEO8/6pT819He8TKsqElbIjZIiGCexhZa4X5mlVTQ8QT8Nb4yQL2mE62lPtg==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1350,6 +1534,116 @@ packages: '@types/react': optional: true + '@rollup/rollup-android-arm-eabi@4.53.3': + resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.53.3': + resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.53.3': + resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.53.3': + resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.53.3': + resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.53.3': + resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.53.3': + resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.53.3': + resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.53.3': + resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.53.3': + resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.53.3': + resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.53.3': + resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.53.3': + resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openharmony-arm64@4.53.3': + resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.53.3': + resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.53.3': + resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.53.3': + resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} + cpu: [x64] + os: [win32] + '@segment/loosely-validate-event@2.0.0': resolution: {integrity: sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==} @@ -1362,6 +1656,9 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -1374,6 +1671,18 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/ffi-napi@4.0.10': + resolution: {integrity: sha512-Q6TimLDxdg+Obp4W9tgzIhSA25THD6AmR8eM+ZB7bbU96xnkpd7PRXwG4az2rKpreuF90IPr/LlQtetmIfQL2g==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -1395,6 +1704,9 @@ packages: '@types/node@20.17.16': resolution: {integrity: sha512-vOTpLduLkZXePLxHiHsBLp98mHGnl8RptV4YAO3HfKO5UHjDvySGbxKtpYfy8Sx5+WKcgc45qNreJJRVM3L6mw==} + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + '@types/prop-types@15.7.14': resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} @@ -1427,6 +1739,35 @@ packages: peerDependencies: '@urql/core': ^5.0.0 + '@vitest/expect@4.0.12': + resolution: {integrity: sha512-is+g0w8V3/ZhRNrRizrJNr8PFQKwYmctWlU4qg8zy5r9aIV5w8IxXLlfbbxJCwSpsVl2PXPTm2/zruqTqz3QSg==} + + '@vitest/mocker@4.0.12': + resolution: {integrity: sha512-GsmA/tD5Ht3RUFoz41mZsMU1AXch3lhmgbTnoSPTdH231g7S3ytNN1aU0bZDSyxWs8WA7KDyMPD5L4q6V6vj9w==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.0.12': + resolution: {integrity: sha512-R7nMAcnienG17MvRN8TPMJiCG8rrZJblV9mhT7oMFdBXvS0x+QD6S1G4DxFusR2E0QIS73f7DqSR1n87rrmE+g==} + + '@vitest/runner@4.0.12': + resolution: {integrity: sha512-hDlCIJWuwlcLumfukPsNfPDOJokTv79hnOlf11V+n7E14rHNPz0Sp/BO6h8sh9qw4/UjZiKyYpVxK2ZNi+3ceQ==} + + '@vitest/snapshot@4.0.12': + resolution: {integrity: sha512-2jz9zAuBDUSbnfyixnyOd1S2YDBrZO23rt1bicAb6MA/ya5rHdKFRikPIDpBj/Dwvh6cbImDmudegnDAkHvmRQ==} + + '@vitest/spy@4.0.12': + resolution: {integrity: sha512-GZjI9PPhiOYNX8Nsyqdw7JQB+u0BptL5fSnXiottAUBHlcMzgADV58A7SLTXXQwcN1yZ6gfd1DH+2bqjuUlCzw==} + + '@vitest/utils@4.0.12': + resolution: {integrity: sha512-DVS/TLkLdvGvj1avRy0LSmKfrcI9MNFvNGN6ECjTUHWJdlcgPDOXhjMis5Dh7rBH62nAmSXnkPbE+DZ5YD75Rw==} + '@xmldom/xmldom@0.7.13': resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==} engines: {node: '>=10.0.0'} @@ -1521,6 +1862,10 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + ast-types@0.15.2: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} engines: {node: '>=4'} @@ -1702,6 +2047,10 @@ packages: caniuse-lite@1.0.30001695: resolution: {integrity: sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==} + chai@6.2.1: + resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} + engines: {node: '>=18'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1882,6 +2231,15 @@ packages: supports-color: optional: true + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -1987,6 +2345,9 @@ packages: error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es5-ext@0.10.64: resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} engines: {node: '>=0.10'} @@ -2003,6 +2364,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -2031,6 +2397,9 @@ packages: engines: {node: '>=4'} hasBin: true + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -2057,6 +2426,10 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + engines: {node: '>=12.0.0'} + expo-asset@11.0.2: resolution: {integrity: sha512-We3Td5WsNsNQyXoheLnuwic6JCOt/pqXqIIyWaZ3z/PeHrA+SwoQdI18MjDhkudLK08tbIVyDSUW8IJHXa04eg==} peerDependencies: @@ -2153,6 +2526,15 @@ packages: fbjs@3.0.5: resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fetch-retry@4.1.1: resolution: {integrity: sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==} @@ -2265,15 +2647,9 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-symbol-from-current-process-h@1.0.2: - resolution: {integrity: sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw==} - get-tsconfig@4.10.0: resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} - get-uv-event-loop-napi-h@1.0.6: - resolution: {integrity: sha512-t5c9VNR84nRoF+eLiz6wFrEp1SE2Acg0wS+Ysa2zF0eROes+LzOfuTaVHxGy8AbS8rq7FHEJzjnCZo1BupwdJg==} - getenv@1.0.0: resolution: {integrity: sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==} engines: {node: '>=6'} @@ -2298,6 +2674,9 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -2700,6 +3079,9 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -2853,8 +3235,8 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - minizlib@3.0.1: - resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} mkdirp@0.5.6: @@ -2866,11 +3248,6 @@ packages: engines: {node: '>=10'} hasBin: true - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -2884,6 +3261,11 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2912,8 +3294,9 @@ packages: node-abort-controller@3.1.1: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} - node-addon-api@3.2.1: - resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + node-addon-api@8.5.0: + resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==} + engines: {node: ^18 || ^20 || >= 21} node-dir@0.1.17: resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} @@ -3103,6 +3486,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -3114,6 +3500,10 @@ packages: resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} engines: {node: '>=10'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -3138,6 +3528,10 @@ packages: resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -3246,12 +3640,6 @@ packages: resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==} engines: {node: '>= 4'} - ref-array-di@1.2.2: - resolution: {integrity: sha512-jhCmhqWa7kvCVrWhR/d7RemkppqPUdxEil1CtTtm7FkZV8LcHHCK3Or9GinUiFP5WY3k0djUkMvhBhx49Jb2iA==} - - ref-struct-di@1.1.1: - resolution: {integrity: sha512-2Xyn/0Qgz89VT+++WP0sTosdm9oeowLP23wRJYhG4BFdMUrLj3jhwHZNEytYNYgtPKLNTP3KJX4HEgBvM1/Y2g==} - regenerate-unicode-properties@10.2.0: resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} engines: {node: '>=4'} @@ -3342,6 +3730,11 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true + rollup@4.53.3: + resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -3423,6 +3816,9 @@ packages: resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -3476,6 +3872,9 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} @@ -3491,6 +3890,9 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + stream-buffers@2.2.0: resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} engines: {node: '>= 0.10.0'} @@ -3574,8 +3976,8 @@ packages: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} - tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + tar@7.5.2: + resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} engines: {node: '>=18'} temp-dir@2.0.0: @@ -3623,6 +4025,20 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + engines: {node: '>=14.0.0'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -3644,6 +4060,16 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + tsconfck@3.1.6: + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -3683,6 +4109,9 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici@6.21.1: resolution: {integrity: sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==} engines: {node: '>=18.17'} @@ -3756,9 +4185,94 @@ packages: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite-tsconfig-paths@5.1.4: + resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} + peerDependencies: + vite: '*' + peerDependenciesMeta: + vite: + optional: true + + vite@7.2.4: + resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.0.12: + resolution: {integrity: sha512-pmW4GCKQ8t5Ko1jYjC3SqOr7TUKN7uHOHB/XGsAIb69eYu6d1ionGSsb5H9chmPf+WeXt0VE7jTXsB1IvWoNbw==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/debug': ^4.1.12 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.12 + '@vitest/browser-preview': 4.0.12 + '@vitest/browser-webdriverio': 4.0.12 + '@vitest/ui': 4.0.12 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} @@ -3799,6 +4313,11 @@ packages: engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + wonka@6.3.4: resolution: {integrity: sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg==} @@ -3909,26 +4428,6 @@ snapshots: '@0no-co/graphql.web@1.0.13': {} - '@2060.io/ffi-napi@4.0.9': - dependencies: - '@2060.io/ref-napi': 3.0.6 - debug: 4.4.0 - get-uv-event-loop-napi-h: 1.0.6 - node-addon-api: 3.2.1 - node-gyp-build: 4.8.4 - ref-struct-di: 1.1.1 - transitivePeerDependencies: - - supports-color - - '@2060.io/ref-napi@3.0.6': - dependencies: - debug: 4.4.0 - get-symbol-from-current-process-h: 1.0.2 - node-addon-api: 3.2.1 - node-gyp-build: 4.8.4 - transitivePeerDependencies: - - supports-color - '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.8 @@ -4011,7 +4510,7 @@ snapshots: '@babel/core': 7.26.7 '@babel/helper-compilation-targets': 7.26.5 '@babel/helper-plugin-utils': 7.26.5 - debug: 4.4.0 + debug: 4.4.3 lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -5008,75 +5507,153 @@ snapshots: '@esbuild/aix-ppc64@0.23.1': optional: true + '@esbuild/aix-ppc64@0.25.12': + optional: true + '@esbuild/android-arm64@0.23.1': optional: true + '@esbuild/android-arm64@0.25.12': + optional: true + '@esbuild/android-arm@0.23.1': optional: true + '@esbuild/android-arm@0.25.12': + optional: true + '@esbuild/android-x64@0.23.1': optional: true + '@esbuild/android-x64@0.25.12': + optional: true + '@esbuild/darwin-arm64@0.23.1': optional: true + '@esbuild/darwin-arm64@0.25.12': + optional: true + '@esbuild/darwin-x64@0.23.1': optional: true + '@esbuild/darwin-x64@0.25.12': + optional: true + '@esbuild/freebsd-arm64@0.23.1': optional: true + '@esbuild/freebsd-arm64@0.25.12': + optional: true + '@esbuild/freebsd-x64@0.23.1': optional: true + '@esbuild/freebsd-x64@0.25.12': + optional: true + '@esbuild/linux-arm64@0.23.1': optional: true + '@esbuild/linux-arm64@0.25.12': + optional: true + '@esbuild/linux-arm@0.23.1': optional: true + '@esbuild/linux-arm@0.25.12': + optional: true + '@esbuild/linux-ia32@0.23.1': optional: true + '@esbuild/linux-ia32@0.25.12': + optional: true + '@esbuild/linux-loong64@0.23.1': optional: true + '@esbuild/linux-loong64@0.25.12': + optional: true + '@esbuild/linux-mips64el@0.23.1': optional: true + '@esbuild/linux-mips64el@0.25.12': + optional: true + '@esbuild/linux-ppc64@0.23.1': optional: true + '@esbuild/linux-ppc64@0.25.12': + optional: true + '@esbuild/linux-riscv64@0.23.1': optional: true + '@esbuild/linux-riscv64@0.25.12': + optional: true + '@esbuild/linux-s390x@0.23.1': optional: true + '@esbuild/linux-s390x@0.25.12': + optional: true + '@esbuild/linux-x64@0.23.1': optional: true + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + '@esbuild/netbsd-x64@0.23.1': optional: true + '@esbuild/netbsd-x64@0.25.12': + optional: true + '@esbuild/openbsd-arm64@0.23.1': optional: true + '@esbuild/openbsd-arm64@0.25.12': + optional: true + '@esbuild/openbsd-x64@0.23.1': optional: true + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + '@esbuild/sunos-x64@0.23.1': optional: true + '@esbuild/sunos-x64@0.25.12': + optional: true + '@esbuild/win32-arm64@0.23.1': optional: true + '@esbuild/win32-arm64@0.25.12': + optional: true + '@esbuild/win32-ia32@0.23.1': optional: true + '@esbuild/win32-ia32@0.25.12': + optional: true + '@esbuild/win32-x64@0.23.1': optional: true + '@esbuild/win32-x64@0.25.12': + optional: true + '@expo/bunyan@4.0.1': dependencies: uuid: 8.3.2 @@ -5455,6 +6032,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -5476,6 +6055,43 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 + '@napi-ffi/ffi-napi@4.0.3': + dependencies: + '@napi-ffi/get-uv-event-loop-napi-h': 1.0.6 + '@napi-ffi/ref-napi': 3.0.5 + '@napi-ffi/ref-struct-di': 1.1.1 + debug: 4.4.0 + node-addon-api: 8.5.0 + node-gyp-build: 4.8.4 + transitivePeerDependencies: + - supports-color + + '@napi-ffi/get-symbol-from-current-process-h@1.0.4': {} + + '@napi-ffi/get-uv-event-loop-napi-h@1.0.6': {} + + '@napi-ffi/ref-array-di@1.2.2': + dependencies: + array-index: 1.0.0 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + '@napi-ffi/ref-napi@3.0.5': + dependencies: + '@napi-ffi/get-symbol-from-current-process-h': 1.0.4 + debug: 4.4.0 + node-addon-api: 8.5.0 + node-gyp-build: 4.8.4 + transitivePeerDependencies: + - supports-color + + '@napi-ffi/ref-struct-di@1.1.1': + dependencies: + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5644,6 +6260,72 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 + '@rollup/rollup-android-arm-eabi@4.53.3': + optional: true + + '@rollup/rollup-android-arm64@4.53.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.53.3': + optional: true + + '@rollup/rollup-darwin-x64@4.53.3': + optional: true + + '@rollup/rollup-freebsd-arm64@4.53.3': + optional: true + + '@rollup/rollup-freebsd-x64@4.53.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.53.3': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.53.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.53.3': + optional: true + + '@rollup/rollup-openharmony-arm64@4.53.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.53.3': + optional: true + '@segment/loosely-validate-event@2.0.0': dependencies: component-type: 1.2.2 @@ -5659,6 +6341,8 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@standard-schema/spec@1.0.0': {} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.26.7 @@ -5680,9 +6364,24 @@ snapshots: dependencies: '@babel/types': 7.26.7 + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.8': {} + + '@types/ffi-napi@4.0.10': + dependencies: + '@types/node': 24.10.1 + '@types/ref-napi': 3.0.12 + '@types/ref-struct-di': 1.1.12 + '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.17.16 + '@types/node': 24.10.1 '@types/istanbul-lib-coverage@2.0.6': {} @@ -5696,7 +6395,7 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 20.17.16 + '@types/node': 24.10.1 '@types/node@12.20.55': {} @@ -5704,6 +6403,10 @@ snapshots: dependencies: undici-types: 6.19.8 + '@types/node@24.10.1': + dependencies: + undici-types: 7.16.0 + '@types/prop-types@15.7.14': {} '@types/react@18.3.18': @@ -5717,7 +6420,7 @@ snapshots: '@types/ref-napi@3.0.12': dependencies: - '@types/node': 20.17.16 + '@types/node': 24.10.1 '@types/ref-struct-di@1.1.12': dependencies: @@ -5743,6 +6446,45 @@ snapshots: '@urql/core': 5.1.0 wonka: 6.3.4 + '@vitest/expect@4.0.12': + dependencies: + '@standard-schema/spec': 1.0.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.12 + '@vitest/utils': 4.0.12 + chai: 6.2.1 + tinyrainbow: 3.0.3 + + '@vitest/mocker@4.0.12(vite@7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2))': + dependencies: + '@vitest/spy': 4.0.12 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2) + + '@vitest/pretty-format@4.0.12': + dependencies: + tinyrainbow: 3.0.3 + + '@vitest/runner@4.0.12': + dependencies: + '@vitest/utils': 4.0.12 + pathe: 2.0.3 + + '@vitest/snapshot@4.0.12': + dependencies: + '@vitest/pretty-format': 4.0.12 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.0.12': {} + + '@vitest/utils@4.0.12': + dependencies: + '@vitest/pretty-format': 4.0.12 + tinyrainbow: 3.0.3 + '@xmldom/xmldom@0.7.13': {} '@xmldom/xmldom@0.8.10': {} @@ -5817,6 +6559,8 @@ snapshots: asap@2.0.6: {} + assertion-error@2.0.1: {} + ast-types@0.15.2: dependencies: tslib: 2.8.1 @@ -6050,6 +6794,8 @@ snapshots: caniuse-lite@1.0.30001695: {} + chai@6.2.1: {} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -6230,6 +6976,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.3: + dependencies: + ms: 2.1.3 + deep-extend@0.6.0: {} deepmerge@4.3.1: {} @@ -6318,6 +7068,8 @@ snapshots: dependencies: stackframe: 1.3.4 + es-module-lexer@1.7.0: {} + es5-ext@0.10.64: dependencies: es6-iterator: 2.0.3 @@ -6363,6 +7115,35 @@ snapshots: '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -6382,6 +7163,10 @@ snapshots: esprima@4.0.1: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + esutils@2.0.3: {} etag@1.8.1: {} @@ -6417,6 +7202,8 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 + expect-type@1.2.2: {} + expo-asset@11.0.2(expo@52.0.27(@babel/core@7.26.7)(@babel/preset-env@7.26.7(@babel/core@7.26.7))(encoding@0.1.13)(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.7(@babel/core@7.26.7))(@types/react@18.3.18)(encoding@0.1.13)(react@18.3.1))(react@18.3.1))(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.7(@babel/core@7.26.7))(@types/react@18.3.18)(encoding@0.1.13)(react@18.3.1))(react@18.3.1): dependencies: '@expo/image-utils': 0.6.4 @@ -6560,6 +7347,10 @@ snapshots: transitivePeerDependencies: - encoding + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + fetch-retry@4.1.1: {} fill-range@7.1.1: @@ -6674,16 +7465,10 @@ snapshots: get-stream@6.0.1: {} - get-symbol-from-current-process-h@1.0.2: {} - get-tsconfig@4.10.0: dependencies: resolve-pkg-maps: 1.0.0 - get-uv-event-loop-napi-h@1.0.6: - dependencies: - get-symbol-from-current-process-h: 1.0.2 - getenv@1.0.0: {} glob-parent@5.1.2: @@ -6719,6 +7504,8 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 + globrex@0.1.2: {} + graceful-fs@4.2.11: {} has-flag@3.0.0: {} @@ -7108,6 +7895,10 @@ snapshots: dependencies: yallist: 3.1.1 + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -7368,10 +8159,9 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 - minizlib@3.0.1: + minizlib@3.1.0: dependencies: minipass: 7.1.2 - rimraf: 5.0.10 mkdirp@0.5.6: dependencies: @@ -7379,8 +8169,6 @@ snapshots: mkdirp@1.0.4: {} - mkdirp@3.0.1: {} - mri@1.2.0: {} ms@2.0.0: {} @@ -7393,6 +8181,8 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 + nanoid@3.3.11: {} + nanoid@3.3.8: {} negotiator@0.6.3: {} @@ -7409,7 +8199,7 @@ snapshots: node-abort-controller@3.1.1: {} - node-addon-api@3.2.1: {} + node-addon-api@8.5.0: {} node-dir@0.1.17: dependencies: @@ -7573,12 +8363,16 @@ snapshots: path-type@4.0.0: {} + pathe@2.0.3: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} picomatch@3.0.1: {} + picomatch@4.0.3: {} + pify@4.0.1: {} pirates@4.0.6: {} @@ -7601,6 +8395,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prettier@2.8.8: {} pretty-bytes@5.6.0: {} @@ -7812,19 +8612,6 @@ snapshots: source-map: 0.6.1 tslib: 2.8.1 - ref-array-di@1.2.2: - dependencies: - array-index: 1.0.0 - debug: 3.2.7 - transitivePeerDependencies: - - supports-color - - ref-struct-di@1.1.1: - dependencies: - debug: 3.2.7 - transitivePeerDependencies: - - supports-color - regenerate-unicode-properties@10.2.0: dependencies: regenerate: 1.4.2 @@ -7905,6 +8692,34 @@ snapshots: dependencies: glob: 10.4.5 + rollup@4.53.3: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.53.3 + '@rollup/rollup-android-arm64': 4.53.3 + '@rollup/rollup-darwin-arm64': 4.53.3 + '@rollup/rollup-darwin-x64': 4.53.3 + '@rollup/rollup-freebsd-arm64': 4.53.3 + '@rollup/rollup-freebsd-x64': 4.53.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 + '@rollup/rollup-linux-arm-musleabihf': 4.53.3 + '@rollup/rollup-linux-arm64-gnu': 4.53.3 + '@rollup/rollup-linux-arm64-musl': 4.53.3 + '@rollup/rollup-linux-loong64-gnu': 4.53.3 + '@rollup/rollup-linux-ppc64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-musl': 4.53.3 + '@rollup/rollup-linux-s390x-gnu': 4.53.3 + '@rollup/rollup-linux-x64-gnu': 4.53.3 + '@rollup/rollup-linux-x64-musl': 4.53.3 + '@rollup/rollup-openharmony-arm64': 4.53.3 + '@rollup/rollup-win32-arm64-msvc': 4.53.3 + '@rollup/rollup-win32-ia32-msvc': 4.53.3 + '@rollup/rollup-win32-x64-gnu': 4.53.3 + '@rollup/rollup-win32-x64-msvc': 4.53.3 + fsevents: 2.3.3 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -8001,6 +8816,8 @@ snapshots: shell-quote@1.8.2: {} + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -8047,6 +8864,8 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 + stackback@0.0.2: {} + stackframe@1.3.4: {} stacktrace-parser@0.1.10: @@ -8057,6 +8876,8 @@ snapshots: statuses@2.0.1: {} + std-env@3.10.0: {} + stream-buffers@2.2.0: {} string-width@4.2.3: @@ -8139,13 +8960,12 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - tar@7.4.3: + tar@7.5.2: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 minipass: 7.1.2 - minizlib: 3.0.1 - mkdirp: 3.0.1 + minizlib: 3.1.0 yallist: 5.0.0 temp-dir@2.0.0: {} @@ -8199,6 +9019,17 @@ snapshots: through@2.3.8: {} + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinyrainbow@3.0.3: {} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -8215,6 +9046,10 @@ snapshots: ts-interface-checker@0.1.13: {} + tsconfck@3.1.6(typescript@5.4.5): + optionalDependencies: + typescript: 5.4.5 + tslib@2.8.1: {} tsx@4.19.2: @@ -8240,6 +9075,8 @@ snapshots: undici-types@6.19.8: {} + undici-types@7.16.0: {} + undici@6.21.1: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -8291,6 +9128,70 @@ snapshots: vary@1.1.2: {} + vite-tsconfig-paths@5.1.4(typescript@5.4.5)(vite@7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2)): + dependencies: + debug: 4.4.3 + globrex: 0.1.2 + tsconfck: 3.1.6(typescript@5.4.5) + optionalDependencies: + vite: 7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2) + transitivePeerDependencies: + - supports-color + - typescript + + vite@7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.53.3 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.10.1 + fsevents: 2.3.3 + lightningcss: 1.27.0 + terser: 5.37.0 + tsx: 4.19.2 + + vitest@4.0.12(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2): + dependencies: + '@vitest/expect': 4.0.12 + '@vitest/mocker': 4.0.12(vite@7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2)) + '@vitest/pretty-format': 4.0.12 + '@vitest/runner': 4.0.12 + '@vitest/snapshot': 4.0.12 + '@vitest/spy': 4.0.12 + '@vitest/utils': 4.0.12 + debug: 4.4.3 + es-module-lexer: 1.7.0 + expect-type: 1.2.2 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 24.10.1 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vlq@1.0.1: {} walker@1.0.8: @@ -8328,6 +9229,11 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + wonka@6.3.4: {} wrap-ansi@7.0.0: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 753c97bb..aee034ae 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -7,5 +7,5 @@ catalog: tsx: ^4.19.2 rimraf: ^5.0.5 "@biomejs/biome": 1.9.4 - "@types/node": ^20.12.11 + "@types/node": ^24.10.1 "@changesets/cli": ^2.27.12 diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 00000000..3953f18a --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,10 @@ +import viteTsConfigPaths from 'vite-tsconfig-paths' +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + plugins: [viteTsConfigPaths()], + test: { + watch: false, + setupFiles: ['packages/askar-nodejs/tests/setup.ts'], + }, +}) From 8b8162b7ec31a5c28d47791418e03f57e633d69f Mon Sep 17 00:00:00 2001 From: Timo Glastra Date: Fri, 21 Nov 2025 18:56:01 +0545 Subject: [PATCH 2/7] docs(changeset): feat: support Node.JS 24 Signed-off-by: Timo Glastra --- .changeset/little-rice-obey.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/little-rice-obey.md diff --git a/.changeset/little-rice-obey.md b/.changeset/little-rice-obey.md new file mode 100644 index 00000000..5fdf009a --- /dev/null +++ b/.changeset/little-rice-obey.md @@ -0,0 +1,5 @@ +--- +"@openwallet-foundation/askar-nodejs": patch +--- + +feat: support Node.JS 24 From 3afa82fb995cd1bde30bd2fe4ee81ace31a83008 Mon Sep 17 00:00:00 2001 From: Timo Glastra Date: Fri, 21 Nov 2025 19:00:02 +0545 Subject: [PATCH 3/7] chore: update to latest biome Signed-off-by: Timo Glastra --- biome.json | 8 +- package.json | 4 +- packages/askar-nodejs/package.json | 5 +- packages/askar-nodejs/src/NodeJSAskar.ts | 22 +++--- packages/askar-nodejs/src/ffi/index.ts | 2 +- .../src/library/NativeBindingInterface.ts | 6 +- packages/askar-nodejs/src/library/index.ts | 2 +- packages/askar-nodejs/src/library/register.ts | 4 +- packages/askar-nodejs/tests/error.test.ts | 2 +- packages/askar-nodejs/tests/setup.ts | 1 + packages/askar-nodejs/tests/utils/index.ts | 2 +- .../askar-nodejs/tests/utils/initialize.ts | 3 +- .../src/ReactNativeAskar.ts | 2 +- packages/askar-react-native/src/index.ts | 4 +- packages/askar-shared/installBinary.js | 2 +- packages/askar-shared/package.json | 5 +- packages/askar-shared/src/askar/index.ts | 2 +- packages/askar-shared/src/crypto/CryptoBox.ts | 3 +- packages/askar-shared/src/crypto/EcdhEs.ts | 3 +- packages/askar-shared/src/crypto/Key.ts | 7 +- packages/askar-shared/src/crypto/index.ts | 12 +-- packages/askar-shared/src/enums/index.ts | 4 +- packages/askar-shared/src/index.ts | 4 +- packages/askar-shared/src/store/Entry.ts | 3 +- packages/askar-shared/src/store/EntryList.ts | 5 +- .../askar-shared/src/store/KeyEntryList.ts | 5 +- .../askar-shared/src/store/OpenSession.ts | 3 +- packages/askar-shared/src/store/Scan.ts | 8 +- packages/askar-shared/src/store/Session.ts | 6 +- packages/askar-shared/src/store/Store.ts | 12 +-- packages/askar-shared/src/store/index.ts | 4 +- pnpm-lock.yaml | 79 +++++++++---------- 32 files changed, 113 insertions(+), 121 deletions(-) diff --git a/biome.json b/biome.json index c489061f..29473002 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "$schema": "https://biomejs.dev/schemas/2.3.7/schema.json", "formatter": { "lineWidth": 120, "indentStyle": "space" @@ -21,8 +21,10 @@ "allowComments": true } }, - "organizeImports": { - "enabled": true + "assist": { + "actions": { + "source": { "organizeImports": "on" } + } }, "linter": { "enabled": true, diff --git a/package.json b/package.json index c4dcc38f..7daf5d77 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "node": ">= 20" }, "scripts": { - "style:check": "biome check --unsafe .", + "style:check": "biome check --unsafe", "style:fix": "pnpm style:check --write", "types:check": "pnpm -r types:check", "build": "pnpm -r build", @@ -20,7 +20,7 @@ "changeset-version": "pnpm changeset version && pnpm style:fix" }, "devDependencies": { - "@biomejs/biome": "catalog:", + "@biomejs/biome": "^2.3.7", "@changesets/cli": "catalog:", "@types/node": "catalog:", "rimraf": "catalog:", diff --git a/packages/askar-nodejs/package.json b/packages/askar-nodejs/package.json index 091bd8a7..2ce8190b 100644 --- a/packages/askar-nodejs/package.json +++ b/packages/askar-nodejs/package.json @@ -15,7 +15,10 @@ "publishConfig": { "access": "public" }, - "files": ["build", "scripts"], + "files": [ + "build", + "scripts" + ], "scripts": { "types:check": "pnpm compile --noEmit", "build": "pnpm clean && pnpm compile", diff --git a/packages/askar-nodejs/src/NodeJSAskar.ts b/packages/askar-nodejs/src/NodeJSAskar.ts index 3d0cf07a..02f36121 100644 --- a/packages/askar-nodejs/src/NodeJSAskar.ts +++ b/packages/askar-nodejs/src/NodeJSAskar.ts @@ -85,16 +85,26 @@ import { AeadParams, AskarError, EntryListHandle, + handleInvalidNullResponse, KeyEntryListHandle, LocalKeyHandle, ScanHandle, SessionHandle, StoreHandle, - handleInvalidNullResponse, } from '@openwallet-foundation/askar-shared' import { + allocateAeadParams, + allocateEncryptedBuffer, + allocateInt8Buffer, + allocateInt32Buffer, + allocatePointer, + allocateSecretBuffer, + allocateStringBuffer, + allocateStringListHandle, type ByteBufferType, + deallocateCallbackBuffer, type EncryptedBufferType, + encryptedBufferStructToClass, FFI_ENTRY_LIST_HANDLE, FFI_INT8, FFI_INT64, @@ -106,16 +116,6 @@ import { FFI_STRING_LIST_HANDLE, type NativeCallback, type NativeCallbackWithResponse, - allocateAeadParams, - allocateEncryptedBuffer, - allocateInt8Buffer, - allocateInt32Buffer, - allocatePointer, - allocateSecretBuffer, - allocateStringBuffer, - allocateStringListHandle, - deallocateCallbackBuffer, - encryptedBufferStructToClass, secretBufferToBuffer, serializeArguments, toNativeCallback, diff --git a/packages/askar-nodejs/src/ffi/index.ts b/packages/askar-nodejs/src/ffi/index.ts index e3a8ef94..4673268b 100644 --- a/packages/askar-nodejs/src/ffi/index.ts +++ b/packages/askar-nodejs/src/ffi/index.ts @@ -1,6 +1,6 @@ export * from './alloc' export * from './callback' export * from './conversion' -export * from './structures' export * from './primitives' export * from './serialize' +export * from './structures' diff --git a/packages/askar-nodejs/src/library/NativeBindingInterface.ts b/packages/askar-nodejs/src/library/NativeBindingInterface.ts index 794e3b2d..502a54de 100644 --- a/packages/askar-nodejs/src/library/NativeBindingInterface.ts +++ b/packages/askar-nodejs/src/library/NativeBindingInterface.ts @@ -1,6 +1,6 @@ +import type { ByteBufferType, SecretBufferStruct } from '../ffi' import type { nativeBindings } from './bindings' -import type { ByteBufferType, SecretBufferStruct } from '../ffi' // We need a mapping from string type value => type (property 'string' maps to type string) interface StringTypeMapping { pointer: Buffer @@ -25,10 +25,10 @@ type StringTypeArrayToTypes = { : Buffer } -// biome-ignore lint/suspicious/noExplicitAny: +// biome-ignore lint/suspicious/noExplicitAny: no-explanation type TypedMethods> = { [Property in keyof Base]: ( - // biome-ignore lint/suspicious/noExplicitAny: + // biome-ignore lint/suspicious/noExplicitAny: no-explanation ...args: StringTypeArrayToTypes extends any[] ? StringTypeArrayToTypes : [] ) => StringTypeMapping[Base[Property][0]] } diff --git a/packages/askar-nodejs/src/library/index.ts b/packages/askar-nodejs/src/library/index.ts index df4ece64..56e186af 100644 --- a/packages/askar-nodejs/src/library/index.ts +++ b/packages/askar-nodejs/src/library/index.ts @@ -1,3 +1,3 @@ -export * from './NativeBindingInterface' export * from './bindings' +export * from './NativeBindingInterface' export * from './register' diff --git a/packages/askar-nodejs/src/library/register.ts b/packages/askar-nodejs/src/library/register.ts index 7c978bd3..330954ee 100644 --- a/packages/askar-nodejs/src/library/register.ts +++ b/packages/askar-nodejs/src/library/register.ts @@ -2,8 +2,8 @@ import fs from 'node:fs' import os from 'node:os' import path from 'node:path' import { Library } from '@napi-ffi/ffi-napi' -import type { NativeMethods } from './NativeBindingInterface' import { nativeBindings } from './bindings' +import type { NativeMethods } from './NativeBindingInterface' // TODO(rename): when lib is changed const LIBNAME = 'aries_askar' @@ -68,7 +68,7 @@ const getLibrary = () => { return Library(validLibraryPath, nativeBindings) } -let nativeAskar: NativeMethods | undefined = undefined +let nativeAskar: NativeMethods | undefined export const getNativeAskar = () => { if (!nativeAskar) nativeAskar = getLibrary() as unknown as NativeMethods return nativeAskar diff --git a/packages/askar-nodejs/tests/error.test.ts b/packages/askar-nodejs/tests/error.test.ts index 9881d137..00381b24 100644 --- a/packages/askar-nodejs/tests/error.test.ts +++ b/packages/askar-nodejs/tests/error.test.ts @@ -1,5 +1,5 @@ import { doesNotReject, doesNotThrow, rejects, throws } from 'node:assert' -import { AskarError, KeyAlgorithm, askar } from '@openwallet-foundation/askar-shared' +import { AskarError, askar, KeyAlgorithm } from '@openwallet-foundation/askar-shared' import { describe, test } from 'vitest' import { setupWallet } from './utils' diff --git a/packages/askar-nodejs/tests/setup.ts b/packages/askar-nodejs/tests/setup.ts index 9be6942a..02b1cab4 100644 --- a/packages/askar-nodejs/tests/setup.ts +++ b/packages/askar-nodejs/tests/setup.ts @@ -1,3 +1,4 @@ // this registers askar import { askar } from '@openwallet-foundation/askar-nodejs' + askar.setDefaultLogger() diff --git a/packages/askar-nodejs/tests/utils/index.ts b/packages/askar-nodejs/tests/utils/index.ts index 6630a3d2..83cc3053 100644 --- a/packages/askar-nodejs/tests/utils/index.ts +++ b/packages/askar-nodejs/tests/utils/index.ts @@ -1,2 +1,2 @@ -export * from './initialize' export * from './fixtures' +export * from './initialize' diff --git a/packages/askar-nodejs/tests/utils/initialize.ts b/packages/askar-nodejs/tests/utils/initialize.ts index 7be7cf76..353c03f4 100644 --- a/packages/askar-nodejs/tests/utils/initialize.ts +++ b/packages/askar-nodejs/tests/utils/initialize.ts @@ -1,5 +1,4 @@ -import { KdfMethod, LogLevel, Store, StoreKeyMethod, askar, registerAskar } from '@openwallet-foundation/askar-shared' -import { NodeJSAskar } from '../../src/NodeJSAskar' +import { KdfMethod, Store, StoreKeyMethod } from '@openwallet-foundation/askar-shared' export const getRawKey = () => Store.generateRawKey(Buffer.from('00000000000000000000000000000My1')) export const testStoreUri = process.env.URI || 'sqlite://:memory:' diff --git a/packages/askar-react-native/src/ReactNativeAskar.ts b/packages/askar-react-native/src/ReactNativeAskar.ts index 4ae8b5ee..037b7bb5 100644 --- a/packages/askar-react-native/src/ReactNativeAskar.ts +++ b/packages/askar-react-native/src/ReactNativeAskar.ts @@ -82,12 +82,12 @@ import { AskarError, EncryptedBuffer, EntryListHandle, + handleInvalidNullResponse, KeyEntryListHandle, LocalKeyHandle, ScanHandle, SessionHandle, StoreHandle, - handleInvalidNullResponse, } from '@openwallet-foundation/askar-shared' import type { NativeBindings } from './NativeBindings' import type { Callback, CallbackWithResponse, ReturnObject } from './serialize' diff --git a/packages/askar-react-native/src/index.ts b/packages/askar-react-native/src/index.ts index eba4e2c1..14c42c74 100644 --- a/packages/askar-react-native/src/index.ts +++ b/packages/askar-react-native/src/index.ts @@ -1,7 +1,6 @@ -import type { NativeBindings } from './NativeBindings' - import { registerAskar } from '@openwallet-foundation/askar-shared' import { NativeModules } from 'react-native' +import type { NativeBindings } from './NativeBindings' import { ReactNativeAskar } from './ReactNativeAskar' @@ -12,7 +11,6 @@ const module = NativeModules.Askar as { install: () => boolean } if (!module.install()) throw Error('Unable to install the turboModule: askar') // This can already check whether `_askar` exists on global -// biome-ignore lint/correctness/noInvalidUseBeforeDeclaration: if (!_askar) { throw Error('_askar has not been exposed on global. Something went wrong while installing the turboModule') } diff --git a/packages/askar-shared/installBinary.js b/packages/askar-shared/installBinary.js index 47bf8dbe..4dabf913 100644 --- a/packages/askar-shared/installBinary.js +++ b/packages/askar-shared/installBinary.js @@ -20,7 +20,7 @@ function needsDownload({ version, targetDirectory }) { console.log('Binary is up to date, skipping download') return false } - } catch (error) { + } catch { // If metadata is corrupted, download anyway console.log('Metadata file is invalid, will download binary') } diff --git a/packages/askar-shared/package.json b/packages/askar-shared/package.json index a2abc1ef..48abfb59 100644 --- a/packages/askar-shared/package.json +++ b/packages/askar-shared/package.json @@ -16,7 +16,10 @@ "publishConfig": { "access": "public" }, - "files": ["build", "installBinary.js"], + "files": [ + "build", + "installBinary.js" + ], "scripts": { "types:check": "pnpm compile --noEmit", "build": "pnpm clean && pnpm compile", diff --git a/packages/askar-shared/src/askar/index.ts b/packages/askar-shared/src/askar/index.ts index 02f085f5..b0bb7e67 100644 --- a/packages/askar-shared/src/askar/index.ts +++ b/packages/askar-shared/src/askar/index.ts @@ -1,2 +1,2 @@ -export * from './register' export * from './Askar' +export * from './register' diff --git a/packages/askar-shared/src/crypto/CryptoBox.ts b/packages/askar-shared/src/crypto/CryptoBox.ts index 0b8cb21a..7a2c5953 100644 --- a/packages/askar-shared/src/crypto/CryptoBox.ts +++ b/packages/askar-shared/src/crypto/CryptoBox.ts @@ -1,6 +1,5 @@ -import type { Key } from './Key' - import { askar } from '../askar' +import type { Key } from './Key' export class CryptoBox { public static randomNonce() { diff --git a/packages/askar-shared/src/crypto/EcdhEs.ts b/packages/askar-shared/src/crypto/EcdhEs.ts index d64d3420..44b3a80b 100644 --- a/packages/askar-shared/src/crypto/EcdhEs.ts +++ b/packages/askar-shared/src/crypto/EcdhEs.ts @@ -1,6 +1,5 @@ -import type { KeyAlgorithm } from '../enums' - import { askar } from '../askar' +import type { KeyAlgorithm } from '../enums' import { Jwk } from './Jwk' import { Key } from './Key' diff --git a/packages/askar-shared/src/crypto/Key.ts b/packages/askar-shared/src/crypto/Key.ts index 41997b9a..9c25c023 100644 --- a/packages/askar-shared/src/crypto/Key.ts +++ b/packages/askar-shared/src/crypto/Key.ts @@ -1,11 +1,8 @@ -import type { KeyAlgorithm, SignatureAlgorithm } from '../enums' -import type { KeyBackend } from '../enums' -import type { LocalKeyHandle } from './handles' - import { Buffer } from 'buffer' - import { askar } from '../askar' +import type { KeyAlgorithm, KeyBackend, SignatureAlgorithm } from '../enums' import { KeyMethod, keyAlgorithmFromString } from '../enums' +import type { LocalKeyHandle } from './handles' import { Jwk } from './Jwk' diff --git a/packages/askar-shared/src/crypto/index.ts b/packages/askar-shared/src/crypto/index.ts index ea251fa4..0c015446 100644 --- a/packages/askar-shared/src/crypto/index.ts +++ b/packages/askar-shared/src/crypto/index.ts @@ -1,9 +1,9 @@ -export * from './handles' -export * from './Key' +export * from './AeadParams' export * from './Argon2' -export * from './EcdhEs' -export * from './Ecdh1PU' export * from './CryptoBox' -export * from './Jwk' +export * from './Ecdh1PU' +export * from './EcdhEs' export * from './EncryptedBuffer' -export * from './AeadParams' +export * from './handles' +export * from './Jwk' +export * from './Key' diff --git a/packages/askar-shared/src/enums/index.ts b/packages/askar-shared/src/enums/index.ts index 1689d3b9..9e9128ba 100644 --- a/packages/askar-shared/src/enums/index.ts +++ b/packages/askar-shared/src/enums/index.ts @@ -1,5 +1,5 @@ -export * from './KeyBackend' export * from './KeyAlgorithm' +export * from './KeyBackend' export * from './KeyMethod' -export * from './SignatureAlgorithm' export * from './LogLevel' +export * from './SignatureAlgorithm' diff --git a/packages/askar-shared/src/index.ts b/packages/askar-shared/src/index.ts index e001a0a3..65180879 100644 --- a/packages/askar-shared/src/index.ts +++ b/packages/askar-shared/src/index.ts @@ -1,6 +1,6 @@ -export * from './error' export * from './askar' export * from './crypto' export * from './enums' -export * from './store' +export * from './error' export * from './migration' +export * from './store' diff --git a/packages/askar-shared/src/store/Entry.ts b/packages/askar-shared/src/store/Entry.ts index d9677051..d85706e4 100644 --- a/packages/askar-shared/src/store/Entry.ts +++ b/packages/askar-shared/src/store/Entry.ts @@ -1,6 +1,5 @@ -import type { EntryListHandle } from '../crypto' - import { Buffer } from 'buffer' +import type { EntryListHandle } from '../crypto' export type EntryObject = { name: string diff --git a/packages/askar-shared/src/store/EntryList.ts b/packages/askar-shared/src/store/EntryList.ts index 44e9f1e0..7456a163 100644 --- a/packages/askar-shared/src/store/EntryList.ts +++ b/packages/askar-shared/src/store/EntryList.ts @@ -1,7 +1,6 @@ -import type { EntryObject } from '.' -import type { EntryListHandle } from '../crypto' - import { askar } from '../askar' +import type { EntryListHandle } from '../crypto' +import type { EntryObject } from '.' import { Entry } from './Entry' diff --git a/packages/askar-shared/src/store/KeyEntryList.ts b/packages/askar-shared/src/store/KeyEntryList.ts index b14af8c5..6358909e 100644 --- a/packages/askar-shared/src/store/KeyEntryList.ts +++ b/packages/askar-shared/src/store/KeyEntryList.ts @@ -1,7 +1,6 @@ -import type { KeyEntryObject } from '.' -import type { KeyEntryListHandle } from '../crypto' - import { askar } from '../askar' +import type { KeyEntryListHandle } from '../crypto' +import type { KeyEntryObject } from '.' import { KeyEntry } from './KeyEntry' diff --git a/packages/askar-shared/src/store/OpenSession.ts b/packages/askar-shared/src/store/OpenSession.ts index bda6fc4b..6eb1b1c7 100644 --- a/packages/askar-shared/src/store/OpenSession.ts +++ b/packages/askar-shared/src/store/OpenSession.ts @@ -1,6 +1,5 @@ -import type { StoreHandle } from '../crypto' - import { askar } from '../askar' +import type { StoreHandle } from '../crypto' import { AskarError } from '../error' import { Session } from './Session' diff --git a/packages/askar-shared/src/store/Scan.ts b/packages/askar-shared/src/store/Scan.ts index 5d75ea62..912c3912 100644 --- a/packages/askar-shared/src/store/Scan.ts +++ b/packages/askar-shared/src/store/Scan.ts @@ -1,11 +1,9 @@ -import type { EntryListHandle, ScanHandle } from '../crypto' -import type { Entry, EntryObject } from './Entry' -import type { Store } from './Store' - import { askar } from '../askar' +import type { EntryListHandle, ScanHandle } from '../crypto' import { AskarError } from '../error' - +import type { Entry, EntryObject } from './Entry' import { EntryList } from './EntryList' +import type { Store } from './Store' export class Scan { private _handle?: ScanHandle diff --git a/packages/askar-shared/src/store/Session.ts b/packages/askar-shared/src/store/Session.ts index fe85b9ae..d5a06d64 100644 --- a/packages/askar-shared/src/store/Session.ts +++ b/packages/askar-shared/src/store/Session.ts @@ -1,9 +1,7 @@ -import type { Key, SessionHandle } from '../crypto' -import type { KeyAlgorithm } from '../enums' - import { Buffer } from 'buffer' - import { askar } from '../askar' +import type { Key, SessionHandle } from '../crypto' +import type { KeyAlgorithm } from '../enums' import { EntryOperation } from '../enums/EntryOperation' import { AskarError } from '../error' diff --git a/packages/askar-shared/src/store/Store.ts b/packages/askar-shared/src/store/Store.ts index 161c1bfb..0c426372 100644 --- a/packages/askar-shared/src/store/Store.ts +++ b/packages/askar-shared/src/store/Store.ts @@ -1,10 +1,8 @@ -import type { StoreHandle } from '../crypto' -import type { StoreKeyMethod } from './StoreKeyMethod' - import { askar } from '../askar' - +import type { StoreHandle } from '../crypto' import { OpenSession } from './OpenSession' import { Scan } from './Scan' +import type { StoreKeyMethod } from './StoreKeyMethod' export class Store { private _handle: StoreHandle @@ -52,7 +50,11 @@ export class Store { toStore, fromProfile, toProfile, - }: { toStore: Store; fromProfile: string; toProfile: string }) { + }: { + toStore: Store + fromProfile: string + toProfile: string + }) { return await askar.storeCopyProfile({ fromProfile, toProfile, fromHandle: this.handle, toHandle: toStore.handle }) } diff --git a/packages/askar-shared/src/store/index.ts b/packages/askar-shared/src/store/index.ts index 7a69f4d5..c181ed86 100644 --- a/packages/askar-shared/src/store/index.ts +++ b/packages/askar-shared/src/store/index.ts @@ -2,8 +2,8 @@ export * from './Entry' export * from './EntryList' export * from './KeyEntry' export * from './KeyEntryList' -export * from './Scan' -export * from './Store' export * from './OpenSession' +export * from './Scan' export * from './Session' +export * from './Store' export * from './StoreKeyMethod' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d6b53f7..869330ca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,9 +6,6 @@ settings: catalogs: default: - '@biomejs/biome': - specifier: 1.9.4 - version: 1.9.4 '@changesets/cli': specifier: ^2.27.12 version: 2.27.12 @@ -30,8 +27,8 @@ importers: .: devDependencies: '@biomejs/biome': - specifier: 'catalog:' - version: 1.9.4 + specifier: ^2.3.7 + version: 2.3.7 '@changesets/cli': specifier: 'catalog:' version: 2.27.12 @@ -876,55 +873,55 @@ packages: resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} engines: {node: '>=6.9.0'} - '@biomejs/biome@1.9.4': - resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} + '@biomejs/biome@2.3.7': + resolution: {integrity: sha512-CTbAS/jNAiUc6rcq94BrTB8z83O9+BsgWj2sBCQg9rD6Wkh2gjfR87usjx0Ncx0zGXP1NKgT7JNglay5Zfs9jw==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@1.9.4': - resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} + '@biomejs/cli-darwin-arm64@2.3.7': + resolution: {integrity: sha512-LirkamEwzIUULhXcf2D5b+NatXKeqhOwilM+5eRkbrnr6daKz9rsBL0kNZ16Hcy4b8RFq22SG4tcLwM+yx/wFA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@1.9.4': - resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} + '@biomejs/cli-darwin-x64@2.3.7': + resolution: {integrity: sha512-Q4TO633kvrMQkKIV7wmf8HXwF0dhdTD9S458LGE24TYgBjSRbuhvio4D5eOQzirEYg6eqxfs53ga/rbdd8nBKg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@1.9.4': - resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} + '@biomejs/cli-linux-arm64-musl@2.3.7': + resolution: {integrity: sha512-/afy8lto4CB8scWfMdt+NoCZtatBUF62Tk3ilWH2w8ENd5spLhM77zKlFZEvsKJv9AFNHknMl03zO67CiklL2Q==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@1.9.4': - resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} + '@biomejs/cli-linux-arm64@2.3.7': + resolution: {integrity: sha512-inHOTdlstUBzgjDcx0ge71U4SVTbwAljmkfi3MC5WzsYCRhancqfeL+sa4Ke6v2ND53WIwCFD5hGsYExoI3EZQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@1.9.4': - resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} + '@biomejs/cli-linux-x64-musl@2.3.7': + resolution: {integrity: sha512-CQUtgH1tIN6e5wiYSJqzSwJumHYolNtaj1dwZGCnZXm2PZU1jOJof9TsyiP3bXNDb+VOR7oo7ZvY01If0W3iFQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@1.9.4': - resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} + '@biomejs/cli-linux-x64@2.3.7': + resolution: {integrity: sha512-fJMc3ZEuo/NaMYo5rvoWjdSS5/uVSW+HPRQujucpZqm2ZCq71b8MKJ9U4th9yrv2L5+5NjPF0nqqILCl8HY/fg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@1.9.4': - resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} + '@biomejs/cli-win32-arm64@2.3.7': + resolution: {integrity: sha512-aJAE8eCNyRpcfx2JJAtsPtISnELJ0H4xVVSwnxm13bzI8RwbXMyVtxy2r5DV1xT3WiSP+7LxORcApWw0LM8HiA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@1.9.4': - resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} + '@biomejs/cli-win32-x64@2.3.7': + resolution: {integrity: sha512-pulzUshqv9Ed//MiE8MOUeeEkbkSHVDVY5Cz5wVAnH1DUqliCQG3j6s1POaITTFqFfo7AVIx2sWdKpx/GS+Nqw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -5327,39 +5324,39 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@biomejs/biome@1.9.4': + '@biomejs/biome@2.3.7': optionalDependencies: - '@biomejs/cli-darwin-arm64': 1.9.4 - '@biomejs/cli-darwin-x64': 1.9.4 - '@biomejs/cli-linux-arm64': 1.9.4 - '@biomejs/cli-linux-arm64-musl': 1.9.4 - '@biomejs/cli-linux-x64': 1.9.4 - '@biomejs/cli-linux-x64-musl': 1.9.4 - '@biomejs/cli-win32-arm64': 1.9.4 - '@biomejs/cli-win32-x64': 1.9.4 - - '@biomejs/cli-darwin-arm64@1.9.4': + '@biomejs/cli-darwin-arm64': 2.3.7 + '@biomejs/cli-darwin-x64': 2.3.7 + '@biomejs/cli-linux-arm64': 2.3.7 + '@biomejs/cli-linux-arm64-musl': 2.3.7 + '@biomejs/cli-linux-x64': 2.3.7 + '@biomejs/cli-linux-x64-musl': 2.3.7 + '@biomejs/cli-win32-arm64': 2.3.7 + '@biomejs/cli-win32-x64': 2.3.7 + + '@biomejs/cli-darwin-arm64@2.3.7': optional: true - '@biomejs/cli-darwin-x64@1.9.4': + '@biomejs/cli-darwin-x64@2.3.7': optional: true - '@biomejs/cli-linux-arm64-musl@1.9.4': + '@biomejs/cli-linux-arm64-musl@2.3.7': optional: true - '@biomejs/cli-linux-arm64@1.9.4': + '@biomejs/cli-linux-arm64@2.3.7': optional: true - '@biomejs/cli-linux-x64-musl@1.9.4': + '@biomejs/cli-linux-x64-musl@2.3.7': optional: true - '@biomejs/cli-linux-x64@1.9.4': + '@biomejs/cli-linux-x64@2.3.7': optional: true - '@biomejs/cli-win32-arm64@1.9.4': + '@biomejs/cli-win32-arm64@2.3.7': optional: true - '@biomejs/cli-win32-x64@1.9.4': + '@biomejs/cli-win32-x64@2.3.7': optional: true '@changesets/apply-release-plan@7.0.8': From 2aa4eca29ae768d4319ccc19f0010d9866fb5d2d Mon Sep 17 00:00:00 2001 From: Timo Glastra Date: Fri, 21 Nov 2025 19:01:20 +0545 Subject: [PATCH 4/7] docs(changeset): chore: drop support for Node 18 Signed-off-by: Timo Glastra --- .changeset/empty-dolls-tickle.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/empty-dolls-tickle.md diff --git a/.changeset/empty-dolls-tickle.md b/.changeset/empty-dolls-tickle.md new file mode 100644 index 00000000..39096cfd --- /dev/null +++ b/.changeset/empty-dolls-tickle.md @@ -0,0 +1,7 @@ +--- +"@openwallet-foundation/askar-react-native": minor +"@openwallet-foundation/askar-nodejs": minor +"@openwallet-foundation/askar-shared": minor +--- + +chore: drop support for Node 18 From c6770ad4f4a13b8e94667817156c1797fe4c1d9e Mon Sep 17 00:00:00 2001 From: Timo Glastra Date: Fri, 21 Nov 2025 19:37:34 +0545 Subject: [PATCH 5/7] chore: update to latest typescript Signed-off-by: Timo Glastra --- package.json | 1 - packages/askar-nodejs/src/ffi/serialize.ts | 2 +- packages/askar-react-native/src/serialize.ts | 2 +- pnpm-lock.yaml | 42 ++++++++++---------- pnpm-workspace.yaml | 5 +-- 5 files changed, 24 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index 7daf5d77..7fc188dc 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ "@changesets/cli": "catalog:", "@types/node": "catalog:", "rimraf": "catalog:", - "tsx": "catalog:", "typescript": "catalog:", "vite-tsconfig-paths": "^5.1.4", "vitest": "^4.0.12" diff --git a/packages/askar-nodejs/src/ffi/serialize.ts b/packages/askar-nodejs/src/ffi/serialize.ts index 3d68afcc..1007241f 100644 --- a/packages/askar-nodejs/src/ffi/serialize.ts +++ b/packages/askar-nodejs/src/ffi/serialize.ts @@ -25,7 +25,7 @@ type SerializedArgument = | number | Callback | CallbackWithResponse - | ArrayBuffer + | Uint8Array | typeof ByteBufferStruct | typeof SecretBufferStruct | Buffer diff --git a/packages/askar-react-native/src/serialize.ts b/packages/askar-react-native/src/serialize.ts index 97b03fc4..f7dfae8e 100644 --- a/packages/askar-react-native/src/serialize.ts +++ b/packages/askar-react-native/src/serialize.ts @@ -22,7 +22,7 @@ type Argument = | Key | Jwk -type SerializedArgument = string | number | Callback | CallbackWithResponse | ArrayBuffer +type SerializedArgument = string | number | Callback | CallbackWithResponse | ArrayBuffer | ArrayBufferLike | Uint8Array type SerializedArguments = Record diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 869330ca..2dfcd3e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,12 +15,9 @@ catalogs: rimraf: specifier: ^5.0.5 version: 5.0.10 - tsx: - specifier: ^4.19.2 - version: 4.19.2 typescript: - specifier: ~5.4.5 - version: 5.4.5 + specifier: ~5.9.3 + version: 5.9.3 importers: @@ -38,15 +35,12 @@ importers: rimraf: specifier: 'catalog:' version: 5.0.10 - tsx: - specifier: 'catalog:' - version: 4.19.2 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.9.3 vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.4.5)(vite@7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2)) + version: 5.1.4(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2)) vitest: specifier: ^4.0.12 version: 4.0.12(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2) @@ -80,7 +74,7 @@ importers: version: 18.3.18 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.9.3 packages/askar-nodejs: dependencies: @@ -117,7 +111,7 @@ importers: version: 24.10.1 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.9.3 packages/askar-react-native: dependencies: @@ -133,7 +127,7 @@ importers: version: 0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.7(@babel/core@7.26.7))(@types/react@18.3.18)(encoding@0.1.13)(react@18.2.0) typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.9.3 packages/askar-shared: dependencies: @@ -146,7 +140,7 @@ importers: devDependencies: typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.9.3 packages: @@ -4094,8 +4088,8 @@ packages: type@2.7.3: resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true @@ -7111,6 +7105,7 @@ snapshots: '@esbuild/win32-arm64': 0.23.1 '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 + optional: true esbuild@0.25.12: optionalDependencies: @@ -7465,6 +7460,7 @@ snapshots: get-tsconfig@4.10.0: dependencies: resolve-pkg-maps: 1.0.0 + optional: true getenv@1.0.0: {} @@ -8654,7 +8650,8 @@ snapshots: resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} + resolve-pkg-maps@1.0.0: + optional: true resolve-workspace-root@2.0.0: {} @@ -9043,9 +9040,9 @@ snapshots: ts-interface-checker@0.1.13: {} - tsconfck@3.1.6(typescript@5.4.5): + tsconfck@3.1.6(typescript@5.9.3): optionalDependencies: - typescript: 5.4.5 + typescript: 5.9.3 tslib@2.8.1: {} @@ -9055,6 +9052,7 @@ snapshots: get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 + optional: true type-detect@4.0.8: {} @@ -9066,7 +9064,7 @@ snapshots: type@2.7.3: {} - typescript@5.4.5: {} + typescript@5.9.3: {} ua-parser-js@1.0.40: {} @@ -9125,11 +9123,11 @@ snapshots: vary@1.1.2: {} - vite-tsconfig-paths@5.1.4(typescript@5.4.5)(vite@7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2)): dependencies: debug: 4.4.3 globrex: 0.1.2 - tsconfck: 3.1.6(typescript@5.4.5) + tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: vite: 7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2) transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index aee034ae..59368471 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,9 +3,8 @@ packages: - "examples/*" catalog: - typescript: ~5.4.5 - tsx: ^4.19.2 + typescript: ~5.9.3 rimraf: ^5.0.5 "@biomejs/biome": 1.9.4 "@types/node": ^24.10.1 - "@changesets/cli": ^2.27.12 + "@changesets/cli": ^2.29.7 From c79cf2255b3d91047ba690fe6e5da5ced34ab61b Mon Sep 17 00:00:00 2001 From: Timo Glastra Date: Fri, 21 Nov 2025 20:09:51 +0545 Subject: [PATCH 6/7] chore: some tweaks Signed-off-by: Timo Glastra --- .gitignore | 2 + packages/askar-nodejs/tests/error.test.ts | 2 +- .../tests/indy_wallet_sqlite_upgraded.db | Bin 106496 -> 0 bytes pnpm-lock.yaml | 219 +++++++++--------- 4 files changed, 117 insertions(+), 106 deletions(-) delete mode 100644 packages/askar-nodejs/tests/indy_wallet_sqlite_upgraded.db diff --git a/.gitignore b/.gitignore index 17e676c7..98a13759 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ packages/askar-react-native/android/.cxx examples/askar-react-native-example/android examples/askar-react-native-example/ios examples/askar-react-native-example/.expo + +indy_wallet_sqlite_upgraded.db \ No newline at end of file diff --git a/packages/askar-nodejs/tests/error.test.ts b/packages/askar-nodejs/tests/error.test.ts index 00381b24..8f470c7a 100644 --- a/packages/askar-nodejs/tests/error.test.ts +++ b/packages/askar-nodejs/tests/error.test.ts @@ -15,7 +15,7 @@ describe('Error', () => { test('set error code to non 0 after incorrect call', () => { throws( - () => askar.keyGenerate({ algorithm: 'incorrect-alg', ephemeral: true }), + () => askar.keyGenerate({ algorithm: 'incorrect-alg' as KeyAlgorithm, ephemeral: true }), new AskarError({ code: 8, message: 'Unknown key algorithm' }) ) }) diff --git a/packages/askar-nodejs/tests/indy_wallet_sqlite_upgraded.db b/packages/askar-nodejs/tests/indy_wallet_sqlite_upgraded.db deleted file mode 100644 index bb329b0e1738eb837821a58b952659515c0fd636..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106496 zcmeI4eQX&ho1YsOnzOG!0Emg6H|! zclOnGY&L{8>wC@he7~3Hd48Yg`}^IC(~j*MO{6VlY9@6oo>l^$wVt{<&&L(T1Bvu}Sua6^>rdO`n-v({$R?=nZ-rFE&2a@OZBIRVc_?ZQ zjGM|xc-TCkly0p=!b-kJqf%s#uL+N zYcajOduqK;4pNL#i5S^aEHRmPxM775bB)~*DqXo^^<-q7PwwcD9!R9)cO|X7&HShJ zIqTyCgQI4_FqN*-15Hd4t8sIe8CAlOaV0!4I;xdvnH@;A%^9FFI2swOWLLngs-;6* z8H_|m&4F+w(|e;Mdj_HhmEGn+f;g#`8QIQA)EwCr7R@rU?31@sE)SK+rO=y*A`g7y z3hB(ZcW1OT;GE_Jk7AMOmvFE7xU-s(+I{j3vXt59o_O=qiQ{6nt;mxL*gVJ8HJh55N+c~>jWy*cdC`=^@w9bhCbgs~JXO_GZEZeTmZgWh`Sn%!ZZBR{ z%Pgo>uc!H7s$5Yy;wqck!>VRgt#+NRdYQHsXA`L>m2G-u#*0&> zZuQs8J2pukfqU+FlICA5KA)Zu=dr^x(^H8fF+F=+o4L8gCvVy$Er$faY-#pyzYAWr ztPHwpiDah$(|o7>2(uZ&wUGi6uT7VG)`|OL=L@W95Noazvc@5M3#!(3C`rL zJ))KqjoVL5cb_+TJax~@sw$n@CPd_}b)Pl5MCGo_-(ZVKizinWSaCUDVJPJ*tnCHD z%H1U9`V`#J7A%ua)?L%9;40oJE^4uvTkJQp^ z+M2WlDu6kq4J8xqRNI{#RXa7#_{i-w#j1AN#qz3l%2ro!>Q=SWE&B*a+9BfLt0-@qnPSY&tRCcI>Z%?Ls~D{ zr5<{)n|hKZooajgHN&88RLxz5do9pQfslEFy9%#;9AOVT(+z4#4UBH;Nd^Mszgz1e zUpj})4#_+PYfz*?HqxUR99VBJcQ*n7t&hW`Zb7Y|Y*Dn#fD8K!9tee`Q!6sbL2(FF z-EC+=QKt8h%^pMRp-{MGf43G2i1APb2gZ?8xIMi*45OQUQ4hk~)2H=Jr5>P=7#rCPaWR?H$XgFJq#gvCQ^QWV zF&m@Uf|N(@s%sRpAwuE75xD@>vKMB~qhOOdl?$5Ggk6&ZgV6WW2^EujLZp)t*p|Vr z$u#-q?i>Q;mrd(b#hMC{YDgk9Fm}h*vPYeca_*Q=n@h9#OUfTVt!-G00!CyU*w6okGaR2m00ck)1V8`;KmY_l z00ck)1V8`;YLY+;jf#KYzm9hPJ%9ea{|4Gu)9$0ap7yI~=XU(cpqY01jTlcO?btv7 z1V8`;KmY_l00ck)1V8`;KmY_j-~{mf{|7ul2oD5600ck)1V8`;KmY_l00ck)1pWsE z#25JV@BguZ00@8p2!H?xfB*=900@8p2!H?x)Gh%$|JQDAF)|PU0T2KI5C8!X009sH z0T2KI5U>g0`QIjiBM5*12!H?xfB*=900@8p2!H?x)Gh%$|JQDAF)|PU0T2KI5C8!X z009sH0T2KI5U>g0|NpZ|;0OXB00JNY0w4eaAOHd&00JNY0<}v3-~ZQcZZR?t009sH z0T2KI5C8!X009sH0T8eW;Q8Msfg=cj00@8p2!H?xfB*=900@8p2-GeCJpb2jZZR?t z009sH0T2KI5C8!X009sH0T8eW;Q8Msfg=cj00@8p2!H?xfB*=900@8p2-GeC{{R2H z{$F|g7yQrB0UHQ_00@8p2!H?xfB*=900@8p2!Ox`mOzu&yV<{BrREYd(|SXlx4r$S zwUmmVP$chGb<&!O&nMHd+0@KbB59q7CzDn>`}a-V{QbYz|DwnLn*Smluz>&wfB*=9 z00@8p2!H?xfB*=900?}T2sC*&OSv}!UZ1yJq89>nZQiX7SG*12@BgKiKYQp08wh{^ z2!H?xfB*=900@8p2!H?xe257wZi zm#!avKKil8K5_38ZP!ZQTA057Z-MLYNHkx5Nq_rU>!YXdzVzuQUg-b#?2d14zwMfa zub-KVJu?2AXI_4BHuS*Wx02^xf1{)B#4Y>3eR5-O>sJo__)Pf0f6l%7(#AXQ%)EK_ z>34rpCk<|RX#4!Lo7>|0J1;C<`o+(p>UB5#;M`Z&eLwlwlV5&nwSVDkyEpyCFPt@Q z>$vYz_uSsF!+7jF9jE8J7p@!BF1-AWJ#YMD@!Z`;;DxJx_pd+Qe(l4b`{~7rKPcy8 z_wP?%esk#8ci!0Yqwmfg{Nx`W9{%Cj$dumtr25v`ciK)hwGMow*EF8q`L*+@S6;gO z_W4H+|2?+6t6o;U-G~1p&x7@00JNY0w4eaAOHd&00JNY0w4eaH9?@& zt2Ve_gYftNp0zbGI1B;=KmY_l00ck)1V8`;KmY_l00cmw3<3QA|7F0S7z9871V8`; zKmY_l00ck)1V8`;YKQ>7|F5BBVkjU00w4eaAOHd&00JNY0w4eaAW((?zW*-+2E`x% z0w4eaAOHd&00JNY0w4eaAW%aD@cdsx$;41V00ck)1V8`;KmY_l00ck)1VEq+0X+Yg z0fS-?009sH0T2KI5C8!X009sH0T8Gm0{rj)+r2@L|Cj!WmcO)2c@9X~P` zn~oo|VzbG3Vme>AaVTmIjGM|xc-TCklxwdwzB0EtoGHd#9-iKT%E^7T>L^U=sI5r;b62WPTPCtfP9Ax*@dY>Gm z7^M<1a%{20WIn_VD}_gh%#G6wNno=7^=( zJjc~Fo0^$QBrVdQrW_?NnsPXvwvNoCmNbQvq@HSP^U1O-J><=+O89Os)>0W6Rjs0Y zFjeY^Bd)TkJ*;Z9RINIz7N@m1n@BAwobK_FJ?07%sX9@*G?}O7l4Y)VZe?Y@H(?%Z zt(UiMk(O*(+95DF+izPLZ5Fm=b=vI}vDT~0t!sVqmMzlBd7(GE);_knRA-mIU*U;_ zkDCW*iCb}*OIcG^iY^kCl5JdeJZO2cVdOPYnv_rG)tq{r6^aEO?0zD4!va@G9I_T<_i8qmWtg8&f6O6<%n8NG;TjJ-F@D) z{P6~#tg6zfZ9+uuTK8F_OH}T<{B4DZw0Lr5ffbkY6^2s2!rERStlUjvu1~>rykMDh zvhI>!!BxCdT-0JS$;nQ>8E`ct!tSg0m9-_V+7z429(^`%tpv=R>p?m_x0_;ab+F_gVL zY`dzWs+}G=RXgYP{QTdrI_mL1*Yfk0$>vDYGY#)FJhJ*#D#8W=AOHd&00JNY0#y>g zt5JT7RIugl#qnx1&!qCROuj9B5_i9NHHufGE>+kslvaEuF6@CX=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -2050,8 +2059,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} @@ -2491,10 +2500,6 @@ packages: extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -2709,21 +2714,22 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - human-id@1.0.2: - resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + human-id@4.1.2: + resolution: {integrity: sha512-v/J+4Z/1eIJovEBdlV5TYj1IR+ZiohcYGRY+qN/oC9dAfKzVT023N/Bgw37hrKCoVRBvk3bqyzpr2PP5YeTMSg==} + hasBin: true human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -5353,13 +5359,13 @@ snapshots: '@biomejs/cli-win32-x64@2.3.7': optional: true - '@changesets/apply-release-plan@7.0.8': + '@changesets/apply-release-plan@7.0.13': dependencies: - '@changesets/config': 3.0.5 + '@changesets/config': 3.1.1 '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 + '@changesets/git': 3.0.4 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 detect-indent: 6.1.0 fs-extra: 7.0.1 @@ -5369,40 +5375,40 @@ snapshots: resolve-from: 5.0.0 semver: 7.6.3 - '@changesets/assemble-release-plan@6.0.5': + '@changesets/assemble-release-plan@6.0.9': dependencies: '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 semver: 7.6.3 - '@changesets/changelog-git@0.2.0': + '@changesets/changelog-git@0.2.1': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 - '@changesets/cli@2.27.12': + '@changesets/cli@2.29.7(@types/node@24.10.1)': dependencies: - '@changesets/apply-release-plan': 7.0.8 - '@changesets/assemble-release-plan': 6.0.5 - '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.5 + '@changesets/apply-release-plan': 7.0.13 + '@changesets/assemble-release-plan': 6.0.9 + '@changesets/changelog-git': 0.2.1 + '@changesets/config': 3.1.1 '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/get-release-plan': 4.0.6 - '@changesets/git': 3.0.2 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/get-release-plan': 4.0.13 + '@changesets/git': 3.0.4 '@changesets/logger': 0.1.1 - '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@changesets/write': 0.3.2 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.5 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@changesets/write': 0.4.0 + '@inquirer/external-editor': 1.0.3(@types/node@24.10.1) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 ci-info: 3.9.0 enquirer: 2.4.1 - external-editor: 3.1.0 fs-extra: 7.0.1 mri: 1.2.0 p-limit: 2.3.0 @@ -5412,13 +5418,15 @@ snapshots: semver: 7.6.3 spawndamnit: 3.0.1 term-size: 2.2.1 + transitivePeerDependencies: + - '@types/node' - '@changesets/config@3.0.5': + '@changesets/config@3.1.1': dependencies: '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 + '@changesets/get-dependents-graph': 2.1.3 '@changesets/logger': 0.1.1 - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 micromatch: 4.0.8 @@ -5427,25 +5435,25 @@ snapshots: dependencies: extendable-error: 0.1.7 - '@changesets/get-dependents-graph@2.1.2': + '@changesets/get-dependents-graph@2.1.3': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 semver: 7.6.3 - '@changesets/get-release-plan@4.0.6': + '@changesets/get-release-plan@4.0.13': dependencies: - '@changesets/assemble-release-plan': 6.0.5 - '@changesets/config': 3.0.5 - '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.2 - '@changesets/types': 6.0.0 + '@changesets/assemble-release-plan': 6.0.9 + '@changesets/config': 3.1.1 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.5 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 '@changesets/get-version-range-type@0.4.0': {} - '@changesets/git@3.0.2': + '@changesets/git@3.0.4': dependencies: '@changesets/errors': 0.2.0 '@manypkg/get-packages': 1.1.3 @@ -5457,42 +5465,42 @@ snapshots: dependencies: picocolors: 1.1.1 - '@changesets/parse@0.4.0': + '@changesets/parse@0.4.1': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 js-yaml: 3.14.1 - '@changesets/pre@2.0.1': + '@changesets/pre@2.0.2': dependencies: '@changesets/errors': 0.2.0 - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - '@changesets/read@0.6.2': + '@changesets/read@0.6.5': dependencies: - '@changesets/git': 3.0.2 + '@changesets/git': 3.0.4 '@changesets/logger': 0.1.1 - '@changesets/parse': 0.4.0 - '@changesets/types': 6.0.0 + '@changesets/parse': 0.4.1 + '@changesets/types': 6.1.0 fs-extra: 7.0.1 p-filter: 2.1.0 picocolors: 1.1.1 - '@changesets/should-skip-package@0.1.1': + '@changesets/should-skip-package@0.1.2': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 '@changesets/types@4.1.0': {} - '@changesets/types@6.0.0': {} + '@changesets/types@6.1.0': {} - '@changesets/write@0.3.2': + '@changesets/write@0.4.0': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 fs-extra: 7.0.1 - human-id: 1.0.2 + human-id: 4.1.2 prettier: 2.8.8 '@esbuild/aix-ppc64@0.23.1': @@ -5928,6 +5936,13 @@ snapshots: find-up: 5.0.0 js-yaml: 4.1.0 + '@inquirer/external-editor@1.0.3(@types/node@24.10.1)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.0 + optionalDependencies: + '@types/node': 24.10.1 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -6798,7 +6813,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chardet@0.7.0: {} + chardet@2.1.1: {} charenc@0.0.2: {} @@ -7295,12 +7310,6 @@ snapshots: extendable-error@0.1.7: {} - external-editor@3.1.0: - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -7539,18 +7548,18 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - human-id@1.0.2: {} + human-id@4.1.2: {} human-signals@2.1.0: {} - iconv-lite@0.4.24: + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 + optional: true - iconv-lite@0.6.3: + iconv-lite@0.7.0: dependencies: safer-buffer: 2.1.2 - optional: true ieee754@1.2.1: {} From 45a2ec2751a19f9974851e12c9317a03cc877497 Mon Sep 17 00:00:00 2001 From: Timo Glastra Date: Fri, 21 Nov 2025 20:20:34 +0545 Subject: [PATCH 7/7] chore: replace node:assert Signed-off-by: Timo Glastra --- packages/askar-nodejs/tests/cryptoBox.test.ts | 5 +- packages/askar-nodejs/tests/error.test.ts | 16 +-- packages/askar-nodejs/tests/joseEcdh.test.ts | 28 ++-- packages/askar-nodejs/tests/kdf.test.ts | 8 +- packages/askar-nodejs/tests/keys.test.ts | 72 +++++----- packages/askar-nodejs/tests/migration.test.ts | 25 ++-- packages/askar-nodejs/tests/store.test.ts | 123 +++++++++--------- 7 files changed, 130 insertions(+), 147 deletions(-) diff --git a/packages/askar-nodejs/tests/cryptoBox.test.ts b/packages/askar-nodejs/tests/cryptoBox.test.ts index 04c752c1..5bc9b9e7 100644 --- a/packages/askar-nodejs/tests/cryptoBox.test.ts +++ b/packages/askar-nodejs/tests/cryptoBox.test.ts @@ -1,6 +1,5 @@ -import { deepStrictEqual } from 'node:assert' import { CryptoBox, Key, KeyAlgorithm } from '@openwallet-foundation/askar-shared' -import { describe, test } from 'vitest' +import { describe, expect, test } from 'vitest' describe('CryptoBox', () => { test('seal', () => { @@ -14,7 +13,7 @@ describe('CryptoBox', () => { ciphertext: sealed, }) - deepStrictEqual(opened, message) + expect(opened).toEqual(message) x25519Key.handle.free() }) diff --git a/packages/askar-nodejs/tests/error.test.ts b/packages/askar-nodejs/tests/error.test.ts index 8f470c7a..5a1031ed 100644 --- a/packages/askar-nodejs/tests/error.test.ts +++ b/packages/askar-nodejs/tests/error.test.ts @@ -1,21 +1,19 @@ -import { doesNotReject, doesNotThrow, rejects, throws } from 'node:assert' import { AskarError, askar, KeyAlgorithm } from '@openwallet-foundation/askar-shared' -import { describe, test } from 'vitest' +import { describe, expect, test } from 'vitest' import { setupWallet } from './utils' describe('Error', () => { test('set error code to 0 after correct call', () => { - doesNotThrow(() => + expect(() => askar.keyGenerate({ algorithm: KeyAlgorithm.AesA128CbcHs256, ephemeral: true, }) - ) + ).not.toThrow() }) test('set error code to non 0 after incorrect call', () => { - throws( - () => askar.keyGenerate({ algorithm: 'incorrect-alg' as KeyAlgorithm, ephemeral: true }), + expect(() => askar.keyGenerate({ algorithm: 'incorrect-alg' as KeyAlgorithm, ephemeral: true })).toThrow( new AskarError({ code: 8, message: 'Unknown key algorithm' }) ) }) @@ -23,20 +21,20 @@ describe('Error', () => { test('set error code to 0 correct async call', async () => { const store = await setupWallet() - await doesNotReject(() => store.openSession()) + await expect(store.openSession()).resolves.toBeDefined() }) test('set error code to non 0 incorrect async call where the error is outside the callback', async () => { const store = await setupWallet() // @ts-expect-error: testing invalid call - await rejects(() => store.removeProfile(), { code: 5, message: 'Profile name not provided' }) + await expect(store.removeProfile()).rejects.toMatchObject({ code: 5, message: 'Profile name not provided' }) }) test('set error code to non 0 incorrect async call where the error is inside the callback', async () => { const store = await setupWallet() await store.close() - await rejects(() => store.close(), { code: 5, message: 'Invalid store handle' }) + await expect(store.close()).rejects.toMatchObject({ code: 5, message: 'Invalid store handle' }) }) }) diff --git a/packages/askar-nodejs/tests/joseEcdh.test.ts b/packages/askar-nodejs/tests/joseEcdh.test.ts index 6e1a214f..dc004ff0 100644 --- a/packages/askar-nodejs/tests/joseEcdh.test.ts +++ b/packages/askar-nodejs/tests/joseEcdh.test.ts @@ -1,6 +1,5 @@ -import { deepStrictEqual, strictEqual } from 'node:assert' import { Ecdh1PU, EcdhEs, Jwk, Key, KeyAlgorithm } from '@openwallet-foundation/askar-shared' -import { describe, test } from 'vitest' +import { describe, expect, test } from 'vitest' import { base64url } from './utils' describe('jose ecdh', () => { @@ -53,7 +52,7 @@ describe('jose ecdh', () => { aad: Uint8Array.from(Buffer.from(protectedB64)), }) - strictEqual(Buffer.from(messageReceived).toString(), messageString) + expect(Buffer.from(messageReceived).toString()).toBe(messageString) ephemeralKey.handle.free() bobKey.handle.free() @@ -110,7 +109,7 @@ describe('jose ecdh', () => { const messageReceived = cekReceiver.aeadDecrypt({ ciphertext, tag, nonce, aad: protectedB64Bytes }) - deepStrictEqual(messageReceived, message) + expect(messageReceived).toEqual(message) ephemeralKey.handle.free() bobKey.handle.free() @@ -171,7 +170,7 @@ describe('jose ecdh', () => { aad: protectedB64Bytes, }) - deepStrictEqual(messageReceived, message) + expect(messageReceived).toEqual(message) aliceKey.handle.free() bobKey.handle.free() @@ -218,8 +217,8 @@ describe('jose ecdh', () => { const base64urlApu = base64url(apu) const base64urlApv = base64url(apv) - strictEqual(base64urlApu, 'QWxpY2U') - strictEqual(base64urlApv, 'Qm9iIGFuZCBDaGFybGll') + expect(base64urlApu).toBe('QWxpY2U') + expect(base64urlApv).toBe('Qm9iIGFuZCBDaGFybGll') const protectedJson = { alg: 'ECDH-1PU+A128KW', @@ -249,8 +248,8 @@ describe('jose ecdh', () => { const { ciphertext, tag: ccTag } = enc.parts - strictEqual(Buffer.from(ciphertext).toString('base64url'), 'Az2IWsISEMDJvyc5XRL-3-d-RgNBOGolCsxFFoUXFYw') - strictEqual(Buffer.from(ccTag).toString('base64url'), 'HLb4fTlm8spGmij3RyOs2gJ4DpHM4hhVRwdF_hGb3WQ') + expect(Buffer.from(ciphertext).toString('base64url')).toBe('Az2IWsISEMDJvyc5XRL-3-d-RgNBOGolCsxFFoUXFYw') + expect(Buffer.from(ccTag).toString('base64url')).toBe('HLb4fTlm8spGmij3RyOs2gJ4DpHM4hhVRwdF_hGb3WQ') const derived = new Ecdh1PU({ apv: Uint8Array.from(Buffer.from(apv)), @@ -265,11 +264,10 @@ describe('jose ecdh', () => { receive: false, }) - deepStrictEqual(derived.secretBytes, Uint8Array.from(Buffer.from('df4c37a0668306a11e3d6b0074b5d8df', 'hex'))) + expect(derived.secretBytes).toEqual(Uint8Array.from(Buffer.from('df4c37a0668306a11e3d6b0074b5d8df', 'hex'))) const encryptedKey = derived.wrapKey({ other: cek }).ciphertextWithTag - deepStrictEqual( - encryptedKey, + expect(encryptedKey).toEqual( Uint8Array.from( Buffer.from( 'pOMVA9_PtoRe7xXW1139NzzN1UhiFoio8lGto9cf0t8PyU-sjNXH8-LIRLycq8CHJQbDwvQeU1cSl55cQ0hGezJu2N9IY0QN', @@ -291,7 +289,7 @@ describe('jose ecdh', () => { recipientKey: bob, }) - deepStrictEqual(encryptedKey2.ciphertextWithTag, encryptedKey) + expect(encryptedKey2.ciphertextWithTag).toEqual(encryptedKey) const derivedReceiver = new Ecdh1PU({ apv: Uint8Array.from(Buffer.from(apv)), @@ -315,7 +313,7 @@ describe('jose ecdh', () => { tag: ccTag, }) - deepStrictEqual(messageReceived, message) + expect(messageReceived).toEqual(message) const cekReceiver2 = new Ecdh1PU({ apv: Uint8Array.from(Buffer.from(apv)), @@ -331,7 +329,7 @@ describe('jose ecdh', () => { ccTag, }) - deepStrictEqual(cekReceiver2.jwkSecret, cek.jwkSecret) + expect(cekReceiver2.jwkSecret).toEqual(cek.jwkSecret) cek.handle.free() cekReceiver.handle.free() diff --git a/packages/askar-nodejs/tests/kdf.test.ts b/packages/askar-nodejs/tests/kdf.test.ts index 8faeaa85..a1616a28 100644 --- a/packages/askar-nodejs/tests/kdf.test.ts +++ b/packages/askar-nodejs/tests/kdf.test.ts @@ -1,6 +1,5 @@ -import { ok } from 'node:assert' import { Argon2, Argon2Parameters } from '@openwallet-foundation/askar-shared' -import { describe, test } from 'vitest' +import { describe, expect, test } from 'vitest' describe('Argon2', () => { test('derive password', () => { @@ -12,9 +11,8 @@ describe('Argon2', () => { const derivedPassword = Argon2.derivePassword(Argon2Parameters.Interactive, passwordBytes, saltBytes) - ok( - Buffer.from(derivedPassword).toString('hex') === - '9ef87bcf828c46c0136a0d1d9e391d713f75b327c6dc190455bd36c1bae33259' + expect(Buffer.from(derivedPassword).toString('hex')).toBe( + '9ef87bcf828c46c0136a0d1d9e391d713f75b327c6dc190455bd36c1bae33259' ) }) }) diff --git a/packages/askar-nodejs/tests/keys.test.ts b/packages/askar-nodejs/tests/keys.test.ts index 2aef09dd..61cf021c 100644 --- a/packages/askar-nodejs/tests/keys.test.ts +++ b/packages/askar-nodejs/tests/keys.test.ts @@ -1,41 +1,39 @@ -import { deepStrictEqual, ok, strictEqual } from 'node:assert' import { Jwk, Key, KeyAlgorithm } from '@openwallet-foundation/askar-shared' -import { describe, test } from 'vitest' +import { describe, expect, test } from 'vitest' import { askarNodeJS } from '../src' describe('keys', () => { test('supported backends', () => { const backends = askarNodeJS.keyGetSupportedBackends() - strictEqual(backends.length, 1) - ok(backends.includes('software')) + expect(backends.length).toBe(1) + expect(backends.includes('software')).toBe(true) }) test('aes cbc hmac', () => { const key = Key.generate(KeyAlgorithm.AesA128CbcHs256) - strictEqual(key.algorithm, KeyAlgorithm.AesA128CbcHs256) + expect(key.algorithm).toBe(KeyAlgorithm.AesA128CbcHs256) const messageString = 'test message' const message = Uint8Array.from(Buffer.from(messageString)) const aeadNonce = key.aeadRandomNonce const params = key.aeadParams - strictEqual(params.nonceLength, 16) - strictEqual(params.tagLength, 16) + expect(params.nonceLength).toBe(16) + expect(params.tagLength).toBe(16) const enc = key.aeadEncrypt({ message, nonce: aeadNonce }) const dec = key.aeadDecrypt(enc.parts) - deepStrictEqual(dec, message) + expect(dec).toEqual(message) }) test('Bls G2 Keygen', () => { const seed = Uint8Array.from(Buffer.from('testseed000000000000000000000001')) const key = Key.fromSeed({ algorithm: KeyAlgorithm.Bls12381G2, seed }) - deepStrictEqual( - key.jwkPublic, + expect(key.jwkPublic).toEqual( new Jwk({ crv: 'BLS12381G2', kty: 'EC', @@ -49,8 +47,7 @@ describe('keys', () => { const seed = Uint8Array.from(Buffer.from('testseed000000000000000000000001')) const key = Key.fromSeed({ algorithm: KeyAlgorithm.Bls12381G1, seed }) - deepStrictEqual( - key.jwkPublic, + expect(key.jwkPublic).toEqual( new Jwk({ crv: 'BLS12381G1', kty: 'EC', @@ -63,36 +60,33 @@ describe('keys', () => { test('ed25519', () => { const key = Key.generate(KeyAlgorithm.Ed25519) - strictEqual(key.algorithm, KeyAlgorithm.Ed25519) + expect(key.algorithm).toBe(KeyAlgorithm.Ed25519) const message = Uint8Array.from(Buffer.from('test message')) const messageBuffer = Buffer.from('test message') const signature = key.signMessage({ message }) - strictEqual(key.verifySignature({ message, signature }), true) - strictEqual(key.verifySignature({ message: messageBuffer, signature }), true) - strictEqual(key.verifySignature({ message: Buffer.from('other message'), signature }), false) - strictEqual( + expect(key.verifySignature({ message, signature })).toBe(true) + expect(key.verifySignature({ message: messageBuffer, signature })).toBe(true) + expect(key.verifySignature({ message: Buffer.from('other message'), signature })).toBe(false) + expect( key.verifySignature({ message: Uint8Array.from(Buffer.from('other message')), signature, - }), - false - ) - strictEqual( + }) + ).toBe(false) + expect( key.verifySignature({ message, signature: Uint8Array.from([8, 1, 1, 1]), - }), - false - ) - strictEqual( + }) + ).toBe(false) + expect( key.verifySignature({ message, signature: Buffer.from('random signature'), - }), - false - ) + }) + ).toBe(false) const x25519Key = key.convertkey({ algorithm: KeyAlgorithm.X25519 }) const x25519Key2 = Key.generate(KeyAlgorithm.X25519) @@ -102,29 +96,29 @@ describe('keys', () => { publicKey: x25519Key2, }) - ok(kex instanceof Key) + expect(kex instanceof Key).toBe(true) - strictEqual(key.jwkPublic.kty, 'OKP') - strictEqual(key.jwkPublic.crv, 'Ed25519') + expect(key.jwkPublic.kty).toBe('OKP') + expect(key.jwkPublic.crv).toBe('Ed25519') - strictEqual(key.jwkSecret.kty, 'OKP') - strictEqual(key.jwkSecret.crv, 'Ed25519') + expect(key.jwkSecret.kty).toBe('OKP') + expect(key.jwkSecret.crv).toBe('Ed25519') }) test('p384', () => { const key = Key.generate(KeyAlgorithm.EcSecp384r1) - strictEqual(key.algorithm, KeyAlgorithm.EcSecp384r1) + expect(key.algorithm).toBe(KeyAlgorithm.EcSecp384r1) const message = Uint8Array.from(Buffer.from('test message')) const signature = key.signMessage({ message }) - strictEqual(key.verifySignature({ message, signature }), true) + expect(key.verifySignature({ message, signature })).toBe(true) - strictEqual(key.jwkPublic.kty, 'EC') - strictEqual(key.jwkPublic.crv, 'P-384') + expect(key.jwkPublic.kty).toBe('EC') + expect(key.jwkPublic.crv).toBe('P-384') - strictEqual(key.jwkSecret.kty, 'EC') - strictEqual(key.jwkSecret.crv, 'P-384') + expect(key.jwkSecret.kty).toBe('EC') + expect(key.jwkSecret.crv).toBe('P-384') }) }) diff --git a/packages/askar-nodejs/tests/migration.test.ts b/packages/askar-nodejs/tests/migration.test.ts index 1394f3a7..bf60c8a8 100644 --- a/packages/askar-nodejs/tests/migration.test.ts +++ b/packages/askar-nodejs/tests/migration.test.ts @@ -1,8 +1,7 @@ -import { doesNotReject, rejects } from 'node:assert' import fs from 'node:fs' import path from 'node:path' import { Migration } from '@openwallet-foundation/askar-shared' -import { beforeEach, describe, test } from 'vitest' +import { beforeEach, describe, expect, test } from 'vitest' const DB_TEMPLATE_PATH = path.join(__dirname, 'indy_wallet_sqlite.db') const DB_UPGRADE_PATH = path.join(__dirname, 'indy_wallet_sqlite_upgraded.db') @@ -26,25 +25,23 @@ describe('migration', () => { }) test('migrate', async () => { - await doesNotReject(() => + await expect( Migration.migrate({ specUri: DB_UPGRADE_PATH, kdfLevel: 'RAW', walletName: 'walletwallet.0', walletKey: 'GfwU1DC7gEZNs3w41tjBiZYj7BNToDoFEqKY6wZXqs1A', }) - ) + ).resolves.toBeUndefined() // Double migrate should not work - await rejects( - () => - Migration.migrate({ - specUri: DB_UPGRADE_PATH, - kdfLevel: 'RAW', - walletName: 'walletwallet.0', - walletKey: 'GfwU1DC7gEZNs3w41tjBiZYj7BNToDoFEqKY6wZXqs1A', - }), - { code: 1, message: 'Database is already migrated' } - ) + await expect( + Migration.migrate({ + specUri: DB_UPGRADE_PATH, + kdfLevel: 'RAW', + walletName: 'walletwallet.0', + walletKey: 'GfwU1DC7gEZNs3w41tjBiZYj7BNToDoFEqKY6wZXqs1A', + }) + ).rejects.toMatchObject({ code: 1, message: 'Database is already migrated' }) }) }) diff --git a/packages/askar-nodejs/tests/store.test.ts b/packages/askar-nodejs/tests/store.test.ts index adf20500..1fba2118 100644 --- a/packages/askar-nodejs/tests/store.test.ts +++ b/packages/askar-nodejs/tests/store.test.ts @@ -1,7 +1,6 @@ -import { deepStrictEqual, doesNotReject, ok, rejects, strictEqual } from 'node:assert' import { promises } from 'node:fs' import { AskarError, KdfMethod, Key, KeyAlgorithm, Store, StoreKeyMethod } from '@openwallet-foundation/askar-shared' -import { afterEach, beforeEach, describe, test } from 'vitest' +import { afterEach, beforeEach, describe, expect, test } from 'vitest' import { firstEntry, getRawKey, secondEntry, setupWallet, testStoreUri } from './utils' describe('Store and Session', () => { @@ -25,7 +24,7 @@ describe('Store and Session', () => { const session = await argon2iModStore.openSession() - strictEqual(await session.fetch({ name: 'unknownKey', category: 'unknownCategory' }), null) + expect(await session.fetch({ name: 'unknownKey', category: 'unknownCategory' })).toBe(null) await argon2iModStore.close() }) @@ -40,7 +39,7 @@ describe('Store and Session', () => { const session = await argon2iIntStore.openSession() - strictEqual(await session.fetch({ name: 'unknownKey', category: 'unknownCategory' }), null) + expect(await session.fetch({ name: 'unknownKey', category: 'unknownCategory' })).toBe(null) await argon2iIntStore.close() }) @@ -68,14 +67,14 @@ describe('Store and Session', () => { await newStore.close() - await rejects( - () => - Store.open({ - profile: 'rekey', - uri: `sqlite://${storagePath}/rekey.db`, - keyMethod: new StoreKeyMethod(KdfMethod.Raw), - passKey: initialKey, - }), + await expect( + Store.open({ + profile: 'rekey', + uri: `sqlite://${storagePath}/rekey.db`, + keyMethod: new StoreKeyMethod(KdfMethod.Raw), + passKey: initialKey, + }) + ).rejects.toThrow( new AskarError({ code: 4, message: 'Error decrypting profile key\nCaused by: AEAD decryption error' }) ) @@ -96,7 +95,7 @@ describe('Store and Session', () => { await session.insert(firstEntry) - strictEqual(await session.count(firstEntry), 1) + expect(await session.count(firstEntry)).toBeDefined() await session.close() }) @@ -106,13 +105,13 @@ describe('Store and Session', () => { await session.insert(firstEntry) - strictEqual(await session.count(firstEntry), 1) + expect(await session.count(firstEntry)).toBe(1) const updatedEntry = { ...firstEntry, value: 'bar', tags: { update: 'baz' } } await session.replace(updatedEntry) - strictEqual(await session.count(updatedEntry), 1) + expect(await session.count(updatedEntry)).toBe(1) await session.close() }) @@ -122,11 +121,11 @@ describe('Store and Session', () => { await session.insert(firstEntry) - strictEqual(await session.count(firstEntry), 1) + expect(await session.count(firstEntry)).toBe(1) await session.remove(firstEntry) - strictEqual(await session.count(firstEntry), 0) + expect(await session.count(firstEntry)).toBe(0) await session.close() }) @@ -137,11 +136,11 @@ describe('Store and Session', () => { await session.insert(firstEntry) await session.insert(secondEntry) - strictEqual(await session.count(firstEntry), 2) + expect(await session.count(firstEntry)).toBe(2) await session.removeAll({ category: firstEntry.category }) - strictEqual(await session.count(firstEntry), 0) + expect(await session.count(firstEntry)).toBe(0) await session.close() }) @@ -152,13 +151,13 @@ describe('Store and Session', () => { await session.insert(firstEntry) await session.insert(secondEntry) - strictEqual(await session.count(firstEntry), 2) - strictEqual(await session.count({}), 2) + expect(await session.count(firstEntry)).toBe(2) + expect(await session.count({})).toBe(2) - strictEqual((await session.fetchAll({})).length, 2) + expect((await session.fetchAll({})).length).toBe(2) await session.removeAll({ category: firstEntry.category }) - strictEqual(await session.count(firstEntry), 0) + expect(await session.count(firstEntry)).toBe(0) await session.close() }) @@ -173,9 +172,9 @@ describe('Store and Session', () => { a.name === 'testEntry' ? -1 : 1 ) - strictEqual(found.length, 2) - deepStrictEqual(found[0], firstEntry) - deepStrictEqual(found[1], { ...secondEntry, value: JSON.stringify(secondEntry.value) }) + expect(found.length).toBe(2) + expect(found[0]).toEqual(firstEntry) + expect(found[1]).toEqual({ ...secondEntry, value: JSON.stringify(secondEntry.value) }) await session.close() await scanStore.close() @@ -186,19 +185,19 @@ describe('Store and Session', () => { await txn.insert(firstEntry) - strictEqual(await txn.count(firstEntry), 1) + expect(await txn.count(firstEntry)).toBe(1) - deepStrictEqual(await txn.fetch(firstEntry), firstEntry) + expect(await txn.fetch(firstEntry)).toEqual(firstEntry) const found = await txn.fetchAll(firstEntry) - deepStrictEqual(found[0], firstEntry) + expect(found[0]).toEqual(firstEntry) await txn.commit() const session = await store.openSession() - deepStrictEqual(await session.fetch(firstEntry), firstEntry) + expect(await session.fetch(firstEntry)).toEqual(firstEntry) await session.close() }) @@ -214,18 +213,18 @@ describe('Store and Session', () => { const fetchedKey1 = await session.fetchKey({ name: keyName }) - strictEqual(fetchedKey1?.name, keyName) - deepStrictEqual(fetchedKey1?.tags, { a: 'b' }) - deepStrictEqual(fetchedKey1?.metadata, 'metadata') + expect(fetchedKey1?.name).toBe(keyName) + expect(fetchedKey1?.tags).toEqual({ a: 'b' }) + expect(fetchedKey1?.metadata).toBe('metadata') await session.updateKey({ name: keyName, metadata: 'updated metadata', tags: { a: 'c' } }) const fetchedKey2 = await session.fetchKey({ name: keyName }) - strictEqual(fetchedKey2?.name, keyName) - deepStrictEqual(fetchedKey2?.tags, { a: 'c' }) - deepStrictEqual(fetchedKey2?.metadata, 'updated metadata') + expect(fetchedKey2?.name).toBe(keyName) + expect(fetchedKey2?.tags).toEqual({ a: 'c' }) + expect(fetchedKey2?.metadata).toBe('updated metadata') - ok(key.jwkThumbprint === fetchedKey1?.key.jwkThumbprint) + expect(key.jwkThumbprint === fetchedKey1?.key.jwkThumbprint).toBe(true) const found = await session.fetchAllKeys({ algorithm: KeyAlgorithm.Ed25519, @@ -233,13 +232,13 @@ describe('Store and Session', () => { tagFilter: { a: 'c' }, }) - strictEqual(found[0].name, keyName) - deepStrictEqual(found[0].tags, { a: 'c' }) - deepStrictEqual(found[0].metadata, 'updated metadata') + expect(found[0].name).toBe(keyName) + expect(found[0].tags).toEqual({ a: 'c' }) + expect(found[0].metadata).toBe('updated metadata') await session.removeKey({ name: keyName }) - strictEqual(await session.fetchKey({ name: keyName }), null) + expect(await session.fetchKey({ name: keyName })).toBe(null) await session.close() @@ -261,11 +260,11 @@ describe('Store and Session', () => { const session2 = await store.session(profile).open() - strictEqual(await session2.count(firstEntry), 0) + expect(await session2.count(firstEntry)).toBe(0) await session2.insert(firstEntry) - strictEqual(await session2.count(firstEntry), 1) + expect(await session2.count(firstEntry)).toBe(1) await session2.close() @@ -274,53 +273,53 @@ describe('Store and Session', () => { const store2 = await Store.open({ uri: testStoreUri, keyMethod: new StoreKeyMethod(KdfMethod.Raw), passKey: key }) const session3 = await store2.openSession() - strictEqual(await session3.count(firstEntry), 0) + expect(await session3.count(firstEntry)).toBe(0) await session3.close() await store2.close() } - await rejects(() => store.createProfile(profile), AskarError) + await expect(store.createProfile(profile)).rejects.toThrow(AskarError) const session4 = await store.session(profile).open() - strictEqual(await session4.count(firstEntry), 1) + expect(await session4.count(firstEntry)).toBe(1) await session4.close() await store.setDefaultProfile(profile) - deepStrictEqual(await store.getDefaultProfile(), profile) + expect(await store.getDefaultProfile()).toBe(profile) - ok((await store.listProfiles()).includes(profile)) + expect((await store.listProfiles()).includes(profile)).toBe(true) await store.removeProfile(profile) - await rejects(() => store.session(profile).open(), AskarError) + await expect(store.session(profile).open()).rejects.toThrow(AskarError) - await rejects(() => store.session('unknown profile').open(), AskarError) + await expect(store.session('unknown profile').open()).rejects.toThrow(AskarError) - deepStrictEqual(await store.createProfile(profile), profile) + expect(await store.createProfile(profile)).toBe(profile) const session7 = await store.session(profile).open() - strictEqual(await session7.count(firstEntry), 0) + expect(await session7.count(firstEntry)).toBe(0) await session7.insert(firstEntry) - strictEqual(await session7.count(firstEntry), 1) + expect(await session7.count(firstEntry)).toBe(1) await session7.close() - ok(await store.renameProfile({ fromProfile: profile, toProfile: 'newProfileName' })) + expect(await store.renameProfile({ fromProfile: profile, toProfile: 'newProfileName' })).toBe(1) - ok((await store.listProfiles()).includes('newProfileName')) + expect((await store.listProfiles()).includes('newProfileName')).toBe(true) - ok(!(await store.listProfiles()).includes(profile)) + expect((await store.listProfiles()).includes(profile)).toBe(false) const session8 = await store.session('newProfileName').open() - strictEqual(await session8.count(firstEntry), 1) + expect(await session8.count(firstEntry)).toBe(1) await session8.close() @@ -331,17 +330,17 @@ describe('Store and Session', () => { recreate: true, }) - ok( + expect( await store.copyProfile({ toStore: destinationStore, fromProfile: 'newProfileName', toProfile: 'newerProfileName', }) - ) + ).toBeDefined() const session9 = await destinationStore.session('newerProfileName').open() - strictEqual(await session9.count(firstEntry), 1) + expect(await session9.count(firstEntry)).toBe(1) await session9.close() }) @@ -349,13 +348,13 @@ describe('Store and Session', () => { test('Copy', async () => { const key = getRawKey() - await doesNotReject(() => + await expect( store.copyTo({ uri: 'sqlite://:memory:', keyMethod: new StoreKeyMethod(KdfMethod.Raw), passKey: key, recreate: true, }) - ) + ).resolves.toBeUndefined() }) })